diff options
Diffstat (limited to 'apps')
708 files changed, 17279 insertions, 4232 deletions
diff --git a/apps/files/admin.php b/apps/files/admin.php index bf12af74105..2a424582af9 100644 --- a/apps/files/admin.php +++ b/apps/files/admin.php @@ -36,8 +36,6 @@ if($_POST && OC_Util::isCallRegistered()) { } } -OCP\App::setActiveNavigationEntry( "files_administration" ); - $htaccessWritable=is_writable(OC::$SERVERROOT.'/.htaccess'); $tmpl = new OCP\Template( 'files', 'admin' ); diff --git a/apps/files/ajax/delete.php b/apps/files/ajax/delete.php index 61caa7618da..6e9f5003f1e 100644 --- a/apps/files/ajax/delete.php +++ b/apps/files/ajax/delete.php @@ -6,8 +6,8 @@ OCP\JSON::callCheck(); // Get data -$dir = isset($_POST['dir']) ? $_POST['dir'] : ''; -$allFiles = isset($_POST["allfiles"]) ? $_POST["allfiles"] : false; +$dir = isset($_POST['dir']) ? (string)$_POST['dir'] : ''; +$allFiles = isset($_POST["allfiles"]) ? (string)$_POST["allfiles"] : false; // delete all files in dir ? if ($allFiles === 'true') { @@ -17,7 +17,7 @@ if ($allFiles === 'true') { $files[] = $fileInfo['name']; } } else { - $files = isset($_POST["file"]) ? $_POST["file"] : $_POST["files"]; + $files = isset($_POST["file"]) ? (string)$_POST["file"] : (string)$_POST["files"]; $files = json_decode($files); } $filesWithError = ''; @@ -36,7 +36,12 @@ foreach ($files as $file) { } // get array with updated storage stats (e.g. max file size) after upload -$storageStats = \OCA\Files\Helper::buildFileStorageStatistics($dir); +try { + $storageStats = \OCA\Files\Helper::buildFileStorageStatistics($dir); +} catch(\OCP\Files\NotFoundException $e) { + OCP\JSON::error(['data' => ['message' => 'File not found']]); + return; +} if ($success) { OCP\JSON::success(array("data" => array_merge(array("dir" => $dir, "files" => $files), $storageStats))); diff --git a/apps/files/ajax/download.php b/apps/files/ajax/download.php index 368257b95cd..4bc4fc9298a 100644 --- a/apps/files/ajax/download.php +++ b/apps/files/ajax/download.php @@ -25,8 +25,8 @@ OCP\User::checkLoggedIn(); \OC::$server->getSession()->close(); -$files = isset($_GET['files']) ? $_GET['files'] : ''; -$dir = isset($_GET['dir']) ? $_GET['dir'] : ''; +$files = isset($_GET['files']) ? (string)$_GET['files'] : ''; +$dir = isset($_GET['dir']) ? (string)$_GET['dir'] : ''; $files_list = json_decode($files); // in case we get only a single file diff --git a/apps/files/ajax/getstoragestats.php b/apps/files/ajax/getstoragestats.php index fb7ccdc86cc..192c8ae2c70 100644 --- a/apps/files/ajax/getstoragestats.php +++ b/apps/files/ajax/getstoragestats.php @@ -3,7 +3,7 @@ $dir = '/'; if (isset($_GET['dir'])) { - $dir = $_GET['dir']; + $dir = (string)$_GET['dir']; } OCP\JSON::checkLoggedIn(); diff --git a/apps/files/ajax/list.php b/apps/files/ajax/list.php index 4aed79d70f7..f73dbf86093 100644 --- a/apps/files/ajax/list.php +++ b/apps/files/ajax/list.php @@ -5,7 +5,7 @@ OCP\JSON::checkLoggedIn(); $l = \OC::$server->getL10N('files'); // Load the files -$dir = isset($_GET['dir']) ? $_GET['dir'] : ''; +$dir = isset($_GET['dir']) ? (string)$_GET['dir'] : ''; $dir = \OC\Files\Filesystem::normalizePath($dir); try { @@ -20,7 +20,7 @@ try { $permissions = $dirInfo->getPermissions(); - $sortAttribute = isset($_GET['sort']) ? $_GET['sort'] : 'name'; + $sortAttribute = isset($_GET['sort']) ? (string)$_GET['sort'] : 'name'; $sortDirection = isset($_GET['sortdirection']) ? ($_GET['sortdirection'] === 'desc') : false; // make filelist diff --git a/apps/files/ajax/mimeicon.php b/apps/files/ajax/mimeicon.php index c531f5a3e81..82f6695bf08 100644 --- a/apps/files/ajax/mimeicon.php +++ b/apps/files/ajax/mimeicon.php @@ -1,6 +1,6 @@ <?php \OC::$server->getSession()->close(); -$mime = isset($_GET['mime']) ? $_GET['mime'] : ''; +$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 a9e0d09f176..f3f3fbb8d9b 100644 --- a/apps/files/ajax/move.php +++ b/apps/files/ajax/move.php @@ -5,9 +5,9 @@ OCP\JSON::callCheck(); \OC::$server->getSession()->close(); // Get data -$dir = isset($_POST['dir']) ? $_POST['dir'] : ''; -$file = isset($_POST['file']) ? $_POST['file'] : ''; -$target = isset($_POST['target']) ? rawurldecode($_POST['target']) : ''; +$dir = isset($_POST['dir']) ? (string)$_POST['dir'] : ''; +$file = isset($_POST['file']) ? (string)$_POST['file'] : ''; +$target = isset($_POST['target']) ? rawurldecode((string)$_POST['target']) : ''; $l = \OC::$server->getL10N('files'); diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php index 0eb144aca56..e1f75ae91d0 100644 --- a/apps/files/ajax/newfile.php +++ b/apps/files/ajax/newfile.php @@ -3,49 +3,14 @@ // Init owncloud global $eventSource; -if(!OC_User::isLoggedIn()) { - exit; -} +\OCP\JSON::checkLoggedIn(); +\OCP\JSON::callCheck(); \OC::$server->getSession()->close(); // Get the params -$dir = isset( $_REQUEST['dir'] ) ? '/'.trim($_REQUEST['dir'], '/\\') : ''; -$filename = isset( $_REQUEST['filename'] ) ? trim($_REQUEST['filename'], '/\\') : ''; -$content = isset( $_REQUEST['content'] ) ? $_REQUEST['content'] : ''; -$source = isset( $_REQUEST['source'] ) ? trim($_REQUEST['source'], '/\\') : ''; - -if($source) { - $eventSource = \OC::$server->createEventSource(); -} else { - OC_JSON::callCheck(); -} - -function progress($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max) { - static $filesize = 0; - static $lastsize = 0; - global $eventSource; - - switch($notification_code) { - case STREAM_NOTIFY_FILE_SIZE_IS: - $filesize = $bytes_max; - break; - - case STREAM_NOTIFY_PROGRESS: - if ($bytes_transferred > 0) { - if (!isset($filesize) || $filesize === 0) { - } else { - $progress = (int)(($bytes_transferred/$filesize)*100); - if($progress>$lastsize) { //limit the number or messages send - $eventSource->send('progress', $progress); - } - $lastsize=$progress; - } - } - break; - } -} - +$dir = isset( $_REQUEST['dir'] ) ? '/'.trim((string)$_REQUEST['dir'], '/\\') : ''; +$fileName = isset( $_REQUEST['filename'] ) ? trim((string)$_REQUEST['filename'], '/\\') : ''; $l10n = \OC::$server->getL10N('files'); @@ -53,23 +18,14 @@ $result = array( 'success' => false, 'data' => NULL ); -$trimmedFileName = trim($filename); - -if($trimmedFileName === '') { - $result['data'] = array('message' => (string)$l10n->t('File name cannot be empty.')); - OCP\JSON::error($result); - exit(); -} -if($trimmedFileName === '.' || $trimmedFileName === '..') { - $result['data'] = array('message' => (string)$l10n->t('"%s" is an invalid file name.', $trimmedFileName)); - OCP\JSON::error($result); - exit(); -} -if(!OCP\Util::isValidFileName($filename)) { - $result['data'] = array('message' => (string)$l10n->t("Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed.")); +try { + \OC\Files\Filesystem::getView()->verifyPath($dir, $fileName); +} catch (\OCP\Files\InvalidPathException $ex) { + $result['data'] = [ + 'message' => $ex->getMessage()]; OCP\JSON::error($result); - exit(); + return; } if (!\OC\Files\Filesystem::file_exists($dir . '/')) { @@ -81,96 +37,32 @@ if (!\OC\Files\Filesystem::file_exists($dir . '/')) { exit(); } -$target = $dir.'/'.$filename; +$target = $dir.'/'.$fileName; if (\OC\Files\Filesystem::file_exists($target)) { $result['data'] = array('message' => (string)$l10n->t( 'The name %s is already used in the folder %s. Please choose a different name.', - array($filename, $dir)) + array($fileName, $dir)) ); OCP\JSON::error($result); exit(); } -if($source) { - $httpHelper = \OC::$server->getHTTPHelper(); - if(!$httpHelper->isHTTPURL($source)) { - OCP\JSON::error(array('data' => array('message' => $l10n->t('Not a valid source')))); - exit(); - } - - if (!ini_get('allow_url_fopen')) { - $eventSource->send('error', array('message' => $l10n->t('Server is not allowed to open URLs, please check the server configuration'))); - $eventSource->close(); - exit(); - } - - $source = $httpHelper->getFinalLocationOfURL($source); - - $ctx = stream_context_create(\OC::$server->getHTTPHelper()->getDefaultContextArray(), array('notification' =>'progress')); +$success = false; +$templateManager = OC_Helper::getFileTemplateManager(); +$mimeType = OC_Helper::getMimetypeDetector()->detectPath($target); +$content = $templateManager->getTemplate($mimeType); - $sourceStream=@fopen($source, 'rb', false, $ctx); - $result = 0; - if (is_resource($sourceStream)) { - $meta = stream_get_meta_data($sourceStream); - if (isset($meta['wrapper_data']) && is_array($meta['wrapper_data'])) { - //check stream size - $storageStats = \OCA\Files\Helper::buildFileStorageStatistics($dir); - $freeSpace = $storageStats['freeSpace']; - - foreach($meta['wrapper_data'] as $header) { - if (strpos($header, ':') === false){ - continue; - } - list($name, $value) = explode(':', $header); - if ('content-length' === strtolower(trim($name))) { - $length = (int) trim($value); - - if ($length > $freeSpace) { - $delta = $length - $freeSpace; - $humanDelta = OCP\Util::humanFileSize($delta); - - $eventSource->send('error', array('message' => (string)$l10n->t('The file exceeds your quota by %s', array($humanDelta)))); - $eventSource->close(); - fclose($sourceStream); - exit(); - } - } - } - } - $result=\OC\Files\Filesystem::file_put_contents($target, $sourceStream); - } - if($result) { - $meta = \OC\Files\Filesystem::getFileInfo($target); - $data = \OCA\Files\Helper::formatFileInfo($meta); - $eventSource->send('success', $data); - } else { - $eventSource->send('error', array('message' => $l10n->t('Error while downloading %s to %s', array($source, $target)))); - } - if (is_resource($sourceStream)) { - fclose($sourceStream); - } - $eventSource->close(); - exit(); +if($content) { + $success = \OC\Files\Filesystem::file_put_contents($target, $content); } else { - $success = false; - if (!$content) { - $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); - } + $success = \OC\Files\Filesystem::touch($target); +} - if($success) { - $meta = \OC\Files\Filesystem::getFileInfo($target); - OCP\JSON::success(array('data' => \OCA\Files\Helper::formatFileInfo($meta))); - exit(); - } +if($success) { + $meta = \OC\Files\Filesystem::getFileInfo($target); + OCP\JSON::success(array('data' => \OCA\Files\Helper::formatFileInfo($meta))); + return; } OCP\JSON::error(array('data' => array( 'message' => $l10n->t('Error when creating the file') ))); diff --git a/apps/files/ajax/newfolder.php b/apps/files/ajax/newfolder.php index fab230717de..3a252c5ba3c 100644 --- a/apps/files/ajax/newfolder.php +++ b/apps/files/ajax/newfolder.php @@ -8,8 +8,8 @@ OCP\JSON::callCheck(); \OC::$server->getSession()->close(); // Get the params -$dir = isset($_POST['dir']) ? $_POST['dir'] : ''; -$foldername = isset($_POST['foldername']) ? $_POST['foldername'] : ''; +$dir = isset($_POST['dir']) ? (string)$_POST['dir'] : ''; +$folderName = isset($_POST['foldername']) ?(string) $_POST['foldername'] : ''; $l10n = \OC::$server->getL10N('files'); @@ -18,16 +18,13 @@ $result = array( 'data' => NULL ); -if(trim($foldername) === '') { - $result['data'] = array('message' => $l10n->t('Folder name cannot be empty.')); +try { + \OC\Files\Filesystem::getView()->verifyPath($dir, $folderName); +} catch (\OCP\Files\InvalidPathException $ex) { + $result['data'] = [ + 'message' => $ex->getMessage()]; OCP\JSON::error($result); - exit(); -} - -if(!OCP\Util::isValidFileName($foldername)) { - $result['data'] = array('message' => (string)$l10n->t("Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed.")); - OCP\JSON::error($result); - exit(); + return; } if (!\OC\Files\Filesystem::file_exists($dir . '/')) { @@ -39,12 +36,12 @@ if (!\OC\Files\Filesystem::file_exists($dir . '/')) { exit(); } -$target = $dir . '/' . $foldername; +$target = $dir . '/' . $folderName; if (\OC\Files\Filesystem::file_exists($target)) { $result['data'] = array('message' => $l10n->t( 'The name %s is already used in the folder %s. Please choose a different name.', - array($foldername, $dir)) + array($folderName, $dir)) ); OCP\JSON::error($result); exit(); @@ -52,9 +49,9 @@ if (\OC\Files\Filesystem::file_exists($target)) { if(\OC\Files\Filesystem::mkdir($target)) { if ( $dir !== '/') { - $path = $dir.'/'.$foldername; + $path = $dir.'/'.$folderName; } else { - $path = '/'.$foldername; + $path = '/'.$folderName; } $meta = \OC\Files\Filesystem::getFileInfo($path); $meta['type'] = 'dir'; // missing ?! diff --git a/apps/files/ajax/rename.php b/apps/files/ajax/rename.php index 6ea53468861..6f248265562 100644 --- a/apps/files/ajax/rename.php +++ b/apps/files/ajax/rename.php @@ -30,9 +30,9 @@ $files = new \OCA\Files\App( \OC::$server->getL10N('files') ); $result = $files->rename( - isset($_GET['dir']) ? $_GET['dir'] : '', - isset($_GET['file']) ? $_GET['file'] : '', - isset($_GET['newname']) ? $_GET['newname'] : '' + isset($_GET['dir']) ? (string)$_GET['dir'] : '', + isset($_GET['file']) ? (string)$_GET['file'] : '', + isset($_GET['newname']) ? (string)$_GET['newname'] : '' ); if($result['success'] === true){ diff --git a/apps/files/ajax/scan.php b/apps/files/ajax/scan.php index f8977c2971e..7daae26d1db 100644 --- a/apps/files/ajax/scan.php +++ b/apps/files/ajax/scan.php @@ -1,11 +1,15 @@ <?php set_time_limit(0); //scanning can take ages + +\OCP\JSON::checkLoggedIn(); +\OCP\JSON::callCheck(); + \OC::$server->getSession()->close(); $force = (isset($_GET['force']) and ($_GET['force'] === 'true')); -$dir = isset($_GET['dir']) ? $_GET['dir'] : ''; +$dir = isset($_GET['dir']) ? (string)$_GET['dir'] : ''; if (isset($_GET['users'])) { - OC_JSON::checkAdminUser(); + \OCP\JSON::checkAdminUser(); if ($_GET['users'] === 'all') { $users = OC_User::getUsers(); } else { diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php index 88375f82acb..321a14e70fc 100644 --- a/apps/files/ajax/upload.php +++ b/apps/files/ajax/upload.php @@ -16,7 +16,7 @@ $l = \OC::$server->getL10N('files'); if (empty($_POST['dirToken'])) { // The standard case, files are uploaded through logged in users :) OCP\JSON::checkLoggedIn(); - $dir = isset($_POST['dir']) ? $_POST['dir'] : ""; + $dir = isset($_POST['dir']) ? (string)$_POST['dir'] : ''; if (!$dir || empty($dir) || $dir === false) { OCP\JSON::error(array('data' => array_merge(array('message' => $l->t('Unable to set upload directory.'))))); die(); @@ -30,9 +30,9 @@ if (empty($_POST['dirToken'])) { // return only read permissions for public upload $allowedPermissions = \OCP\Constants::PERMISSION_READ; - $publicDirectory = !empty($_POST['subdir']) ? $_POST['subdir'] : '/'; + $publicDirectory = !empty($_POST['subdir']) ? (string)$_POST['subdir'] : '/'; - $linkItem = OCP\Share::getShareByToken($_POST['dirToken']); + $linkItem = OCP\Share::getShareByToken((string)$_POST['dirToken']); if ($linkItem === false) { OCP\JSON::error(array('data' => array_merge(array('message' => $l->t('Invalid Token'))))); die(); diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php index 62c205add52..528156e1a28 100644 --- a/apps/files/appinfo/app.php +++ b/apps/files/appinfo/app.php @@ -1,29 +1,41 @@ <?php -$l = \OC::$server->getL10N('files'); -OCP\App::registerAdmin('files', 'admin'); +\OCP\App::registerAdmin('files', 'admin'); -OCP\App::addNavigationEntry(array("id" => "files_index", - "order" => 0, - "href" => OCP\Util::linkTo("files", "index.php"), - "icon" => OCP\Util::imagePath("core", "places/files.svg"), - "name" => $l->t("Files"))); +\OC::$server->getNavigationManager()->add(function () { + $l = \OC::$server->getL10N('files'); + return [ + 'id' => 'files_index', + 'order' => 0, + 'href' => \OCP\Util::linkTo('files', 'index.php'), + 'icon' => \OCP\Util::imagePath('core', 'places/files.svg'), + 'name' => $l->t('Files'), + ]; +}); \OC::$server->getSearch()->registerProvider('OC\Search\Provider\File', array('apps' => array('files'))); -$templateManager = OC_Helper::getFileTemplateManager(); +$templateManager = \OC_Helper::getFileTemplateManager(); $templateManager->registerTemplate('text/html', 'core/templates/filetemplates/template.html'); $templateManager->registerTemplate('application/vnd.oasis.opendocument.presentation', 'core/templates/filetemplates/template.odp'); $templateManager->registerTemplate('application/vnd.oasis.opendocument.text', 'core/templates/filetemplates/template.odt'); $templateManager->registerTemplate('application/vnd.oasis.opendocument.spreadsheet', 'core/templates/filetemplates/template.ods'); -\OCA\Files\App::getNavigationManager()->add( - array( - "id" => 'files', - "appname" => 'files', - "script" => 'list.php', - "order" => 0, - "name" => $l->t('All files') - ) -); +\OCA\Files\App::getNavigationManager()->add(function () { + $l = \OC::$server->getL10N('files'); + return [ + 'id' => 'files', + 'appname' => 'files', + 'script' => 'list.php', + 'order' => 0, + 'name' => $l->t('All files'), + ]; +}); + +\OC::$server->getActivityManager()->registerExtension(function() { + return new \OCA\Files\Activity( + \OC::$server->query('L10NFactory'), + \OC::$server->getURLGenerator() + ); +}); diff --git a/apps/files/appinfo/remote.php b/apps/files/appinfo/remote.php index c622f083958..e260f85fdb0 100644 --- a/apps/files/appinfo/remote.php +++ b/apps/files/appinfo/remote.php @@ -24,37 +24,47 @@ */ // Backends -$authBackend = new OC_Connector_Sabre_Auth(); -$lockBackend = new OC_Connector_Sabre_Locks(); -$requestBackend = new OC_Connector_Sabre_Request(); +$authBackend = new \OC\Connector\Sabre\Auth(); // Fire up server $objectTree = new \OC\Connector\Sabre\ObjectTree(); -$server = new OC_Connector_Sabre_Server($objectTree); -$server->httpRequest = $requestBackend; +$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())); -$server->addPlugin(new \Sabre\DAV\Locks\Plugin($lockBackend)); -$server->addPlugin(new \Sabre\DAV\Browser\Plugin(false, false)); // Show something in the Browser, but no upload -$server->addPlugin(new OC_Connector_Sabre_FilesPlugin()); -$server->addPlugin(new OC_Connector_Sabre_MaintenancePlugin()); -$server->addPlugin(new OC_Connector_Sabre_ExceptionLoggerPlugin('webdav')); +// 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->subscribeEvent('beforeMethod', function () use ($server, $objectTree) { +$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); + $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)); + $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() + ) + ) + ); }, 30); // priority 30: after auth (10) and acl(20), before lock(50) and handling the request // And off we go! diff --git a/apps/files/controller/apicontroller.php b/apps/files/controller/apicontroller.php index a8bea27e4bb..de9fa20dde0 100644 --- a/apps/files/controller/apicontroller.php +++ b/apps/files/controller/apicontroller.php @@ -1,6 +1,6 @@ <?php /** - * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com> + * Copyright (c) 2014-2015 Lukas Reschke <lukas@owncloud.com> * This file is licensed under the Affero General Public License version 3 or * later. * See the COPYING-README file. @@ -17,19 +17,27 @@ use OCP\AppFramework\Http\DownloadResponse; use OC\Preview; use OCA\Files\Service\TagService; +/** + * Class ApiController + * + * @package OCA\Files\Controller + */ class ApiController extends Controller { + /** @var TagService */ + private $tagService; /** - * @var TagService $tagService + * @param string $appName + * @param IRequest $request + * @param TagService $tagService */ - private $tagService; - - public function __construct($appName, IRequest $request, TagService $tagService){ + public function __construct($appName, + IRequest $request, + TagService $tagService){ parent::__construct($appName, $request); $this->tagService = $tagService; } - /** * Gets a thumbnail of the specified file * @@ -66,25 +74,31 @@ class ApiController extends Controller { * @CORS * * @param string $path path - * @param array $tags array of tags + * @param array|string $tags array of tags * @return DataResponse */ public function updateFileTags($path, $tags = null) { - $result = array(); + $result = []; // if tags specified or empty array, update tags if (!is_null($tags)) { try { $this->tagService->updateFileTags($path, $tags); } catch (\OCP\Files\NotFoundException $e) { - return new DataResponse($e->getMessage(), Http::STATUS_NOT_FOUND); + return new DataResponse([ + 'message' => $e->getMessage() + ], Http::STATUS_NOT_FOUND); } catch (\OCP\Files\StorageNotAvailableException $e) { - return new DataResponse($e->getMessage(), Http::STATUS_SERVICE_UNAVAILABLE); + return new DataResponse([ + 'message' => $e->getMessage() + ], Http::STATUS_SERVICE_UNAVAILABLE); } catch (\Exception $e) { - return new DataResponse($e->getMessage(), Http::STATUS_NOT_FOUND); + return new DataResponse([ + 'message' => $e->getMessage() + ], Http::STATUS_NOT_FOUND); } $result['tags'] = $tags; } - return new DataResponse($result, Http::STATUS_OK); + return new DataResponse($result); } /** @@ -93,7 +107,7 @@ class ApiController extends Controller { * @NoAdminRequired * @CORS * - * @param array $tagName tag name to filter by + * @param array|string $tagName tag name to filter by * @return DataResponse */ public function getFilesByTag($tagName) { @@ -102,11 +116,15 @@ class ApiController extends Controller { foreach ($fileInfos as &$fileInfo) { $file = \OCA\Files\Helper::formatFileInfo($fileInfo); $parts = explode('/', dirname($fileInfo->getPath()), 4); - $file['path'] = '/' . $parts[3]; - $file['tags'] = array($tagName); + if(isset($parts[3])) { + $file['path'] = '/' . $parts[3]; + } else { + $file['path'] = '/'; + } + $file['tags'] = [$tagName]; $files[] = $file; } - return new DataResponse(array('files' => $files), Http::STATUS_OK); + return new DataResponse(['files' => $files]); } } diff --git a/apps/files/css/files.css b/apps/files/css/files.css index f04d6f8352a..d09df9d795d 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -13,6 +13,11 @@ } .actions.hidden { display: none; } +.actions.creatable { + position: relative; + z-index: -30; +} + #new { z-index: 1010; float: left; @@ -34,19 +39,21 @@ border-bottom-left-radius: 0; border-bottom-right-radius: 0; border-bottom: none; + background: #f8f8f8; } #new > ul { display: none; position: fixed; min-width: 112px; - z-index: 10; + z-index: -10; padding: 8px; padding-bottom: 0; - margin-top: 14px; + margin-top: 13.5px; margin-left: -1px; text-align: left; background: #f8f8f8; border: 1px solid #ddd; + border: 1px solid rgba(190, 190, 190, 0.901961); border-radius: 5px; border-top-left-radius: 0; box-shadow: 0 2px 7px rgba(170,170,170,.4); @@ -481,7 +488,7 @@ 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: 0; + right: 15px; padding: 17px 14px; } diff --git a/apps/files/css/upload.css b/apps/files/css/upload.css index adf1e9d13f8..bd60f831388 100644 --- a/apps/files/css/upload.css +++ b/apps/files/css/upload.css @@ -8,6 +8,8 @@ margin-left: 3px; overflow: hidden; vertical-align: top; + position: relative; + z-index: -20; } #upload .icon-upload { position: relative; diff --git a/apps/files/js/breadcrumb.js b/apps/files/js/breadcrumb.js index 5cea2639c7d..364475e4a4f 100644 --- a/apps/files/js/breadcrumb.js +++ b/apps/files/js/breadcrumb.js @@ -67,6 +67,7 @@ * @param dir path to be displayed as breadcrumb */ setDirectory: function(dir) { + dir = dir.replace(/\\/g, '/'); dir = dir || '/'; if (dir !== this.dir) { this.dir = dir; diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js index bc3e59a11af..6b0cae209c2 100644 --- a/apps/files/js/file-upload.js +++ b/apps/files/js/file-upload.js @@ -611,9 +611,7 @@ OC.Upload = { var lastPos; var checkInput = function () { var filename = input.val(); - if (type === 'web' && filename.length === 0) { - throw t('files', 'URL cannot be empty'); - } else if (type !== 'web' && ! Files.isFileNameValid(filename)) { + 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}); @@ -692,56 +690,6 @@ OC.Upload = { } ); break; - case 'web': - if (name.substr(0, 8) !== 'https://' && name.substr(0, 7) !== 'http://') { - name = 'http://' + name; - } - var localName = name; - if (localName.substr(localName.length-1, 1) === '/') {//strip / - localName = localName.substr(0, localName.length-1); - } - if (localName.indexOf('/')) { //use last part of url - localName = localName.split('/').pop(); - } else { //or the domain - localName = (localName.match(/:\/\/(.[^\/]+)/)[1]).replace('www.', ''); - } - localName = FileList.getUniqueName(localName); - //IE < 10 does not fire the necessary events for the progress bar. - if ($('html.lte9').length === 0) { - $('#uploadprogressbar').progressbar({value: 0}); - OC.Upload._showProgressBar(); - } - - var eventSource = new OC.EventSource( - OC.filePath('files', 'ajax', 'newfile.php'), - { - dir: FileList.getCurrentDirectory(), - source: name, - filename: localName - } - ); - eventSource.listen('progress', function(progress) { - //IE < 10 does not fire the necessary events for the progress bar. - if ($('html.lte9').length === 0) { - $('#uploadprogressbar').progressbar('value',progress); - } - }); - eventSource.listen('success', function(data) { - var file = data; - OC.Upload._hideProgressBar(); - - FileList.add(file, {hidden: hidden, animate: true}); - }); - eventSource.listen('error', function(error) { - OC.Upload._hideProgressBar(); - var message = (error && error.message) || t('core', 'Error fetching URL'); - OC.Notification.show(message); - //hide notification after 10 sec - setTimeout(function() { - OC.Notification.hide(); - }, 10000); - }); - break; } var li = form.parent(); form.remove(); diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index c5c665cee77..871c42ead89 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -947,7 +947,7 @@ mime: mime, etag: fileData.etag, callback: function(url) { - iconDiv.css('background-image', 'url(' + url + ')'); + iconDiv.css('background-image', 'url("' + url + '")'); } }); } @@ -959,7 +959,7 @@ }; var previewUrl = this.generatePreviewUrl(urlSpec); previewUrl = previewUrl.replace('(', '%28').replace(')', '%29'); - iconDiv.css('background-image', 'url(' + previewUrl + ')'); + iconDiv.css('background-image', 'url("' + previewUrl + '")'); } } return tr; @@ -1009,6 +1009,7 @@ * @param changeUrl true to also update the URL, false otherwise (default) */ _setCurrentDir: function(targetDir, changeUrl) { + targetDir = targetDir.replace(/\\/g, '/'); var previousDir = this.getCurrentDirectory(), baseDir = OC.basename(targetDir); diff --git a/apps/files/js/files.js b/apps/files/js/files.js index 314b8bf39c6..e63c3cad52e 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -102,14 +102,6 @@ } else if (trimmedName.length === 0) { throw t('files', 'File name cannot be empty.'); } - // check for invalid characters - var invalidCharacters = - ['\\', '/', '<', '>', ':', '"', '|', '?', '*', '\n']; - for (var i = 0; i < invalidCharacters.length; i++) { - if (trimmedName.indexOf(invalidCharacters[i]) !== -1) { - throw t('files', "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed."); - } - } return true; }, displayStorageWarnings: function() { diff --git a/apps/files/js/tagsplugin.js b/apps/files/js/tagsplugin.js index 27ab3eced04..293e25176f3 100644 --- a/apps/files/js/tagsplugin.js +++ b/apps/files/js/tagsplugin.js @@ -109,7 +109,9 @@ self.applyFileTags( dir + '/' + fileName, - tags + tags, + $actionEl, + isFavorite ).then(function(result) { // response from server should contain updated tags var newTags = result.tags; @@ -157,8 +159,10 @@ * * @param {String} fileName path to the file or folder to tag * @param {Array.<String>} tagNames array of tag names + * @param {Object} $actionEl element + * @param {boolean} isFavorite Was the item favorited before */ - applyFileTags: function(fileName, tagNames) { + applyFileTags: function(fileName, tagNames, $actionEl, isFavorite) { var encodedPath = OC.encodePath(fileName); while (encodedPath[0] === '/') { encodedPath = encodedPath.substr(1); @@ -171,6 +175,14 @@ }), dataType: 'json', type: 'POST' + }).fail(function(response) { + var message = ''; + // show message if it is available + if(response.responseJSON && response.responseJSON.message) { + message = ': ' + response.responseJSON.message; + } + OC.Notification.showTemporary(t('files', 'An error occurred while trying to update the tags') + message); + toggleStar($actionEl, isFavorite); }); } }; diff --git a/apps/files/l10n/ar.js b/apps/files/l10n/ar.js index 2f03fd8f400..4baa461f0f6 100644 --- a/apps/files/l10n/ar.js +++ b/apps/files/l10n/ar.js @@ -4,8 +4,6 @@ OC.L10N.register( "Unknown error" : "خطأ غير معروف. ", "Could not move %s - File with this name already exists" : "فشل في نقل الملف %s - يوجد ملف بنفس هذا الاسم", "Could not move %s" : "فشل في نقل %s", - "File name cannot be empty." : "اسم الملف لا يجوز أن يكون فارغا", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "اسم غير صحيح , الرموز '\\', '/', '<', '>', ':', '\"', '|', '?' و \"*\" غير مسموح استخدامها", "Unable to set upload directory." : "غير قادر على تحميل المجلد", "Invalid Token" : "علامة غير صالحة", "No file was uploaded. Unknown error" : "لم يتم رفع أي ملف , خطأ غير معروف", @@ -41,6 +39,7 @@ OC.L10N.register( "_%n folder_::_%n folders_" : ["لا يوجد مجلدات %n","1 مجلد %n","2 مجلد %n","عدد قليل من مجلدات %n","عدد كبير من مجلدات %n","مجلدات %n"], "_%n file_::_%n files_" : ["لا يوجد ملفات %n","ملف %n","2 ملف %n","قليل من ملفات %n","الكثير من ملفات %n"," ملفات %n"], "_Uploading %n file_::_Uploading %n files_" : ["لا يوجد ملفات %n لتحميلها","تحميل 1 ملف %n","تحميل 2 ملف %n","يتم تحميل عدد قليل من ملفات %n","يتم تحميل عدد كبير من ملفات %n","يتم تحميل ملفات %n"], + "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" : "تم تمكين تشفير البرامج لكن لم يتم تهيئة المفاتيح لذا يرجى تسجيل الخروج ثم تسجيل الدخول مرة آخرى.", @@ -49,6 +48,19 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["","","","","",""], "{dirs} and {files}" : "{dirs} و {files}", "Favorite" : "المفضلة", + "A new file or folder has been <strong>created</strong>" : "تم <strong> إنشاء</strong> ملف جديد أو مجلد ", + "A file or folder has been <strong>changed</strong>" : "تم <strong> تغيير</strong> ملف أو مجلد", + "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" : "%s لا يمكن إعادة تسميته. ", "File handling" : "التعامل مع الملف", "Maximum upload size" : "الحد الأقصى لحجم الملفات التي يمكن رفعها", @@ -61,7 +73,6 @@ OC.L10N.register( "Text file" : "ملف", "New folder" : "مجلد جديد", "Folder" : "مجلد", - "From link" : "من رابط", "Upload" : "رفع", "Cancel upload" : "إلغاء الرفع", "Upload too large" : "حجم الترفيع أعلى من المسموح", diff --git a/apps/files/l10n/ar.json b/apps/files/l10n/ar.json index 8bb71b32f2b..8f4ad49a139 100644 --- a/apps/files/l10n/ar.json +++ b/apps/files/l10n/ar.json @@ -2,8 +2,6 @@ "Unknown error" : "خطأ غير معروف. ", "Could not move %s - File with this name already exists" : "فشل في نقل الملف %s - يوجد ملف بنفس هذا الاسم", "Could not move %s" : "فشل في نقل %s", - "File name cannot be empty." : "اسم الملف لا يجوز أن يكون فارغا", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "اسم غير صحيح , الرموز '\\', '/', '<', '>', ':', '\"', '|', '?' و \"*\" غير مسموح استخدامها", "Unable to set upload directory." : "غير قادر على تحميل المجلد", "Invalid Token" : "علامة غير صالحة", "No file was uploaded. Unknown error" : "لم يتم رفع أي ملف , خطأ غير معروف", @@ -39,6 +37,7 @@ "_%n folder_::_%n folders_" : ["لا يوجد مجلدات %n","1 مجلد %n","2 مجلد %n","عدد قليل من مجلدات %n","عدد كبير من مجلدات %n","مجلدات %n"], "_%n file_::_%n files_" : ["لا يوجد ملفات %n","ملف %n","2 ملف %n","قليل من ملفات %n","الكثير من ملفات %n"," ملفات %n"], "_Uploading %n file_::_Uploading %n files_" : ["لا يوجد ملفات %n لتحميلها","تحميل 1 ملف %n","تحميل 2 ملف %n","يتم تحميل عدد قليل من ملفات %n","يتم تحميل عدد كبير من ملفات %n","يتم تحميل ملفات %n"], + "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" : "تم تمكين تشفير البرامج لكن لم يتم تهيئة المفاتيح لذا يرجى تسجيل الخروج ثم تسجيل الدخول مرة آخرى.", @@ -47,6 +46,19 @@ "_matches '{filter}'_::_match '{filter}'_" : ["","","","","",""], "{dirs} and {files}" : "{dirs} و {files}", "Favorite" : "المفضلة", + "A new file or folder has been <strong>created</strong>" : "تم <strong> إنشاء</strong> ملف جديد أو مجلد ", + "A file or folder has been <strong>changed</strong>" : "تم <strong> تغيير</strong> ملف أو مجلد", + "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" : "%s لا يمكن إعادة تسميته. ", "File handling" : "التعامل مع الملف", "Maximum upload size" : "الحد الأقصى لحجم الملفات التي يمكن رفعها", @@ -59,7 +71,6 @@ "Text file" : "ملف", "New folder" : "مجلد جديد", "Folder" : "مجلد", - "From link" : "من رابط", "Upload" : "رفع", "Cancel upload" : "إلغاء الرفع", "Upload too large" : "حجم الترفيع أعلى من المسموح", diff --git a/apps/files/l10n/ast.js b/apps/files/l10n/ast.js index 9acdf157eff..d3a70cb1aa6 100644 --- a/apps/files/l10n/ast.js +++ b/apps/files/l10n/ast.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Nun pudo movese %s - Yá existe un ficheru con esi nome.", "Could not move %s" : "Nun pudo movese %s", "Permission denied" : "Permisu denegáu", - "File name cannot be empty." : "El nome de ficheru nun pue quedar baleru.", - "\"%s\" is an invalid file name." : "\"%s\" ye un nome de ficheru inválidu.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nome inválidu, los caráuteres \"\\\", \"/\", \"<\", \">\", \":\", \"\", \"|\" \"?\" y \"*\" nun tán permitíos.", "The target folder has been moved or deleted." : "La carpeta oxetivu movióse o desanicióse.", "The name %s is already used in the folder %s. Please choose a different name." : "El nome %s yá ta n'usu na carpeta %s. Por favor, escueyi un nome diferente.", - "Not a valid source" : "Nun ye una fonte válida", - "Server is not allowed to open URLs, please check the server configuration" : "Nun se-y permite al sirvidor abrir URLs, por favor comprueba la configuración del sirvidor", - "The file exceeds your quota by %s" : "El ficheru perpasa la cuota por %s", - "Error while downloading %s to %s" : "Fallu cuando se descargaba %s a %s", "Error when creating the file" : "Fallu cuando se creaba'l ficheru", - "Folder name cannot be empty." : "El nome la carpeta nun pue tar baleru.", "Error when creating the folder" : "Fallu cuando se creaba la carpeta", "Unable to set upload directory." : "Nun pue afitase la carpeta de xubida.", "Invalid Token" : "Token inválidu", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Xuba encaboxada.", "Could not get result from server." : "Nun pudo obtenese'l resultáu del sirvidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "La xuba del ficheru ta en progresu. Si dexes agora la páxina, va encaboxase la xuba.", - "URL cannot be empty" : "La URL nun pue tar balera", "{new_name} already exists" : "{new_name} yá existe", "Could not create file" : "Nun pudo crease'l ficheru", "Could not create folder" : "Nun pudo crease la carpeta", - "Error fetching URL" : "Fallu obteniendo URL", "Rename" : "Renomar", "Delete" : "Desaniciar", "Disconnect storage" : "Desconeutar almacenamientu", @@ -67,6 +57,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Nun tienes permisu pa xubir o crear ficheros equí", "_Uploading %n file_::_Uploading %n files_" : ["Xubiendo %n ficheru","Xubiendo %n ficheros"], "\"{name}\" is an invalid file name." : "\"{name}\" ye un nome de ficheru inválidu.", + "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", @@ -75,6 +66,19 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["",""], "{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", + "A file or folder has been <strong>changed</strong>" : "<strong>Camudóse</strong> un ficheru o carpeta", + "A file or folder has been <strong>deleted</strong>" : "<strong>Desanicióse</strong> un ficheru o carpeta", + "A file or folder has been <strong>restored</strong>" : "<strong>Restauróse</strong> un ficheru o carpeta", + "You created %1$s" : "Creasti %1$s", + "%2$s created %1$s" : "%2$s creó %1$s", + "%1$s was created in a public folder" : "Creóse %1$s nuna carpeta pública", + "You changed %1$s" : "Modificasti %1$s", + "%2$s changed %1$s" : "%2$s modificó %1$s", + "You deleted %1$s" : "Desaniciasti %1$s", + "%2$s deleted %1$s" : "%2$s desanició %1$s", + "You restored %1$s" : "Recuperóse %1$s", + "%2$s restored %1$s" : "%2$s recuperó %1$s", "%s could not be renamed as it has been deleted" : "%s nun pue renomase dempués de desaniciase", "%s could not be renamed" : "Nun se puede renomar %s ", "Upload (max. %s)" : "Xuba (máx. %s)", @@ -90,7 +94,6 @@ OC.L10N.register( "Text file" : "Ficheru de testu", "New folder" : "Nueva carpeta", "Folder" : "Carpeta", - "From link" : "Dende enllaz", "Upload" : "Xubir", "Cancel upload" : "Encaboxar xuba", "Upload too large" : "La xuba ye abondo grande", diff --git a/apps/files/l10n/ast.json b/apps/files/l10n/ast.json index 40d97bfbe04..930fdd1de68 100644 --- a/apps/files/l10n/ast.json +++ b/apps/files/l10n/ast.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Nun pudo movese %s - Yá existe un ficheru con esi nome.", "Could not move %s" : "Nun pudo movese %s", "Permission denied" : "Permisu denegáu", - "File name cannot be empty." : "El nome de ficheru nun pue quedar baleru.", - "\"%s\" is an invalid file name." : "\"%s\" ye un nome de ficheru inválidu.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nome inválidu, los caráuteres \"\\\", \"/\", \"<\", \">\", \":\", \"\", \"|\" \"?\" y \"*\" nun tán permitíos.", "The target folder has been moved or deleted." : "La carpeta oxetivu movióse o desanicióse.", "The name %s is already used in the folder %s. Please choose a different name." : "El nome %s yá ta n'usu na carpeta %s. Por favor, escueyi un nome diferente.", - "Not a valid source" : "Nun ye una fonte válida", - "Server is not allowed to open URLs, please check the server configuration" : "Nun se-y permite al sirvidor abrir URLs, por favor comprueba la configuración del sirvidor", - "The file exceeds your quota by %s" : "El ficheru perpasa la cuota por %s", - "Error while downloading %s to %s" : "Fallu cuando se descargaba %s a %s", "Error when creating the file" : "Fallu cuando se creaba'l ficheru", - "Folder name cannot be empty." : "El nome la carpeta nun pue tar baleru.", "Error when creating the folder" : "Fallu cuando se creaba la carpeta", "Unable to set upload directory." : "Nun pue afitase la carpeta de xubida.", "Invalid Token" : "Token inválidu", @@ -41,11 +33,9 @@ "Upload cancelled." : "Xuba encaboxada.", "Could not get result from server." : "Nun pudo obtenese'l resultáu del sirvidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "La xuba del ficheru ta en progresu. Si dexes agora la páxina, va encaboxase la xuba.", - "URL cannot be empty" : "La URL nun pue tar balera", "{new_name} already exists" : "{new_name} yá existe", "Could not create file" : "Nun pudo crease'l ficheru", "Could not create folder" : "Nun pudo crease la carpeta", - "Error fetching URL" : "Fallu obteniendo URL", "Rename" : "Renomar", "Delete" : "Desaniciar", "Disconnect storage" : "Desconeutar almacenamientu", @@ -65,6 +55,7 @@ "You don’t have permission to upload or create files here" : "Nun tienes permisu pa xubir o crear ficheros equí", "_Uploading %n file_::_Uploading %n files_" : ["Xubiendo %n ficheru","Xubiendo %n ficheros"], "\"{name}\" is an invalid file name." : "\"{name}\" ye un nome de ficheru inválidu.", + "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", @@ -73,6 +64,19 @@ "_matches '{filter}'_::_match '{filter}'_" : ["",""], "{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", + "A file or folder has been <strong>changed</strong>" : "<strong>Camudóse</strong> un ficheru o carpeta", + "A file or folder has been <strong>deleted</strong>" : "<strong>Desanicióse</strong> un ficheru o carpeta", + "A file or folder has been <strong>restored</strong>" : "<strong>Restauróse</strong> un ficheru o carpeta", + "You created %1$s" : "Creasti %1$s", + "%2$s created %1$s" : "%2$s creó %1$s", + "%1$s was created in a public folder" : "Creóse %1$s nuna carpeta pública", + "You changed %1$s" : "Modificasti %1$s", + "%2$s changed %1$s" : "%2$s modificó %1$s", + "You deleted %1$s" : "Desaniciasti %1$s", + "%2$s deleted %1$s" : "%2$s desanició %1$s", + "You restored %1$s" : "Recuperóse %1$s", + "%2$s restored %1$s" : "%2$s recuperó %1$s", "%s could not be renamed as it has been deleted" : "%s nun pue renomase dempués de desaniciase", "%s could not be renamed" : "Nun se puede renomar %s ", "Upload (max. %s)" : "Xuba (máx. %s)", @@ -88,7 +92,6 @@ "Text file" : "Ficheru de testu", "New folder" : "Nueva carpeta", "Folder" : "Carpeta", - "From link" : "Dende enllaz", "Upload" : "Xubir", "Cancel upload" : "Encaboxar xuba", "Upload too large" : "La xuba ye abondo grande", diff --git a/apps/files/l10n/az.js b/apps/files/l10n/az.js index 90be607e9f2..18458119942 100644 --- a/apps/files/l10n/az.js +++ b/apps/files/l10n/az.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Köçürmə mümkün deyil %s - Bu adla fayl artıq mövcuddur", "Could not move %s" : "Yerdəyişmə mükün olmadı %s", "Permission denied" : "Yetki qadağandır", - "File name cannot be empty." : "Faylın adı boş ola bilməz.", - "\"%s\" is an invalid file name." : "\"%s\" yalnış fayl adıdır.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Yalnış ad, '\\', '/', '<', '>', ':', '\"', '|', '?' və '*' qəbul edilmir.", "The target folder has been moved or deleted." : "Mənsəbdə olan qovluqun ünvanı dəyişib yada silinib.", "The name %s is already used in the folder %s. Please choose a different name." : "Bu ad %s artıq %s qovluğunda istifadə edilir. Xahiş olunur fərqli ad istifadə edəsiniz.", - "Not a valid source" : "Düzgün mənbə yoxdur", - "Server is not allowed to open URLs, please check the server configuration" : "URL-ləri açmaq üçün server izin vermir, xahış olunur server quraşdırmalarını yoxlayasınız", - "The file exceeds your quota by %s" : "Fayl sizə təyin edilmiş %s məhdudiyyətini aşır", - "Error while downloading %s to %s" : "%s-i %s-ə yükləmə zamanı səhv baş verdi", "Error when creating the file" : "Fayl yaratdıqda səhv baş vermişdir", - "Folder name cannot be empty." : "Qovluğun adı boş ola bilməz", "Error when creating the folder" : "Qovluğu yaratdıqda səhv baş vermişdir", "Unable to set upload directory." : "Əlavələr qovluğunu təyin etmək mümkün olmadı.", "Invalid Token" : "Yalnış token", @@ -35,32 +27,89 @@ OC.L10N.register( "Invalid directory." : "Yalnış qovluq.", "Files" : "Fayllar", "All files" : "Bütün fayllar", + "Favorites" : "Sevimlilər", + "Home" : "Ev", "Unable to upload {filename} as it is a directory or has 0 bytes" : "Yükləmək olmur {filename} ona görə ki, ya qovluqdur yada ki, həcmi 0 baytdır ", "Total file size {size1} exceeds upload limit {size2}" : "Ümumi fayl həcmi {size1} yüklənmə limiti {size2} -ni aşır", "Not enough free space, you are uploading {size1} but only {size2} is left" : "Kifayət qədər boş yer yoxdur, siz yükləyirsiniz {size1} ancaq {size2} var. ", "Upload cancelled." : "Yüklənmə dayandırıldı.", "Could not get result from server." : "Nəticəni serverdən almaq mümkün olmur.", "File upload is in progress. Leaving the page now will cancel the upload." : "Faylın yüklənməsi gedir. Əgər səhifəni indi tərk etsəniz yüklənmə dayanacaq.", - "URL cannot be empty" : "URL boş ola bilməz", "{new_name} already exists" : "{new_name} artıq mövcuddur", "Could not create file" : "Faylı yaratmaq olmur", "Could not create folder" : "Qovluğu yaratmaq olmur", - "Error fetching URL" : "URL-in gətirilməsində səhv baş verdi", "Rename" : "Adı dəyiş", "Delete" : "Sil", + "Disconnect storage" : "Daşıyıcını ayır", + "Unshare" : "Paylaşımı durdur", "Download" : "Yüklə", + "Select" : "Seç", + "Pending" : "Gözləmə", + "Unable to determine date" : "Tarixi təyin etmək mümkün olmadı", + "Error moving file." : "Faylın köçürülməsində səhv baş verdi.", + "Error moving file" : "Faylın köçürülməsində səhv baş verdi", "Error" : "Səhv", + "Could not rename file" : "Faylın adını dəyişmək mümkün olmadı", + "Error deleting file." : "Faylın silinməsində səhv baş verdi.", + "No entries in this folder match '{filter}'" : "Bu qovluqda '{filter}' uyğunluğunda heç bir verilən tapılmadı", "Name" : "Ad", "Size" : "Həcm", - "_%n folder_::_%n folders_" : ["",""], - "_%n file_::_%n files_" : ["",""], - "_Uploading %n file_::_Uploading %n files_" : ["",""], - "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "Modified" : "Dəyişdirildi", + "_%n folder_::_%n folders_" : ["%n qovluq","%n qovluqlar"], + "_%n file_::_%n files_" : ["%n fayllar","%n fayllar"], + "You don’t have permission to upload or create files here" : "Sizin burda yükləməyə və ya fayl yaratmağa yetkiniz yoxdur ", + "_Uploading %n file_::_Uploading %n files_" : ["%n fayllar yüklənilir","%n fayllar yüklənilir"], + "\"{name}\" is an invalid file name." : "\"{name}\" yalnış fayl adıdır.", + "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", + "Favorite" : "İstəkli", + "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>", + "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", + "%2$s created %1$s" : "%2$s yaradılmış %1$s", + "%1$s was created in a public folder" : "%1$s ictimai qovluqda yaradıldı", + "You changed %1$s" : "Siz dəyişdiniz %1$s", + "%2$s changed %1$s" : "%2$s dəyişdirildi %1$s", + "You deleted %1$s" : "Siz silindiniz %1$s", + "%2$s deleted %1$s" : "%2$s silindi %1$s", + "You restored %1$s" : "Siz qayıtdınız %1$s", + "%2$s restored %1$s" : "%2$s bərpa edildi %1$s", + "%s could not be renamed as it has been deleted" : "%s adını dəyişə bilmərik ona görə ki, o silinib artıq", + "%s could not be renamed" : "%s adını dəyişə bilməz", + "Upload (max. %s)" : "Yüklə (max. %s)", + "File handling" : "Fayl emalı", + "Maximum upload size" : "Maksimal yükləmə həcmi", + "max. possible: " : "maks. ola bilər: ", "Save" : "Saxlamaq", "Settings" : "Quraşdırmalar", + "WebDAV" : "WebDAV", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Bu ünvanı <a href=\"%s\" target=\"_blank\">WebDAV vasitəsilə fayllarınızı əldə etmək üçün</a> istifadə edə bilərsiniz. ", + "New" : "Yeni", + "New text file" : "Yeni tekst faylı", + "Text file" : "Tekst faylı", "New folder" : "Yeni qovluq", "Folder" : "Qovluq", "Upload" : "Serverə yüklə", - "Cancel upload" : "Yüklənməni dayandır" + "Cancel upload" : "Yüklənməni dayandır", + "No files yet" : "Belə fayllar yoxdur", + "Upload some content or sync with your devices!" : "Bezi kontenti yüklə yada, öz avadanlıqlarınızla sinxronizasiya edin!", + "No entries found in this folder" : "Bu qovluqda heç bir verilən tapılmadı", + "Select all" : "Hamısıı seç", + "Upload too large" : "Yüklənmə şox böyükdür", + "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Yükləmək istədiyiniz faylların həcmi, bu serverdə izin verilmiş maksimal yüklənmə həcmindən böyükdür.", + "Files are being scanned, please wait." : "Faylların skanı başlanıb, xahiş olunur gözləyəsiniz.", + "Currently scanning" : "Hal-hazırda skan edilir", + "No favorites" : "Seçilmiş yoxdur", + "Files and folders you mark as favorite will show up here" : "İstəkli qeyd etdiyiniz fayllar və qovluqlar burda göstəriləcək" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/az.json b/apps/files/l10n/az.json index c0b614ff96e..a3efcef7dfc 100644 --- a/apps/files/l10n/az.json +++ b/apps/files/l10n/az.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Köçürmə mümkün deyil %s - Bu adla fayl artıq mövcuddur", "Could not move %s" : "Yerdəyişmə mükün olmadı %s", "Permission denied" : "Yetki qadağandır", - "File name cannot be empty." : "Faylın adı boş ola bilməz.", - "\"%s\" is an invalid file name." : "\"%s\" yalnış fayl adıdır.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Yalnış ad, '\\', '/', '<', '>', ':', '\"', '|', '?' və '*' qəbul edilmir.", "The target folder has been moved or deleted." : "Mənsəbdə olan qovluqun ünvanı dəyişib yada silinib.", "The name %s is already used in the folder %s. Please choose a different name." : "Bu ad %s artıq %s qovluğunda istifadə edilir. Xahiş olunur fərqli ad istifadə edəsiniz.", - "Not a valid source" : "Düzgün mənbə yoxdur", - "Server is not allowed to open URLs, please check the server configuration" : "URL-ləri açmaq üçün server izin vermir, xahış olunur server quraşdırmalarını yoxlayasınız", - "The file exceeds your quota by %s" : "Fayl sizə təyin edilmiş %s məhdudiyyətini aşır", - "Error while downloading %s to %s" : "%s-i %s-ə yükləmə zamanı səhv baş verdi", "Error when creating the file" : "Fayl yaratdıqda səhv baş vermişdir", - "Folder name cannot be empty." : "Qovluğun adı boş ola bilməz", "Error when creating the folder" : "Qovluğu yaratdıqda səhv baş vermişdir", "Unable to set upload directory." : "Əlavələr qovluğunu təyin etmək mümkün olmadı.", "Invalid Token" : "Yalnış token", @@ -33,32 +25,89 @@ "Invalid directory." : "Yalnış qovluq.", "Files" : "Fayllar", "All files" : "Bütün fayllar", + "Favorites" : "Sevimlilər", + "Home" : "Ev", "Unable to upload {filename} as it is a directory or has 0 bytes" : "Yükləmək olmur {filename} ona görə ki, ya qovluqdur yada ki, həcmi 0 baytdır ", "Total file size {size1} exceeds upload limit {size2}" : "Ümumi fayl həcmi {size1} yüklənmə limiti {size2} -ni aşır", "Not enough free space, you are uploading {size1} but only {size2} is left" : "Kifayət qədər boş yer yoxdur, siz yükləyirsiniz {size1} ancaq {size2} var. ", "Upload cancelled." : "Yüklənmə dayandırıldı.", "Could not get result from server." : "Nəticəni serverdən almaq mümkün olmur.", "File upload is in progress. Leaving the page now will cancel the upload." : "Faylın yüklənməsi gedir. Əgər səhifəni indi tərk etsəniz yüklənmə dayanacaq.", - "URL cannot be empty" : "URL boş ola bilməz", "{new_name} already exists" : "{new_name} artıq mövcuddur", "Could not create file" : "Faylı yaratmaq olmur", "Could not create folder" : "Qovluğu yaratmaq olmur", - "Error fetching URL" : "URL-in gətirilməsində səhv baş verdi", "Rename" : "Adı dəyiş", "Delete" : "Sil", + "Disconnect storage" : "Daşıyıcını ayır", + "Unshare" : "Paylaşımı durdur", "Download" : "Yüklə", + "Select" : "Seç", + "Pending" : "Gözləmə", + "Unable to determine date" : "Tarixi təyin etmək mümkün olmadı", + "Error moving file." : "Faylın köçürülməsində səhv baş verdi.", + "Error moving file" : "Faylın köçürülməsində səhv baş verdi", "Error" : "Səhv", + "Could not rename file" : "Faylın adını dəyişmək mümkün olmadı", + "Error deleting file." : "Faylın silinməsində səhv baş verdi.", + "No entries in this folder match '{filter}'" : "Bu qovluqda '{filter}' uyğunluğunda heç bir verilən tapılmadı", "Name" : "Ad", "Size" : "Həcm", - "_%n folder_::_%n folders_" : ["",""], - "_%n file_::_%n files_" : ["",""], - "_Uploading %n file_::_Uploading %n files_" : ["",""], - "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "Modified" : "Dəyişdirildi", + "_%n folder_::_%n folders_" : ["%n qovluq","%n qovluqlar"], + "_%n file_::_%n files_" : ["%n fayllar","%n fayllar"], + "You don’t have permission to upload or create files here" : "Sizin burda yükləməyə və ya fayl yaratmağa yetkiniz yoxdur ", + "_Uploading %n file_::_Uploading %n files_" : ["%n fayllar yüklənilir","%n fayllar yüklənilir"], + "\"{name}\" is an invalid file name." : "\"{name}\" yalnış fayl adıdır.", + "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", + "Favorite" : "İstəkli", + "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>", + "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", + "%2$s created %1$s" : "%2$s yaradılmış %1$s", + "%1$s was created in a public folder" : "%1$s ictimai qovluqda yaradıldı", + "You changed %1$s" : "Siz dəyişdiniz %1$s", + "%2$s changed %1$s" : "%2$s dəyişdirildi %1$s", + "You deleted %1$s" : "Siz silindiniz %1$s", + "%2$s deleted %1$s" : "%2$s silindi %1$s", + "You restored %1$s" : "Siz qayıtdınız %1$s", + "%2$s restored %1$s" : "%2$s bərpa edildi %1$s", + "%s could not be renamed as it has been deleted" : "%s adını dəyişə bilmərik ona görə ki, o silinib artıq", + "%s could not be renamed" : "%s adını dəyişə bilməz", + "Upload (max. %s)" : "Yüklə (max. %s)", + "File handling" : "Fayl emalı", + "Maximum upload size" : "Maksimal yükləmə həcmi", + "max. possible: " : "maks. ola bilər: ", "Save" : "Saxlamaq", "Settings" : "Quraşdırmalar", + "WebDAV" : "WebDAV", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Bu ünvanı <a href=\"%s\" target=\"_blank\">WebDAV vasitəsilə fayllarınızı əldə etmək üçün</a> istifadə edə bilərsiniz. ", + "New" : "Yeni", + "New text file" : "Yeni tekst faylı", + "Text file" : "Tekst faylı", "New folder" : "Yeni qovluq", "Folder" : "Qovluq", "Upload" : "Serverə yüklə", - "Cancel upload" : "Yüklənməni dayandır" + "Cancel upload" : "Yüklənməni dayandır", + "No files yet" : "Belə fayllar yoxdur", + "Upload some content or sync with your devices!" : "Bezi kontenti yüklə yada, öz avadanlıqlarınızla sinxronizasiya edin!", + "No entries found in this folder" : "Bu qovluqda heç bir verilən tapılmadı", + "Select all" : "Hamısıı seç", + "Upload too large" : "Yüklənmə şox böyükdür", + "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Yükləmək istədiyiniz faylların həcmi, bu serverdə izin verilmiş maksimal yüklənmə həcmindən böyükdür.", + "Files are being scanned, please wait." : "Faylların skanı başlanıb, xahiş olunur gözləyəsiniz.", + "Currently scanning" : "Hal-hazırda skan edilir", + "No favorites" : "Seçilmiş yoxdur", + "Files and folders you mark as favorite will show up here" : "İstəkli qeyd etdiyiniz fayllar və qovluqlar burda göstəriləcək" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/bg_BG.js b/apps/files/l10n/bg_BG.js index 1d9417b154e..34aacdbff8d 100644 --- a/apps/files/l10n/bg_BG.js +++ b/apps/files/l10n/bg_BG.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Неуспешно преместване на %s - Файл със същото име вече съществува.", "Could not move %s" : "Неуспешно преместване на %s.", "Permission denied" : "Достъпът отказан", - "File name cannot be empty." : "Името на файла не може да бъде оставено празно.", - "\"%s\" is an invalid file name." : "\"%s\" е непозволено име за файл.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Невалидно име, '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' не са разрешени.", "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. Моля, избери друго име.", - "Not a valid source" : "Невалиден източник.", - "Server is not allowed to open URLs, please check the server configuration" : "На сървърът не му е разрешно да отваря интернет адреси, моля провери настройките на сървъра.", - "The file exceeds your quota by %s" : "Файлът надвиши квотата ти с %s", - "Error while downloading %s to %s" : "Грешка при тегленето на %s от %s.", "Error when creating the file" : "Грешка при създаването на файлът.", - "Folder name cannot be empty." : "Името на папката не може да бъде оставено празно.", "Error when creating the folder" : "Грешка при създаването на папката.", "Unable to set upload directory." : "Неуспешно задаване на директория за качване.", "Invalid Token" : "Невалиеден токен.", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Качването е прекъснато.", "Could not get result from server." : "Не се получи резултат от сървърът.", "File upload is in progress. Leaving the page now will cancel the upload." : "Извършва се качване на файлове. Затварянето на тази страница ще прекъсне качването.", - "URL cannot be empty" : "Интернет адресът не може да бъде оставен празен.", "{new_name} already exists" : "{new_name} вече съществува.", "Could not create file" : "Несупешно създаване на файла.", "Could not create folder" : "Неуспешно създаване на папка.", - "Error fetching URL" : "Грешка при отварянето на интернет адреса.", "Rename" : "Преименуване", "Delete" : "Изтрий", "Disconnect storage" : "Извади дисковото устройство.", @@ -69,6 +59,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Нямаш разрешение да създаваш или качваш файлове тук.", "_Uploading %n file_::_Uploading %n files_" : ["Качване на %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" : "Програмата за криптиране е включена, но твоите ключове не са зададени, моля отпиши си и се впиши отново.", @@ -78,6 +69,19 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} и {files}", "Favorited" : "Отбелязано в любими", "Favorite" : "Любими", + "A new file or folder has been <strong>created</strong>" : "Нов файл или папка беше <strong>създаден/а</strong>", + "A file or folder has been <strong>changed</strong>" : "Файл или папка беше <strong>променен/а</strong>", + "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)", @@ -93,7 +97,6 @@ OC.L10N.register( "Text file" : "Текстов файл", "New folder" : "Нова папка", "Folder" : "Папка", - "From link" : "От връзка", "Upload" : "Качване", "Cancel upload" : "Отказване на качването", "No files yet" : "Все още няма файлове", diff --git a/apps/files/l10n/bg_BG.json b/apps/files/l10n/bg_BG.json index d8835e4e55f..4ecd1e016cb 100644 --- a/apps/files/l10n/bg_BG.json +++ b/apps/files/l10n/bg_BG.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Неуспешно преместване на %s - Файл със същото име вече съществува.", "Could not move %s" : "Неуспешно преместване на %s.", "Permission denied" : "Достъпът отказан", - "File name cannot be empty." : "Името на файла не може да бъде оставено празно.", - "\"%s\" is an invalid file name." : "\"%s\" е непозволено име за файл.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Невалидно име, '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' не са разрешени.", "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. Моля, избери друго име.", - "Not a valid source" : "Невалиден източник.", - "Server is not allowed to open URLs, please check the server configuration" : "На сървърът не му е разрешно да отваря интернет адреси, моля провери настройките на сървъра.", - "The file exceeds your quota by %s" : "Файлът надвиши квотата ти с %s", - "Error while downloading %s to %s" : "Грешка при тегленето на %s от %s.", "Error when creating the file" : "Грешка при създаването на файлът.", - "Folder name cannot be empty." : "Името на папката не може да бъде оставено празно.", "Error when creating the folder" : "Грешка при създаването на папката.", "Unable to set upload directory." : "Неуспешно задаване на директория за качване.", "Invalid Token" : "Невалиеден токен.", @@ -41,11 +33,9 @@ "Upload cancelled." : "Качването е прекъснато.", "Could not get result from server." : "Не се получи резултат от сървърът.", "File upload is in progress. Leaving the page now will cancel the upload." : "Извършва се качване на файлове. Затварянето на тази страница ще прекъсне качването.", - "URL cannot be empty" : "Интернет адресът не може да бъде оставен празен.", "{new_name} already exists" : "{new_name} вече съществува.", "Could not create file" : "Несупешно създаване на файла.", "Could not create folder" : "Неуспешно създаване на папка.", - "Error fetching URL" : "Грешка при отварянето на интернет адреса.", "Rename" : "Преименуване", "Delete" : "Изтрий", "Disconnect storage" : "Извади дисковото устройство.", @@ -67,6 +57,7 @@ "You don’t have permission to upload or create files here" : "Нямаш разрешение да създаваш или качваш файлове тук.", "_Uploading %n file_::_Uploading %n files_" : ["Качване на %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" : "Програмата за криптиране е включена, но твоите ключове не са зададени, моля отпиши си и се впиши отново.", @@ -76,6 +67,19 @@ "{dirs} and {files}" : "{dirs} и {files}", "Favorited" : "Отбелязано в любими", "Favorite" : "Любими", + "A new file or folder has been <strong>created</strong>" : "Нов файл или папка беше <strong>създаден/а</strong>", + "A file or folder has been <strong>changed</strong>" : "Файл или папка беше <strong>променен/а</strong>", + "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)", @@ -91,7 +95,6 @@ "Text file" : "Текстов файл", "New folder" : "Нова папка", "Folder" : "Папка", - "From link" : "От връзка", "Upload" : "Качване", "Cancel upload" : "Отказване на качването", "No files yet" : "Все още няма файлове", diff --git a/apps/files/l10n/bn_BD.js b/apps/files/l10n/bn_BD.js index a0e7ac04be8..985900abb5c 100644 --- a/apps/files/l10n/bn_BD.js +++ b/apps/files/l10n/bn_BD.js @@ -7,14 +7,7 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "%s কে স্থানান্তর করা সম্ভব হলো না - এই নামের ফাইল বিদ্যমান", "Could not move %s" : "%s কে স্থানান্তর করা সম্ভব হলো না", "Permission denied" : "অনুমতি দেয়া হয়নি", - "File name cannot be empty." : "ফাইলের নামটি ফাঁকা রাখা যাবে না।", - "\"%s\" is an invalid file name." : "\"%s\" টি একটি অননুমোদিত ফাইল নাম।", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "নামটি সঠিক নয়, '\\', '/', '<', '>', ':', '\"', '|', '?' এবং '*' অনুমোদিত নয়।", - "Not a valid source" : "বৈধ উৎস নয়", - "The file exceeds your quota by %s" : "এই ফাইলটি %s আপনার নির্দিষ্ট কোটা ছাড়িয়ে যাচ্ছে", - "Error while downloading %s to %s" : "%s হতে %s ডাউনলোড করতে সমস্যা হচ্ছে", "Error when creating the file" : "ফাইলটি তৈরী করতে যেয়ে সমস্যা হলো", - "Folder name cannot be empty." : "ফোল্ডার নামটি ফাঁকা রাখা যাবে না।", "Error when creating the folder" : "ফোল্ডার তৈরী করতে যেয়ে সমস্যা হলো", "Unable to set upload directory." : "েআপলোড ডিরেক্টরি নির্ধারণ করা গেলনা।", "No file was uploaded. Unknown error" : "কোন ফাইল আপলোড করা হয় নি। সমস্যার কারণটি অজ্ঞাত।", @@ -50,9 +43,20 @@ OC.L10N.register( "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["%n ফাইল আপলোড হচ্ছে","%n ফাইল আপলোড হচ্ছে"], "\"{name}\" is an invalid file name." : "\"{name}\" টি একটি অননুমোদিত ফাইল নাম।", + "File name cannot be empty." : "ফাইলের নামটি ফাঁকা রাখা যাবে না।", "Your storage is almost full ({usedSpacePercent}%)" : "আপনার সংরক্ষণাধার প্রায় পরিপূর্ণ ({usedSpacePercent}%) ", "_matches '{filter}'_::_match '{filter}'_" : ["",""], "Favorite" : "প্রিয়জন", + "A new file or folder has been <strong>created</strong>" : "একটি ফাইল বা ফোলডার <strong>তৈরি</strong> করা হয়েছে", + "A file or folder has been <strong>changed</strong>" : "একটি ফাইল বা ফোলডার <strong>পরিবরতন</strong> করা হয়েছে", + "A file or folder has been <strong>deleted</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", "File handling" : "ফাইল হ্যার্ডলিং", "Maximum upload size" : "আপলোডের সর্বোচ্চ আকার", "max. possible: " : "অনুমোদিত সর্বোচ্চ আকার", @@ -63,7 +67,6 @@ OC.L10N.register( "Text file" : "টেক্সট ফাইল", "New folder" : "নব ফােলডার", "Folder" : "ফোল্ডার", - "From link" : " লিংক থেকে", "Upload" : "আপলোড", "Cancel upload" : "আপলোড বাতিল কর", "Upload too large" : "আপলোডের আকারটি অনেক বড়", diff --git a/apps/files/l10n/bn_BD.json b/apps/files/l10n/bn_BD.json index 8fd65000763..1509e38e469 100644 --- a/apps/files/l10n/bn_BD.json +++ b/apps/files/l10n/bn_BD.json @@ -5,14 +5,7 @@ "Could not move %s - File with this name already exists" : "%s কে স্থানান্তর করা সম্ভব হলো না - এই নামের ফাইল বিদ্যমান", "Could not move %s" : "%s কে স্থানান্তর করা সম্ভব হলো না", "Permission denied" : "অনুমতি দেয়া হয়নি", - "File name cannot be empty." : "ফাইলের নামটি ফাঁকা রাখা যাবে না।", - "\"%s\" is an invalid file name." : "\"%s\" টি একটি অননুমোদিত ফাইল নাম।", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "নামটি সঠিক নয়, '\\', '/', '<', '>', ':', '\"', '|', '?' এবং '*' অনুমোদিত নয়।", - "Not a valid source" : "বৈধ উৎস নয়", - "The file exceeds your quota by %s" : "এই ফাইলটি %s আপনার নির্দিষ্ট কোটা ছাড়িয়ে যাচ্ছে", - "Error while downloading %s to %s" : "%s হতে %s ডাউনলোড করতে সমস্যা হচ্ছে", "Error when creating the file" : "ফাইলটি তৈরী করতে যেয়ে সমস্যা হলো", - "Folder name cannot be empty." : "ফোল্ডার নামটি ফাঁকা রাখা যাবে না।", "Error when creating the folder" : "ফোল্ডার তৈরী করতে যেয়ে সমস্যা হলো", "Unable to set upload directory." : "েআপলোড ডিরেক্টরি নির্ধারণ করা গেলনা।", "No file was uploaded. Unknown error" : "কোন ফাইল আপলোড করা হয় নি। সমস্যার কারণটি অজ্ঞাত।", @@ -48,9 +41,20 @@ "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["%n ফাইল আপলোড হচ্ছে","%n ফাইল আপলোড হচ্ছে"], "\"{name}\" is an invalid file name." : "\"{name}\" টি একটি অননুমোদিত ফাইল নাম।", + "File name cannot be empty." : "ফাইলের নামটি ফাঁকা রাখা যাবে না।", "Your storage is almost full ({usedSpacePercent}%)" : "আপনার সংরক্ষণাধার প্রায় পরিপূর্ণ ({usedSpacePercent}%) ", "_matches '{filter}'_::_match '{filter}'_" : ["",""], "Favorite" : "প্রিয়জন", + "A new file or folder has been <strong>created</strong>" : "একটি ফাইল বা ফোলডার <strong>তৈরি</strong> করা হয়েছে", + "A file or folder has been <strong>changed</strong>" : "একটি ফাইল বা ফোলডার <strong>পরিবরতন</strong> করা হয়েছে", + "A file or folder has been <strong>deleted</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", "File handling" : "ফাইল হ্যার্ডলিং", "Maximum upload size" : "আপলোডের সর্বোচ্চ আকার", "max. possible: " : "অনুমোদিত সর্বোচ্চ আকার", @@ -61,7 +65,6 @@ "Text file" : "টেক্সট ফাইল", "New folder" : "নব ফােলডার", "Folder" : "ফোল্ডার", - "From link" : " লিংক থেকে", "Upload" : "আপলোড", "Cancel upload" : "আপলোড বাতিল কর", "Upload too large" : "আপলোডের আকারটি অনেক বড়", diff --git a/apps/files/l10n/bn_IN.js b/apps/files/l10n/bn_IN.js index 409d8c74e85..4d965027f0d 100644 --- a/apps/files/l10n/bn_IN.js +++ b/apps/files/l10n/bn_IN.js @@ -25,6 +25,15 @@ OC.L10N.register( "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "A new file or folder has been <strong>created</strong>" : "একটি নতুন ফাইল বা ফোল্ডার হয়েছে <strong>তৈরি</strong>", + "A file or folder has been <strong>changed</strong>" : "একটি নতুন ফাইল বা ফোল্ডার <strong>বদলানো হয়েছে</strong>", + "A file or folder has been <strong>deleted</strong>" : "একটি নতুন ফাইল বা ফোল্ডার <strong>মুছে ফেলা হয়েছে</strong>", + "You created %1$s" : "আপনি %1$s তৈরি করেছেন ", + "%2$s created %1$s" : "%2$s তৈরি করেছে %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 কে", "Save" : "সেভ", "Settings" : "সেটিংস", "New folder" : "নতুন ফোল্ডার", diff --git a/apps/files/l10n/bn_IN.json b/apps/files/l10n/bn_IN.json index 852acdf8327..185d28e78e1 100644 --- a/apps/files/l10n/bn_IN.json +++ b/apps/files/l10n/bn_IN.json @@ -23,6 +23,15 @@ "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "A new file or folder has been <strong>created</strong>" : "একটি নতুন ফাইল বা ফোল্ডার হয়েছে <strong>তৈরি</strong>", + "A file or folder has been <strong>changed</strong>" : "একটি নতুন ফাইল বা ফোল্ডার <strong>বদলানো হয়েছে</strong>", + "A file or folder has been <strong>deleted</strong>" : "একটি নতুন ফাইল বা ফোল্ডার <strong>মুছে ফেলা হয়েছে</strong>", + "You created %1$s" : "আপনি %1$s তৈরি করেছেন ", + "%2$s created %1$s" : "%2$s তৈরি করেছে %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 কে", "Save" : "সেভ", "Settings" : "সেটিংস", "New folder" : "নতুন ফোল্ডার", diff --git a/apps/files/l10n/bs.js b/apps/files/l10n/bs.js index 7562715cff9..6aa3cb47bcb 100644 --- a/apps/files/l10n/bs.js +++ b/apps/files/l10n/bs.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Nemoguće premjestiti %s - Datoteka takvog naziva već postoji", "Could not move %s" : "Nemoguće premjestiti %s", "Permission denied" : "Nemate ovlaštenje", - "File name cannot be empty." : "Naziv datoteke ne može biti prazan", - "\"%s\" is an invalid file name." : "\"%s\" nije validan naziv datoteke.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Neispravan naziv, '\\', '/', '<', '>', ':', '\"', '|', '?' i '*' nisu dozvoljeni.", "The target folder has been moved or deleted." : "Ciljni direktorij je premješten ili izbrisan.", "The name %s is already used in the folder %s. Please choose a different name." : "Naziv %s je već iskorišten u direktoriju %s. Molim odaberite drugi naziv.", - "Not a valid source" : "Izvor nije valjan", - "Server is not allowed to open URLs, please check the server configuration" : "Server nema dozvolu za otvaranje URL-ova, molim provjerite konfiguraciju servera", - "The file exceeds your quota by %s" : "Datoteka prelazi vašu kvotu za %s", - "Error while downloading %s to %s" : "Greška pri prenošenju %s u %s", "Error when creating the file" : "Greška pri kreiranju datoteke", - "Folder name cannot be empty." : "Naziv direktorija ne može biti prazan.", "Error when creating the folder" : "Greška pri kreiranju direktorija", "Unable to set upload directory." : "Odredba direktorija učitavanja nije moguća.", "Invalid Token" : "Neispravan Znak", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Učitavanje je prekinuto.", "Could not get result from server." : "Nemoguće dobiti rezultat od servera.", "File upload is in progress. Leaving the page now will cancel the upload." : "Učitavanje datoteke je u toku. Napuštanje stranice prekinut će učitavanje.", - "URL cannot be empty" : "URL ne može biti prazan", "{new_name} already exists" : "{new_name} već postoji", "Could not create file" : "Datoteku nije moguće kreirati", "Could not create folder" : "Direktorij nije moguće kreirati", - "Error fetching URL" : "Pogrešan dohvat URL", "Rename" : "Preimenuj", "Delete" : "Izbriši", "Disconnect storage" : "Diskonektuj pohranu", @@ -69,6 +59,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Ovdje niste ovlašteni učitavati ili kreirati datoteke", "_Uploading %n file_::_Uploading %n files_" : ["Prenosim %n datoteku","Prenosim %n datoteke","Prenosim %n datoteke"], "\"{name}\" is an invalid file name." : "\"{name}\" je neispravno ime datoteke.", + "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", @@ -93,7 +84,6 @@ OC.L10N.register( "Text file" : "Tekstualna datoteka", "New folder" : "Novi direktorij", "Folder" : "Direktorij", - "From link" : "Od veze", "Upload" : "Učitaj", "Cancel upload" : "Prekini učitavanje", "No files yet" : "Još nema datoteki", diff --git a/apps/files/l10n/bs.json b/apps/files/l10n/bs.json index fb95979ef44..0039c2676e9 100644 --- a/apps/files/l10n/bs.json +++ b/apps/files/l10n/bs.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Nemoguće premjestiti %s - Datoteka takvog naziva već postoji", "Could not move %s" : "Nemoguće premjestiti %s", "Permission denied" : "Nemate ovlaštenje", - "File name cannot be empty." : "Naziv datoteke ne može biti prazan", - "\"%s\" is an invalid file name." : "\"%s\" nije validan naziv datoteke.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Neispravan naziv, '\\', '/', '<', '>', ':', '\"', '|', '?' i '*' nisu dozvoljeni.", "The target folder has been moved or deleted." : "Ciljni direktorij je premješten ili izbrisan.", "The name %s is already used in the folder %s. Please choose a different name." : "Naziv %s je već iskorišten u direktoriju %s. Molim odaberite drugi naziv.", - "Not a valid source" : "Izvor nije valjan", - "Server is not allowed to open URLs, please check the server configuration" : "Server nema dozvolu za otvaranje URL-ova, molim provjerite konfiguraciju servera", - "The file exceeds your quota by %s" : "Datoteka prelazi vašu kvotu za %s", - "Error while downloading %s to %s" : "Greška pri prenošenju %s u %s", "Error when creating the file" : "Greška pri kreiranju datoteke", - "Folder name cannot be empty." : "Naziv direktorija ne može biti prazan.", "Error when creating the folder" : "Greška pri kreiranju direktorija", "Unable to set upload directory." : "Odredba direktorija učitavanja nije moguća.", "Invalid Token" : "Neispravan Znak", @@ -41,11 +33,9 @@ "Upload cancelled." : "Učitavanje je prekinuto.", "Could not get result from server." : "Nemoguće dobiti rezultat od servera.", "File upload is in progress. Leaving the page now will cancel the upload." : "Učitavanje datoteke je u toku. Napuštanje stranice prekinut će učitavanje.", - "URL cannot be empty" : "URL ne može biti prazan", "{new_name} already exists" : "{new_name} već postoji", "Could not create file" : "Datoteku nije moguće kreirati", "Could not create folder" : "Direktorij nije moguće kreirati", - "Error fetching URL" : "Pogrešan dohvat URL", "Rename" : "Preimenuj", "Delete" : "Izbriši", "Disconnect storage" : "Diskonektuj pohranu", @@ -67,6 +57,7 @@ "You don’t have permission to upload or create files here" : "Ovdje niste ovlašteni učitavati ili kreirati datoteke", "_Uploading %n file_::_Uploading %n files_" : ["Prenosim %n datoteku","Prenosim %n datoteke","Prenosim %n datoteke"], "\"{name}\" is an invalid file name." : "\"{name}\" je neispravno ime datoteke.", + "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", @@ -91,7 +82,6 @@ "Text file" : "Tekstualna datoteka", "New folder" : "Novi direktorij", "Folder" : "Direktorij", - "From link" : "Od veze", "Upload" : "Učitaj", "Cancel upload" : "Prekini učitavanje", "No files yet" : "Još nema datoteki", diff --git a/apps/files/l10n/ca.js b/apps/files/l10n/ca.js index 22ff456c220..698550e9d7d 100644 --- a/apps/files/l10n/ca.js +++ b/apps/files/l10n/ca.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "No s'ha pogut moure %s - Ja hi ha un fitxer amb aquest nom", "Could not move %s" : " No s'ha pogut moure %s", "Permission denied" : "Permís denegat", - "File name cannot be empty." : "El nom del fitxer no pot ser buit.", - "\"%s\" is an invalid file name." : "\"%s\" no es un fitxer vàlid.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "El nóm no és vàlid, '\\', '/', '<', '>', ':', '\"', '|', '?' i '*' no estan permesos.", "The target folder has been moved or deleted." : "La carpeta de destí s'ha mogut o eliminat.", "The name %s is already used in the folder %s. Please choose a different name." : "El nom %s ja s'usa en la carpeta %s. Indiqueu un nom diferent.", - "Not a valid source" : "No és un origen vàlid", - "Server is not allowed to open URLs, please check the server configuration" : "El servidor no té autorització per obrir URLs, comproveu la configuració del servidor", - "The file exceeds your quota by %s" : "El fitxer excedeix de la teva quota per %s", - "Error while downloading %s to %s" : "S'ha produït un error en baixar %s a %s", "Error when creating the file" : "S'ha produït un error en crear el fitxer", - "Folder name cannot be empty." : "El nom de la carpeta no pot ser buit.", "Error when creating the folder" : "S'ha produït un error en crear la carpeta", "Unable to set upload directory." : "No es pot establir la carpeta de pujada.", "Invalid Token" : "Testimoni no vàlid", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "La pujada s'ha cancel·lat.", "Could not get result from server." : "No hi ha resposta del servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà.", - "URL cannot be empty" : "L'URL no pot ser buit", "{new_name} already exists" : "{new_name} ja existeix", "Could not create file" : "No s'ha pogut crear el fitxer", "Could not create folder" : "No s'ha pogut crear la carpeta", - "Error fetching URL" : "Error en obtenir la URL", "Rename" : "Reanomena", "Delete" : "Esborra", "Disconnect storage" : "Desonnecta l'emmagatzematge", @@ -68,6 +58,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "No teniu permisos per a pujar o crear els fitxers aquí", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "El vostre espai d'emmagatzemament és ple, els fitxers ja no es poden actualitzar o sincronitzar!", "Your storage is almost full ({usedSpacePercent}%)" : "El vostre espai d'emmagatzemament és gairebé ple ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació d'encriptació està activada però les claus no estan inicialitzades, sortiu i acrediteu-vos de nou.", @@ -76,6 +67,19 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["",""], "{dirs} and {files}" : "{dirs} i {files}", "Favorite" : "Preferits", + "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", + "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", + "%2$s created %1$s" : "%2$s ha creat %1$s", + "%1$s was created in a public folder" : "Es va crear %1$s en una carpeta pública", + "You changed %1$s" : "Has canviat %1$s", + "%2$s changed %1$s" : "%2$s ha canviat %1$s", + "You deleted %1$s" : "Has esborrat %1$s", + "%2$s deleted %1$s" : "%2$s ha esborrat %1$s", + "You restored %1$s" : "Has restaurat %1$s", + "%2$s restored %1$s" : "%2$s ha restaurat %1$s", "%s could not be renamed as it has been deleted" : "No s'ha pogut renombrar %s ja que ha estat borrat", "%s could not be renamed" : "%s no es pot canviar el nom", "Upload (max. %s)" : "Pujada (màx. %s)", @@ -91,7 +95,6 @@ OC.L10N.register( "Text file" : "Fitxer de text", "New folder" : "Carpeta nova", "Folder" : "Carpeta", - "From link" : "Des d'enllaç", "Upload" : "Puja", "Cancel upload" : "Cancel·la la pujada", "Upload too large" : "La pujada és massa gran", diff --git a/apps/files/l10n/ca.json b/apps/files/l10n/ca.json index d8982bc6163..f8cfb18a3d4 100644 --- a/apps/files/l10n/ca.json +++ b/apps/files/l10n/ca.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "No s'ha pogut moure %s - Ja hi ha un fitxer amb aquest nom", "Could not move %s" : " No s'ha pogut moure %s", "Permission denied" : "Permís denegat", - "File name cannot be empty." : "El nom del fitxer no pot ser buit.", - "\"%s\" is an invalid file name." : "\"%s\" no es un fitxer vàlid.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "El nóm no és vàlid, '\\', '/', '<', '>', ':', '\"', '|', '?' i '*' no estan permesos.", "The target folder has been moved or deleted." : "La carpeta de destí s'ha mogut o eliminat.", "The name %s is already used in the folder %s. Please choose a different name." : "El nom %s ja s'usa en la carpeta %s. Indiqueu un nom diferent.", - "Not a valid source" : "No és un origen vàlid", - "Server is not allowed to open URLs, please check the server configuration" : "El servidor no té autorització per obrir URLs, comproveu la configuració del servidor", - "The file exceeds your quota by %s" : "El fitxer excedeix de la teva quota per %s", - "Error while downloading %s to %s" : "S'ha produït un error en baixar %s a %s", "Error when creating the file" : "S'ha produït un error en crear el fitxer", - "Folder name cannot be empty." : "El nom de la carpeta no pot ser buit.", "Error when creating the folder" : "S'ha produït un error en crear la carpeta", "Unable to set upload directory." : "No es pot establir la carpeta de pujada.", "Invalid Token" : "Testimoni no vàlid", @@ -41,11 +33,9 @@ "Upload cancelled." : "La pujada s'ha cancel·lat.", "Could not get result from server." : "No hi ha resposta del servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà.", - "URL cannot be empty" : "L'URL no pot ser buit", "{new_name} already exists" : "{new_name} ja existeix", "Could not create file" : "No s'ha pogut crear el fitxer", "Could not create folder" : "No s'ha pogut crear la carpeta", - "Error fetching URL" : "Error en obtenir la URL", "Rename" : "Reanomena", "Delete" : "Esborra", "Disconnect storage" : "Desonnecta l'emmagatzematge", @@ -66,6 +56,7 @@ "You don’t have permission to upload or create files here" : "No teniu permisos per a pujar o crear els fitxers aquí", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "El vostre espai d'emmagatzemament és ple, els fitxers ja no es poden actualitzar o sincronitzar!", "Your storage is almost full ({usedSpacePercent}%)" : "El vostre espai d'emmagatzemament és gairebé ple ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació d'encriptació està activada però les claus no estan inicialitzades, sortiu i acrediteu-vos de nou.", @@ -74,6 +65,19 @@ "_matches '{filter}'_::_match '{filter}'_" : ["",""], "{dirs} and {files}" : "{dirs} i {files}", "Favorite" : "Preferits", + "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", + "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", + "%2$s created %1$s" : "%2$s ha creat %1$s", + "%1$s was created in a public folder" : "Es va crear %1$s en una carpeta pública", + "You changed %1$s" : "Has canviat %1$s", + "%2$s changed %1$s" : "%2$s ha canviat %1$s", + "You deleted %1$s" : "Has esborrat %1$s", + "%2$s deleted %1$s" : "%2$s ha esborrat %1$s", + "You restored %1$s" : "Has restaurat %1$s", + "%2$s restored %1$s" : "%2$s ha restaurat %1$s", "%s could not be renamed as it has been deleted" : "No s'ha pogut renombrar %s ja que ha estat borrat", "%s could not be renamed" : "%s no es pot canviar el nom", "Upload (max. %s)" : "Pujada (màx. %s)", @@ -89,7 +93,6 @@ "Text file" : "Fitxer de text", "New folder" : "Carpeta nova", "Folder" : "Carpeta", - "From link" : "Des d'enllaç", "Upload" : "Puja", "Cancel upload" : "Cancel·la la pujada", "Upload too large" : "La pujada és massa gran", diff --git a/apps/files/l10n/cs_CZ.js b/apps/files/l10n/cs_CZ.js index b864b8316d2..50965e0c1b9 100644 --- a/apps/files/l10n/cs_CZ.js +++ b/apps/files/l10n/cs_CZ.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Nelze přesunout %s - již existuje soubor se stejným názvem", "Could not move %s" : "Nelze přesunout %s", "Permission denied" : "Přístup odepřen", - "File name cannot be empty." : "Název souboru nemůže být prázdný řetězec.", - "\"%s\" is an invalid file name." : "\"%s\" je neplatným názvem souboru.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Neplatný název, znaky '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nejsou povoleny.", "The target folder has been moved or deleted." : "Cílová složka byla přesunuta nebo smazána.", "The name %s is already used in the folder %s. Please choose a different name." : "Název %s ve složce %s již existuje. Vyberte prosím jiné jméno.", - "Not a valid source" : "Neplatný zdroj", - "Server is not allowed to open URLs, please check the server configuration" : "Server není oprávněn otevírat adresy URL. Ověřte, prosím, konfiguraci serveru.", - "The file exceeds your quota by %s" : "Soubor překračuje povolenou kvótu o %s", - "Error while downloading %s to %s" : "Chyba při stahování %s do %s", "Error when creating the file" : "Chyba při vytváření souboru", - "Folder name cannot be empty." : "Název složky nemůže být prázdný.", "Error when creating the folder" : "Chyba při vytváření složky", "Unable to set upload directory." : "Nelze nastavit adresář pro nahrané soubory.", "Invalid Token" : "Neplatný token", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Odesílání zrušeno.", "Could not get result from server." : "Nepodařilo se získat výsledek ze serveru.", "File upload is in progress. Leaving the page now will cancel the upload." : "Probíhá odesílání souboru. Opuštění stránky způsobí zrušení nahrávání.", - "URL cannot be empty" : "URL nemůže zůstat prázdná", "{new_name} already exists" : "{new_name} již existuje", "Could not create file" : "Nepodařilo se vytvořit soubor", "Could not create folder" : "Nepodařilo se vytvořit složku", - "Error fetching URL" : "Chyba při načítání URL", "Rename" : "Přejmenovat", "Delete" : "Smazat", "Disconnect storage" : "Odpojit úložiště", @@ -70,6 +60,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Nemáte oprávnění sem nahrávat nebo vytvářet soubory", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Vaše úložiště je plné, nelze aktualizovat ani synchronizovat soubory.", "Your storage is almost full ({usedSpacePercent}%)" : "Vaše úložiště je téměř plné ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste", @@ -79,6 +70,20 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} a {files}", "Favorited" : "Přidáno k oblíbeným", "Favorite" : "Oblíbené", + "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>", + "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", + "%2$s created %1$s" : "%2$s vytvořil(a) %1$s", + "%1$s was created in a public folder" : "%1$s byl vytvořen ve veřejném adresáři", + "You changed %1$s" : "Změnili jste %1$s", + "%2$s changed %1$s" : "%2$s změnil(a) %1$s", + "You deleted %1$s" : "Smazali jste %1$s", + "%2$s deleted %1$s" : "%2$s smazal(a) %1$s", + "You restored %1$s" : "Obnovili jste %1$s", + "%2$s restored %1$s" : "%2$s obnovil(a) %1$s", "%s could not be renamed as it has been deleted" : "%s nelze přejmenovat, protože byl smazán", "%s could not be renamed" : "%s nemůže být přejmenován", "Upload (max. %s)" : "Nahrát (max. %s)", @@ -86,6 +91,7 @@ OC.L10N.register( "Maximum upload size" : "Maximální velikost pro odesílání", "max. possible: " : "největší možná: ", "Save" : "Uložit", + "Can not be edited from here due to insufficient permissions." : "Nelze odsud upravovat z důvodu nedostatečných oprávnění.", "Settings" : "Nastavení", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Použijte tuto adresu pro <a href=\"%s\" target=\"_blank\">přístup k vašim souborům přes WebDAV</a>", @@ -94,12 +100,11 @@ OC.L10N.register( "Text file" : "Textový soubor", "New folder" : "Nová složka", "Folder" : "Složka", - "From link" : "Z odkazu", "Upload" : "Odeslat", "Cancel upload" : "Zrušit odesílání", "No files yet" : "Zatím žádné soubory", "Upload some content or sync with your devices!" : "Nahrajte nějaký obsah nebo synchronizujte se svými přístroji!", - "No entries found in this folder" : "V tomto adresáři nebylo nic nalezeno", + "No entries found in this folder" : "V této složce nebylo nic nalezeno", "Select all" : "Vybrat vše", "Upload too large" : "Odesílaný soubor je příliš velký", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Soubory, které se snažíte odeslat, překračují limit velikosti odesílání na tomto serveru.", diff --git a/apps/files/l10n/cs_CZ.json b/apps/files/l10n/cs_CZ.json index ecff8b31757..118002a6e8d 100644 --- a/apps/files/l10n/cs_CZ.json +++ b/apps/files/l10n/cs_CZ.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Nelze přesunout %s - již existuje soubor se stejným názvem", "Could not move %s" : "Nelze přesunout %s", "Permission denied" : "Přístup odepřen", - "File name cannot be empty." : "Název souboru nemůže být prázdný řetězec.", - "\"%s\" is an invalid file name." : "\"%s\" je neplatným názvem souboru.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Neplatný název, znaky '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nejsou povoleny.", "The target folder has been moved or deleted." : "Cílová složka byla přesunuta nebo smazána.", "The name %s is already used in the folder %s. Please choose a different name." : "Název %s ve složce %s již existuje. Vyberte prosím jiné jméno.", - "Not a valid source" : "Neplatný zdroj", - "Server is not allowed to open URLs, please check the server configuration" : "Server není oprávněn otevírat adresy URL. Ověřte, prosím, konfiguraci serveru.", - "The file exceeds your quota by %s" : "Soubor překračuje povolenou kvótu o %s", - "Error while downloading %s to %s" : "Chyba při stahování %s do %s", "Error when creating the file" : "Chyba při vytváření souboru", - "Folder name cannot be empty." : "Název složky nemůže být prázdný.", "Error when creating the folder" : "Chyba při vytváření složky", "Unable to set upload directory." : "Nelze nastavit adresář pro nahrané soubory.", "Invalid Token" : "Neplatný token", @@ -41,11 +33,9 @@ "Upload cancelled." : "Odesílání zrušeno.", "Could not get result from server." : "Nepodařilo se získat výsledek ze serveru.", "File upload is in progress. Leaving the page now will cancel the upload." : "Probíhá odesílání souboru. Opuštění stránky způsobí zrušení nahrávání.", - "URL cannot be empty" : "URL nemůže zůstat prázdná", "{new_name} already exists" : "{new_name} již existuje", "Could not create file" : "Nepodařilo se vytvořit soubor", "Could not create folder" : "Nepodařilo se vytvořit složku", - "Error fetching URL" : "Chyba při načítání URL", "Rename" : "Přejmenovat", "Delete" : "Smazat", "Disconnect storage" : "Odpojit úložiště", @@ -68,6 +58,7 @@ "You don’t have permission to upload or create files here" : "Nemáte oprávnění sem nahrávat nebo vytvářet soubory", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Vaše úložiště je plné, nelze aktualizovat ani synchronizovat soubory.", "Your storage is almost full ({usedSpacePercent}%)" : "Vaše úložiště je téměř plné ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste", @@ -77,6 +68,20 @@ "{dirs} and {files}" : "{dirs} a {files}", "Favorited" : "Přidáno k oblíbeným", "Favorite" : "Oblíbené", + "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>", + "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", + "%2$s created %1$s" : "%2$s vytvořil(a) %1$s", + "%1$s was created in a public folder" : "%1$s byl vytvořen ve veřejném adresáři", + "You changed %1$s" : "Změnili jste %1$s", + "%2$s changed %1$s" : "%2$s změnil(a) %1$s", + "You deleted %1$s" : "Smazali jste %1$s", + "%2$s deleted %1$s" : "%2$s smazal(a) %1$s", + "You restored %1$s" : "Obnovili jste %1$s", + "%2$s restored %1$s" : "%2$s obnovil(a) %1$s", "%s could not be renamed as it has been deleted" : "%s nelze přejmenovat, protože byl smazán", "%s could not be renamed" : "%s nemůže být přejmenován", "Upload (max. %s)" : "Nahrát (max. %s)", @@ -84,6 +89,7 @@ "Maximum upload size" : "Maximální velikost pro odesílání", "max. possible: " : "největší možná: ", "Save" : "Uložit", + "Can not be edited from here due to insufficient permissions." : "Nelze odsud upravovat z důvodu nedostatečných oprávnění.", "Settings" : "Nastavení", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Použijte tuto adresu pro <a href=\"%s\" target=\"_blank\">přístup k vašim souborům přes WebDAV</a>", @@ -92,12 +98,11 @@ "Text file" : "Textový soubor", "New folder" : "Nová složka", "Folder" : "Složka", - "From link" : "Z odkazu", "Upload" : "Odeslat", "Cancel upload" : "Zrušit odesílání", "No files yet" : "Zatím žádné soubory", "Upload some content or sync with your devices!" : "Nahrajte nějaký obsah nebo synchronizujte se svými přístroji!", - "No entries found in this folder" : "V tomto adresáři nebylo nic nalezeno", + "No entries found in this folder" : "V této složce nebylo nic nalezeno", "Select all" : "Vybrat vše", "Upload too large" : "Odesílaný soubor je příliš velký", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Soubory, které se snažíte odeslat, překračují limit velikosti odesílání na tomto serveru.", diff --git a/apps/files/l10n/cy_GB.js b/apps/files/l10n/cy_GB.js index 808c5a0c312..8b8ffdf265e 100644 --- a/apps/files/l10n/cy_GB.js +++ b/apps/files/l10n/cy_GB.js @@ -3,8 +3,6 @@ OC.L10N.register( { "Could not move %s - File with this name already exists" : "Methwyd symud %s - Mae ffeil gyda'r enw hwn eisoes yn bodoli", "Could not move %s" : "Methwyd symud %s", - "File name cannot be empty." : "Does dim hawl cael enw ffeil gwag.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Enw annilys, ni chaniateir, '\\', '/', '<', '>', ':', '\"', '|', '?' na '*'.", "No file was uploaded. Unknown error" : "Ni lwythwyd ffeil i fyny. Gwall anhysbys.", "There is no error, the file uploaded with success" : "Does dim gwall, llwythodd y ffeil i fyny'n llwyddiannus", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Mae'r ffeil lwythwyd i fyny'n fwy na chyfarwyddeb upload_max_filesize yn php.ini:", @@ -32,6 +30,7 @@ OC.L10N.register( "_%n folder_::_%n folders_" : ["","","",""], "_%n file_::_%n files_" : ["","","",""], "_Uploading %n file_::_Uploading %n files_" : ["","","",""], + "File name cannot be empty." : "Does dim hawl cael enw ffeil gwag.", "Your storage is full, files can not be updated or synced anymore!" : "Mae eich storfa'n llawn, ni ellir diweddaru a chydweddu ffeiliau mwyach!", "Your storage is almost full ({usedSpacePercent}%)" : "Mae eich storfa bron a bod yn llawn ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["","","",""], @@ -43,7 +42,6 @@ OC.L10N.register( "New" : "Newydd", "Text file" : "Ffeil destun", "Folder" : "Plygell", - "From link" : "Dolen o", "Upload" : "Llwytho i fyny", "Cancel upload" : "Diddymu llwytho i fyny", "Upload too large" : "Maint llwytho i fyny'n rhy fawr", diff --git a/apps/files/l10n/cy_GB.json b/apps/files/l10n/cy_GB.json index 3d451a62a8a..c0cf214eedb 100644 --- a/apps/files/l10n/cy_GB.json +++ b/apps/files/l10n/cy_GB.json @@ -1,8 +1,6 @@ { "translations": { "Could not move %s - File with this name already exists" : "Methwyd symud %s - Mae ffeil gyda'r enw hwn eisoes yn bodoli", "Could not move %s" : "Methwyd symud %s", - "File name cannot be empty." : "Does dim hawl cael enw ffeil gwag.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Enw annilys, ni chaniateir, '\\', '/', '<', '>', ':', '\"', '|', '?' na '*'.", "No file was uploaded. Unknown error" : "Ni lwythwyd ffeil i fyny. Gwall anhysbys.", "There is no error, the file uploaded with success" : "Does dim gwall, llwythodd y ffeil i fyny'n llwyddiannus", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Mae'r ffeil lwythwyd i fyny'n fwy na chyfarwyddeb upload_max_filesize yn php.ini:", @@ -30,6 +28,7 @@ "_%n folder_::_%n folders_" : ["","","",""], "_%n file_::_%n files_" : ["","","",""], "_Uploading %n file_::_Uploading %n files_" : ["","","",""], + "File name cannot be empty." : "Does dim hawl cael enw ffeil gwag.", "Your storage is full, files can not be updated or synced anymore!" : "Mae eich storfa'n llawn, ni ellir diweddaru a chydweddu ffeiliau mwyach!", "Your storage is almost full ({usedSpacePercent}%)" : "Mae eich storfa bron a bod yn llawn ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["","","",""], @@ -41,7 +40,6 @@ "New" : "Newydd", "Text file" : "Ffeil destun", "Folder" : "Plygell", - "From link" : "Dolen o", "Upload" : "Llwytho i fyny", "Cancel upload" : "Diddymu llwytho i fyny", "Upload too large" : "Maint llwytho i fyny'n rhy fawr", diff --git a/apps/files/l10n/da.js b/apps/files/l10n/da.js index 80ca71ef04d..026c284a396 100644 --- a/apps/files/l10n/da.js +++ b/apps/files/l10n/da.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Kunne ikke flytte %s - der findes allerede en fil med dette navn", "Could not move %s" : "Kunne ikke flytte %s", "Permission denied" : "Adgang nægtet", - "File name cannot be empty." : "Filnavnet kan ikke stå tomt.", - "\"%s\" is an invalid file name." : "\"%s\" er et ugyldigt filnavn.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ugyldigt navn, '\\', '/', '<', '>', ':' | '?', '\"', '', og '*' er ikke tilladt.", "The target folder has been moved or deleted." : "Mappen er blevet slettet eller fjernet.", "The name %s is already used in the folder %s. Please choose a different name." : "Navnet %s er allerede i brug i mappen %s. Vælg venligst et andet navn.", - "Not a valid source" : "Ikke en gyldig kilde", - "Server is not allowed to open URLs, please check the server configuration" : "Server har ikke tilladelse til at åbne URL'er. Kontroller venligst serverens indstillinger", - "The file exceeds your quota by %s" : "Denne fil overskrider dit kvota med %s", - "Error while downloading %s to %s" : "Fejl ved hentning af %s til %s", "Error when creating the file" : "Fejl ved oprettelse af fil", - "Folder name cannot be empty." : "Mappenavnet kan ikke være tomt.", "Error when creating the folder" : "Fejl ved oprettelse af mappen", "Unable to set upload directory." : "Ude af stand til at vælge upload mappe.", "Invalid Token" : "Ugyldig Token ", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Upload afbrudt.", "Could not get result from server." : "Kunne ikke hente resultat fra server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret.", - "URL cannot be empty" : "URL kan ikke være tom", "{new_name} already exists" : "{new_name} eksisterer allerede", "Could not create file" : "Kunne ikke oprette fil", "Could not create folder" : "Kunne ikke oprette mappe", - "Error fetching URL" : "Fejl ved URL", "Rename" : "Omdøb", "Delete" : "Slet", "Disconnect storage" : "Frakobl lager", @@ -70,6 +60,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Du har ikke tilladelse til at uploade eller oprette filer her", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Din opbevaringsplads er fyldt op, filer kan ikke opdateres eller synkroniseres længere!", "Your storage is almost full ({usedSpacePercent}%)" : "Din opbevaringsplads er næsten fyldt op ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret, men din nøgle er ikke igangsat. Log venligst ud og ind igen.", @@ -79,6 +70,20 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} og {files}", "Favorited" : "Gjort til foretrukken", "Favorite" : "Foretrukken", + "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>", + "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 ", + "%2$s created %1$s" : "%2$s oprettede %1$s", + "%1$s was created in a public folder" : "%1$s blev oprettet i en offentlig mappe", + "You changed %1$s" : "Du ændrede %1$s", + "%2$s changed %1$s" : "%2$s ændrede %1$s", + "You deleted %1$s" : "Du slettede %1$s", + "%2$s deleted %1$s" : "%2$s slettede %1$s", + "You restored %1$s" : "Du gendannede %1$s", + "%2$s restored %1$s" : "%2$s gendannede %1$s", "%s could not be renamed as it has been deleted" : "%s kunne ikke omdøbes, da den er blevet slettet", "%s could not be renamed" : "%s kunne ikke omdøbes", "Upload (max. %s)" : "Upload (max. %s)", @@ -86,6 +91,7 @@ OC.L10N.register( "Maximum upload size" : "Maksimal upload-størrelse", "max. possible: " : "max. mulige: ", "Save" : "Gem", + "Can not be edited from here due to insufficient permissions." : "Kan ikke redigeres herfra på grund af utilstrækkelige rettigheder.", "Settings" : "Indstillinger", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Brug denne adresse for at <a href=\"%s\" target=\"_blank\">tilgå dine filer via WebDAV</a>", @@ -94,7 +100,6 @@ OC.L10N.register( "Text file" : "Tekstfil", "New folder" : "Ny Mappe", "Folder" : "Mappe", - "From link" : "Fra link", "Upload" : "Upload", "Cancel upload" : "Fortryd upload", "No files yet" : "Endnu ingen filer", diff --git a/apps/files/l10n/da.json b/apps/files/l10n/da.json index 27a70fa59c3..f56ab672562 100644 --- a/apps/files/l10n/da.json +++ b/apps/files/l10n/da.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Kunne ikke flytte %s - der findes allerede en fil med dette navn", "Could not move %s" : "Kunne ikke flytte %s", "Permission denied" : "Adgang nægtet", - "File name cannot be empty." : "Filnavnet kan ikke stå tomt.", - "\"%s\" is an invalid file name." : "\"%s\" er et ugyldigt filnavn.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ugyldigt navn, '\\', '/', '<', '>', ':' | '?', '\"', '', og '*' er ikke tilladt.", "The target folder has been moved or deleted." : "Mappen er blevet slettet eller fjernet.", "The name %s is already used in the folder %s. Please choose a different name." : "Navnet %s er allerede i brug i mappen %s. Vælg venligst et andet navn.", - "Not a valid source" : "Ikke en gyldig kilde", - "Server is not allowed to open URLs, please check the server configuration" : "Server har ikke tilladelse til at åbne URL'er. Kontroller venligst serverens indstillinger", - "The file exceeds your quota by %s" : "Denne fil overskrider dit kvota med %s", - "Error while downloading %s to %s" : "Fejl ved hentning af %s til %s", "Error when creating the file" : "Fejl ved oprettelse af fil", - "Folder name cannot be empty." : "Mappenavnet kan ikke være tomt.", "Error when creating the folder" : "Fejl ved oprettelse af mappen", "Unable to set upload directory." : "Ude af stand til at vælge upload mappe.", "Invalid Token" : "Ugyldig Token ", @@ -41,11 +33,9 @@ "Upload cancelled." : "Upload afbrudt.", "Could not get result from server." : "Kunne ikke hente resultat fra server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret.", - "URL cannot be empty" : "URL kan ikke være tom", "{new_name} already exists" : "{new_name} eksisterer allerede", "Could not create file" : "Kunne ikke oprette fil", "Could not create folder" : "Kunne ikke oprette mappe", - "Error fetching URL" : "Fejl ved URL", "Rename" : "Omdøb", "Delete" : "Slet", "Disconnect storage" : "Frakobl lager", @@ -68,6 +58,7 @@ "You don’t have permission to upload or create files here" : "Du har ikke tilladelse til at uploade eller oprette filer her", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Din opbevaringsplads er fyldt op, filer kan ikke opdateres eller synkroniseres længere!", "Your storage is almost full ({usedSpacePercent}%)" : "Din opbevaringsplads er næsten fyldt op ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret, men din nøgle er ikke igangsat. Log venligst ud og ind igen.", @@ -77,6 +68,20 @@ "{dirs} and {files}" : "{dirs} og {files}", "Favorited" : "Gjort til foretrukken", "Favorite" : "Foretrukken", + "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>", + "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 ", + "%2$s created %1$s" : "%2$s oprettede %1$s", + "%1$s was created in a public folder" : "%1$s blev oprettet i en offentlig mappe", + "You changed %1$s" : "Du ændrede %1$s", + "%2$s changed %1$s" : "%2$s ændrede %1$s", + "You deleted %1$s" : "Du slettede %1$s", + "%2$s deleted %1$s" : "%2$s slettede %1$s", + "You restored %1$s" : "Du gendannede %1$s", + "%2$s restored %1$s" : "%2$s gendannede %1$s", "%s could not be renamed as it has been deleted" : "%s kunne ikke omdøbes, da den er blevet slettet", "%s could not be renamed" : "%s kunne ikke omdøbes", "Upload (max. %s)" : "Upload (max. %s)", @@ -84,6 +89,7 @@ "Maximum upload size" : "Maksimal upload-størrelse", "max. possible: " : "max. mulige: ", "Save" : "Gem", + "Can not be edited from here due to insufficient permissions." : "Kan ikke redigeres herfra på grund af utilstrækkelige rettigheder.", "Settings" : "Indstillinger", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Brug denne adresse for at <a href=\"%s\" target=\"_blank\">tilgå dine filer via WebDAV</a>", @@ -92,7 +98,6 @@ "Text file" : "Tekstfil", "New folder" : "Ny Mappe", "Folder" : "Mappe", - "From link" : "Fra link", "Upload" : "Upload", "Cancel upload" : "Fortryd upload", "No files yet" : "Endnu ingen filer", diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js index 7fa9cd9af28..5e741f26d21 100644 --- a/apps/files/l10n/de.js +++ b/apps/files/l10n/de.js @@ -7,20 +7,12 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Konnte %s nicht verschieben. Eine Datei mit diesem Namen existiert bereits", "Could not move %s" : "Konnte %s nicht verschieben", "Permission denied" : "Zugriff verweigert", - "File name cannot be empty." : "Der Dateiname darf nicht leer sein.", - "\"%s\" is an invalid file name." : "»%s« ist kein gültiger Dateiname.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ungültiger Name, '\\', '/', '<', '>', ':', '\"', '|', '?' und '*' sind nicht zulässig.", "The target folder has been moved or deleted." : "Der Zielordner wurde verschoben oder gelöscht.", "The name %s is already used in the folder %s. Please choose a different name." : "Der Name %s wird bereits im Ordner %s benutzt. Bitte wähle einen anderen Namen.", - "Not a valid source" : "Keine gültige Quelle", - "Server is not allowed to open URLs, please check the server configuration" : "Dem Server ist das Öffnen von URLs nicht erlaubt, bitte die Serverkonfiguration prüfen", - "The file exceeds your quota by %s" : "Die Datei überschreitet Dein Limit um %s", - "Error while downloading %s to %s" : "Fehler beim Herunterladen von %s nach %s", "Error when creating the file" : "Fehler beim Erstellen der Datei", - "Folder name cannot be empty." : "Der Ordner-Name darf nicht leer sein.", "Error when creating the folder" : "Fehler beim Erstellen des Ordners", "Unable to set upload directory." : "Das Upload-Verzeichnis konnte nicht gesetzt werden.", - "Invalid Token" : "Ungültiges Merkmal", + "Invalid Token" : "Ungültiger Token", "No file was uploaded. Unknown error" : "Keine Datei hochgeladen. Unbekannter Fehler", "There is no error, the file uploaded with success" : "Es ist kein Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen.", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Die hochgeladene Datei überschreitet die upload_max_filesize Vorgabe in php.ini", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Upload abgebrochen.", "Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.", "File upload is in progress. Leaving the page now will cancel the upload." : "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen.", - "URL cannot be empty" : "Die URL darf nicht leer sein", "{new_name} already exists" : "{new_name} existiert bereits", "Could not create file" : "Die Datei konnte nicht erstellt werden", "Could not create folder" : "Der Ordner konnte nicht erstellt werden", - "Error fetching URL" : "Fehler beim Abrufen der URL", "Rename" : "Umbenennen", "Delete" : "Löschen", "Disconnect storage" : "Speicher trennen", @@ -70,6 +60,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Du hast keine Berechtigung, hier Dateien hochzuladen oder zu erstellen", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Dein Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!", "Your storage is almost full ({usedSpacePercent}%)" : "Dein Speicher ist fast voll ({usedSpacePercent}%)", "Encryption 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.", @@ -79,6 +70,20 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} und {files}", "Favorited" : "Favorisiert", "Favorite" : "Favorit", + "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>", + "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", + "%2$s created %1$s" : "%2$s hat %1$s erstellt", + "%1$s was created in a public folder" : "%1$s wurde in einem öffentlichen Ordner erstellt", + "You changed %1$s" : "Du hast %1$s geändert", + "%2$s changed %1$s" : "%2$s hat %1$s geändert", + "You deleted %1$s" : "Du hast %1$s gelöscht", + "%2$s deleted %1$s" : "%2$s hat %1$s gelöscht", + "You restored %1$s" : "Du hast %1$s wiederhergestellt", + "%2$s restored %1$s" : "%2$s wiederhergestellt %1$s", "%s could not be renamed as it has been deleted" : "%s konnte nicht umbenannt werden, da es gelöscht wurde", "%s could not be renamed" : "%s konnte nicht umbenannt werden", "Upload (max. %s)" : "Hochladen (max. %s)", @@ -86,15 +91,15 @@ OC.L10N.register( "Maximum upload size" : "Maximale Upload-Größe", "max. possible: " : "maximal möglich:", "Save" : "Speichern", + "Can not be edited from here due to insufficient permissions." : "Aufgrund unzureichender Berechtigungen kann dies nicht von hier bearbeitet werden.", "Settings" : "Einstellungen", "WebDAV" : "WebDAV", - "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Diese Adresse benutzen, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Ihre Dateien zuzugreifen</a>", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Benutze diese Adresse, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Deine Dateien zuzugreifen</a>", "New" : "Neu", "New text file" : "Neue Textdatei", "Text file" : "Textdatei", "New folder" : "Neuer Ordner", "Folder" : "Ordner", - "From link" : "Von einem Link", "Upload" : "Hochladen", "Cancel upload" : "Upload abbrechen", "No files yet" : "Noch keine Dateien", diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json index e37d96abd2e..2b27f3b2374 100644 --- a/apps/files/l10n/de.json +++ b/apps/files/l10n/de.json @@ -5,20 +5,12 @@ "Could not move %s - File with this name already exists" : "Konnte %s nicht verschieben. Eine Datei mit diesem Namen existiert bereits", "Could not move %s" : "Konnte %s nicht verschieben", "Permission denied" : "Zugriff verweigert", - "File name cannot be empty." : "Der Dateiname darf nicht leer sein.", - "\"%s\" is an invalid file name." : "»%s« ist kein gültiger Dateiname.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ungültiger Name, '\\', '/', '<', '>', ':', '\"', '|', '?' und '*' sind nicht zulässig.", "The target folder has been moved or deleted." : "Der Zielordner wurde verschoben oder gelöscht.", "The name %s is already used in the folder %s. Please choose a different name." : "Der Name %s wird bereits im Ordner %s benutzt. Bitte wähle einen anderen Namen.", - "Not a valid source" : "Keine gültige Quelle", - "Server is not allowed to open URLs, please check the server configuration" : "Dem Server ist das Öffnen von URLs nicht erlaubt, bitte die Serverkonfiguration prüfen", - "The file exceeds your quota by %s" : "Die Datei überschreitet Dein Limit um %s", - "Error while downloading %s to %s" : "Fehler beim Herunterladen von %s nach %s", "Error when creating the file" : "Fehler beim Erstellen der Datei", - "Folder name cannot be empty." : "Der Ordner-Name darf nicht leer sein.", "Error when creating the folder" : "Fehler beim Erstellen des Ordners", "Unable to set upload directory." : "Das Upload-Verzeichnis konnte nicht gesetzt werden.", - "Invalid Token" : "Ungültiges Merkmal", + "Invalid Token" : "Ungültiger Token", "No file was uploaded. Unknown error" : "Keine Datei hochgeladen. Unbekannter Fehler", "There is no error, the file uploaded with success" : "Es ist kein Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen.", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Die hochgeladene Datei überschreitet die upload_max_filesize Vorgabe in php.ini", @@ -41,11 +33,9 @@ "Upload cancelled." : "Upload abgebrochen.", "Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.", "File upload is in progress. Leaving the page now will cancel the upload." : "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen.", - "URL cannot be empty" : "Die URL darf nicht leer sein", "{new_name} already exists" : "{new_name} existiert bereits", "Could not create file" : "Die Datei konnte nicht erstellt werden", "Could not create folder" : "Der Ordner konnte nicht erstellt werden", - "Error fetching URL" : "Fehler beim Abrufen der URL", "Rename" : "Umbenennen", "Delete" : "Löschen", "Disconnect storage" : "Speicher trennen", @@ -68,6 +58,7 @@ "You don’t have permission to upload or create files here" : "Du hast keine Berechtigung, hier Dateien hochzuladen oder zu erstellen", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Dein Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!", "Your storage is almost full ({usedSpacePercent}%)" : "Dein Speicher ist fast voll ({usedSpacePercent}%)", "Encryption 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.", @@ -77,6 +68,20 @@ "{dirs} and {files}" : "{dirs} und {files}", "Favorited" : "Favorisiert", "Favorite" : "Favorit", + "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>", + "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", + "%2$s created %1$s" : "%2$s hat %1$s erstellt", + "%1$s was created in a public folder" : "%1$s wurde in einem öffentlichen Ordner erstellt", + "You changed %1$s" : "Du hast %1$s geändert", + "%2$s changed %1$s" : "%2$s hat %1$s geändert", + "You deleted %1$s" : "Du hast %1$s gelöscht", + "%2$s deleted %1$s" : "%2$s hat %1$s gelöscht", + "You restored %1$s" : "Du hast %1$s wiederhergestellt", + "%2$s restored %1$s" : "%2$s wiederhergestellt %1$s", "%s could not be renamed as it has been deleted" : "%s konnte nicht umbenannt werden, da es gelöscht wurde", "%s could not be renamed" : "%s konnte nicht umbenannt werden", "Upload (max. %s)" : "Hochladen (max. %s)", @@ -84,15 +89,15 @@ "Maximum upload size" : "Maximale Upload-Größe", "max. possible: " : "maximal möglich:", "Save" : "Speichern", + "Can not be edited from here due to insufficient permissions." : "Aufgrund unzureichender Berechtigungen kann dies nicht von hier bearbeitet werden.", "Settings" : "Einstellungen", "WebDAV" : "WebDAV", - "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Diese Adresse benutzen, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Ihre Dateien zuzugreifen</a>", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Benutze diese Adresse, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Deine Dateien zuzugreifen</a>", "New" : "Neu", "New text file" : "Neue Textdatei", "Text file" : "Textdatei", "New folder" : "Neuer Ordner", "Folder" : "Ordner", - "From link" : "Von einem Link", "Upload" : "Hochladen", "Cancel upload" : "Upload abbrechen", "No files yet" : "Noch keine Dateien", diff --git a/apps/files/l10n/de_AT.js b/apps/files/l10n/de_AT.js index baf419cd7f4..240a2239ef9 100644 --- a/apps/files/l10n/de_AT.js +++ b/apps/files/l10n/de_AT.js @@ -10,6 +10,15 @@ OC.L10N.register( "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "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 hat sich <strong>geändert</strong>", + "A file or folder has been <strong>deleted</strong>" : "Eine Datei oder ein Ordner wurde <strong>gelöscht</strong>", + "You created %1$s" : "Du hast %1$s erstellt", + "%2$s created %1$s" : "%2$s erstellte %1$s", + "You changed %1$s" : "Du hast %1$s geändert", + "%2$s changed %1$s" : "%2$s änderte %1$s", + "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" }, diff --git a/apps/files/l10n/de_AT.json b/apps/files/l10n/de_AT.json index a27065acc9e..fd7f7b2611a 100644 --- a/apps/files/l10n/de_AT.json +++ b/apps/files/l10n/de_AT.json @@ -8,6 +8,15 @@ "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "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 hat sich <strong>geändert</strong>", + "A file or folder has been <strong>deleted</strong>" : "Eine Datei oder ein Ordner wurde <strong>gelöscht</strong>", + "You created %1$s" : "Du hast %1$s erstellt", + "%2$s created %1$s" : "%2$s erstellte %1$s", + "You changed %1$s" : "Du hast %1$s geändert", + "%2$s changed %1$s" : "%2$s änderte %1$s", + "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" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js index 9d864bf3626..152ffcc0e20 100644 --- a/apps/files/l10n/de_DE.js +++ b/apps/files/l10n/de_DE.js @@ -7,20 +7,12 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "%s konnte nicht verschoben werden. Eine Datei mit diesem Namen existiert bereits.", "Could not move %s" : "Konnte %s nicht verschieben", "Permission denied" : "Zugriff verweigert", - "File name cannot be empty." : "Der Dateiname darf nicht leer sein.", - "\"%s\" is an invalid file name." : "\"%s\" ist kein gültiger Dateiname.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ungültiger Name, '\\', '/', '<', '>', ':', '\"', '|', '?' und '*' sind nicht zulässig.", "The target folder has been moved or deleted." : "Der Zielordner wurde verschoben oder gelöscht.", "The name %s is already used in the folder %s. Please choose a different name." : "Der Name %s wird bereits im Ordner %s benutzt. Bitte wählen Sie einen anderen Namen.", - "Not a valid source" : "Keine gültige Quelle", - "Server is not allowed to open URLs, please check the server configuration" : "Dem Server ist das Öffnen von URLs nicht erlaubt, bitte die Serverkonfiguration prüfen", - "The file exceeds your quota by %s" : "Die Datei überschreitet Ihr Limit um %s", - "Error while downloading %s to %s" : "Fehler beim Herunterladen von %s nach %s", "Error when creating the file" : "Fehler beim Erstellen der Datei", - "Folder name cannot be empty." : "Der Ordnername darf nicht leer sein.", "Error when creating the folder" : "Fehler beim Erstellen des Ordners", "Unable to set upload directory." : "Das Upload-Verzeichnis konnte nicht gesetzt werden.", - "Invalid Token" : "Ungültiges Merkmal", + "Invalid Token" : "Ungültiger Token", "No file was uploaded. Unknown error" : "Keine Datei hochgeladen. Unbekannter Fehler", "There is no error, the file uploaded with success" : "Es ist kein Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen.", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Die hochgeladene Datei überschreitet die upload_max_filesize-Vorgabe in php.ini", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Upload abgebrochen.", "Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.", "File upload is in progress. Leaving the page now will cancel the upload." : "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.", - "URL cannot be empty" : "Die URL darf nicht leer sein", "{new_name} already exists" : "{new_name} existiert bereits", "Could not create file" : "Die Datei konnte nicht erstellt werden", "Could not create folder" : "Der Ordner konnte nicht erstellt werden", - "Error fetching URL" : "Fehler beim Abrufen der URL", "Rename" : "Umbenennen", "Delete" : "Löschen", "Disconnect storage" : "Speicher trennen", @@ -70,6 +60,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Sie haben keine Berechtigung, hier Dateien hochzuladen oder zu erstellen", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Ihr Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!", "Your storage is almost full ({usedSpacePercent}%)" : "Ihr Speicher ist fast voll ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte melden Sie sich nochmals ab und wieder an.", @@ -79,6 +70,20 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} und {files}", "Favorited" : "Favorisiert", "Favorite" : "Favorit", + "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>", + "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", + "%2$s created %1$s" : "%2$s hat %1$s erstellt", + "%1$s was created in a public folder" : "%1$s wurde in einem öffentlichen Ordner erstellt", + "You changed %1$s" : "Sie haben %1$s geändert", + "%2$s changed %1$s" : "%2$s hat %1$s geändert", + "You deleted %1$s" : "Sie haben %1$s gelöscht", + "%2$s deleted %1$s" : "%2$s hat %1$s gelöscht", + "You restored %1$s" : "Sie haben %1$s wiederhergestellt", + "%2$s restored %1$s" : "%2$s wiederhergestellt %1$s", "%s could not be renamed as it has been deleted" : "%s konnte nicht umbenannt werden, da es gelöscht wurde", "%s could not be renamed" : "%s konnte nicht umbenannt werden", "Upload (max. %s)" : "Hochladen (max. %s)", @@ -86,15 +91,15 @@ OC.L10N.register( "Maximum upload size" : "Maximale Upload-Größe", "max. possible: " : "maximal möglich:", "Save" : "Speichern", + "Can not be edited from here due to insufficient permissions." : "Aufgrund unzureichender Berechtigungen kann dies nicht von hier bearbeitet werden.", "Settings" : "Einstellungen", "WebDAV" : "WebDAV", - "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Diese Adresse benutzen, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Ihre Dateien zuzugreifen</a>", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Benutzen Sie diese Adresse, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Ihre Dateien zuzugreifen</a>", "New" : "Neu", "New text file" : "Neue Textdatei", "Text file" : "Textdatei", "New folder" : "Neuer Ordner", "Folder" : "Ordner", - "From link" : "Von einem Link", "Upload" : "Hochladen", "Cancel upload" : "Upload abbrechen", "No files yet" : "Noch keine Dateien", diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json index bc2fd5acddd..2c11f0183bb 100644 --- a/apps/files/l10n/de_DE.json +++ b/apps/files/l10n/de_DE.json @@ -5,20 +5,12 @@ "Could not move %s - File with this name already exists" : "%s konnte nicht verschoben werden. Eine Datei mit diesem Namen existiert bereits.", "Could not move %s" : "Konnte %s nicht verschieben", "Permission denied" : "Zugriff verweigert", - "File name cannot be empty." : "Der Dateiname darf nicht leer sein.", - "\"%s\" is an invalid file name." : "\"%s\" ist kein gültiger Dateiname.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ungültiger Name, '\\', '/', '<', '>', ':', '\"', '|', '?' und '*' sind nicht zulässig.", "The target folder has been moved or deleted." : "Der Zielordner wurde verschoben oder gelöscht.", "The name %s is already used in the folder %s. Please choose a different name." : "Der Name %s wird bereits im Ordner %s benutzt. Bitte wählen Sie einen anderen Namen.", - "Not a valid source" : "Keine gültige Quelle", - "Server is not allowed to open URLs, please check the server configuration" : "Dem Server ist das Öffnen von URLs nicht erlaubt, bitte die Serverkonfiguration prüfen", - "The file exceeds your quota by %s" : "Die Datei überschreitet Ihr Limit um %s", - "Error while downloading %s to %s" : "Fehler beim Herunterladen von %s nach %s", "Error when creating the file" : "Fehler beim Erstellen der Datei", - "Folder name cannot be empty." : "Der Ordnername darf nicht leer sein.", "Error when creating the folder" : "Fehler beim Erstellen des Ordners", "Unable to set upload directory." : "Das Upload-Verzeichnis konnte nicht gesetzt werden.", - "Invalid Token" : "Ungültiges Merkmal", + "Invalid Token" : "Ungültiger Token", "No file was uploaded. Unknown error" : "Keine Datei hochgeladen. Unbekannter Fehler", "There is no error, the file uploaded with success" : "Es ist kein Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen.", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Die hochgeladene Datei überschreitet die upload_max_filesize-Vorgabe in php.ini", @@ -41,11 +33,9 @@ "Upload cancelled." : "Upload abgebrochen.", "Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.", "File upload is in progress. Leaving the page now will cancel the upload." : "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.", - "URL cannot be empty" : "Die URL darf nicht leer sein", "{new_name} already exists" : "{new_name} existiert bereits", "Could not create file" : "Die Datei konnte nicht erstellt werden", "Could not create folder" : "Der Ordner konnte nicht erstellt werden", - "Error fetching URL" : "Fehler beim Abrufen der URL", "Rename" : "Umbenennen", "Delete" : "Löschen", "Disconnect storage" : "Speicher trennen", @@ -68,6 +58,7 @@ "You don’t have permission to upload or create files here" : "Sie haben keine Berechtigung, hier Dateien hochzuladen oder zu erstellen", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Ihr Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!", "Your storage is almost full ({usedSpacePercent}%)" : "Ihr Speicher ist fast voll ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte melden Sie sich nochmals ab und wieder an.", @@ -77,6 +68,20 @@ "{dirs} and {files}" : "{dirs} und {files}", "Favorited" : "Favorisiert", "Favorite" : "Favorit", + "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>", + "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", + "%2$s created %1$s" : "%2$s hat %1$s erstellt", + "%1$s was created in a public folder" : "%1$s wurde in einem öffentlichen Ordner erstellt", + "You changed %1$s" : "Sie haben %1$s geändert", + "%2$s changed %1$s" : "%2$s hat %1$s geändert", + "You deleted %1$s" : "Sie haben %1$s gelöscht", + "%2$s deleted %1$s" : "%2$s hat %1$s gelöscht", + "You restored %1$s" : "Sie haben %1$s wiederhergestellt", + "%2$s restored %1$s" : "%2$s wiederhergestellt %1$s", "%s could not be renamed as it has been deleted" : "%s konnte nicht umbenannt werden, da es gelöscht wurde", "%s could not be renamed" : "%s konnte nicht umbenannt werden", "Upload (max. %s)" : "Hochladen (max. %s)", @@ -84,15 +89,15 @@ "Maximum upload size" : "Maximale Upload-Größe", "max. possible: " : "maximal möglich:", "Save" : "Speichern", + "Can not be edited from here due to insufficient permissions." : "Aufgrund unzureichender Berechtigungen kann dies nicht von hier bearbeitet werden.", "Settings" : "Einstellungen", "WebDAV" : "WebDAV", - "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Diese Adresse benutzen, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Ihre Dateien zuzugreifen</a>", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Benutzen Sie diese Adresse, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Ihre Dateien zuzugreifen</a>", "New" : "Neu", "New text file" : "Neue Textdatei", "Text file" : "Textdatei", "New folder" : "Neuer Ordner", "Folder" : "Ordner", - "From link" : "Von einem Link", "Upload" : "Hochladen", "Cancel upload" : "Upload abbrechen", "No files yet" : "Noch keine Dateien", diff --git a/apps/files/l10n/el.js b/apps/files/l10n/el.js index 02cfa856af1..395047f72fe 100644 --- a/apps/files/l10n/el.js +++ b/apps/files/l10n/el.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Αδυναμία μετακίνησης του %s - υπάρχει ήδη αρχείο με αυτό το όνομα", "Could not move %s" : "Αδυναμία μετακίνησης του %s", "Permission denied" : "Η πρόσβαση απορρίφθηκε", - "File name cannot be empty." : "Το όνομα αρχείου δεν μπορεί να είναι κενό.", - "\"%s\" is an invalid file name." : "Το \"%s\" είναι ένα μη έγκυρο όνομα αρχείου.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Μη έγκυρο όνομα, '\\', '/', '<', '>', ':', '\"', '|', '?' και '*' δεν επιτρέπονται.", "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. Παρακαλώ επιλέξτε ένα άλλο όνομα.", - "Not a valid source" : "Μη έγκυρη πηγή", - "Server is not allowed to open URLs, please check the server configuration" : "Ο διακομιστής δεν επιτρέπεται να ανοίγει URL, παρακαλώ ελέγξτε τις ρυθμίσεις του διακομιστή", - "The file exceeds your quota by %s" : "Ο φάκελλος ξεπερνάει το όριό σας κατά %s", - "Error while downloading %s to %s" : "Σφάλμα κατά τη λήψη του %s στο %s", "Error when creating the file" : "Σφάλμα κατά τη δημιουργία του αρχείου", - "Folder name cannot be empty." : "Το όνομα φακέλου δεν μπορεί να είναι κενό.", "Error when creating the folder" : "Σφάλμα δημιουργίας φακέλου", "Unable to set upload directory." : "Αδυναμία ορισμού καταλόγου αποστολής.", "Invalid Token" : "Μη έγκυρο Token", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Η αποστολή ακυρώθηκε.", "Could not get result from server." : "Αδυναμία λήψης αποτελέσματος από το διακομιστή.", "File upload is in progress. Leaving the page now will cancel the upload." : "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυρώσει την αποστολή.", - "URL cannot be empty" : "Η URL δεν πρέπει να είναι κενή", "{new_name} already exists" : "{new_name} υπάρχει ήδη", "Could not create file" : "Αδυναμία δημιουργίας αρχείου", "Could not create folder" : "Αδυναμία δημιουργίας φακέλου", - "Error fetching URL" : "Σφάλμα φόρτωσης URL", "Rename" : "Μετονομασία", "Delete" : "Διαγραφή", "Disconnect storage" : "Αποσυνδεδεμένος αποθηκευτικός χώρος", @@ -68,6 +58,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Δεν έχετε δικαιώματα φόρτωσης ή δημιουργίας αρχείων εδώ", "_Uploading %n file_::_Uploading %n files_" : ["Ανέβασμα %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" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.", @@ -76,6 +67,19 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["",""], "{dirs} and {files}" : "{Κατάλογοι αρχείων} και {αρχεία}", "Favorite" : "Αγαπημένο", + "A new file or folder has been <strong>created</strong>" : "Ένα νέο αρχείο ή κατάλογος έχουν <strong>δημιουργηθεί</strong>", + "A file or folder has been <strong>changed</strong>" : "Ένα αρχείο ή κατάλογος έχουν <strong>αλλάξει</strong>", + "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)" : "Διαμοιρασμός (max. %s)", @@ -91,14 +95,16 @@ OC.L10N.register( "Text file" : "Αρχείο κειμένου", "New folder" : "Νέος κατάλογος", "Folder" : "Φάκελος", - "From link" : "Από σύνδεσμο", "Upload" : "Μεταφόρτωση", "Cancel upload" : "Ακύρωση μεταφόρτωσης", + "No files yet" : "Κανένα αρχείο ακόμα.", + "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." : "Τα αρχεία σαρώνονται, παρακαλώ περιμένετε.", - "Currently scanning" : "Σάρωση σε εξέλιξη" + "Currently scanning" : "Σάρωση σε εξέλιξη", + "No favorites" : "Δεν υπάρχουν αγαπημένα" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/el.json b/apps/files/l10n/el.json index 5f2ecf6c2a3..a4de9a45c42 100644 --- a/apps/files/l10n/el.json +++ b/apps/files/l10n/el.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Αδυναμία μετακίνησης του %s - υπάρχει ήδη αρχείο με αυτό το όνομα", "Could not move %s" : "Αδυναμία μετακίνησης του %s", "Permission denied" : "Η πρόσβαση απορρίφθηκε", - "File name cannot be empty." : "Το όνομα αρχείου δεν μπορεί να είναι κενό.", - "\"%s\" is an invalid file name." : "Το \"%s\" είναι ένα μη έγκυρο όνομα αρχείου.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Μη έγκυρο όνομα, '\\', '/', '<', '>', ':', '\"', '|', '?' και '*' δεν επιτρέπονται.", "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. Παρακαλώ επιλέξτε ένα άλλο όνομα.", - "Not a valid source" : "Μη έγκυρη πηγή", - "Server is not allowed to open URLs, please check the server configuration" : "Ο διακομιστής δεν επιτρέπεται να ανοίγει URL, παρακαλώ ελέγξτε τις ρυθμίσεις του διακομιστή", - "The file exceeds your quota by %s" : "Ο φάκελλος ξεπερνάει το όριό σας κατά %s", - "Error while downloading %s to %s" : "Σφάλμα κατά τη λήψη του %s στο %s", "Error when creating the file" : "Σφάλμα κατά τη δημιουργία του αρχείου", - "Folder name cannot be empty." : "Το όνομα φακέλου δεν μπορεί να είναι κενό.", "Error when creating the folder" : "Σφάλμα δημιουργίας φακέλου", "Unable to set upload directory." : "Αδυναμία ορισμού καταλόγου αποστολής.", "Invalid Token" : "Μη έγκυρο Token", @@ -41,11 +33,9 @@ "Upload cancelled." : "Η αποστολή ακυρώθηκε.", "Could not get result from server." : "Αδυναμία λήψης αποτελέσματος από το διακομιστή.", "File upload is in progress. Leaving the page now will cancel the upload." : "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυρώσει την αποστολή.", - "URL cannot be empty" : "Η URL δεν πρέπει να είναι κενή", "{new_name} already exists" : "{new_name} υπάρχει ήδη", "Could not create file" : "Αδυναμία δημιουργίας αρχείου", "Could not create folder" : "Αδυναμία δημιουργίας φακέλου", - "Error fetching URL" : "Σφάλμα φόρτωσης URL", "Rename" : "Μετονομασία", "Delete" : "Διαγραφή", "Disconnect storage" : "Αποσυνδεδεμένος αποθηκευτικός χώρος", @@ -66,6 +56,7 @@ "You don’t have permission to upload or create files here" : "Δεν έχετε δικαιώματα φόρτωσης ή δημιουργίας αρχείων εδώ", "_Uploading %n file_::_Uploading %n files_" : ["Ανέβασμα %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" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.", @@ -74,6 +65,19 @@ "_matches '{filter}'_::_match '{filter}'_" : ["",""], "{dirs} and {files}" : "{Κατάλογοι αρχείων} και {αρχεία}", "Favorite" : "Αγαπημένο", + "A new file or folder has been <strong>created</strong>" : "Ένα νέο αρχείο ή κατάλογος έχουν <strong>δημιουργηθεί</strong>", + "A file or folder has been <strong>changed</strong>" : "Ένα αρχείο ή κατάλογος έχουν <strong>αλλάξει</strong>", + "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)" : "Διαμοιρασμός (max. %s)", @@ -89,14 +93,16 @@ "Text file" : "Αρχείο κειμένου", "New folder" : "Νέος κατάλογος", "Folder" : "Φάκελος", - "From link" : "Από σύνδεσμο", "Upload" : "Μεταφόρτωση", "Cancel upload" : "Ακύρωση μεταφόρτωσης", + "No files yet" : "Κανένα αρχείο ακόμα.", + "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." : "Τα αρχεία σαρώνονται, παρακαλώ περιμένετε.", - "Currently scanning" : "Σάρωση σε εξέλιξη" + "Currently scanning" : "Σάρωση σε εξέλιξη", + "No favorites" : "Δεν υπάρχουν αγαπημένα" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/en@pirate.js b/apps/files/l10n/en@pirate.js index 709448d1af3..db9b7b949c9 100644 --- a/apps/files/l10n/en@pirate.js +++ b/apps/files/l10n/en@pirate.js @@ -1,10 +1,10 @@ OC.L10N.register( "files", { + "Download" : "Download", "_%n folder_::_%n folders_" : ["",""], "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], - "_matches '{filter}'_::_match '{filter}'_" : ["",""], - "Download" : "Download" + "_matches '{filter}'_::_match '{filter}'_" : ["",""] }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/en@pirate.json b/apps/files/l10n/en@pirate.json index d5057651887..c7c86950aa0 100644 --- a/apps/files/l10n/en@pirate.json +++ b/apps/files/l10n/en@pirate.json @@ -1,8 +1,8 @@ { "translations": { + "Download" : "Download", "_%n folder_::_%n folders_" : ["",""], "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], - "_matches '{filter}'_::_match '{filter}'_" : ["",""], - "Download" : "Download" + "_matches '{filter}'_::_match '{filter}'_" : ["",""] },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/en_GB.js b/apps/files/l10n/en_GB.js index 664c8cf9010..513f5f2f7d7 100644 --- a/apps/files/l10n/en_GB.js +++ b/apps/files/l10n/en_GB.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Could not move %s - File with this name already exists", "Could not move %s" : "Could not move %s", "Permission denied" : "Permission denied", - "File name cannot be empty." : "File name cannot be empty.", - "\"%s\" is an invalid file name." : "\"%s\" is an invalid file name.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Invalid name: '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed.", "The target folder has been moved or deleted." : "The target folder has been moved or deleted.", "The name %s is already used in the folder %s. Please choose a different name." : "The name %s is already used in the folder %s. Please choose a different name.", - "Not a valid source" : "Not a valid source", - "Server is not allowed to open URLs, please check the server configuration" : "Server is not allowed to open URLs, please check the server configuration", - "The file exceeds your quota by %s" : "The file exceeds your quota by %s", - "Error while downloading %s to %s" : "Error whilst downloading %s to %s", "Error when creating the file" : "Error when creating the file", - "Folder name cannot be empty." : "Folder name cannot be empty.", "Error when creating the folder" : "Error when creating the folder", "Unable to set upload directory." : "Unable to set upload directory.", "Invalid Token" : "Invalid Token", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Upload cancelled.", "Could not get result from server." : "Could not get result from server.", "File upload is in progress. Leaving the page now will cancel the upload." : "File upload is in progress. Leaving the page now will cancel the upload.", - "URL cannot be empty" : "URL cannot be empty", "{new_name} already exists" : "{new_name} already exists", "Could not create file" : "Could not create file", "Could not create folder" : "Could not create folder", - "Error fetching URL" : "Error fetching URL", "Rename" : "Rename", "Delete" : "Delete", "Disconnect storage" : "Disconnect storage", @@ -70,6 +60,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "You don’t have permission to upload or create files here", "_Uploading %n file_::_Uploading %n files_" : ["Uploading %n file","Uploading %n files"], "\"{name}\" is an invalid file name." : "\"{name}\" is an invalid file name.", + "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", @@ -79,6 +70,20 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} and {files}", "Favorited" : "Favourited", "Favorite" : "Favourite", + "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>", + "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", + "%2$s created %1$s" : "%2$s created %1$s", + "%1$s was created in a public folder" : "%1$s was created in a public folder", + "You changed %1$s" : "You changed %1$s", + "%2$s changed %1$s" : "%2$s changed %1$s", + "You deleted %1$s" : "You deleted %1$s", + "%2$s deleted %1$s" : "%2$s deleted %1$s", + "You restored %1$s" : "You restored %1$s", + "%2$s restored %1$s" : "%2$s restored %1$s", "%s could not be renamed as it has been deleted" : "%s could not be renamed as it has been deleted", "%s could not be renamed" : "%s could not be renamed", "Upload (max. %s)" : "Upload (max. %s)", @@ -94,7 +99,6 @@ OC.L10N.register( "Text file" : "Text file", "New folder" : "New folder", "Folder" : "Folder", - "From link" : "From link", "Upload" : "Upload", "Cancel upload" : "Cancel upload", "No files yet" : "No files yet", diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json index fdc0b587386..1523209bb97 100644 --- a/apps/files/l10n/en_GB.json +++ b/apps/files/l10n/en_GB.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Could not move %s - File with this name already exists", "Could not move %s" : "Could not move %s", "Permission denied" : "Permission denied", - "File name cannot be empty." : "File name cannot be empty.", - "\"%s\" is an invalid file name." : "\"%s\" is an invalid file name.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Invalid name: '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed.", "The target folder has been moved or deleted." : "The target folder has been moved or deleted.", "The name %s is already used in the folder %s. Please choose a different name." : "The name %s is already used in the folder %s. Please choose a different name.", - "Not a valid source" : "Not a valid source", - "Server is not allowed to open URLs, please check the server configuration" : "Server is not allowed to open URLs, please check the server configuration", - "The file exceeds your quota by %s" : "The file exceeds your quota by %s", - "Error while downloading %s to %s" : "Error whilst downloading %s to %s", "Error when creating the file" : "Error when creating the file", - "Folder name cannot be empty." : "Folder name cannot be empty.", "Error when creating the folder" : "Error when creating the folder", "Unable to set upload directory." : "Unable to set upload directory.", "Invalid Token" : "Invalid Token", @@ -41,11 +33,9 @@ "Upload cancelled." : "Upload cancelled.", "Could not get result from server." : "Could not get result from server.", "File upload is in progress. Leaving the page now will cancel the upload." : "File upload is in progress. Leaving the page now will cancel the upload.", - "URL cannot be empty" : "URL cannot be empty", "{new_name} already exists" : "{new_name} already exists", "Could not create file" : "Could not create file", "Could not create folder" : "Could not create folder", - "Error fetching URL" : "Error fetching URL", "Rename" : "Rename", "Delete" : "Delete", "Disconnect storage" : "Disconnect storage", @@ -68,6 +58,7 @@ "You don’t have permission to upload or create files here" : "You don’t have permission to upload or create files here", "_Uploading %n file_::_Uploading %n files_" : ["Uploading %n file","Uploading %n files"], "\"{name}\" is an invalid file name." : "\"{name}\" is an invalid file name.", + "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", @@ -77,6 +68,20 @@ "{dirs} and {files}" : "{dirs} and {files}", "Favorited" : "Favourited", "Favorite" : "Favourite", + "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>", + "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", + "%2$s created %1$s" : "%2$s created %1$s", + "%1$s was created in a public folder" : "%1$s was created in a public folder", + "You changed %1$s" : "You changed %1$s", + "%2$s changed %1$s" : "%2$s changed %1$s", + "You deleted %1$s" : "You deleted %1$s", + "%2$s deleted %1$s" : "%2$s deleted %1$s", + "You restored %1$s" : "You restored %1$s", + "%2$s restored %1$s" : "%2$s restored %1$s", "%s could not be renamed as it has been deleted" : "%s could not be renamed as it has been deleted", "%s could not be renamed" : "%s could not be renamed", "Upload (max. %s)" : "Upload (max. %s)", @@ -92,7 +97,6 @@ "Text file" : "Text file", "New folder" : "New folder", "Folder" : "Folder", - "From link" : "From link", "Upload" : "Upload", "Cancel upload" : "Cancel upload", "No files yet" : "No files yet", diff --git a/apps/files/l10n/eo.js b/apps/files/l10n/eo.js index f0dfdd6369b..594851a4b43 100644 --- a/apps/files/l10n/eo.js +++ b/apps/files/l10n/eo.js @@ -4,13 +4,8 @@ OC.L10N.register( "Unknown error" : "Nekonata eraro", "Could not move %s - File with this name already exists" : "Ne eblis movi %s: dosiero kun ĉi tiu nomo jam ekzistas", "Could not move %s" : "Ne eblis movi %s", - "File name cannot be empty." : "Dosiernomo devas ne malpleni.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nevalida nomo: “\\”, “/”, “<”, “>”, “:”, “\"”, “|”, “?” kaj “*” ne permesatas.", "The name %s is already used in the folder %s. Please choose a different name." : "La nomo %s jam uziĝas en la dosierujo %s. Bonvolu elekti malsaman nomon.", - "Not a valid source" : "Nevalida fonto", - "Error while downloading %s to %s" : "Eraris elŝuto de %s al %s", "Error when creating the file" : "Eraris la kreo de la dosiero", - "Folder name cannot be empty." : "La dosierujnomo ne povas malpleni.", "Error when creating the folder" : "Eraris la kreo de la dosierujo", "Unable to set upload directory." : "Ne povis agordiĝi la alŝuta dosierujo.", "No file was uploaded. Unknown error" : "Neniu dosiero alŝutiĝis. Nekonata eraro.", @@ -32,7 +27,6 @@ OC.L10N.register( "Upload cancelled." : "La alŝuto nuliĝis.", "Could not get result from server." : "Ne povis ekhaviĝi rezulto el la servilo.", "File upload is in progress. Leaving the page now will cancel the upload." : "Dosieralŝuto plenumiĝas. Lasi la paĝon nun nuligus la alŝuton.", - "URL cannot be empty" : "La URL ne povas malpleni", "{new_name} already exists" : "{new_name} jam ekzistas", "Could not create file" : "Ne povis kreiĝi dosiero", "Could not create folder" : "Ne povis kreiĝi dosierujo", @@ -52,11 +46,18 @@ OC.L10N.register( "_%n file_::_%n files_" : ["%n dosiero","%n dosieroj"], "You don’t have permission to upload or create files here" : "Vi ne havas permeson alŝuti aŭ krei dosierojn ĉi tie", "_Uploading %n file_::_Uploading %n files_" : ["Alŝutatas %n dosiero","Alŝutatas %n dosieroj"], + "File name cannot be empty." : "Dosiernomo devas ne malpleni.", "Your storage is full, files can not be updated or synced anymore!" : "Via memoro plenas, ne plu eblas ĝisdatigi aŭ sinkronigi dosierojn!", "Your storage is almost full ({usedSpacePercent}%)" : "Via memoro preskaŭ plenas ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["",""], "{dirs} and {files}" : "{dirs} kaj {files}", "Favorite" : "Favorato", + "You created %1$s" : "Vi kreis %1$s", + "%2$s created %1$s" : "%2$s kreis %1$s", + "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" : "%s ne povis alinomiĝi", "Upload (max. %s)" : "Alŝuti (maks. %s)", "File handling" : "Dosieradministro", @@ -69,7 +70,6 @@ OC.L10N.register( "Text file" : "Tekstodosiero", "New folder" : "Nova dosierujo", "Folder" : "Dosierujo", - "From link" : "El ligilo", "Upload" : "Alŝuti", "Cancel upload" : "Nuligi alŝuton", "Upload too large" : "Alŝuto tro larĝa", diff --git a/apps/files/l10n/eo.json b/apps/files/l10n/eo.json index 6ac3b20bcb2..3489e9581af 100644 --- a/apps/files/l10n/eo.json +++ b/apps/files/l10n/eo.json @@ -2,13 +2,8 @@ "Unknown error" : "Nekonata eraro", "Could not move %s - File with this name already exists" : "Ne eblis movi %s: dosiero kun ĉi tiu nomo jam ekzistas", "Could not move %s" : "Ne eblis movi %s", - "File name cannot be empty." : "Dosiernomo devas ne malpleni.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nevalida nomo: “\\”, “/”, “<”, “>”, “:”, “\"”, “|”, “?” kaj “*” ne permesatas.", "The name %s is already used in the folder %s. Please choose a different name." : "La nomo %s jam uziĝas en la dosierujo %s. Bonvolu elekti malsaman nomon.", - "Not a valid source" : "Nevalida fonto", - "Error while downloading %s to %s" : "Eraris elŝuto de %s al %s", "Error when creating the file" : "Eraris la kreo de la dosiero", - "Folder name cannot be empty." : "La dosierujnomo ne povas malpleni.", "Error when creating the folder" : "Eraris la kreo de la dosierujo", "Unable to set upload directory." : "Ne povis agordiĝi la alŝuta dosierujo.", "No file was uploaded. Unknown error" : "Neniu dosiero alŝutiĝis. Nekonata eraro.", @@ -30,7 +25,6 @@ "Upload cancelled." : "La alŝuto nuliĝis.", "Could not get result from server." : "Ne povis ekhaviĝi rezulto el la servilo.", "File upload is in progress. Leaving the page now will cancel the upload." : "Dosieralŝuto plenumiĝas. Lasi la paĝon nun nuligus la alŝuton.", - "URL cannot be empty" : "La URL ne povas malpleni", "{new_name} already exists" : "{new_name} jam ekzistas", "Could not create file" : "Ne povis kreiĝi dosiero", "Could not create folder" : "Ne povis kreiĝi dosierujo", @@ -50,11 +44,18 @@ "_%n file_::_%n files_" : ["%n dosiero","%n dosieroj"], "You don’t have permission to upload or create files here" : "Vi ne havas permeson alŝuti aŭ krei dosierojn ĉi tie", "_Uploading %n file_::_Uploading %n files_" : ["Alŝutatas %n dosiero","Alŝutatas %n dosieroj"], + "File name cannot be empty." : "Dosiernomo devas ne malpleni.", "Your storage is full, files can not be updated or synced anymore!" : "Via memoro plenas, ne plu eblas ĝisdatigi aŭ sinkronigi dosierojn!", "Your storage is almost full ({usedSpacePercent}%)" : "Via memoro preskaŭ plenas ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["",""], "{dirs} and {files}" : "{dirs} kaj {files}", "Favorite" : "Favorato", + "You created %1$s" : "Vi kreis %1$s", + "%2$s created %1$s" : "%2$s kreis %1$s", + "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" : "%s ne povis alinomiĝi", "Upload (max. %s)" : "Alŝuti (maks. %s)", "File handling" : "Dosieradministro", @@ -67,7 +68,6 @@ "Text file" : "Tekstodosiero", "New folder" : "Nova dosierujo", "Folder" : "Dosierujo", - "From link" : "El ligilo", "Upload" : "Alŝuti", "Cancel upload" : "Nuligi alŝuton", "Upload too large" : "Alŝuto tro larĝa", diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js index f1bbb505832..4341129a1c7 100644 --- a/apps/files/l10n/es.js +++ b/apps/files/l10n/es.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "No se pudo mover %s - Ya existe un archivo con ese nombre.", "Could not move %s" : "No se pudo mover %s", "Permission denied" : "Permiso denegado", - "File name cannot be empty." : "El nombre de archivo no puede estar vacío.", - "\"%s\" is an invalid file name." : "\"%s\" es un nombre de archivo inválido.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nombre inválido, los caracteres \"\\\", \"/\", \"<\", \">\", \":\", \"\", \"|\" \"?\" y \"*\" no están permitidos ", "The target folder has been moved or deleted." : "La carpeta destino fue movida o eliminada.", "The name %s is already used in the folder %s. Please choose a different name." : "El nombre %s ya está en uso por la carpeta %s. Por favor elija uno diferente.", - "Not a valid source" : "No es una fuente válida", - "Server is not allowed to open URLs, please check the server configuration" : "La configuración del servidor no le permite abrir URLs, revísela.", - "The file exceeds your quota by %s" : "El archivo sobrepasa su cuota por %s", - "Error while downloading %s to %s" : "Error mientras se descargaba %s a %s", "Error when creating the file" : "Error al crear el archivo", - "Folder name cannot be empty." : "El nombre de la carpeta no puede estar vacío.", "Error when creating the folder" : "Error al crear la carpeta.", "Unable to set upload directory." : "Incapaz de crear directorio de subida.", "Invalid Token" : "Token Inválido", @@ -25,7 +17,7 @@ OC.L10N.register( "There is no error, the file uploaded with success" : "No hubo ningún problema, el archivo se subió con éxito", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "El archivo subido sobrepasa la directiva 'upload_max_filesize' en php.ini:", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo subido sobrepasa la directiva 'MAX_FILE_SIZE' especificada en el formulario HTML", - "The uploaded file was only partially uploaded" : "El archivo subido fue sólo subido parcialmente", + "The uploaded file was only partially uploaded" : "El archivo cargado sólo se ha subido parcialmente", "No file was uploaded" : "No se subió ningún archivo", "Missing a temporary folder" : "Falta la carpeta temporal", "Failed to write to disk" : "Falló al escribir al disco", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Subida cancelada.", "Could not get result from server." : "No se pudo obtener respuesta del servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "La subida del archivo está en proceso. Si sale de la página ahora, la subida será cancelada.", - "URL cannot be empty" : "La dirección URL no puede estar vacía", "{new_name} already exists" : "{new_name} ya existe", "Could not create file" : "No se pudo crear el archivo", "Could not create folder" : "No se pudo crear la carpeta", - "Error fetching URL" : "Error al descargar URL.", "Rename" : "Renombrar", "Delete" : "Eliminar", "Disconnect storage" : "Desconectar almacenamiento", @@ -67,9 +57,10 @@ OC.L10N.register( "Modified" : "Modificado", "_%n folder_::_%n folders_" : ["%n carpeta","%n carpetas"], "_%n file_::_%n files_" : ["%n archivo","%n archivos"], - "You don’t have permission to upload or create files here" : "No tienes permisos para subir o crear archivos aquí.", + "You don’t have permission to upload or create files here" : "No tiene permisos para subir o crear archivos aquí.", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Su almacenamiento está lleno, ¡los archivos no se actualizarán ni sincronizarán más!", "Your storage is almost full ({usedSpacePercent}%)" : "Su almacenamiento está casi lleno ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.", @@ -79,6 +70,20 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} y {files}", "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", + "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", + "%2$s created %1$s" : "%2$s ha creado %1$s", + "%1$s was created in a public folder" : "%1$s ha sido creado en una carpeta pública", + "You changed %1$s" : "Ha modificado %1$s", + "%2$s changed %1$s" : "%2$s ha modificado %1$s", + "You deleted %1$s" : "Ha eliminado %1$s", + "%2$s deleted %1$s" : "%2$s ha eliminado %1$s", + "You restored %1$s" : "Usted restauró %1$s", + "%2$s restored %1$s" : "%2$s recuperó %1$s", "%s could not be renamed as it has been deleted" : "%s no se pudo renombrar pues ha sido eliminado", "%s could not be renamed" : "%s no pudo ser renombrado", "Upload (max. %s)" : "Subida (máx. %s)", @@ -86,6 +91,7 @@ OC.L10N.register( "Maximum upload size" : "Tamaño máximo de subida", "max. possible: " : "máx. posible:", "Save" : "Guardar", + "Can not be edited from here due to insufficient permissions." : "No se puede editar desde aquí por permisos insuficientes.", "Settings" : "Ajustes", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use esta URL <a href=\"%s\" target=\"_blank\">para acceder via WebDAV</a>", @@ -94,16 +100,15 @@ OC.L10N.register( "Text file" : "Archivo de texto", "New folder" : "Nueva carpeta", "Folder" : "Carpeta", - "From link" : "Desde enlace", "Upload" : "Subir", - "Cancel upload" : "Cancelar subida", + "Cancel upload" : "Cancelar la subida", "No files yet" : "Aún no hay archivos", "Upload some content or sync with your devices!" : "Suba contenidos o sincronice sus dispositivos.", "No entries found in this folder" : "No hay entradas en esta carpeta", "Select all" : "Seleccionar todo", "Upload too large" : "Subida demasido grande", - "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido en este servidor.", - "Files are being scanned, please wait." : "Los archivos están siendo escaneados, por favor espere.", + "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que está intentando subir sobrepasan el tamaño máximo permitido en este servidor.", + "Files are being scanned, please wait." : "Los archivos se están escaneando, por favor espere.", "Currently scanning" : "Escaneando en este momento", "No favorites" : "No hay favoritos", "Files and folders you mark as favorite will show up here" : "Aquí aparecerán los archivos y carpetas que usted marque como favoritos" diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json index 019c52d1310..356c1da2169 100644 --- a/apps/files/l10n/es.json +++ b/apps/files/l10n/es.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "No se pudo mover %s - Ya existe un archivo con ese nombre.", "Could not move %s" : "No se pudo mover %s", "Permission denied" : "Permiso denegado", - "File name cannot be empty." : "El nombre de archivo no puede estar vacío.", - "\"%s\" is an invalid file name." : "\"%s\" es un nombre de archivo inválido.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nombre inválido, los caracteres \"\\\", \"/\", \"<\", \">\", \":\", \"\", \"|\" \"?\" y \"*\" no están permitidos ", "The target folder has been moved or deleted." : "La carpeta destino fue movida o eliminada.", "The name %s is already used in the folder %s. Please choose a different name." : "El nombre %s ya está en uso por la carpeta %s. Por favor elija uno diferente.", - "Not a valid source" : "No es una fuente válida", - "Server is not allowed to open URLs, please check the server configuration" : "La configuración del servidor no le permite abrir URLs, revísela.", - "The file exceeds your quota by %s" : "El archivo sobrepasa su cuota por %s", - "Error while downloading %s to %s" : "Error mientras se descargaba %s a %s", "Error when creating the file" : "Error al crear el archivo", - "Folder name cannot be empty." : "El nombre de la carpeta no puede estar vacío.", "Error when creating the folder" : "Error al crear la carpeta.", "Unable to set upload directory." : "Incapaz de crear directorio de subida.", "Invalid Token" : "Token Inválido", @@ -23,7 +15,7 @@ "There is no error, the file uploaded with success" : "No hubo ningún problema, el archivo se subió con éxito", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "El archivo subido sobrepasa la directiva 'upload_max_filesize' en php.ini:", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo subido sobrepasa la directiva 'MAX_FILE_SIZE' especificada en el formulario HTML", - "The uploaded file was only partially uploaded" : "El archivo subido fue sólo subido parcialmente", + "The uploaded file was only partially uploaded" : "El archivo cargado sólo se ha subido parcialmente", "No file was uploaded" : "No se subió ningún archivo", "Missing a temporary folder" : "Falta la carpeta temporal", "Failed to write to disk" : "Falló al escribir al disco", @@ -41,11 +33,9 @@ "Upload cancelled." : "Subida cancelada.", "Could not get result from server." : "No se pudo obtener respuesta del servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "La subida del archivo está en proceso. Si sale de la página ahora, la subida será cancelada.", - "URL cannot be empty" : "La dirección URL no puede estar vacía", "{new_name} already exists" : "{new_name} ya existe", "Could not create file" : "No se pudo crear el archivo", "Could not create folder" : "No se pudo crear la carpeta", - "Error fetching URL" : "Error al descargar URL.", "Rename" : "Renombrar", "Delete" : "Eliminar", "Disconnect storage" : "Desconectar almacenamiento", @@ -65,9 +55,10 @@ "Modified" : "Modificado", "_%n folder_::_%n folders_" : ["%n carpeta","%n carpetas"], "_%n file_::_%n files_" : ["%n archivo","%n archivos"], - "You don’t have permission to upload or create files here" : "No tienes permisos para subir o crear archivos aquí.", + "You don’t have permission to upload or create files here" : "No tiene permisos para subir o crear archivos aquí.", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Su almacenamiento está lleno, ¡los archivos no se actualizarán ni sincronizarán más!", "Your storage is almost full ({usedSpacePercent}%)" : "Su almacenamiento está casi lleno ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.", @@ -77,6 +68,20 @@ "{dirs} and {files}" : "{dirs} y {files}", "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", + "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", + "%2$s created %1$s" : "%2$s ha creado %1$s", + "%1$s was created in a public folder" : "%1$s ha sido creado en una carpeta pública", + "You changed %1$s" : "Ha modificado %1$s", + "%2$s changed %1$s" : "%2$s ha modificado %1$s", + "You deleted %1$s" : "Ha eliminado %1$s", + "%2$s deleted %1$s" : "%2$s ha eliminado %1$s", + "You restored %1$s" : "Usted restauró %1$s", + "%2$s restored %1$s" : "%2$s recuperó %1$s", "%s could not be renamed as it has been deleted" : "%s no se pudo renombrar pues ha sido eliminado", "%s could not be renamed" : "%s no pudo ser renombrado", "Upload (max. %s)" : "Subida (máx. %s)", @@ -84,6 +89,7 @@ "Maximum upload size" : "Tamaño máximo de subida", "max. possible: " : "máx. posible:", "Save" : "Guardar", + "Can not be edited from here due to insufficient permissions." : "No se puede editar desde aquí por permisos insuficientes.", "Settings" : "Ajustes", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use esta URL <a href=\"%s\" target=\"_blank\">para acceder via WebDAV</a>", @@ -92,16 +98,15 @@ "Text file" : "Archivo de texto", "New folder" : "Nueva carpeta", "Folder" : "Carpeta", - "From link" : "Desde enlace", "Upload" : "Subir", - "Cancel upload" : "Cancelar subida", + "Cancel upload" : "Cancelar la subida", "No files yet" : "Aún no hay archivos", "Upload some content or sync with your devices!" : "Suba contenidos o sincronice sus dispositivos.", "No entries found in this folder" : "No hay entradas en esta carpeta", "Select all" : "Seleccionar todo", "Upload too large" : "Subida demasido grande", - "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido en este servidor.", - "Files are being scanned, please wait." : "Los archivos están siendo escaneados, por favor espere.", + "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que está intentando subir sobrepasan el tamaño máximo permitido en este servidor.", + "Files are being scanned, please wait." : "Los archivos se están escaneando, por favor espere.", "Currently scanning" : "Escaneando en este momento", "No favorites" : "No hay favoritos", "Files and folders you mark as favorite will show up here" : "Aquí aparecerán los archivos y carpetas que usted marque como favoritos" diff --git a/apps/files/l10n/es_AR.js b/apps/files/l10n/es_AR.js index 39de4af29ba..c3e511beab6 100644 --- a/apps/files/l10n/es_AR.js +++ b/apps/files/l10n/es_AR.js @@ -4,14 +4,8 @@ OC.L10N.register( "Unknown error" : "Error desconocido", "Could not move %s - File with this name already exists" : "No se pudo mover %s - Un archivo con este nombre ya existe", "Could not move %s" : "No se pudo mover %s ", - "File name cannot be empty." : "El nombre del archivo no puede quedar vacío.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nombre invalido, '\\', '/', '<', '>', ':', '\"', '|', '?' y '*' no están permitidos.", "The name %s is already used in the folder %s. Please choose a different name." : "El nombre %s está en uso en el directorio %s. Por favor elija un otro nombre.", - "Not a valid source" : "No es una fuente válida", - "Server is not allowed to open URLs, please check the server configuration" : "El servidor no está permitido abrir las URLs, por favor chequee la configuración del servidor", - "Error while downloading %s to %s" : "Error mientras se descargaba %s a %s", "Error when creating the file" : "Error al crear el archivo", - "Folder name cannot be empty." : "El nombre del directorio no puede estar vacío.", "Error when creating the folder" : "Error al crear el directorio", "Unable to set upload directory." : "No fue posible crear el directorio de subida.", "Invalid Token" : "Token Inválido", @@ -34,11 +28,9 @@ OC.L10N.register( "Upload cancelled." : "La subida fue cancelada", "Could not get result from server." : "No se pudo obtener resultados del servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "La subida del archivo está en proceso. Si salís de la página ahora, la subida se cancelará.", - "URL cannot be empty" : "La URL no puede estar vacía", "{new_name} already exists" : "{new_name} ya existe", "Could not create file" : "No se pudo crear el archivo", "Could not create folder" : "No se pudo crear el directorio", - "Error fetching URL" : "Error al obtener la URL", "Rename" : "Cambiar nombre", "Delete" : "Borrar", "Unshare" : "Dejar de compartir", @@ -56,6 +48,7 @@ OC.L10N.register( "_%n file_::_%n files_" : ["%n archivo","%n archivos"], "You don’t have permission to upload or create files here" : "No tienes permisos para subir o crear archivos aquí", "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Subiendo %n archivos"], + "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", @@ -64,6 +57,15 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["",""], "{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>", + "A file or folder has been <strong>changed</strong>" : "Un archivo o carpeta ha sido <strong>modificado</strong>", + "A file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>eliminado</strong>", + "You created %1$s" : "Has creado %1$s", + "%2$s created %1$s" : "%2$s creó %1$s", + "You changed %1$s" : "Modificaste %1$s", + "%2$s changed %1$s" : "%2$s modificó %1$s", + "You deleted %1$s" : "Eliminaste %1$s", + "%2$s deleted %1$s" : "%2$s eliminó %1$s", "%s could not be renamed" : "No se pudo renombrar %s", "File handling" : "Tratamiento de archivos", "Maximum upload size" : "Tamaño máximo de subida", @@ -77,7 +79,6 @@ OC.L10N.register( "Text file" : "Archivo de texto", "New folder" : "Nueva Carpeta", "Folder" : "Carpeta", - "From link" : "Desde enlace", "Upload" : "Subir", "Cancel upload" : "Cancelar subida", "Upload too large" : "El tamaño del archivo que querés subir es demasiado grande", diff --git a/apps/files/l10n/es_AR.json b/apps/files/l10n/es_AR.json index 1a58715cd96..cce6e62d122 100644 --- a/apps/files/l10n/es_AR.json +++ b/apps/files/l10n/es_AR.json @@ -2,14 +2,8 @@ "Unknown error" : "Error desconocido", "Could not move %s - File with this name already exists" : "No se pudo mover %s - Un archivo con este nombre ya existe", "Could not move %s" : "No se pudo mover %s ", - "File name cannot be empty." : "El nombre del archivo no puede quedar vacío.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nombre invalido, '\\', '/', '<', '>', ':', '\"', '|', '?' y '*' no están permitidos.", "The name %s is already used in the folder %s. Please choose a different name." : "El nombre %s está en uso en el directorio %s. Por favor elija un otro nombre.", - "Not a valid source" : "No es una fuente válida", - "Server is not allowed to open URLs, please check the server configuration" : "El servidor no está permitido abrir las URLs, por favor chequee la configuración del servidor", - "Error while downloading %s to %s" : "Error mientras se descargaba %s a %s", "Error when creating the file" : "Error al crear el archivo", - "Folder name cannot be empty." : "El nombre del directorio no puede estar vacío.", "Error when creating the folder" : "Error al crear el directorio", "Unable to set upload directory." : "No fue posible crear el directorio de subida.", "Invalid Token" : "Token Inválido", @@ -32,11 +26,9 @@ "Upload cancelled." : "La subida fue cancelada", "Could not get result from server." : "No se pudo obtener resultados del servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "La subida del archivo está en proceso. Si salís de la página ahora, la subida se cancelará.", - "URL cannot be empty" : "La URL no puede estar vacía", "{new_name} already exists" : "{new_name} ya existe", "Could not create file" : "No se pudo crear el archivo", "Could not create folder" : "No se pudo crear el directorio", - "Error fetching URL" : "Error al obtener la URL", "Rename" : "Cambiar nombre", "Delete" : "Borrar", "Unshare" : "Dejar de compartir", @@ -54,6 +46,7 @@ "_%n file_::_%n files_" : ["%n archivo","%n archivos"], "You don’t have permission to upload or create files here" : "No tienes permisos para subir o crear archivos aquí", "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Subiendo %n archivos"], + "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", @@ -62,6 +55,15 @@ "_matches '{filter}'_::_match '{filter}'_" : ["",""], "{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>", + "A file or folder has been <strong>changed</strong>" : "Un archivo o carpeta ha sido <strong>modificado</strong>", + "A file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>eliminado</strong>", + "You created %1$s" : "Has creado %1$s", + "%2$s created %1$s" : "%2$s creó %1$s", + "You changed %1$s" : "Modificaste %1$s", + "%2$s changed %1$s" : "%2$s modificó %1$s", + "You deleted %1$s" : "Eliminaste %1$s", + "%2$s deleted %1$s" : "%2$s eliminó %1$s", "%s could not be renamed" : "No se pudo renombrar %s", "File handling" : "Tratamiento de archivos", "Maximum upload size" : "Tamaño máximo de subida", @@ -75,7 +77,6 @@ "Text file" : "Archivo de texto", "New folder" : "Nueva Carpeta", "Folder" : "Carpeta", - "From link" : "Desde enlace", "Upload" : "Subir", "Cancel upload" : "Cancelar subida", "Upload too large" : "El tamaño del archivo que querés subir es demasiado grande", diff --git a/apps/files/l10n/es_CL.js b/apps/files/l10n/es_CL.js index 4e7a2daa421..442a9faffa4 100644 --- a/apps/files/l10n/es_CL.js +++ b/apps/files/l10n/es_CL.js @@ -10,6 +10,15 @@ OC.L10N.register( "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "A new file or folder has been <strong>created</strong>" : "Un nuevo archivo o carpeta ha sido <strong>creado</strong>", + "A file or folder has been <strong>changed</strong>" : "Un archivo o carpeta ha sido <strong>cambiado</strong>", + "A file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>eliminado</strong>", + "You created %1$s" : "Ha creado %1$s", + "%2$s created %1$s" : "%2$s creó %1$s", + "You changed %1$s" : "Cambió %1$s", + "%2$s changed %1$s" : "%2$s cambió %1$s", + "You deleted %1$s" : "Ha borrado %1$s", + "%2$s deleted %1$s" : "%2$s borró %1$s", "Settings" : "Configuración", "New folder" : "Nuevo directorio", "Upload" : "Subir", diff --git a/apps/files/l10n/es_CL.json b/apps/files/l10n/es_CL.json index 7abe511c2c9..65dea4a6480 100644 --- a/apps/files/l10n/es_CL.json +++ b/apps/files/l10n/es_CL.json @@ -8,6 +8,15 @@ "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "A new file or folder has been <strong>created</strong>" : "Un nuevo archivo o carpeta ha sido <strong>creado</strong>", + "A file or folder has been <strong>changed</strong>" : "Un archivo o carpeta ha sido <strong>cambiado</strong>", + "A file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>eliminado</strong>", + "You created %1$s" : "Ha creado %1$s", + "%2$s created %1$s" : "%2$s creó %1$s", + "You changed %1$s" : "Cambió %1$s", + "%2$s changed %1$s" : "%2$s cambió %1$s", + "You deleted %1$s" : "Ha borrado %1$s", + "%2$s deleted %1$s" : "%2$s borró %1$s", "Settings" : "Configuración", "New folder" : "Nuevo directorio", "Upload" : "Subir", diff --git a/apps/files/l10n/es_CR.js b/apps/files/l10n/es_CR.js index 7988332fa91..fba59bdc851 100644 --- a/apps/files/l10n/es_CR.js +++ b/apps/files/l10n/es_CR.js @@ -1,9 +1,23 @@ OC.L10N.register( "files", { + "Files" : "Archivos", "_%n folder_::_%n folders_" : ["",""], "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], - "_matches '{filter}'_::_match '{filter}'_" : ["",""] + "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "A new file or folder has been <strong>created</strong>" : "Un nuevo archivo o carpeta ha sido <strong>creado</strong>", + "A file or folder has been <strong>changed</strong>" : "Un archivo o carpeta ha sido <strong>cambiado</strong>", + "A file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>eliminado</strong>", + "A file or folder has been <strong>restored</strong>" : "Un archivo o carpeta ha sido <strong>restaurado</strong>", + "You created %1$s" : "Usted creó %1$s", + "%2$s created %1$s" : "%2$s creó %1$s", + "%1$s was created in a public folder" : "%1$s fue creado en un folder público", + "You changed %1$s" : "Usted cambió %1$s", + "%2$s changed %1$s" : "%2$s cambió %1$s", + "You deleted %1$s" : "Usted eliminó %1$s", + "%2$s deleted %1$s" : "%2$s eliminó %1$s", + "You restored %1$s" : "Usted restauró %1$s", + "%2$s restored %1$s" : "%2$s restauró %1$s" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/es_CR.json b/apps/files/l10n/es_CR.json index ef5fc586755..4f1307b6e1c 100644 --- a/apps/files/l10n/es_CR.json +++ b/apps/files/l10n/es_CR.json @@ -1,7 +1,21 @@ { "translations": { + "Files" : "Archivos", "_%n folder_::_%n folders_" : ["",""], "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], - "_matches '{filter}'_::_match '{filter}'_" : ["",""] + "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "A new file or folder has been <strong>created</strong>" : "Un nuevo archivo o carpeta ha sido <strong>creado</strong>", + "A file or folder has been <strong>changed</strong>" : "Un archivo o carpeta ha sido <strong>cambiado</strong>", + "A file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>eliminado</strong>", + "A file or folder has been <strong>restored</strong>" : "Un archivo o carpeta ha sido <strong>restaurado</strong>", + "You created %1$s" : "Usted creó %1$s", + "%2$s created %1$s" : "%2$s creó %1$s", + "%1$s was created in a public folder" : "%1$s fue creado en un folder público", + "You changed %1$s" : "Usted cambió %1$s", + "%2$s changed %1$s" : "%2$s cambió %1$s", + "You deleted %1$s" : "Usted eliminó %1$s", + "%2$s deleted %1$s" : "%2$s eliminó %1$s", + "You restored %1$s" : "Usted restauró %1$s", + "%2$s restored %1$s" : "%2$s restauró %1$s" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/es_MX.js b/apps/files/l10n/es_MX.js index 16a8c0c246b..18b45ae36f1 100644 --- a/apps/files/l10n/es_MX.js +++ b/apps/files/l10n/es_MX.js @@ -4,14 +4,8 @@ OC.L10N.register( "Unknown error" : "Error desconocido", "Could not move %s - File with this name already exists" : "No se pudo mover %s - Ya existe un archivo con ese nombre.", "Could not move %s" : "No se pudo mover %s", - "File name cannot be empty." : "El nombre de archivo no puede estar vacío.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nombre inválido, los caracteres \"\\\", \"/\", \"<\", \">\", \":\", \"\", \"|\" \"?\" y \"*\" no están permitidos ", "The name %s is already used in the folder %s. Please choose a different name." : "El nombre %s ya está en uso por la carpeta %s. Por favor elija uno diferente.", - "Not a valid source" : "No es un origen válido", - "Server is not allowed to open URLs, please check the server configuration" : "El servidor no puede acceder URLs; revise la configuración del servidor.", - "Error while downloading %s to %s" : "Error mientras se descargaba %s a %s", "Error when creating the file" : "Error al crear el archivo", - "Folder name cannot be empty." : "El nombre de la carpeta no puede estar vacío.", "Error when creating the folder" : "Error al crear la carpeta.", "Unable to set upload directory." : "Incapaz de crear directorio de subida.", "Invalid Token" : "Token Inválido", @@ -34,11 +28,9 @@ OC.L10N.register( "Upload cancelled." : "Subida cancelada.", "Could not get result from server." : "No se pudo obtener respuesta del servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "La subida del archivo está en proceso. Si sale de la página ahora, la subida será cancelada.", - "URL cannot be empty" : "La dirección URL no puede estar vacía", "{new_name} already exists" : "{new_name} ya existe", "Could not create file" : "No se pudo crear el archivo", "Could not create folder" : "No se pudo crear la carpeta", - "Error fetching URL" : "Error al descargar URL.", "Rename" : "Renombrar", "Delete" : "Eliminar", "Unshare" : "Dejar de compartir", @@ -55,6 +47,7 @@ OC.L10N.register( "_%n file_::_%n files_" : ["%n archivo","%n archivos"], "You don’t have permission to upload or create files here" : "No tienes permisos para subir o crear archivos aquí.", "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Subiendo %n archivos"], + "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.", @@ -76,7 +69,6 @@ OC.L10N.register( "Text file" : "Archivo de texto", "New folder" : "Nueva carpeta", "Folder" : "Carpeta", - "From link" : "Desde enlace", "Upload" : "Subir archivo", "Cancel upload" : "Cancelar subida", "Upload too large" : "Subida demasido grande", diff --git a/apps/files/l10n/es_MX.json b/apps/files/l10n/es_MX.json index 95e80a1b05a..26b28e5c231 100644 --- a/apps/files/l10n/es_MX.json +++ b/apps/files/l10n/es_MX.json @@ -2,14 +2,8 @@ "Unknown error" : "Error desconocido", "Could not move %s - File with this name already exists" : "No se pudo mover %s - Ya existe un archivo con ese nombre.", "Could not move %s" : "No se pudo mover %s", - "File name cannot be empty." : "El nombre de archivo no puede estar vacío.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nombre inválido, los caracteres \"\\\", \"/\", \"<\", \">\", \":\", \"\", \"|\" \"?\" y \"*\" no están permitidos ", "The name %s is already used in the folder %s. Please choose a different name." : "El nombre %s ya está en uso por la carpeta %s. Por favor elija uno diferente.", - "Not a valid source" : "No es un origen válido", - "Server is not allowed to open URLs, please check the server configuration" : "El servidor no puede acceder URLs; revise la configuración del servidor.", - "Error while downloading %s to %s" : "Error mientras se descargaba %s a %s", "Error when creating the file" : "Error al crear el archivo", - "Folder name cannot be empty." : "El nombre de la carpeta no puede estar vacío.", "Error when creating the folder" : "Error al crear la carpeta.", "Unable to set upload directory." : "Incapaz de crear directorio de subida.", "Invalid Token" : "Token Inválido", @@ -32,11 +26,9 @@ "Upload cancelled." : "Subida cancelada.", "Could not get result from server." : "No se pudo obtener respuesta del servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "La subida del archivo está en proceso. Si sale de la página ahora, la subida será cancelada.", - "URL cannot be empty" : "La dirección URL no puede estar vacía", "{new_name} already exists" : "{new_name} ya existe", "Could not create file" : "No se pudo crear el archivo", "Could not create folder" : "No se pudo crear la carpeta", - "Error fetching URL" : "Error al descargar URL.", "Rename" : "Renombrar", "Delete" : "Eliminar", "Unshare" : "Dejar de compartir", @@ -53,6 +45,7 @@ "_%n file_::_%n files_" : ["%n archivo","%n archivos"], "You don’t have permission to upload or create files here" : "No tienes permisos para subir o crear archivos aquí.", "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Subiendo %n archivos"], + "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.", @@ -74,7 +67,6 @@ "Text file" : "Archivo de texto", "New folder" : "Nueva carpeta", "Folder" : "Carpeta", - "From link" : "Desde enlace", "Upload" : "Subir archivo", "Cancel upload" : "Cancelar subida", "Upload too large" : "Subida demasido grande", diff --git a/apps/files/l10n/es_PY.js b/apps/files/l10n/es_PY.js index 6b2234ae636..03df532ef9d 100644 --- a/apps/files/l10n/es_PY.js +++ b/apps/files/l10n/es_PY.js @@ -5,6 +5,19 @@ OC.L10N.register( "_%n folder_::_%n folders_" : ["",""], "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], - "_matches '{filter}'_::_match '{filter}'_" : ["",""] + "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "A new file or folder has been <strong>created</strong>" : "Ha sido <strong>creado</strong> un nuevo archivo o carpeta", + "A file or folder has been <strong>changed</strong>" : "Ha sido <strong>modificado</strong> un archivo o carpeta", + "A file or folder has been <strong>deleted</strong>" : "Ha sido <strong>eliminado</strong> un archivo o carpeta", + "A file or folder has been <strong>restored</strong>" : "Se ha <strong>recuperado</strong> un archivo o carpeta", + "You created %1$s" : "Ha creado %1$s", + "%2$s created %1$s" : "%2$s ha creado %1$s", + "%1$s was created in a public folder" : "%1$s ha sido creado en una carpeta pública", + "You changed %1$s" : "Ha modificado %1$s", + "%2$s changed %1$s" : "%2$s ha modificado %1$s", + "You deleted %1$s" : "Usted ha eliminado %1$s", + "%2$s deleted %1$s" : "%2$s ha eliminado %1$s", + "You restored %1$s" : "Ha recuperado %1$s", + "%2$s restored %1$s" : "%2$s ha recuperado %1$s" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/es_PY.json b/apps/files/l10n/es_PY.json index 3fcc4aefc43..de2dab354f1 100644 --- a/apps/files/l10n/es_PY.json +++ b/apps/files/l10n/es_PY.json @@ -3,6 +3,19 @@ "_%n folder_::_%n folders_" : ["",""], "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], - "_matches '{filter}'_::_match '{filter}'_" : ["",""] + "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "A new file or folder has been <strong>created</strong>" : "Ha sido <strong>creado</strong> un nuevo archivo o carpeta", + "A file or folder has been <strong>changed</strong>" : "Ha sido <strong>modificado</strong> un archivo o carpeta", + "A file or folder has been <strong>deleted</strong>" : "Ha sido <strong>eliminado</strong> un archivo o carpeta", + "A file or folder has been <strong>restored</strong>" : "Se ha <strong>recuperado</strong> un archivo o carpeta", + "You created %1$s" : "Ha creado %1$s", + "%2$s created %1$s" : "%2$s ha creado %1$s", + "%1$s was created in a public folder" : "%1$s ha sido creado en una carpeta pública", + "You changed %1$s" : "Ha modificado %1$s", + "%2$s changed %1$s" : "%2$s ha modificado %1$s", + "You deleted %1$s" : "Usted ha eliminado %1$s", + "%2$s deleted %1$s" : "%2$s ha eliminado %1$s", + "You restored %1$s" : "Ha recuperado %1$s", + "%2$s restored %1$s" : "%2$s ha recuperado %1$s" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/et_EE.js b/apps/files/l10n/et_EE.js index bb3fe98283d..3bde096acd0 100644 --- a/apps/files/l10n/et_EE.js +++ b/apps/files/l10n/et_EE.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Ei saa liigutada faili %s - samanimeline fail on juba olemas", "Could not move %s" : "%s liigutamine ebaõnnestus", "Permission denied" : "Ligipääs keelatud", - "File name cannot be empty." : "Faili nimi ei saa olla tühi.", - "\"%s\" is an invalid file name." : "\"%s\" on vigane failinimi.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Vigane nimi, '\\', '/', '<', '>', ':', '\"', '|', '?' ja '*' pole lubatud.", "The target folder has been moved or deleted." : "Sihtkataloog on ümber tõstetud või kustutatud.", "The name %s is already used in the folder %s. Please choose a different name." : "Nimi %s on juba kasutusel kataloogis %s. Palun vali mõni teine nimi.", - "Not a valid source" : "Pole korrektne lähteallikas", - "Server is not allowed to open URLs, please check the server configuration" : "Server ei võimalda URL-ide avamist, palun kontrolli serveri seadistust", - "The file exceeds your quota by %s" : "Fail ületab sinu limiidi: %s", - "Error while downloading %s to %s" : "Viga %s allalaadimisel %s", "Error when creating the file" : "Viga faili loomisel", - "Folder name cannot be empty." : "Kataloogi nimi ei saa olla tühi.", "Error when creating the folder" : "Viga kataloogi loomisel", "Unable to set upload directory." : "Üleslaadimiste kausta määramine ebaõnnestus.", "Invalid Token" : "Vigane kontrollkood", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Üleslaadimine tühistati.", "Could not get result from server." : "Serverist ei saadud tulemusi", "File upload is in progress. Leaving the page now will cancel the upload." : "Faili üleslaadimine on töös. Lehelt lahkumine katkestab selle üleslaadimise.", - "URL cannot be empty" : "URL ei saa olla tühi", "{new_name} already exists" : "{new_name} on juba olemas", "Could not create file" : "Ei suuda luua faili", "Could not create folder" : "Ei suuda luua kataloogi", - "Error fetching URL" : "Viga URL-i haaramisel", "Rename" : "Nimeta ümber", "Delete" : "Kustuta", "Disconnect storage" : "Ühenda andmehoidla lahti.", @@ -68,6 +58,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Sul puuduvad õigused siia failide üleslaadimiseks või tekitamiseks", "_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.", "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.", @@ -76,6 +67,19 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["",""], "{dirs} and {files}" : "{dirs} ja {files}", "Favorite" : "Lemmik", + "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>", + "A file or folder has been <strong>restored</strong>" : "Fail või kaust on <strong>taastatud</strong>", + "You created %1$s" : "Sa tekitasid %1$s", + "%2$s created %1$s" : "%2$s tekitatud %1$s", + "%1$s was created in a public folder" : "%1$s lisati avalikku kausta", + "You changed %1$s" : "Sa muutsid %1$s", + "%2$s changed %1$s" : "%2$s muutis %1$s", + "You deleted %1$s" : "Sa kustutasid %1$s", + "%2$s deleted %1$s" : "%2$s kustutas %1$s", + "You restored %1$s" : "Sa taastasid %1$s", + "%2$s restored %1$s" : "%2$s taastas %1$s", "%s could not be renamed as it has been deleted" : "%s ei saa ümber nimetada, kuna see on kustutatud", "%s could not be renamed" : "%s ümbernimetamine ebaõnnestus", "Upload (max. %s)" : "Üleslaadimine (max. %s)", @@ -91,7 +95,6 @@ OC.L10N.register( "Text file" : "Tekstifail", "New folder" : "Uus kaust", "Folder" : "Kaust", - "From link" : "Allikast", "Upload" : "Lae üles", "Cancel upload" : "Tühista üleslaadimine", "Upload too large" : "Üleslaadimine on liiga suur", diff --git a/apps/files/l10n/et_EE.json b/apps/files/l10n/et_EE.json index bcb73946aea..065229f35c7 100644 --- a/apps/files/l10n/et_EE.json +++ b/apps/files/l10n/et_EE.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Ei saa liigutada faili %s - samanimeline fail on juba olemas", "Could not move %s" : "%s liigutamine ebaõnnestus", "Permission denied" : "Ligipääs keelatud", - "File name cannot be empty." : "Faili nimi ei saa olla tühi.", - "\"%s\" is an invalid file name." : "\"%s\" on vigane failinimi.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Vigane nimi, '\\', '/', '<', '>', ':', '\"', '|', '?' ja '*' pole lubatud.", "The target folder has been moved or deleted." : "Sihtkataloog on ümber tõstetud või kustutatud.", "The name %s is already used in the folder %s. Please choose a different name." : "Nimi %s on juba kasutusel kataloogis %s. Palun vali mõni teine nimi.", - "Not a valid source" : "Pole korrektne lähteallikas", - "Server is not allowed to open URLs, please check the server configuration" : "Server ei võimalda URL-ide avamist, palun kontrolli serveri seadistust", - "The file exceeds your quota by %s" : "Fail ületab sinu limiidi: %s", - "Error while downloading %s to %s" : "Viga %s allalaadimisel %s", "Error when creating the file" : "Viga faili loomisel", - "Folder name cannot be empty." : "Kataloogi nimi ei saa olla tühi.", "Error when creating the folder" : "Viga kataloogi loomisel", "Unable to set upload directory." : "Üleslaadimiste kausta määramine ebaõnnestus.", "Invalid Token" : "Vigane kontrollkood", @@ -41,11 +33,9 @@ "Upload cancelled." : "Üleslaadimine tühistati.", "Could not get result from server." : "Serverist ei saadud tulemusi", "File upload is in progress. Leaving the page now will cancel the upload." : "Faili üleslaadimine on töös. Lehelt lahkumine katkestab selle üleslaadimise.", - "URL cannot be empty" : "URL ei saa olla tühi", "{new_name} already exists" : "{new_name} on juba olemas", "Could not create file" : "Ei suuda luua faili", "Could not create folder" : "Ei suuda luua kataloogi", - "Error fetching URL" : "Viga URL-i haaramisel", "Rename" : "Nimeta ümber", "Delete" : "Kustuta", "Disconnect storage" : "Ühenda andmehoidla lahti.", @@ -66,6 +56,7 @@ "You don’t have permission to upload or create files here" : "Sul puuduvad õigused siia failide üleslaadimiseks või tekitamiseks", "_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.", "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.", @@ -74,6 +65,19 @@ "_matches '{filter}'_::_match '{filter}'_" : ["",""], "{dirs} and {files}" : "{dirs} ja {files}", "Favorite" : "Lemmik", + "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>", + "A file or folder has been <strong>restored</strong>" : "Fail või kaust on <strong>taastatud</strong>", + "You created %1$s" : "Sa tekitasid %1$s", + "%2$s created %1$s" : "%2$s tekitatud %1$s", + "%1$s was created in a public folder" : "%1$s lisati avalikku kausta", + "You changed %1$s" : "Sa muutsid %1$s", + "%2$s changed %1$s" : "%2$s muutis %1$s", + "You deleted %1$s" : "Sa kustutasid %1$s", + "%2$s deleted %1$s" : "%2$s kustutas %1$s", + "You restored %1$s" : "Sa taastasid %1$s", + "%2$s restored %1$s" : "%2$s taastas %1$s", "%s could not be renamed as it has been deleted" : "%s ei saa ümber nimetada, kuna see on kustutatud", "%s could not be renamed" : "%s ümbernimetamine ebaõnnestus", "Upload (max. %s)" : "Üleslaadimine (max. %s)", @@ -89,7 +93,6 @@ "Text file" : "Tekstifail", "New folder" : "Uus kaust", "Folder" : "Kaust", - "From link" : "Allikast", "Upload" : "Lae üles", "Cancel upload" : "Tühista üleslaadimine", "Upload too large" : "Üleslaadimine on liiga suur", diff --git a/apps/files/l10n/eu.js b/apps/files/l10n/eu.js index 0db6c61e466..6673f2d3f77 100644 --- a/apps/files/l10n/eu.js +++ b/apps/files/l10n/eu.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Ezin da %s mugitu - Izen hau duen fitxategia dagoeneko existitzen da", "Could not move %s" : "Ezin dira fitxategiak mugitu %s", "Permission denied" : "Baimena Ukatua", - "File name cannot be empty." : "Fitxategi izena ezin da hutsa izan.", - "\"%s\" is an invalid file name." : "\"%s\" ez da fitxategi izen baliogarria.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "IZen aliogabea, '\\', '/', '<', '>', ':', '\"', '|', '?' eta '*' ez daude baimenduta.", "The target folder has been moved or deleted." : "Jatorrizko karpeta mugitu edo ezabatu da.", "The name %s is already used in the folder %s. Please choose a different name." : "%s izena dagoeneko erabilita dago %s karpetan. Mesdez hautatu izen ezberdina.", - "Not a valid source" : "Ez da jatorri baliogarria", - "Server is not allowed to open URLs, please check the server configuration" : "Zerbitzaria ez dago URLak irekitzeko baimendua, mesedez egiaztatu zerbitzariaren konfigurazioa", - "The file exceeds your quota by %s" : "Fitxategiak zure kouta gainditzen du %s-an", - "Error while downloading %s to %s" : "Errorea %s %sra deskargatzerakoan", "Error when creating the file" : "Errorea fitxategia sortzerakoan", - "Folder name cannot be empty." : "Karpeta izena ezin da hutsa izan.", "Error when creating the folder" : "Errorea karpeta sortzerakoan", "Unable to set upload directory." : "Ezin da igoera direktorioa ezarri.", "Invalid Token" : "Lekuko baliogabea", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Igoera ezeztatuta", "Could not get result from server." : "Ezin da zerbitzaritik emaitzik lortu", "File upload is in progress. Leaving the page now will cancel the upload." : "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du.", - "URL cannot be empty" : "URLa ezin da hutsik egon", "{new_name} already exists" : "{new_name} dagoeneko existitzen da", "Could not create file" : "Ezin izan da fitxategia sortu", "Could not create folder" : "Ezin izan da karpeta sortu", - "Error fetching URL" : "Errorea URLa eskuratzerakoan", "Rename" : "Berrizendatu", "Delete" : "Ezabatu", "Disconnect storage" : "Deskonektatu biltegia", @@ -70,6 +60,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Ez duzu fitxategiak hona igotzeko edo hemen sortzeko baimenik", "_Uploading %n file_::_Uploading %n files_" : ["Fitxategi %n igotzen","%n fitxategi igotzen"], "\"{name}\" is an invalid file name." : "\"{name}\" ez da fitxategi izen baliogarria.", + "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", @@ -79,6 +70,19 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} eta {files}", "Favorited" : "Gogokoa", "Favorite" : "Gogokoa", + "A new file or folder has been <strong>created</strong>" : "Fitxategi edo karpeta berri bat <strong>sortu da</strong>", + "A file or folder has been <strong>changed</strong>" : "Fitxategi edo karpeta bat <strong>aldatu da</strong>", + "A file or folder has been <strong>deleted</strong>" : "Fitxategi edo karpeta bat <strong>ezabatu da</strong>", + "A file or folder has been <strong>restored</strong>" : "Fitxategia edo karpeta <strong>berrezarri</strong> da", + "You created %1$s" : "Zuk sortua %1$s", + "%2$s created %1$s" : "%2$sk sortua %1$s", + "%1$s was created in a public folder" : "%1$s sortu da karpeta publiko batean", + "You changed %1$s" : "%1$s aldatu duzu", + "%2$s changed %1$s" : "%2$sk aldatuta %1$s", + "You deleted %1$s" : "%1$s ezabatu duzu", + "%2$s deleted %1$s" : "%2$sk ezabatuta %1$s", + "You restored %1$s" : "Zuk %1$s berrezarri duzu", + "%2$s restored %1$s" : "%2$sk %1$s berrezarri du", "%s could not be renamed as it has been deleted" : "%s ezin izan da berrizendatu ezabatua zegoen eta", "%s could not be renamed" : "%s ezin da berrizendatu", "Upload (max. %s)" : "Igo (max. %s)", @@ -94,7 +98,6 @@ OC.L10N.register( "Text file" : "Testu fitxategia", "New folder" : "Karpeta berria", "Folder" : "Karpeta", - "From link" : "Estekatik", "Upload" : "Igo", "Cancel upload" : "Ezeztatu igoera", "No files yet" : "Oraingoz fitxategirik ez", diff --git a/apps/files/l10n/eu.json b/apps/files/l10n/eu.json index 1529fd880f9..b400875ca01 100644 --- a/apps/files/l10n/eu.json +++ b/apps/files/l10n/eu.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Ezin da %s mugitu - Izen hau duen fitxategia dagoeneko existitzen da", "Could not move %s" : "Ezin dira fitxategiak mugitu %s", "Permission denied" : "Baimena Ukatua", - "File name cannot be empty." : "Fitxategi izena ezin da hutsa izan.", - "\"%s\" is an invalid file name." : "\"%s\" ez da fitxategi izen baliogarria.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "IZen aliogabea, '\\', '/', '<', '>', ':', '\"', '|', '?' eta '*' ez daude baimenduta.", "The target folder has been moved or deleted." : "Jatorrizko karpeta mugitu edo ezabatu da.", "The name %s is already used in the folder %s. Please choose a different name." : "%s izena dagoeneko erabilita dago %s karpetan. Mesdez hautatu izen ezberdina.", - "Not a valid source" : "Ez da jatorri baliogarria", - "Server is not allowed to open URLs, please check the server configuration" : "Zerbitzaria ez dago URLak irekitzeko baimendua, mesedez egiaztatu zerbitzariaren konfigurazioa", - "The file exceeds your quota by %s" : "Fitxategiak zure kouta gainditzen du %s-an", - "Error while downloading %s to %s" : "Errorea %s %sra deskargatzerakoan", "Error when creating the file" : "Errorea fitxategia sortzerakoan", - "Folder name cannot be empty." : "Karpeta izena ezin da hutsa izan.", "Error when creating the folder" : "Errorea karpeta sortzerakoan", "Unable to set upload directory." : "Ezin da igoera direktorioa ezarri.", "Invalid Token" : "Lekuko baliogabea", @@ -41,11 +33,9 @@ "Upload cancelled." : "Igoera ezeztatuta", "Could not get result from server." : "Ezin da zerbitzaritik emaitzik lortu", "File upload is in progress. Leaving the page now will cancel the upload." : "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du.", - "URL cannot be empty" : "URLa ezin da hutsik egon", "{new_name} already exists" : "{new_name} dagoeneko existitzen da", "Could not create file" : "Ezin izan da fitxategia sortu", "Could not create folder" : "Ezin izan da karpeta sortu", - "Error fetching URL" : "Errorea URLa eskuratzerakoan", "Rename" : "Berrizendatu", "Delete" : "Ezabatu", "Disconnect storage" : "Deskonektatu biltegia", @@ -68,6 +58,7 @@ "You don’t have permission to upload or create files here" : "Ez duzu fitxategiak hona igotzeko edo hemen sortzeko baimenik", "_Uploading %n file_::_Uploading %n files_" : ["Fitxategi %n igotzen","%n fitxategi igotzen"], "\"{name}\" is an invalid file name." : "\"{name}\" ez da fitxategi izen baliogarria.", + "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", @@ -77,6 +68,19 @@ "{dirs} and {files}" : "{dirs} eta {files}", "Favorited" : "Gogokoa", "Favorite" : "Gogokoa", + "A new file or folder has been <strong>created</strong>" : "Fitxategi edo karpeta berri bat <strong>sortu da</strong>", + "A file or folder has been <strong>changed</strong>" : "Fitxategi edo karpeta bat <strong>aldatu da</strong>", + "A file or folder has been <strong>deleted</strong>" : "Fitxategi edo karpeta bat <strong>ezabatu da</strong>", + "A file or folder has been <strong>restored</strong>" : "Fitxategia edo karpeta <strong>berrezarri</strong> da", + "You created %1$s" : "Zuk sortua %1$s", + "%2$s created %1$s" : "%2$sk sortua %1$s", + "%1$s was created in a public folder" : "%1$s sortu da karpeta publiko batean", + "You changed %1$s" : "%1$s aldatu duzu", + "%2$s changed %1$s" : "%2$sk aldatuta %1$s", + "You deleted %1$s" : "%1$s ezabatu duzu", + "%2$s deleted %1$s" : "%2$sk ezabatuta %1$s", + "You restored %1$s" : "Zuk %1$s berrezarri duzu", + "%2$s restored %1$s" : "%2$sk %1$s berrezarri du", "%s could not be renamed as it has been deleted" : "%s ezin izan da berrizendatu ezabatua zegoen eta", "%s could not be renamed" : "%s ezin da berrizendatu", "Upload (max. %s)" : "Igo (max. %s)", @@ -92,7 +96,6 @@ "Text file" : "Testu fitxategia", "New folder" : "Karpeta berria", "Folder" : "Karpeta", - "From link" : "Estekatik", "Upload" : "Igo", "Cancel upload" : "Ezeztatu igoera", "No files yet" : "Oraingoz fitxategirik ez", diff --git a/apps/files/l10n/fa.js b/apps/files/l10n/fa.js index ad4f50e7043..41cab458101 100644 --- a/apps/files/l10n/fa.js +++ b/apps/files/l10n/fa.js @@ -4,8 +4,6 @@ OC.L10N.register( "Unknown error" : "خطای نامشخص", "Could not move %s - File with this name already exists" : "%s نمی توان جابجا کرد - در حال حاضر پرونده با این نام وجود دارد. ", "Could not move %s" : "%s نمی تواند حرکت کند ", - "File name cannot be empty." : "نام پرونده نمی تواند خالی باشد.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "نام نامعتبر ، '\\', '/', '<', '>', ':', '\"', '|', '?' و '*' مجاز نمی باشند.", "Unable to set upload directory." : "قادر به تنظیم پوشه آپلود نمی باشد.", "Invalid Token" : "رمز نامعتبر", "No file was uploaded. Unknown error" : "هیچ فایلی آپلود نشد.خطای ناشناس", @@ -36,9 +34,23 @@ OC.L10N.register( "_%n folder_::_%n folders_" : [""], "_%n file_::_%n files_" : [""], "_Uploading %n file_::_Uploading %n files_" : ["در حال بارگذاری %n فایل"], + "File name cannot be empty." : "نام پرونده نمی تواند خالی باشد.", "Your storage is full, files can not be updated or synced anymore!" : "فضای ذخیره ی شما کاملا پر است، بیش از این فایلها بهنگام یا همگام سازی نمی توانند بشوند!", "Your storage is almost full ({usedSpacePercent}%)" : "فضای ذخیره ی شما تقریبا پر است ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : [""], + "A new file or folder has been <strong>created</strong>" : "فایل یا پوشه ای <strong>ایجاد</strong> شد", + "A file or folder has been <strong>changed</strong>" : "فایل یا پوشه ای به <strong>تغییر</strong> یافت", + "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" : "%s نمیتواند تغییر نام دهد.", "File handling" : "اداره پرونده ها", "Maximum upload size" : "حداکثر اندازه بارگزاری", @@ -51,7 +63,6 @@ OC.L10N.register( "Text file" : "فایل متنی", "New folder" : "پوشه جدید", "Folder" : "پوشه", - "From link" : "از پیوند", "Upload" : "بارگزاری", "Cancel upload" : "متوقف کردن بار گذاری", "Upload too large" : "سایز فایل برای آپلود زیاد است(م.تنظیمات در php.ini)", diff --git a/apps/files/l10n/fa.json b/apps/files/l10n/fa.json index 3d1ef49dc98..119fd18a34d 100644 --- a/apps/files/l10n/fa.json +++ b/apps/files/l10n/fa.json @@ -2,8 +2,6 @@ "Unknown error" : "خطای نامشخص", "Could not move %s - File with this name already exists" : "%s نمی توان جابجا کرد - در حال حاضر پرونده با این نام وجود دارد. ", "Could not move %s" : "%s نمی تواند حرکت کند ", - "File name cannot be empty." : "نام پرونده نمی تواند خالی باشد.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "نام نامعتبر ، '\\', '/', '<', '>', ':', '\"', '|', '?' و '*' مجاز نمی باشند.", "Unable to set upload directory." : "قادر به تنظیم پوشه آپلود نمی باشد.", "Invalid Token" : "رمز نامعتبر", "No file was uploaded. Unknown error" : "هیچ فایلی آپلود نشد.خطای ناشناس", @@ -34,9 +32,23 @@ "_%n folder_::_%n folders_" : [""], "_%n file_::_%n files_" : [""], "_Uploading %n file_::_Uploading %n files_" : ["در حال بارگذاری %n فایل"], + "File name cannot be empty." : "نام پرونده نمی تواند خالی باشد.", "Your storage is full, files can not be updated or synced anymore!" : "فضای ذخیره ی شما کاملا پر است، بیش از این فایلها بهنگام یا همگام سازی نمی توانند بشوند!", "Your storage is almost full ({usedSpacePercent}%)" : "فضای ذخیره ی شما تقریبا پر است ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : [""], + "A new file or folder has been <strong>created</strong>" : "فایل یا پوشه ای <strong>ایجاد</strong> شد", + "A file or folder has been <strong>changed</strong>" : "فایل یا پوشه ای به <strong>تغییر</strong> یافت", + "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" : "%s نمیتواند تغییر نام دهد.", "File handling" : "اداره پرونده ها", "Maximum upload size" : "حداکثر اندازه بارگزاری", @@ -49,7 +61,6 @@ "Text file" : "فایل متنی", "New folder" : "پوشه جدید", "Folder" : "پوشه", - "From link" : "از پیوند", "Upload" : "بارگزاری", "Cancel upload" : "متوقف کردن بار گذاری", "Upload too large" : "سایز فایل برای آپلود زیاد است(م.تنظیمات در php.ini)", diff --git a/apps/files/l10n/fi_FI.js b/apps/files/l10n/fi_FI.js index cd15c95ffa5..06975ffff0b 100644 --- a/apps/files/l10n/fi_FI.js +++ b/apps/files/l10n/fi_FI.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Kohteen %s siirto ei onnistunut - Tiedosto samalla nimellä on jo olemassa", "Could not move %s" : "Kohteen %s siirto ei onnistunut", "Permission denied" : "Ei käyttöoikeutta", - "File name cannot be empty." : "Tiedoston nimi ei voi olla tyhjä.", - "\"%s\" is an invalid file name." : "\"%s\" on virheellinen tiedostonimi.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Virheellinen nimi, merkit '\\', '/', '<', '>', ':', '\"', '|', '?' ja '*' eivät ole sallittuja.", "The target folder has been moved or deleted." : "Kohdekansio on siirretty tai poistettu.", "The name %s is already used in the folder %s. Please choose a different name." : "Nimi %s on jo käytössä kansiossa %s. Valitse toinen nimi.", - "Not a valid source" : "Virheellinen lähde", - "Server is not allowed to open URLs, please check the server configuration" : "Palvelimen ei ole lupa avata verkko-osoitteita. Tarkista palvelimen asetukset", - "The file exceeds your quota by %s" : "Tiedosto ylittää kiintiösi %s:lla", - "Error while downloading %s to %s" : "Virhe ladatessa kohdetta %s sijaintiin %s", "Error when creating the file" : "Virhe tiedostoa luotaessa", - "Folder name cannot be empty." : "Kansion nimi ei voi olla tyhjä.", "Error when creating the folder" : "Virhe kansiota luotaessa", "Unable to set upload directory." : "Lähetyskansion asettaminen epäonnistui.", "Invalid Token" : "Virheellinen token", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Lähetys peruttu.", "Could not get result from server." : "Tuloksien saaminen palvelimelta ei onnistunut.", "File upload is in progress. Leaving the page now will cancel the upload." : "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen.", - "URL cannot be empty" : "Osoite ei voi olla tyhjä", "{new_name} already exists" : "{new_name} on jo olemassa", "Could not create file" : "Tiedoston luominen epäonnistui", "Could not create folder" : "Kansion luominen epäonnistui", - "Error fetching URL" : "Virhe noutaessa verkko-osoitetta", "Rename" : "Nimeä uudelleen", "Delete" : "Poista", "Disconnect storage" : "Katkaise yhteys tallennustilaan", @@ -70,6 +60,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Käyttöoikeutesi eivät riitä tiedostojen lähettämiseen tai kansioiden luomiseen tähän sijaintiin", "_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ä.", "Your storage is full, files can not be updated or synced anymore!" : "Tallennustila on loppu, tiedostoja ei voi enää päivittää tai synkronoida!", "Your storage is almost full ({usedSpacePercent}%)" : "Tallennustila on melkein loppu ({usedSpacePercent}%)", "Encryption 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.", @@ -79,6 +70,20 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} ja {files}", "Favorited" : "Lisätty suosikkeihin", "Favorite" : "Suosikki", + "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>", + "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", + "%2$s created %1$s" : "%2$s loi kohteen %1$s", + "%1$s was created in a public folder" : "%1$s luotiin julkiseen kansioon", + "You changed %1$s" : "Muutit kohdetta %1$s", + "%2$s changed %1$s" : "%2$s muutti kohdetta %1$s", + "You deleted %1$s" : "Poistit kohteen %1$s", + "%2$s deleted %1$s" : "%2$s poisti kohteen %1$s", + "You restored %1$s" : "Palautit kohteen %1$s", + "%2$s restored %1$s" : "%2$s palautti kohteen %1$s", "%s could not be renamed as it has been deleted" : "Kohdetta %s ei voitu nimetä uudelleen, koska se on poistettu", "%s could not be renamed" : "kohteen %s nimeäminen uudelleen epäonnistui", "Upload (max. %s)" : "Lähetys (enintään %s)", @@ -86,6 +91,7 @@ OC.L10N.register( "Maximum upload size" : "Lähetettävän tiedoston suurin sallittu koko", "max. possible: " : "suurin mahdollinen:", "Save" : "Tallenna", + "Can not be edited from here due to insufficient permissions." : "Ei muokattavissa täällä puutteellisten oikeuksien vuoksi.", "Settings" : "Asetukset", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Käytä tätä osoitetta <a href=\"%s\" target=\"_blank\">käyttääksesi tiedostojasi WebDAVin kautta</a>", @@ -94,7 +100,6 @@ OC.L10N.register( "Text file" : "Tekstitiedosto", "New folder" : "Uusi kansio", "Folder" : "Kansio", - "From link" : "Linkistä", "Upload" : "Lähetä", "Cancel upload" : "Peru lähetys", "No files yet" : "EI yhtäkään tiedostoa vielä", diff --git a/apps/files/l10n/fi_FI.json b/apps/files/l10n/fi_FI.json index a3677691bd0..e21d7566ed1 100644 --- a/apps/files/l10n/fi_FI.json +++ b/apps/files/l10n/fi_FI.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Kohteen %s siirto ei onnistunut - Tiedosto samalla nimellä on jo olemassa", "Could not move %s" : "Kohteen %s siirto ei onnistunut", "Permission denied" : "Ei käyttöoikeutta", - "File name cannot be empty." : "Tiedoston nimi ei voi olla tyhjä.", - "\"%s\" is an invalid file name." : "\"%s\" on virheellinen tiedostonimi.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Virheellinen nimi, merkit '\\', '/', '<', '>', ':', '\"', '|', '?' ja '*' eivät ole sallittuja.", "The target folder has been moved or deleted." : "Kohdekansio on siirretty tai poistettu.", "The name %s is already used in the folder %s. Please choose a different name." : "Nimi %s on jo käytössä kansiossa %s. Valitse toinen nimi.", - "Not a valid source" : "Virheellinen lähde", - "Server is not allowed to open URLs, please check the server configuration" : "Palvelimen ei ole lupa avata verkko-osoitteita. Tarkista palvelimen asetukset", - "The file exceeds your quota by %s" : "Tiedosto ylittää kiintiösi %s:lla", - "Error while downloading %s to %s" : "Virhe ladatessa kohdetta %s sijaintiin %s", "Error when creating the file" : "Virhe tiedostoa luotaessa", - "Folder name cannot be empty." : "Kansion nimi ei voi olla tyhjä.", "Error when creating the folder" : "Virhe kansiota luotaessa", "Unable to set upload directory." : "Lähetyskansion asettaminen epäonnistui.", "Invalid Token" : "Virheellinen token", @@ -41,11 +33,9 @@ "Upload cancelled." : "Lähetys peruttu.", "Could not get result from server." : "Tuloksien saaminen palvelimelta ei onnistunut.", "File upload is in progress. Leaving the page now will cancel the upload." : "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen.", - "URL cannot be empty" : "Osoite ei voi olla tyhjä", "{new_name} already exists" : "{new_name} on jo olemassa", "Could not create file" : "Tiedoston luominen epäonnistui", "Could not create folder" : "Kansion luominen epäonnistui", - "Error fetching URL" : "Virhe noutaessa verkko-osoitetta", "Rename" : "Nimeä uudelleen", "Delete" : "Poista", "Disconnect storage" : "Katkaise yhteys tallennustilaan", @@ -68,6 +58,7 @@ "You don’t have permission to upload or create files here" : "Käyttöoikeutesi eivät riitä tiedostojen lähettämiseen tai kansioiden luomiseen tähän sijaintiin", "_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ä.", "Your storage is full, files can not be updated or synced anymore!" : "Tallennustila on loppu, tiedostoja ei voi enää päivittää tai synkronoida!", "Your storage is almost full ({usedSpacePercent}%)" : "Tallennustila on melkein loppu ({usedSpacePercent}%)", "Encryption 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.", @@ -77,6 +68,20 @@ "{dirs} and {files}" : "{dirs} ja {files}", "Favorited" : "Lisätty suosikkeihin", "Favorite" : "Suosikki", + "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>", + "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", + "%2$s created %1$s" : "%2$s loi kohteen %1$s", + "%1$s was created in a public folder" : "%1$s luotiin julkiseen kansioon", + "You changed %1$s" : "Muutit kohdetta %1$s", + "%2$s changed %1$s" : "%2$s muutti kohdetta %1$s", + "You deleted %1$s" : "Poistit kohteen %1$s", + "%2$s deleted %1$s" : "%2$s poisti kohteen %1$s", + "You restored %1$s" : "Palautit kohteen %1$s", + "%2$s restored %1$s" : "%2$s palautti kohteen %1$s", "%s could not be renamed as it has been deleted" : "Kohdetta %s ei voitu nimetä uudelleen, koska se on poistettu", "%s could not be renamed" : "kohteen %s nimeäminen uudelleen epäonnistui", "Upload (max. %s)" : "Lähetys (enintään %s)", @@ -84,6 +89,7 @@ "Maximum upload size" : "Lähetettävän tiedoston suurin sallittu koko", "max. possible: " : "suurin mahdollinen:", "Save" : "Tallenna", + "Can not be edited from here due to insufficient permissions." : "Ei muokattavissa täällä puutteellisten oikeuksien vuoksi.", "Settings" : "Asetukset", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Käytä tätä osoitetta <a href=\"%s\" target=\"_blank\">käyttääksesi tiedostojasi WebDAVin kautta</a>", @@ -92,7 +98,6 @@ "Text file" : "Tekstitiedosto", "New folder" : "Uusi kansio", "Folder" : "Kansio", - "From link" : "Linkistä", "Upload" : "Lähetä", "Cancel upload" : "Peru lähetys", "No files yet" : "EI yhtäkään tiedostoa vielä", diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js index 9bf9fdcd401..5f68d603569 100644 --- a/apps/files/l10n/fr.js +++ b/apps/files/l10n/fr.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Impossible de déplacer %s - Un fichier portant ce nom existe déjà", "Could not move %s" : "Impossible de déplacer %s", "Permission denied" : "Permission refusée", - "File name cannot be empty." : "Le nom de fichier ne peut être vide.", - "\"%s\" is an invalid file name." : "\"%s\" n'est pas un nom de fichier valide.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ce nom n'est pas valable : les caractères '\\', '/', '<', '>', ':', '\"', '|', '?' et '*' ne sont pas autorisés.", "The target folder has been moved or deleted." : "Le dossier cible a été déplacé ou supprimé.", "The name %s is already used in the folder %s. Please choose a different name." : "Le nom %s est déjà utilisé dans le dossier %s. Merci de choisir un nom différent.", - "Not a valid source" : "La source n'est pas valide", - "Server is not allowed to open URLs, please check the server configuration" : "Le serveur n'est pas autorisé à ouvrir des URL, veuillez vérifier la configuration du serveur", - "The file exceeds your quota by %s" : "Le fichier excède votre quota de %s", - "Error while downloading %s to %s" : "Erreur pendant le téléchargement de %s vers %s", "Error when creating the file" : "Erreur pendant la création du fichier", - "Folder name cannot be empty." : "Le nom de dossier ne peut pas être vide.", "Error when creating the folder" : "Erreur pendant la création du dossier", "Unable to set upload directory." : "Impossible de définir le dossier de destination.", "Invalid Token" : "Jeton non valide", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Envoi annulé.", "Could not get result from server." : "Ne peut recevoir les résultats du serveur.", "File upload is in progress. Leaving the page now will cancel the upload." : "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier.", - "URL cannot be empty" : "L'URL ne peut pas être vide", "{new_name} already exists" : "{new_name} existe déjà", "Could not create file" : "Impossible de créer le fichier", "Could not create folder" : "Impossible de créer le dossier", - "Error fetching URL" : "Erreur d'accès à l'URL", "Rename" : "Renommer", "Delete" : "Supprimer", "Disconnect storage" : "Déconnecter ce support de stockage", @@ -70,6 +60,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'ajouter des fichiers ici", "_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.", "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 !", "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.", @@ -79,6 +70,20 @@ OC.L10N.register( "{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", + "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>", + "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>", + "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", + "You changed %1$s" : "Vous avez modifié %1$s", + "%2$s changed %1$s" : "%2$s a modifié %1$s", + "You deleted %1$s" : "Vous avez supprimé %1$s", + "%2$s deleted %1$s" : "%2$s a supprimé %1$s", + "You restored %1$s" : "Vous avez restauré %1$s", + "%2$s restored %1$s" : "%2$s a restauré %1$s", "%s could not be renamed as it has been deleted" : "%s ne peut être renommé car il a été supprimé ", "%s could not be renamed" : "%s ne peut être renommé", "Upload (max. %s)" : "Envoi (max. %s)", @@ -86,6 +91,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.", "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>", @@ -94,18 +100,17 @@ OC.L10N.register( "Text file" : "Fichier texte", "New folder" : "Nouveau dossier", "Folder" : "Dossier", - "From link" : "Depuis un lien", "Upload" : "Chargement", "Cancel upload" : "Annuler l'envoi", "No files yet" : "Aucun fichier pour l'instant", - "Upload some content or sync with your devices!" : "Envoyez des fichiers ou synchronisez en depuis vos appareils", + "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", "Upload too large" : "Téléversement trop volumineux", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Les fichiers que vous essayez d'envoyer dépassent la taille maximale d'envoi permise par ce serveur.", "Files are being scanned, please wait." : "Les fichiers sont en cours d'analyse, veuillez patienter.", "Currently scanning" : "Analyse en cours", - "No favorites" : "Pas de favori", + "No favorites" : "Aucun favori", "Files and folders you mark as favorite will show up here" : "Les fichiers et dossiers ajoutés à vos favoris apparaîtront ici" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json index fd36fda4125..a104d6d8424 100644 --- a/apps/files/l10n/fr.json +++ b/apps/files/l10n/fr.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Impossible de déplacer %s - Un fichier portant ce nom existe déjà", "Could not move %s" : "Impossible de déplacer %s", "Permission denied" : "Permission refusée", - "File name cannot be empty." : "Le nom de fichier ne peut être vide.", - "\"%s\" is an invalid file name." : "\"%s\" n'est pas un nom de fichier valide.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ce nom n'est pas valable : les caractères '\\', '/', '<', '>', ':', '\"', '|', '?' et '*' ne sont pas autorisés.", "The target folder has been moved or deleted." : "Le dossier cible a été déplacé ou supprimé.", "The name %s is already used in the folder %s. Please choose a different name." : "Le nom %s est déjà utilisé dans le dossier %s. Merci de choisir un nom différent.", - "Not a valid source" : "La source n'est pas valide", - "Server is not allowed to open URLs, please check the server configuration" : "Le serveur n'est pas autorisé à ouvrir des URL, veuillez vérifier la configuration du serveur", - "The file exceeds your quota by %s" : "Le fichier excède votre quota de %s", - "Error while downloading %s to %s" : "Erreur pendant le téléchargement de %s vers %s", "Error when creating the file" : "Erreur pendant la création du fichier", - "Folder name cannot be empty." : "Le nom de dossier ne peut pas être vide.", "Error when creating the folder" : "Erreur pendant la création du dossier", "Unable to set upload directory." : "Impossible de définir le dossier de destination.", "Invalid Token" : "Jeton non valide", @@ -41,11 +33,9 @@ "Upload cancelled." : "Envoi annulé.", "Could not get result from server." : "Ne peut recevoir les résultats du serveur.", "File upload is in progress. Leaving the page now will cancel the upload." : "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier.", - "URL cannot be empty" : "L'URL ne peut pas être vide", "{new_name} already exists" : "{new_name} existe déjà", "Could not create file" : "Impossible de créer le fichier", "Could not create folder" : "Impossible de créer le dossier", - "Error fetching URL" : "Erreur d'accès à l'URL", "Rename" : "Renommer", "Delete" : "Supprimer", "Disconnect storage" : "Déconnecter ce support de stockage", @@ -68,6 +58,7 @@ "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'ajouter des fichiers ici", "_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.", "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 !", "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.", @@ -77,6 +68,20 @@ "{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", + "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>", + "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>", + "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", + "You changed %1$s" : "Vous avez modifié %1$s", + "%2$s changed %1$s" : "%2$s a modifié %1$s", + "You deleted %1$s" : "Vous avez supprimé %1$s", + "%2$s deleted %1$s" : "%2$s a supprimé %1$s", + "You restored %1$s" : "Vous avez restauré %1$s", + "%2$s restored %1$s" : "%2$s a restauré %1$s", "%s could not be renamed as it has been deleted" : "%s ne peut être renommé car il a été supprimé ", "%s could not be renamed" : "%s ne peut être renommé", "Upload (max. %s)" : "Envoi (max. %s)", @@ -84,6 +89,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.", "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>", @@ -92,18 +98,17 @@ "Text file" : "Fichier texte", "New folder" : "Nouveau dossier", "Folder" : "Dossier", - "From link" : "Depuis un lien", "Upload" : "Chargement", "Cancel upload" : "Annuler l'envoi", "No files yet" : "Aucun fichier pour l'instant", - "Upload some content or sync with your devices!" : "Envoyez des fichiers ou synchronisez en depuis vos appareils", + "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", "Upload too large" : "Téléversement trop volumineux", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Les fichiers que vous essayez d'envoyer dépassent la taille maximale d'envoi permise par ce serveur.", "Files are being scanned, please wait." : "Les fichiers sont en cours d'analyse, veuillez patienter.", "Currently scanning" : "Analyse en cours", - "No favorites" : "Pas de favori", + "No favorites" : "Aucun favori", "Files and folders you mark as favorite will show up here" : "Les fichiers et dossiers ajoutés à vos favoris apparaîtront ici" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/gl.js b/apps/files/l10n/gl.js index 98c71ef207c..6371a1f1522 100644 --- a/apps/files/l10n/gl.js +++ b/apps/files/l10n/gl.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Non foi posíbel mover %s; Xa existe un ficheiro con ese nome.", "Could not move %s" : "Non foi posíbel mover %s", "Permission denied" : "Permiso denegado", - "File name cannot be empty." : "O nome de ficheiro non pode estar baleiro", - "\"%s\" is an invalid file name." : "«%s» é un nome incorrecto de ficheiro.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nome incorrecto, non se permite «\\», «/», «<», «>», «:», «\"», «|», «?» e «*».", "The target folder has been moved or deleted." : "O cartafol de destino foi movido ou eliminado.", "The name %s is already used in the folder %s. Please choose a different name." : "Xa existe o nome %s no cartafol %s. Escolla outro nome.", - "Not a valid source" : "Esta orixe non é correcta", - "Server is not allowed to open URLs, please check the server configuration" : "O servidor non ten permisos para abrir os enderezos URL, comprobe a configuración do servidor", - "The file exceeds your quota by %s" : "O ficheiro excede a súa cota en %s", - "Error while downloading %s to %s" : "Produciuse un erro ao descargar %s en %s", "Error when creating the file" : "Produciuse un erro ao crear o ficheiro", - "Folder name cannot be empty." : "O nome de cartafol non pode estar baleiro.", "Error when creating the folder" : "Produciuse un erro ao crear o cartafol", "Unable to set upload directory." : "Non é posíbel configurar o directorio de envíos.", "Invalid Token" : "Marca incorrecta", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Envío cancelado.", "Could not get result from server." : "Non foi posíbel obter o resultado do servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "O envío do ficheiro está en proceso. Saír agora da páxina cancelará o envío.", - "URL cannot be empty" : "O URL non pode quedar en branco.", "{new_name} already exists" : "Xa existe un {new_name}", "Could not create file" : "Non foi posíbel crear o ficheiro", "Could not create folder" : "Non foi posíbel crear o cartafol", - "Error fetching URL" : "Produciuse un erro ao obter o URL", "Rename" : "Renomear", "Delete" : "Eliminar", "Disconnect storage" : "Desconectar o almacenamento", @@ -70,15 +60,30 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Non ten permisos para enviar ou crear ficheiros aquí.", "_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", "Your storage is full, files can not be updated or synced anymore!" : "O seu espazo de almacenamento está cheo, non é posíbel actualizar ou sincronizar máis os ficheiros!", "Your storage is almost full ({usedSpacePercent}%)" : "O seu espazo de almacenamento está case cheo ({usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron inicializadas, saia da sesión e volva a acceder de novo", + "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", "Favorite" : "Favorito", + "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", + "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", + "%2$s created %1$s" : "%2$s creado %1$s", + "%1$s was created in a public folder" : "%1$s foi creado nun cartafol público", + "You changed %1$s" : "Cambiou %1$s", + "%2$s changed %1$s" : "%2$s cambiado %1$s", + "You deleted %1$s" : "Eliminou %1$s", + "%2$s deleted %1$s" : "%2$s eliminado %1$s", + "You restored %1$s" : "Vostede restaurou %1$s", + "%2$s restored %1$s" : "%2$s restaurou %1$s", "%s could not be renamed as it has been deleted" : "Non é posíbel renomear %s xa que foi eliminado", "%s could not be renamed" : "%s non pode cambiar de nome", "Upload (max. %s)" : "Envío (máx. %s)", @@ -86,6 +91,7 @@ OC.L10N.register( "Maximum upload size" : "Tamaño máximo do envío", "max. possible: " : "máx. posíbel: ", "Save" : "Gardar", + "Can not be edited from here due to insufficient permissions." : "Non pode ser editado desde aquí por mor de falta de permisos.", "Settings" : "Axustes", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Empregue esta ligazón para <a href=\"%s\" target=\"_blank\">acceder aos seus ficheiros mediante WebDAV</a>", @@ -94,7 +100,6 @@ OC.L10N.register( "Text file" : "Ficheiro de texto", "New folder" : "Novo cartafol", "Folder" : "Cartafol", - "From link" : "Desde a ligazón", "Upload" : "Enviar", "Cancel upload" : "Cancelar o envío", "No files yet" : "Aínda non hai ficheiros", diff --git a/apps/files/l10n/gl.json b/apps/files/l10n/gl.json index 0d0ba4a269c..570f5e22bac 100644 --- a/apps/files/l10n/gl.json +++ b/apps/files/l10n/gl.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Non foi posíbel mover %s; Xa existe un ficheiro con ese nome.", "Could not move %s" : "Non foi posíbel mover %s", "Permission denied" : "Permiso denegado", - "File name cannot be empty." : "O nome de ficheiro non pode estar baleiro", - "\"%s\" is an invalid file name." : "«%s» é un nome incorrecto de ficheiro.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nome incorrecto, non se permite «\\», «/», «<», «>», «:», «\"», «|», «?» e «*».", "The target folder has been moved or deleted." : "O cartafol de destino foi movido ou eliminado.", "The name %s is already used in the folder %s. Please choose a different name." : "Xa existe o nome %s no cartafol %s. Escolla outro nome.", - "Not a valid source" : "Esta orixe non é correcta", - "Server is not allowed to open URLs, please check the server configuration" : "O servidor non ten permisos para abrir os enderezos URL, comprobe a configuración do servidor", - "The file exceeds your quota by %s" : "O ficheiro excede a súa cota en %s", - "Error while downloading %s to %s" : "Produciuse un erro ao descargar %s en %s", "Error when creating the file" : "Produciuse un erro ao crear o ficheiro", - "Folder name cannot be empty." : "O nome de cartafol non pode estar baleiro.", "Error when creating the folder" : "Produciuse un erro ao crear o cartafol", "Unable to set upload directory." : "Non é posíbel configurar o directorio de envíos.", "Invalid Token" : "Marca incorrecta", @@ -41,11 +33,9 @@ "Upload cancelled." : "Envío cancelado.", "Could not get result from server." : "Non foi posíbel obter o resultado do servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "O envío do ficheiro está en proceso. Saír agora da páxina cancelará o envío.", - "URL cannot be empty" : "O URL non pode quedar en branco.", "{new_name} already exists" : "Xa existe un {new_name}", "Could not create file" : "Non foi posíbel crear o ficheiro", "Could not create folder" : "Non foi posíbel crear o cartafol", - "Error fetching URL" : "Produciuse un erro ao obter o URL", "Rename" : "Renomear", "Delete" : "Eliminar", "Disconnect storage" : "Desconectar o almacenamento", @@ -68,15 +58,30 @@ "You don’t have permission to upload or create files here" : "Non ten permisos para enviar ou crear ficheiros aquí.", "_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", "Your storage is full, files can not be updated or synced anymore!" : "O seu espazo de almacenamento está cheo, non é posíbel actualizar ou sincronizar máis os ficheiros!", "Your storage is almost full ({usedSpacePercent}%)" : "O seu espazo de almacenamento está case cheo ({usedSpacePercent}%)", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron inicializadas, saia da sesión e volva a acceder de novo", + "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", "Favorite" : "Favorito", + "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", + "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", + "%2$s created %1$s" : "%2$s creado %1$s", + "%1$s was created in a public folder" : "%1$s foi creado nun cartafol público", + "You changed %1$s" : "Cambiou %1$s", + "%2$s changed %1$s" : "%2$s cambiado %1$s", + "You deleted %1$s" : "Eliminou %1$s", + "%2$s deleted %1$s" : "%2$s eliminado %1$s", + "You restored %1$s" : "Vostede restaurou %1$s", + "%2$s restored %1$s" : "%2$s restaurou %1$s", "%s could not be renamed as it has been deleted" : "Non é posíbel renomear %s xa que foi eliminado", "%s could not be renamed" : "%s non pode cambiar de nome", "Upload (max. %s)" : "Envío (máx. %s)", @@ -84,6 +89,7 @@ "Maximum upload size" : "Tamaño máximo do envío", "max. possible: " : "máx. posíbel: ", "Save" : "Gardar", + "Can not be edited from here due to insufficient permissions." : "Non pode ser editado desde aquí por mor de falta de permisos.", "Settings" : "Axustes", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Empregue esta ligazón para <a href=\"%s\" target=\"_blank\">acceder aos seus ficheiros mediante WebDAV</a>", @@ -92,7 +98,6 @@ "Text file" : "Ficheiro de texto", "New folder" : "Novo cartafol", "Folder" : "Cartafol", - "From link" : "Desde a ligazón", "Upload" : "Enviar", "Cancel upload" : "Cancelar o envío", "No files yet" : "Aínda non hai ficheiros", diff --git a/apps/files/l10n/he.js b/apps/files/l10n/he.js index 9629cd77b6a..28ba3d34926 100644 --- a/apps/files/l10n/he.js +++ b/apps/files/l10n/he.js @@ -4,8 +4,6 @@ OC.L10N.register( "Unknown error" : "שגיאה בלתי ידועה", "Could not move %s - File with this name already exists" : "לא ניתן להעביר את %s - קובץ בשם הזה כבר קיים", "Could not move %s" : "לא ניתן להעביר את %s", - "File name cannot be empty." : "שם קובץ אינו יכול להיות ריק", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "השם שגוי, אסור להשתמש בתווים '\\', '/', '<', '>', ':', '\"', '|', '?' ו־'*'.", "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:", @@ -37,9 +35,20 @@ OC.L10N.register( "_%n folder_::_%n folders_" : ["",""], "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], + "File name cannot be empty." : "שם קובץ אינו יכול להיות ריק", "Your storage is almost full ({usedSpacePercent}%)" : "שטח האחסון שלך כמעט מלא ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["",""], "Favorite" : "מועדף", + "A new file or folder has been <strong>created</strong>" : "קובץ או תיקייה חדשים <strong>נוצרו<strong/>", + "A file or folder has been <strong>changed</strong>" : "קובץ או תיקייה <strong>שונו<strong/>", + "A file or folder has been <strong>deleted</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", "Upload (max. %s)" : "העלאה (מקסימום %s)", "File handling" : "טיפול בקבצים", "Maximum upload size" : "גודל העלאה מקסימלי", @@ -51,7 +60,6 @@ OC.L10N.register( "Text file" : "קובץ טקסט", "New folder" : "תיקייה חדשה", "Folder" : "תיקייה", - "From link" : "מקישור", "Upload" : "העלאה", "Cancel upload" : "ביטול ההעלאה", "Upload too large" : "העלאה גדולה מידי", diff --git a/apps/files/l10n/he.json b/apps/files/l10n/he.json index fb372531dc7..078660c1c2b 100644 --- a/apps/files/l10n/he.json +++ b/apps/files/l10n/he.json @@ -2,8 +2,6 @@ "Unknown error" : "שגיאה בלתי ידועה", "Could not move %s - File with this name already exists" : "לא ניתן להעביר את %s - קובץ בשם הזה כבר קיים", "Could not move %s" : "לא ניתן להעביר את %s", - "File name cannot be empty." : "שם קובץ אינו יכול להיות ריק", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "השם שגוי, אסור להשתמש בתווים '\\', '/', '<', '>', ':', '\"', '|', '?' ו־'*'.", "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:", @@ -35,9 +33,20 @@ "_%n folder_::_%n folders_" : ["",""], "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], + "File name cannot be empty." : "שם קובץ אינו יכול להיות ריק", "Your storage is almost full ({usedSpacePercent}%)" : "שטח האחסון שלך כמעט מלא ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["",""], "Favorite" : "מועדף", + "A new file or folder has been <strong>created</strong>" : "קובץ או תיקייה חדשים <strong>נוצרו<strong/>", + "A file or folder has been <strong>changed</strong>" : "קובץ או תיקייה <strong>שונו<strong/>", + "A file or folder has been <strong>deleted</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", "Upload (max. %s)" : "העלאה (מקסימום %s)", "File handling" : "טיפול בקבצים", "Maximum upload size" : "גודל העלאה מקסימלי", @@ -49,7 +58,6 @@ "Text file" : "קובץ טקסט", "New folder" : "תיקייה חדשה", "Folder" : "תיקייה", - "From link" : "מקישור", "Upload" : "העלאה", "Cancel upload" : "ביטול ההעלאה", "Upload too large" : "העלאה גדולה מידי", diff --git a/apps/files/l10n/hr.js b/apps/files/l10n/hr.js index fa89c2bbe68..cee59ce3550 100644 --- a/apps/files/l10n/hr.js +++ b/apps/files/l10n/hr.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Nemoguće premjestiti %s - Datoteka takvog naziva već postoji", "Could not move %s" : "Nemoguće premjestiti %s", "Permission denied" : "Nemate dozvolu", - "File name cannot be empty." : "Naziv datoteke ne može biti prazan.", - "\"%s\" is an invalid file name." : "\"%s\" je neispravan naziv datoteke.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Neispravan naziv,'\\', '/', '<', '>', ':', '\"', '|', '?' i '*' nisu dozvoljeni.", "The target folder has been moved or deleted." : "Ciljna mapa je premještena ili izbrisana.", "The name %s is already used in the folder %s. Please choose a different name." : "Naziv %s je već iskorišten u mapi %s. Molimo odaberite drukčiji naziv.", - "Not a valid source" : "Izvor nije valjan", - "Server is not allowed to open URLs, please check the server configuration" : "Poslužitelj ne smije otvarati URL-ove, molimo provjerite konfiguraciju poslužitelja", - "The file exceeds your quota by %s" : "Datoteka premašuje vašu kvotu za %s", - "Error while downloading %s to %s" : "Pogreška pri prenošenju %s u %s", "Error when creating the file" : "Pogreška pri kreiranju datoteke", - "Folder name cannot be empty." : "Naziv mape ne može biti prazan.", "Error when creating the folder" : "Pogreška pri kreiranju mape", "Unable to set upload directory." : "Postavka učitavanja direktorija nije moguća", "Invalid Token" : "Neispravan token", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Učitavanje je prekinuto.", "Could not get result from server." : "Nemoguće dobiti rezultat od poslužitelja.", "File upload is in progress. Leaving the page now will cancel the upload." : "Učitavanje datoteke je u tijeku. Napuštanje stranice prekinut će učitavanje.", - "URL cannot be empty" : "URL ne može biti prazan", "{new_name} already exists" : "{new_name} već postoji", "Could not create file" : "Datoteku nije moguće kreirati", "Could not create folder" : "Mapu nije moguće kreirati", - "Error fetching URL" : "Pogrešan dohvat URL", "Rename" : "Preimenujte", "Delete" : "Izbrišite", "Disconnect storage" : "Isključite pohranu", @@ -70,6 +60,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Ovdje vam nije dopušteno učitavati ili kreirati datoteke", "_Uploading %n file_::_Uploading %n files_" : ["Prenosim %n datoteku","Prenosim %n datoteke","Prenosim %n datoteka"], "\"{name}\" is an invalid file name." : "\"{name}\" je neispravno ime datoteke.", + "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", @@ -79,6 +70,19 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} i {files}", "Favorited" : "Favoritovan", "Favorite" : "Favorit", + "A new file or folder has been <strong>created</strong>" : "Nova datoteka ili nova mapa su <strong>kreirani</strong>", + "A file or folder has been <strong>changed</strong>" : "Datoteka ili mapa su <strong>promijenjeni</strong>", + "A file or folder has been <strong>deleted</strong>" : "Datoteka ili mapa su <strong>izbrisani</strong>", + "A file or folder has been <strong>restored</strong>" : "Datoteka ili direktorij su <strong>vraćeni</strong>", + "You created %1$s" : "Vi ste kreirali %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 javnoj mapi", + "You changed %1$s" : "Promijenili ste %1$s", + "%2$s changed %1$s" : "%2$s je promijenio %1$s", + "You deleted %1$s" : "Izbrisali ste %1$s", + "%2$s deleted %1$s" : "%2$s je izbrisao %1$s", + "You restored %1$s" : "Vraćeno %1$s", + "%2$s restored %1$s" : "%2$s vraćeno %1$s", "%s could not be renamed as it has been deleted" : "%s nije moguće preimenovati jer je izbrisan", "%s could not be renamed" : "%s nije moguće preimenovati", "Upload (max. %s)" : "Prijenos (max. %s)", @@ -94,7 +98,6 @@ OC.L10N.register( "Text file" : "Tekstualna datoteka", "New folder" : "Nova mapa", "Folder" : "Mapa", - "From link" : "Od veze", "Upload" : "Učitavanje", "Cancel upload" : "Prekini upload", "No files yet" : "Trenutno bez fajla", diff --git a/apps/files/l10n/hr.json b/apps/files/l10n/hr.json index f77d5927066..aedd84a62f3 100644 --- a/apps/files/l10n/hr.json +++ b/apps/files/l10n/hr.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Nemoguće premjestiti %s - Datoteka takvog naziva već postoji", "Could not move %s" : "Nemoguće premjestiti %s", "Permission denied" : "Nemate dozvolu", - "File name cannot be empty." : "Naziv datoteke ne može biti prazan.", - "\"%s\" is an invalid file name." : "\"%s\" je neispravan naziv datoteke.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Neispravan naziv,'\\', '/', '<', '>', ':', '\"', '|', '?' i '*' nisu dozvoljeni.", "The target folder has been moved or deleted." : "Ciljna mapa je premještena ili izbrisana.", "The name %s is already used in the folder %s. Please choose a different name." : "Naziv %s je već iskorišten u mapi %s. Molimo odaberite drukčiji naziv.", - "Not a valid source" : "Izvor nije valjan", - "Server is not allowed to open URLs, please check the server configuration" : "Poslužitelj ne smije otvarati URL-ove, molimo provjerite konfiguraciju poslužitelja", - "The file exceeds your quota by %s" : "Datoteka premašuje vašu kvotu za %s", - "Error while downloading %s to %s" : "Pogreška pri prenošenju %s u %s", "Error when creating the file" : "Pogreška pri kreiranju datoteke", - "Folder name cannot be empty." : "Naziv mape ne može biti prazan.", "Error when creating the folder" : "Pogreška pri kreiranju mape", "Unable to set upload directory." : "Postavka učitavanja direktorija nije moguća", "Invalid Token" : "Neispravan token", @@ -41,11 +33,9 @@ "Upload cancelled." : "Učitavanje je prekinuto.", "Could not get result from server." : "Nemoguće dobiti rezultat od poslužitelja.", "File upload is in progress. Leaving the page now will cancel the upload." : "Učitavanje datoteke je u tijeku. Napuštanje stranice prekinut će učitavanje.", - "URL cannot be empty" : "URL ne može biti prazan", "{new_name} already exists" : "{new_name} već postoji", "Could not create file" : "Datoteku nije moguće kreirati", "Could not create folder" : "Mapu nije moguće kreirati", - "Error fetching URL" : "Pogrešan dohvat URL", "Rename" : "Preimenujte", "Delete" : "Izbrišite", "Disconnect storage" : "Isključite pohranu", @@ -68,6 +58,7 @@ "You don’t have permission to upload or create files here" : "Ovdje vam nije dopušteno učitavati ili kreirati datoteke", "_Uploading %n file_::_Uploading %n files_" : ["Prenosim %n datoteku","Prenosim %n datoteke","Prenosim %n datoteka"], "\"{name}\" is an invalid file name." : "\"{name}\" je neispravno ime datoteke.", + "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", @@ -77,6 +68,19 @@ "{dirs} and {files}" : "{dirs} i {files}", "Favorited" : "Favoritovan", "Favorite" : "Favorit", + "A new file or folder has been <strong>created</strong>" : "Nova datoteka ili nova mapa su <strong>kreirani</strong>", + "A file or folder has been <strong>changed</strong>" : "Datoteka ili mapa su <strong>promijenjeni</strong>", + "A file or folder has been <strong>deleted</strong>" : "Datoteka ili mapa su <strong>izbrisani</strong>", + "A file or folder has been <strong>restored</strong>" : "Datoteka ili direktorij su <strong>vraćeni</strong>", + "You created %1$s" : "Vi ste kreirali %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 javnoj mapi", + "You changed %1$s" : "Promijenili ste %1$s", + "%2$s changed %1$s" : "%2$s je promijenio %1$s", + "You deleted %1$s" : "Izbrisali ste %1$s", + "%2$s deleted %1$s" : "%2$s je izbrisao %1$s", + "You restored %1$s" : "Vraćeno %1$s", + "%2$s restored %1$s" : "%2$s vraćeno %1$s", "%s could not be renamed as it has been deleted" : "%s nije moguće preimenovati jer je izbrisan", "%s could not be renamed" : "%s nije moguće preimenovati", "Upload (max. %s)" : "Prijenos (max. %s)", @@ -92,7 +96,6 @@ "Text file" : "Tekstualna datoteka", "New folder" : "Nova mapa", "Folder" : "Mapa", - "From link" : "Od veze", "Upload" : "Učitavanje", "Cancel upload" : "Prekini upload", "No files yet" : "Trenutno bez fajla", diff --git a/apps/files/l10n/hu_HU.js b/apps/files/l10n/hu_HU.js index a43082b0a1c..0cbf81347f9 100644 --- a/apps/files/l10n/hu_HU.js +++ b/apps/files/l10n/hu_HU.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "%s áthelyezése nem sikerült - már létezik másik fájl ezzel a névvel", "Could not move %s" : "Nem sikerült %s áthelyezése", "Permission denied" : "Engedély megtagadva ", - "File name cannot be empty." : "A fájlnév nem lehet semmi.", - "\"%s\" is an invalid file name." : "\"%s\" érvénytelen, mint fájlnév.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Érvénytelen elnevezés. Ezek a karakterek nem használhatók: '\\', '/', '<', '>', ':', '\"', '|', '?' és '*'", "The target folder has been moved or deleted." : "A célmappa törlődött, vagy áthelyezésre került.", "The name %s is already used in the folder %s. Please choose a different name." : "A %s név már létezik a %s mappában. Kérem válasszon másik nevet!", - "Not a valid source" : "A kiinduló állomány érvénytelen", - "Server is not allowed to open URLs, please check the server configuration" : "A kiszolgálón nincs engedélyezve URL-ek megnyitása, kérem ellenőrizze a beállításokat!", - "The file exceeds your quota by %s" : "A fájl ennyivel meghaladja a kvótáját: %s", - "Error while downloading %s to %s" : "Hiba történt miközben %s-t letöltöttük %s-be", "Error when creating the file" : "Hiba történt az állomány létrehozásakor", - "Folder name cannot be empty." : "A mappa neve nem maradhat kitöltetlenül", "Error when creating the folder" : "Hiba történt a mappa létrehozásakor", "Unable to set upload directory." : "Nem található a mappa, ahova feltölteni szeretne.", "Invalid Token" : "Hibás token", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "A feltöltést megszakítottuk.", "Could not get result from server." : "A kiszolgálótól nem kapható meg a művelet eredménye.", "File upload is in progress. Leaving the page now will cancel the upload." : "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést.", - "URL cannot be empty" : "Az URL-cím nem maradhat kitöltetlenül", "{new_name} already exists" : "{new_name} már létezik", "Could not create file" : "Az állomány nem hozható létre", "Could not create folder" : "A mappa nem hozható létre", - "Error fetching URL" : "A megadott URL-ről nem sikerül adatokat kapni", "Rename" : "Átnevezés", "Delete" : "Törlés", "Disconnect storage" : "Tároló leválasztása", @@ -70,6 +60,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Önnek nincs jogosultsága ahhoz, hogy ide állományokat töltsön föl, vagy itt újakat hozzon létre", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "A tároló tele van, a fájlok nem frissíthetőek vagy szinkronizálhatóak a jövőben.", "Your storage is almost full ({usedSpacePercent}%)" : "A tároló majdnem tele van ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Az állományok titkosítása engedélyezve van, de az Ön titkos kulcsai nincsenek beállítva. Ezért kérjük, hogy jelentkezzen ki, és lépjen be újra!", @@ -79,6 +70,20 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} és {files}", "Favorited" : "Kedvenc", "Favorite" : "Kedvenc", + "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>", + "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", + "%2$s created %1$s" : "%2$s létrehozta: %1$s", + "%1$s was created in a public folder" : "Nyilvános mappában hozták létre: %1$s", + "You changed %1$s" : "Megváltoztattam: %1$s", + "%2$s changed %1$s" : "%2$s megváltoztatta: %1$s", + "You deleted %1$s" : "Töröltem: %1$s", + "%2$s deleted %1$s" : "%2$s törölte: %1$s", + "You restored %1$s" : "Visszatöltötted %1$s", + "%2$s restored %1$s" : "%1$s visszatöltötte %2$s", "%s could not be renamed as it has been deleted" : "%s nem lehet átnevezni, mivel törölve lett", "%s could not be renamed" : "%s átnevezése nem sikerült", "Upload (max. %s)" : "Feltöltés (max. %s)", @@ -86,6 +91,7 @@ OC.L10N.register( "Maximum upload size" : "Maximális feltölthető fájlméret", "max. possible: " : "max. lehetséges: ", "Save" : "Mentés", + "Can not be edited from here due to insufficient permissions." : "Innen nem lehet szerkeszteni az elégtelen jogosultság miatt ", "Settings" : "Beállítások", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Ezt a címet használja, ha <a href=\"%s\" target=\"_blank\">WebDAV-on keresztül szeretné elérni a fájljait</a>", @@ -94,7 +100,6 @@ OC.L10N.register( "Text file" : "Szövegfájl", "New folder" : "Új mappa", "Folder" : "Mappa", - "From link" : "Feltöltés linkről", "Upload" : "Feltöltés", "Cancel upload" : "A feltöltés megszakítása", "No files yet" : "Még nincsenek fájlok", diff --git a/apps/files/l10n/hu_HU.json b/apps/files/l10n/hu_HU.json index c99f4f1321c..e4cceb381f8 100644 --- a/apps/files/l10n/hu_HU.json +++ b/apps/files/l10n/hu_HU.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "%s áthelyezése nem sikerült - már létezik másik fájl ezzel a névvel", "Could not move %s" : "Nem sikerült %s áthelyezése", "Permission denied" : "Engedély megtagadva ", - "File name cannot be empty." : "A fájlnév nem lehet semmi.", - "\"%s\" is an invalid file name." : "\"%s\" érvénytelen, mint fájlnév.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Érvénytelen elnevezés. Ezek a karakterek nem használhatók: '\\', '/', '<', '>', ':', '\"', '|', '?' és '*'", "The target folder has been moved or deleted." : "A célmappa törlődött, vagy áthelyezésre került.", "The name %s is already used in the folder %s. Please choose a different name." : "A %s név már létezik a %s mappában. Kérem válasszon másik nevet!", - "Not a valid source" : "A kiinduló állomány érvénytelen", - "Server is not allowed to open URLs, please check the server configuration" : "A kiszolgálón nincs engedélyezve URL-ek megnyitása, kérem ellenőrizze a beállításokat!", - "The file exceeds your quota by %s" : "A fájl ennyivel meghaladja a kvótáját: %s", - "Error while downloading %s to %s" : "Hiba történt miközben %s-t letöltöttük %s-be", "Error when creating the file" : "Hiba történt az állomány létrehozásakor", - "Folder name cannot be empty." : "A mappa neve nem maradhat kitöltetlenül", "Error when creating the folder" : "Hiba történt a mappa létrehozásakor", "Unable to set upload directory." : "Nem található a mappa, ahova feltölteni szeretne.", "Invalid Token" : "Hibás token", @@ -41,11 +33,9 @@ "Upload cancelled." : "A feltöltést megszakítottuk.", "Could not get result from server." : "A kiszolgálótól nem kapható meg a művelet eredménye.", "File upload is in progress. Leaving the page now will cancel the upload." : "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést.", - "URL cannot be empty" : "Az URL-cím nem maradhat kitöltetlenül", "{new_name} already exists" : "{new_name} már létezik", "Could not create file" : "Az állomány nem hozható létre", "Could not create folder" : "A mappa nem hozható létre", - "Error fetching URL" : "A megadott URL-ről nem sikerül adatokat kapni", "Rename" : "Átnevezés", "Delete" : "Törlés", "Disconnect storage" : "Tároló leválasztása", @@ -68,6 +58,7 @@ "You don’t have permission to upload or create files here" : "Önnek nincs jogosultsága ahhoz, hogy ide állományokat töltsön föl, vagy itt újakat hozzon létre", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "A tároló tele van, a fájlok nem frissíthetőek vagy szinkronizálhatóak a jövőben.", "Your storage is almost full ({usedSpacePercent}%)" : "A tároló majdnem tele van ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Az állományok titkosítása engedélyezve van, de az Ön titkos kulcsai nincsenek beállítva. Ezért kérjük, hogy jelentkezzen ki, és lépjen be újra!", @@ -77,6 +68,20 @@ "{dirs} and {files}" : "{dirs} és {files}", "Favorited" : "Kedvenc", "Favorite" : "Kedvenc", + "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>", + "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", + "%2$s created %1$s" : "%2$s létrehozta: %1$s", + "%1$s was created in a public folder" : "Nyilvános mappában hozták létre: %1$s", + "You changed %1$s" : "Megváltoztattam: %1$s", + "%2$s changed %1$s" : "%2$s megváltoztatta: %1$s", + "You deleted %1$s" : "Töröltem: %1$s", + "%2$s deleted %1$s" : "%2$s törölte: %1$s", + "You restored %1$s" : "Visszatöltötted %1$s", + "%2$s restored %1$s" : "%1$s visszatöltötte %2$s", "%s could not be renamed as it has been deleted" : "%s nem lehet átnevezni, mivel törölve lett", "%s could not be renamed" : "%s átnevezése nem sikerült", "Upload (max. %s)" : "Feltöltés (max. %s)", @@ -84,6 +89,7 @@ "Maximum upload size" : "Maximális feltölthető fájlméret", "max. possible: " : "max. lehetséges: ", "Save" : "Mentés", + "Can not be edited from here due to insufficient permissions." : "Innen nem lehet szerkeszteni az elégtelen jogosultság miatt ", "Settings" : "Beállítások", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Ezt a címet használja, ha <a href=\"%s\" target=\"_blank\">WebDAV-on keresztül szeretné elérni a fájljait</a>", @@ -92,7 +98,6 @@ "Text file" : "Szövegfájl", "New folder" : "Új mappa", "Folder" : "Mappa", - "From link" : "Feltöltés linkről", "Upload" : "Feltöltés", "Cancel upload" : "A feltöltés megszakítása", "No files yet" : "Még nincsenek fájlok", diff --git a/apps/files/l10n/ia.js b/apps/files/l10n/ia.js index 2e33cc2760e..48b763de6a5 100644 --- a/apps/files/l10n/ia.js +++ b/apps/files/l10n/ia.js @@ -2,7 +2,6 @@ OC.L10N.register( "files", { "Unknown error" : "Error Incognite", - "File name cannot be empty." : "Le nomine de file non pote esser vacue.", "The uploaded file was only partially uploaded" : "Le file incargate solmente esseva incargate partialmente", "No file was uploaded" : "Nulle file esseva incargate.", "Missing a temporary folder" : "Manca un dossier temporari", @@ -18,7 +17,21 @@ OC.L10N.register( "_%n folder_::_%n folders_" : ["",""], "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], + "File name cannot be empty." : "Le nomine de file non pote esser vacue.", "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "A new file or folder has been <strong>created</strong>" : "Un nove file o dossier ha essite <strong>create</strong>", + "A file or folder has been <strong>changed</strong>" : "Un nove file o dossier ha essite <strong>modificate</strong>", + "A file or folder has been <strong>deleted</strong>" : "Un nove file o dossier ha essite <strong>delite</strong>", + "A file or folder has been <strong>restored</strong>" : "Un file o un dossier ha essite <strong>restabilite</strong>", + "You created %1$s" : "Tu creava %1$s", + "%2$s created %1$s" : "%2$s creava %1$s", + "%1$s was created in a public folder" : "%1$s esseva create in un dossier public", + "You changed %1$s" : "Tu modificava %1$s", + "%2$s changed %1$s" : "%2$s modificava %1$s", + "You deleted %1$s" : "Tu deleva %1$s", + "%2$s deleted %1$s" : "%2$s deleva %1$s", + "You restored %1$s" : "Tu restabiliva %1$s", + "%2$s restored %1$s" : "%2$s restabilite %1$s", "Upload (max. %s)" : "Incargar (max. %s)", "Maximum upload size" : "Dimension maxime de incargamento", "Save" : "Salveguardar", diff --git a/apps/files/l10n/ia.json b/apps/files/l10n/ia.json index 86fc6256487..983e153c970 100644 --- a/apps/files/l10n/ia.json +++ b/apps/files/l10n/ia.json @@ -1,6 +1,5 @@ { "translations": { "Unknown error" : "Error Incognite", - "File name cannot be empty." : "Le nomine de file non pote esser vacue.", "The uploaded file was only partially uploaded" : "Le file incargate solmente esseva incargate partialmente", "No file was uploaded" : "Nulle file esseva incargate.", "Missing a temporary folder" : "Manca un dossier temporari", @@ -16,7 +15,21 @@ "_%n folder_::_%n folders_" : ["",""], "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], + "File name cannot be empty." : "Le nomine de file non pote esser vacue.", "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "A new file or folder has been <strong>created</strong>" : "Un nove file o dossier ha essite <strong>create</strong>", + "A file or folder has been <strong>changed</strong>" : "Un nove file o dossier ha essite <strong>modificate</strong>", + "A file or folder has been <strong>deleted</strong>" : "Un nove file o dossier ha essite <strong>delite</strong>", + "A file or folder has been <strong>restored</strong>" : "Un file o un dossier ha essite <strong>restabilite</strong>", + "You created %1$s" : "Tu creava %1$s", + "%2$s created %1$s" : "%2$s creava %1$s", + "%1$s was created in a public folder" : "%1$s esseva create in un dossier public", + "You changed %1$s" : "Tu modificava %1$s", + "%2$s changed %1$s" : "%2$s modificava %1$s", + "You deleted %1$s" : "Tu deleva %1$s", + "%2$s deleted %1$s" : "%2$s deleva %1$s", + "You restored %1$s" : "Tu restabiliva %1$s", + "%2$s restored %1$s" : "%2$s restabilite %1$s", "Upload (max. %s)" : "Incargar (max. %s)", "Maximum upload size" : "Dimension maxime de incargamento", "Save" : "Salveguardar", diff --git a/apps/files/l10n/id.js b/apps/files/l10n/id.js index 2f3544f489d..0792bb8fa98 100644 --- a/apps/files/l10n/id.js +++ b/apps/files/l10n/id.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Tidak dapat memindahkan %s - Berkas dengan nama ini sudah ada", "Could not move %s" : "Tidak dapat memindahkan %s", "Permission denied" : "Perizinan ditolak", - "File name cannot be empty." : "Nama berkas tidak boleh kosong.", - "\"%s\" is an invalid file name." : "\"%s\" adalah sebuah nama berkas yang tidak sah.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nama tidak valid, karakter '\\', '/', '<', '>', ':', '\"', '|', '?' dan '*' tidak diizinkan.", "The target folder has been moved or deleted." : "Folder tujuan telah dipindahkan atau dihapus.", "The name %s is already used in the folder %s. Please choose a different name." : "Nama %s sudah digunakan dalam folder %s. Silakan pilih nama yang berbeda.", - "Not a valid source" : "Sumber tidak sah", - "Server is not allowed to open URLs, please check the server configuration" : "Server tidak mengizinkan untuk membuka URL, mohon periksa konfigurasi server", - "The file exceeds your quota by %s" : "Berkas melampaui kuota Anda oleh %s", - "Error while downloading %s to %s" : "Kesalahan saat mengunduh %s ke %s", "Error when creating the file" : "Kesalahan saat membuat berkas", - "Folder name cannot be empty." : "Nama folder tidak boleh kosong.", "Error when creating the folder" : "Kesalahan saat membuat folder", "Unable to set upload directory." : "Tidak dapat mengatur folder unggah", "Invalid Token" : "Token tidak sah", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Pengunggahan dibatalkan.", "Could not get result from server." : "Tidak mendapatkan hasil dari server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Berkas sedang diunggah. Meninggalkan halaman ini akan membatalkan proses.", - "URL cannot be empty" : "URL tidak boleh kosong", "{new_name} already exists" : "{new_name} sudah ada", "Could not create file" : "Tidak dapat membuat berkas", "Could not create folder" : "Tidak dapat membuat folder", - "Error fetching URL" : "Kesalahan saat mengambil URL", "Rename" : "Ubah nama", "Delete" : "Hapus", "Disconnect storage" : "Memutuskan penyimpaan", @@ -70,6 +60,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Anda tidak memiliki akses untuk mengunggah atau membuat berkas disini", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Ruang penyimpanan Anda penuh, berkas tidak dapat diperbarui atau disinkronkan lagi!", "Your storage is almost full ({usedSpacePercent}%)" : "Ruang penyimpanan hampir penuh ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi", @@ -79,6 +70,19 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} dan {files}", "Favorited" : "Difavoritkan", "Favorite" : "Favorit", + "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>", + "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", + "%2$s created %1$s" : "%2$s membuat %1$s", + "%1$s was created in a public folder" : "%1$s telah dibuat di folder publik", + "You changed %1$s" : "Anda mengubah %1$s", + "%2$s changed %1$s" : "%2$s mengubah %1$s", + "You deleted %1$s" : "Anda menghapus %1$s", + "%2$s deleted %1$s" : "%2$s menghapus %1$s", + "You restored %1$s" : "Anda memulihkan %1$s", + "%2$s restored %1$s" : "%2$s memulihkan %1$s", "%s could not be renamed as it has been deleted" : "%s tidak dapat diubah namanya kerena telah dihapus", "%s could not be renamed" : "%s tidak dapat diubah nama", "Upload (max. %s)" : "Unggah (maks. %s)", @@ -94,7 +98,6 @@ OC.L10N.register( "Text file" : "Berkas teks", "New folder" : "Map baru", "Folder" : "Folder", - "From link" : "Dari tautan", "Upload" : "Unggah", "Cancel upload" : "Batal unggah", "No files yet" : "Masih tidak ada berkas", diff --git a/apps/files/l10n/id.json b/apps/files/l10n/id.json index 053a1cb3570..2c8d94bae90 100644 --- a/apps/files/l10n/id.json +++ b/apps/files/l10n/id.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Tidak dapat memindahkan %s - Berkas dengan nama ini sudah ada", "Could not move %s" : "Tidak dapat memindahkan %s", "Permission denied" : "Perizinan ditolak", - "File name cannot be empty." : "Nama berkas tidak boleh kosong.", - "\"%s\" is an invalid file name." : "\"%s\" adalah sebuah nama berkas yang tidak sah.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nama tidak valid, karakter '\\', '/', '<', '>', ':', '\"', '|', '?' dan '*' tidak diizinkan.", "The target folder has been moved or deleted." : "Folder tujuan telah dipindahkan atau dihapus.", "The name %s is already used in the folder %s. Please choose a different name." : "Nama %s sudah digunakan dalam folder %s. Silakan pilih nama yang berbeda.", - "Not a valid source" : "Sumber tidak sah", - "Server is not allowed to open URLs, please check the server configuration" : "Server tidak mengizinkan untuk membuka URL, mohon periksa konfigurasi server", - "The file exceeds your quota by %s" : "Berkas melampaui kuota Anda oleh %s", - "Error while downloading %s to %s" : "Kesalahan saat mengunduh %s ke %s", "Error when creating the file" : "Kesalahan saat membuat berkas", - "Folder name cannot be empty." : "Nama folder tidak boleh kosong.", "Error when creating the folder" : "Kesalahan saat membuat folder", "Unable to set upload directory." : "Tidak dapat mengatur folder unggah", "Invalid Token" : "Token tidak sah", @@ -41,11 +33,9 @@ "Upload cancelled." : "Pengunggahan dibatalkan.", "Could not get result from server." : "Tidak mendapatkan hasil dari server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Berkas sedang diunggah. Meninggalkan halaman ini akan membatalkan proses.", - "URL cannot be empty" : "URL tidak boleh kosong", "{new_name} already exists" : "{new_name} sudah ada", "Could not create file" : "Tidak dapat membuat berkas", "Could not create folder" : "Tidak dapat membuat folder", - "Error fetching URL" : "Kesalahan saat mengambil URL", "Rename" : "Ubah nama", "Delete" : "Hapus", "Disconnect storage" : "Memutuskan penyimpaan", @@ -68,6 +58,7 @@ "You don’t have permission to upload or create files here" : "Anda tidak memiliki akses untuk mengunggah atau membuat berkas disini", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Ruang penyimpanan Anda penuh, berkas tidak dapat diperbarui atau disinkronkan lagi!", "Your storage is almost full ({usedSpacePercent}%)" : "Ruang penyimpanan hampir penuh ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi", @@ -77,6 +68,19 @@ "{dirs} and {files}" : "{dirs} dan {files}", "Favorited" : "Difavoritkan", "Favorite" : "Favorit", + "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>", + "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", + "%2$s created %1$s" : "%2$s membuat %1$s", + "%1$s was created in a public folder" : "%1$s telah dibuat di folder publik", + "You changed %1$s" : "Anda mengubah %1$s", + "%2$s changed %1$s" : "%2$s mengubah %1$s", + "You deleted %1$s" : "Anda menghapus %1$s", + "%2$s deleted %1$s" : "%2$s menghapus %1$s", + "You restored %1$s" : "Anda memulihkan %1$s", + "%2$s restored %1$s" : "%2$s memulihkan %1$s", "%s could not be renamed as it has been deleted" : "%s tidak dapat diubah namanya kerena telah dihapus", "%s could not be renamed" : "%s tidak dapat diubah nama", "Upload (max. %s)" : "Unggah (maks. %s)", @@ -92,7 +96,6 @@ "Text file" : "Berkas teks", "New folder" : "Map baru", "Folder" : "Folder", - "From link" : "Dari tautan", "Upload" : "Unggah", "Cancel upload" : "Batal unggah", "No files yet" : "Masih tidak ada berkas", diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js index cf2fcedd600..99728f96bf0 100644 --- a/apps/files/l10n/is.js +++ b/apps/files/l10n/is.js @@ -3,8 +3,6 @@ OC.L10N.register( { "Could not move %s - File with this name already exists" : "Gat ekki fært %s - Skrá með þessu nafni er þegar til", "Could not move %s" : "Gat ekki fært %s", - "File name cannot be empty." : "Nafn skráar má ekki vera tómt", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ógilt nafn, táknin '\\', '/', '<', '>', ':', '\"', '|', '?' og '*' eru ekki leyfð.", "No file was uploaded. Unknown error" : "Engin skrá var send inn. Óþekkt villa.", "There is no error, the file uploaded with success" : "Engin villa, innsending heppnaðist", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Innsend skrá er stærri en upload_max stillingin í php.ini:", @@ -31,6 +29,7 @@ OC.L10N.register( "_%n folder_::_%n folders_" : ["",""], "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], + "File name cannot be empty." : "Nafn skráar má ekki vera tómt", "_matches '{filter}'_::_match '{filter}'_" : ["",""], "File handling" : "Meðhöndlun skrár", "Maximum upload size" : "Hámarks stærð innsendingar", @@ -41,7 +40,6 @@ OC.L10N.register( "New" : "Nýtt", "Text file" : "Texta skrá", "Folder" : "Mappa", - "From link" : "Af tengli", "Upload" : "Senda inn", "Cancel upload" : "Hætta við innsendingu", "Upload too large" : "Innsend skrá er of stór", diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json index 08f30a06323..5a274c23faa 100644 --- a/apps/files/l10n/is.json +++ b/apps/files/l10n/is.json @@ -1,8 +1,6 @@ { "translations": { "Could not move %s - File with this name already exists" : "Gat ekki fært %s - Skrá með þessu nafni er þegar til", "Could not move %s" : "Gat ekki fært %s", - "File name cannot be empty." : "Nafn skráar má ekki vera tómt", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ógilt nafn, táknin '\\', '/', '<', '>', ':', '\"', '|', '?' og '*' eru ekki leyfð.", "No file was uploaded. Unknown error" : "Engin skrá var send inn. Óþekkt villa.", "There is no error, the file uploaded with success" : "Engin villa, innsending heppnaðist", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Innsend skrá er stærri en upload_max stillingin í php.ini:", @@ -29,6 +27,7 @@ "_%n folder_::_%n folders_" : ["",""], "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], + "File name cannot be empty." : "Nafn skráar má ekki vera tómt", "_matches '{filter}'_::_match '{filter}'_" : ["",""], "File handling" : "Meðhöndlun skrár", "Maximum upload size" : "Hámarks stærð innsendingar", @@ -39,7 +38,6 @@ "New" : "Nýtt", "Text file" : "Texta skrá", "Folder" : "Mappa", - "From link" : "Af tengli", "Upload" : "Senda inn", "Cancel upload" : "Hætta við innsendingu", "Upload too large" : "Innsend skrá er of stór", diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js index 8ec7c4c3478..8a9338e3bcf 100644 --- a/apps/files/l10n/it.js +++ b/apps/files/l10n/it.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Impossibile spostare %s - un file con questo nome esiste già", "Could not move %s" : "Impossibile spostare %s", "Permission denied" : "Permesso negato", - "File name cannot be empty." : "Il nome del file non può essere vuoto.", - "\"%s\" is an invalid file name." : "\"%s\" non è un nome file valido.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nome non valido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' non sono consentiti.", "The target folder has been moved or deleted." : "La cartella di destinazione è stata spostata o eliminata.", "The name %s is already used in the folder %s. Please choose a different name." : "Il nome %s è attualmente in uso nella cartella %s. Scegli un nome diverso.", - "Not a valid source" : "Non è una sorgente valida", - "Server is not allowed to open URLs, please check the server configuration" : "Al server non è permesso aprire URL, controlla la configurazione del server", - "The file exceeds your quota by %s" : "Il file supera la tua quota di %s", - "Error while downloading %s to %s" : "Errore durante lo scaricamento di %s su %s", "Error when creating the file" : "Errore durante la creazione del file", - "Folder name cannot be empty." : "Il nome della cartella non può essere vuoto.", "Error when creating the folder" : "Errore durante la creazione della cartella", "Unable to set upload directory." : "Impossibile impostare una cartella di caricamento.", "Invalid Token" : "Token non valido", @@ -36,18 +28,16 @@ OC.L10N.register( "Files" : "File", "All files" : "Tutti i file", "Favorites" : "Preferiti", - "Home" : "Casa", + "Home" : "Home", "Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossibile caricare {filename} poiché è una cartella oppure ha una dimensione di 0 byte.", "Total file size {size1} exceeds upload limit {size2}" : "La dimensione totale del file {size1} supera il limite di caricamento {size2}", "Not enough free space, you are uploading {size1} but only {size2} is left" : "Spazio insufficiente, stai caricando {size1}, ma è rimasto solo {size2}", "Upload cancelled." : "Caricamento annullato.", "Could not get result from server." : "Impossibile ottenere il risultato dal server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento.", - "URL cannot be empty" : "L'URL non può essere vuoto.", "{new_name} already exists" : "{new_name} esiste già", "Could not create file" : "Impossibile creare il file", "Could not create folder" : "Impossibile creare la cartella", - "Error fetching URL" : "Errore durante il recupero dello URL", "Rename" : "Rinomina", "Delete" : "Elimina", "Disconnect storage" : "Disconnetti archiviazione", @@ -70,6 +60,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Qui non hai i permessi di caricare o creare file", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Lo spazio di archiviazione è pieno, i file non possono essere più aggiornati o sincronizzati!", "Your storage is almost full ({usedSpacePercent}%)" : "Lo spazio di archiviazione è quasi pieno ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'applicazione di cifratura è abilitata, ma le chiavi non sono state inizializzate, disconnettiti ed effettua nuovamente l'accesso", @@ -79,6 +70,20 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} e {files}", "Favorited" : "Preferiti", "Favorite" : "Preferito", + "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>", + "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", + "%2$s created %1$s" : "%2$s ha creato %1$s", + "%1$s was created in a public folder" : "%1$s è stato creato in una cartella pubblica", + "You changed %1$s" : "Hai modificato %1$s", + "%2$s changed %1$s" : "%2$s ha modificato %1$s", + "You deleted %1$s" : "Hai eliminato %1$s", + "%2$s deleted %1$s" : "%2$s ha eliminato %1$s", + "You restored %1$s" : "Hai ripristinato %1$s", + "%2$s restored %1$s" : "%2$s ha ripristinato %1$s", "%s could not be renamed as it has been deleted" : "%s non può essere rinominato poiché è stato eliminato", "%s could not be renamed" : "%s non può essere rinominato", "Upload (max. %s)" : "Carica (massimo %s)", @@ -86,6 +91,7 @@ OC.L10N.register( "Maximum upload size" : "Dimensione massima caricamento", "max. possible: " : "numero mass.: ", "Save" : "Salva", + "Can not be edited from here due to insufficient permissions." : "Non può essere modificato da qui a causa della mancanza di permessi.", "Settings" : "Impostazioni", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizza questo indirizzo per <a href=\"%s\" target=\"_blank\">accedere ai tuoi file con WebDAV</a>", @@ -94,7 +100,6 @@ OC.L10N.register( "Text file" : "File di testo", "New folder" : "Nuova cartella", "Folder" : "Cartella", - "From link" : "Da collegamento", "Upload" : "Carica", "Cancel upload" : "Annulla caricamento", "No files yet" : "Nessun file ancora", diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json index 44dcc27c8a9..dfa64cbd284 100644 --- a/apps/files/l10n/it.json +++ b/apps/files/l10n/it.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Impossibile spostare %s - un file con questo nome esiste già", "Could not move %s" : "Impossibile spostare %s", "Permission denied" : "Permesso negato", - "File name cannot be empty." : "Il nome del file non può essere vuoto.", - "\"%s\" is an invalid file name." : "\"%s\" non è un nome file valido.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nome non valido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' non sono consentiti.", "The target folder has been moved or deleted." : "La cartella di destinazione è stata spostata o eliminata.", "The name %s is already used in the folder %s. Please choose a different name." : "Il nome %s è attualmente in uso nella cartella %s. Scegli un nome diverso.", - "Not a valid source" : "Non è una sorgente valida", - "Server is not allowed to open URLs, please check the server configuration" : "Al server non è permesso aprire URL, controlla la configurazione del server", - "The file exceeds your quota by %s" : "Il file supera la tua quota di %s", - "Error while downloading %s to %s" : "Errore durante lo scaricamento di %s su %s", "Error when creating the file" : "Errore durante la creazione del file", - "Folder name cannot be empty." : "Il nome della cartella non può essere vuoto.", "Error when creating the folder" : "Errore durante la creazione della cartella", "Unable to set upload directory." : "Impossibile impostare una cartella di caricamento.", "Invalid Token" : "Token non valido", @@ -34,18 +26,16 @@ "Files" : "File", "All files" : "Tutti i file", "Favorites" : "Preferiti", - "Home" : "Casa", + "Home" : "Home", "Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossibile caricare {filename} poiché è una cartella oppure ha una dimensione di 0 byte.", "Total file size {size1} exceeds upload limit {size2}" : "La dimensione totale del file {size1} supera il limite di caricamento {size2}", "Not enough free space, you are uploading {size1} but only {size2} is left" : "Spazio insufficiente, stai caricando {size1}, ma è rimasto solo {size2}", "Upload cancelled." : "Caricamento annullato.", "Could not get result from server." : "Impossibile ottenere il risultato dal server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento.", - "URL cannot be empty" : "L'URL non può essere vuoto.", "{new_name} already exists" : "{new_name} esiste già", "Could not create file" : "Impossibile creare il file", "Could not create folder" : "Impossibile creare la cartella", - "Error fetching URL" : "Errore durante il recupero dello URL", "Rename" : "Rinomina", "Delete" : "Elimina", "Disconnect storage" : "Disconnetti archiviazione", @@ -68,6 +58,7 @@ "You don’t have permission to upload or create files here" : "Qui non hai i permessi di caricare o creare file", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Lo spazio di archiviazione è pieno, i file non possono essere più aggiornati o sincronizzati!", "Your storage is almost full ({usedSpacePercent}%)" : "Lo spazio di archiviazione è quasi pieno ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'applicazione di cifratura è abilitata, ma le chiavi non sono state inizializzate, disconnettiti ed effettua nuovamente l'accesso", @@ -77,6 +68,20 @@ "{dirs} and {files}" : "{dirs} e {files}", "Favorited" : "Preferiti", "Favorite" : "Preferito", + "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>", + "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", + "%2$s created %1$s" : "%2$s ha creato %1$s", + "%1$s was created in a public folder" : "%1$s è stato creato in una cartella pubblica", + "You changed %1$s" : "Hai modificato %1$s", + "%2$s changed %1$s" : "%2$s ha modificato %1$s", + "You deleted %1$s" : "Hai eliminato %1$s", + "%2$s deleted %1$s" : "%2$s ha eliminato %1$s", + "You restored %1$s" : "Hai ripristinato %1$s", + "%2$s restored %1$s" : "%2$s ha ripristinato %1$s", "%s could not be renamed as it has been deleted" : "%s non può essere rinominato poiché è stato eliminato", "%s could not be renamed" : "%s non può essere rinominato", "Upload (max. %s)" : "Carica (massimo %s)", @@ -84,6 +89,7 @@ "Maximum upload size" : "Dimensione massima caricamento", "max. possible: " : "numero mass.: ", "Save" : "Salva", + "Can not be edited from here due to insufficient permissions." : "Non può essere modificato da qui a causa della mancanza di permessi.", "Settings" : "Impostazioni", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizza questo indirizzo per <a href=\"%s\" target=\"_blank\">accedere ai tuoi file con WebDAV</a>", @@ -92,7 +98,6 @@ "Text file" : "File di testo", "New folder" : "Nuova cartella", "Folder" : "Cartella", - "From link" : "Da collegamento", "Upload" : "Carica", "Cancel upload" : "Annulla caricamento", "No files yet" : "Nessun file ancora", diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js index 051f39e2456..6f86088c49a 100644 --- a/apps/files/l10n/ja.js +++ b/apps/files/l10n/ja.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "%s を移動できませんでした ― この名前のファイルはすでに存在します", "Could not move %s" : "%s を移動できませんでした", "Permission denied" : "アクセス拒否", - "File name cannot be empty." : "ファイル名を空にすることはできません。", - "\"%s\" is an invalid file name." : "\"%s\" は無効なファイル名です。", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "無効な名前、'\\', '/', '<', '>', ':', '\"', '|', '?', '*' は使用できません。", "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 ですでに使われています。別の名前を選択してください。", - "Not a valid source" : "有効なソースではありません", - "Server is not allowed to open URLs, please check the server configuration" : "サーバーは、URLを開くことは許されません。サーバーの設定をチェックしてください。", - "The file exceeds your quota by %s" : "ファイル %s で容量制限をオーバーしました。", - "Error while downloading %s to %s" : "%s から %s へのダウンロードエラー", "Error when creating the file" : "ファイルの生成エラー", - "Folder name cannot be empty." : "フォルダー名は空にできません", "Error when creating the folder" : "フォルダーの生成エラー", "Unable to set upload directory." : "アップロードディレクトリを設定できません。", "Invalid Token" : "無効なトークン", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "アップロードはキャンセルされました。", "Could not get result from server." : "サーバーから結果を取得できませんでした。", "File upload is in progress. Leaving the page now will cancel the upload." : "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。", - "URL cannot be empty" : "URL は空にできません", "{new_name} already exists" : "{new_name} はすでに存在します", "Could not create file" : "ファイルを作成できませんでした", "Could not create folder" : "フォルダーを作成できませんでした", - "Error fetching URL" : "URL取得エラー", "Rename" : "名前の変更", "Delete" : "削除", "Disconnect storage" : "ストレージを切断する", @@ -70,6 +60,7 @@ OC.L10N.register( "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}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "暗号化アプリは有効ですが、あなたの暗号化キーは初期化されていません。ログアウトした後に、再度ログインしてください", @@ -79,7 +70,21 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} と {files}", "Favorited" : "お気に入り済", "Favorite" : "お気に入り", - "%s could not be renamed as it has been deleted" : "%s は削除された為、ファイル名を変更できません", + "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>したとき", + "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" : "ファイル操作", @@ -94,7 +99,6 @@ OC.L10N.register( "Text file" : "テキストファイル", "New folder" : "新しいフォルダー", "Folder" : "フォルダー", - "From link" : "リンク", "Upload" : "アップロード", "Cancel upload" : "アップロードをキャンセル", "No files yet" : "ファイルなし", diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json index 2eac70d694d..18ce4dfbe3a 100644 --- a/apps/files/l10n/ja.json +++ b/apps/files/l10n/ja.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "%s を移動できませんでした ― この名前のファイルはすでに存在します", "Could not move %s" : "%s を移動できませんでした", "Permission denied" : "アクセス拒否", - "File name cannot be empty." : "ファイル名を空にすることはできません。", - "\"%s\" is an invalid file name." : "\"%s\" は無効なファイル名です。", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "無効な名前、'\\', '/', '<', '>', ':', '\"', '|', '?', '*' は使用できません。", "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 ですでに使われています。別の名前を選択してください。", - "Not a valid source" : "有効なソースではありません", - "Server is not allowed to open URLs, please check the server configuration" : "サーバーは、URLを開くことは許されません。サーバーの設定をチェックしてください。", - "The file exceeds your quota by %s" : "ファイル %s で容量制限をオーバーしました。", - "Error while downloading %s to %s" : "%s から %s へのダウンロードエラー", "Error when creating the file" : "ファイルの生成エラー", - "Folder name cannot be empty." : "フォルダー名は空にできません", "Error when creating the folder" : "フォルダーの生成エラー", "Unable to set upload directory." : "アップロードディレクトリを設定できません。", "Invalid Token" : "無効なトークン", @@ -41,11 +33,9 @@ "Upload cancelled." : "アップロードはキャンセルされました。", "Could not get result from server." : "サーバーから結果を取得できませんでした。", "File upload is in progress. Leaving the page now will cancel the upload." : "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。", - "URL cannot be empty" : "URL は空にできません", "{new_name} already exists" : "{new_name} はすでに存在します", "Could not create file" : "ファイルを作成できませんでした", "Could not create folder" : "フォルダーを作成できませんでした", - "Error fetching URL" : "URL取得エラー", "Rename" : "名前の変更", "Delete" : "削除", "Disconnect storage" : "ストレージを切断する", @@ -68,6 +58,7 @@ "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}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "暗号化アプリは有効ですが、あなたの暗号化キーは初期化されていません。ログアウトした後に、再度ログインしてください", @@ -77,7 +68,21 @@ "{dirs} and {files}" : "{dirs} と {files}", "Favorited" : "お気に入り済", "Favorite" : "お気に入り", - "%s could not be renamed as it has been deleted" : "%s は削除された為、ファイル名を変更できません", + "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>したとき", + "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" : "ファイル操作", @@ -92,7 +97,6 @@ "Text file" : "テキストファイル", "New folder" : "新しいフォルダー", "Folder" : "フォルダー", - "From link" : "リンク", "Upload" : "アップロード", "Cancel upload" : "アップロードをキャンセル", "No files yet" : "ファイルなし", diff --git a/apps/files/l10n/jv.js b/apps/files/l10n/jv.js index adbd28854f5..5a6438c3851 100644 --- a/apps/files/l10n/jv.js +++ b/apps/files/l10n/jv.js @@ -1,10 +1,10 @@ OC.L10N.register( "files", { + "Download" : "Njipuk", "_%n folder_::_%n folders_" : ["",""], "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], - "_matches '{filter}'_::_match '{filter}'_" : ["",""], - "Download" : "Njipuk" + "_matches '{filter}'_::_match '{filter}'_" : ["",""] }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/jv.json b/apps/files/l10n/jv.json index 9c2ed5bfbfb..71ada4daa9e 100644 --- a/apps/files/l10n/jv.json +++ b/apps/files/l10n/jv.json @@ -1,8 +1,8 @@ { "translations": { + "Download" : "Njipuk", "_%n folder_::_%n folders_" : ["",""], "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], - "_matches '{filter}'_::_match '{filter}'_" : ["",""], - "Download" : "Njipuk" + "_matches '{filter}'_::_match '{filter}'_" : ["",""] },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/ka_GE.js b/apps/files/l10n/ka_GE.js index bc9d78184f8..783add2a989 100644 --- a/apps/files/l10n/ka_GE.js +++ b/apps/files/l10n/ka_GE.js @@ -4,8 +4,6 @@ OC.L10N.register( "Unknown error" : "უცნობი შეცდომა", "Could not move %s - File with this name already exists" : "%s –ის გადატანა ვერ მოხერხდა – ფაილი ამ სახელით უკვე არსებობს", "Could not move %s" : "%s –ის გადატანა ვერ მოხერხდა", - "File name cannot be empty." : "ფაილის სახელი არ შეიძლება იყოს ცარიელი.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "არადაშვებადი სახელი, '\\', '/', '<', '>', ':', '\"', '|', '?' და '*' არ არის დაიშვებული.", "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 ფაილში", @@ -34,6 +32,7 @@ OC.L10N.register( "_%n folder_::_%n folders_" : [""], "_%n file_::_%n files_" : [""], "_Uploading %n file_::_Uploading %n files_" : [""], + "File name cannot be empty." : "ფაილის სახელი არ შეიძლება იყოს ცარიელი.", "Your storage is full, files can not be updated or synced anymore!" : "თქვენი საცავი გადაივსო. ფაილების განახლება და სინქრონიზირება ვერ მოხერხდება!", "Your storage is almost full ({usedSpacePercent}%)" : "თქვენი საცავი თითქმის გადაივსო ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : [""], @@ -48,7 +47,6 @@ OC.L10N.register( "Text file" : "ტექსტური ფაილი", "New folder" : "ახალი ფოლდერი", "Folder" : "საქაღალდე", - "From link" : "მისამართიდან", "Upload" : "ატვირთვა", "Cancel upload" : "ატვირთვის გაუქმება", "Upload too large" : "ასატვირთი ფაილი ძალიან დიდია", diff --git a/apps/files/l10n/ka_GE.json b/apps/files/l10n/ka_GE.json index 1cc9611c4e3..9a78d1e17cc 100644 --- a/apps/files/l10n/ka_GE.json +++ b/apps/files/l10n/ka_GE.json @@ -2,8 +2,6 @@ "Unknown error" : "უცნობი შეცდომა", "Could not move %s - File with this name already exists" : "%s –ის გადატანა ვერ მოხერხდა – ფაილი ამ სახელით უკვე არსებობს", "Could not move %s" : "%s –ის გადატანა ვერ მოხერხდა", - "File name cannot be empty." : "ფაილის სახელი არ შეიძლება იყოს ცარიელი.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "არადაშვებადი სახელი, '\\', '/', '<', '>', ':', '\"', '|', '?' და '*' არ არის დაიშვებული.", "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 ფაილში", @@ -32,6 +30,7 @@ "_%n folder_::_%n folders_" : [""], "_%n file_::_%n files_" : [""], "_Uploading %n file_::_Uploading %n files_" : [""], + "File name cannot be empty." : "ფაილის სახელი არ შეიძლება იყოს ცარიელი.", "Your storage is full, files can not be updated or synced anymore!" : "თქვენი საცავი გადაივსო. ფაილების განახლება და სინქრონიზირება ვერ მოხერხდება!", "Your storage is almost full ({usedSpacePercent}%)" : "თქვენი საცავი თითქმის გადაივსო ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : [""], @@ -46,7 +45,6 @@ "Text file" : "ტექსტური ფაილი", "New folder" : "ახალი ფოლდერი", "Folder" : "საქაღალდე", - "From link" : "მისამართიდან", "Upload" : "ატვირთვა", "Cancel upload" : "ატვირთვის გაუქმება", "Upload too large" : "ასატვირთი ფაილი ძალიან დიდია", diff --git a/apps/files/l10n/km.js b/apps/files/l10n/km.js index 8307b49835c..4f7e877c4cc 100644 --- a/apps/files/l10n/km.js +++ b/apps/files/l10n/km.js @@ -4,8 +4,6 @@ OC.L10N.register( "Unknown error" : "មិនស្គាល់កំហុស", "Could not move %s - File with this name already exists" : "មិនអាចផ្លាស់ទី %s - មានឈ្មោះឯកសារដូចនេះហើយ", "Could not move %s" : "មិនអាចផ្លាស់ទី %s", - "File name cannot be empty." : "ឈ្មោះឯកសារមិនអាចនៅទទេបានឡើយ។", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "ឈ្មោះមិនត្រឹមត្រូវ, មិនអនុញ្ញាត '\\', '/', '<', '>', ':', '\"', '|', '?' និង '*' ទេ។", "No file was uploaded. Unknown error" : "មិនមានឯកសារដែលបានផ្ទុកឡើង។ មិនស្គាល់កំហុស", "There is no error, the file uploaded with success" : "មិនមានកំហុសអ្វីទេ ហើយឯកសារត្រូវបានផ្ទុកឡើងដោយជោគជ័យ", "Files" : "ឯកសារ", @@ -23,7 +21,14 @@ OC.L10N.register( "_%n folder_::_%n folders_" : [""], "_%n file_::_%n files_" : [""], "_Uploading %n file_::_Uploading %n files_" : [""], + "File name cannot be empty." : "ឈ្មោះឯកសារមិនអាចនៅទទេបានឡើយ។", "_matches '{filter}'_::_match '{filter}'_" : [""], + "You created %1$s" : "អ្នកបានបង្កើត %1$s", + "%2$s created %1$s" : "%2$s បានបង្កើត %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", "Maximum upload size" : "ទំហំផ្ទុកឡើងជាអតិបរមា", "Save" : "រក្សាទុក", "Settings" : "ការកំណត់", @@ -32,7 +37,6 @@ OC.L10N.register( "Text file" : "ឯកសារអក្សរ", "New folder" : "ថតថ្មី", "Folder" : "ថត", - "From link" : "ពីតំណ", "Upload" : "ផ្ទុកឡើង", "Cancel upload" : "បោះបង់ការផ្ទុកឡើង", "Upload too large" : "ផ្ទុកឡើងធំពេក" diff --git a/apps/files/l10n/km.json b/apps/files/l10n/km.json index babae7a1a8d..c09eae06637 100644 --- a/apps/files/l10n/km.json +++ b/apps/files/l10n/km.json @@ -2,8 +2,6 @@ "Unknown error" : "មិនស្គាល់កំហុស", "Could not move %s - File with this name already exists" : "មិនអាចផ្លាស់ទី %s - មានឈ្មោះឯកសារដូចនេះហើយ", "Could not move %s" : "មិនអាចផ្លាស់ទី %s", - "File name cannot be empty." : "ឈ្មោះឯកសារមិនអាចនៅទទេបានឡើយ។", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "ឈ្មោះមិនត្រឹមត្រូវ, មិនអនុញ្ញាត '\\', '/', '<', '>', ':', '\"', '|', '?' និង '*' ទេ។", "No file was uploaded. Unknown error" : "មិនមានឯកសារដែលបានផ្ទុកឡើង។ មិនស្គាល់កំហុស", "There is no error, the file uploaded with success" : "មិនមានកំហុសអ្វីទេ ហើយឯកសារត្រូវបានផ្ទុកឡើងដោយជោគជ័យ", "Files" : "ឯកសារ", @@ -21,7 +19,14 @@ "_%n folder_::_%n folders_" : [""], "_%n file_::_%n files_" : [""], "_Uploading %n file_::_Uploading %n files_" : [""], + "File name cannot be empty." : "ឈ្មោះឯកសារមិនអាចនៅទទេបានឡើយ។", "_matches '{filter}'_::_match '{filter}'_" : [""], + "You created %1$s" : "អ្នកបានបង្កើត %1$s", + "%2$s created %1$s" : "%2$s បានបង្កើត %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", "Maximum upload size" : "ទំហំផ្ទុកឡើងជាអតិបរមា", "Save" : "រក្សាទុក", "Settings" : "ការកំណត់", @@ -30,7 +35,6 @@ "Text file" : "ឯកសារអក្សរ", "New folder" : "ថតថ្មី", "Folder" : "ថត", - "From link" : "ពីតំណ", "Upload" : "ផ្ទុកឡើង", "Cancel upload" : "បោះបង់ការផ្ទុកឡើង", "Upload too large" : "ផ្ទុកឡើងធំពេក" diff --git a/apps/files/l10n/kn.js b/apps/files/l10n/kn.js index 8888f4470a5..4be67b67e08 100644 --- a/apps/files/l10n/kn.js +++ b/apps/files/l10n/kn.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "%s ಹೆಸರು ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ - ಸ್ಥಳ ಬದಲಾವಣೆ ಸಾಧ್ಯವಿಲ್ಲ", "Could not move %s" : "%s ಸ್ಥಳ ಬದಲಾವಣೆ ಸಾಧ್ಯವಿಲ್ಲ", "Permission denied" : "ಅನುಮತಿ ನಿರಾಕರಿಸಲಾಗಿದೆ", - "File name cannot be empty." : "ಕಡತ ಹೆಸರು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ.", - "\"%s\" is an invalid file name." : "\"%s\" ಅಮಾನ್ಯ ಕಡತ ಹೆಸರು.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "ಅಮಾನ್ಯವಾದ ಹೆಸರು, '\\', '/', '<', '>', ':', '\"', '|', '?' ಮತ್ತು '*' ಅನುಮತಿ ಇಲ್ಲ.", "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 ಈಗಾಗಲೇ ಬಳಸಲಾಗುತ್ತದೆ. ಬೇರೆ ಹೆಸರನ್ನು ಆಯ್ಕೆಮಾಡಿ.", - "Not a valid source" : "ತೋರಿಸಲಾದ ಸ್ಥಾನ ಅಮಾನ್ಯ", - "Server is not allowed to open URLs, please check the server configuration" : "ಸರ್ವರ್ URL ಗಳನ್ನು ತೆರೆಯಲು ಅನುಮತಿ ಇಲ್ಲ, ಸರ್ವರ್ ಕಾನ್ಫಿಗರೇಶನ್ ಪರಿಶೀಲಿಸಿ", - "The file exceeds your quota by %s" : "ಕಡತ ಪ್ರಮಾಣ ನಿಮಗಿರುವ ಮಿತಿಗಿಂತ %s ಹೆಚ್ಚಾಗಿದೆ", - "Error while downloading %s to %s" : "%s ರಿಂದ %s ವರ್ಗಾವಾಣೆ ಮಾಡುವಾಗ ಲೋಪವಾದೆ", "Error when creating the file" : "ಕಡತವನ್ನು ರಚಿಸುವಾಗ ದೋಷವಾಗಿದೆ", - "Folder name cannot be empty." : "ಕೊಶದ ಹೆಸರು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ.", "Error when creating the folder" : "ಕೊಶವನ್ನು ರಚಿಸುವಾಗ ದೋಷವಾಗಿದೆ", "Unable to set upload directory." : "ಪೇರಿಸವ ಕೋಶವನ್ನು ಹೊಂದಿಸಲಾಗಲಿಲ್ಲ.", "Invalid Token" : "ಅಮಾನ್ಯ ಸಾಂಕೇತಿಕ", @@ -35,7 +27,6 @@ OC.L10N.register( "Home" : "ಮುಖಪುಟ", "Upload cancelled." : "ವರ್ಗಾವಣೆಯನ್ನು ರದ್ದು ಮಾಡಲಾಯಿತು.", "Could not get result from server." : "ಪರಿಚಾರಕ ಕಣಕದಿಂದ ಫಲಿತಾಂಶವನ್ನು ಪಡೆಯಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ.", - "URL cannot be empty" : "ಜಾಲದ ಕೊಂಡಿಯ ಹೆಸರು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ", "{new_name} already exists" : "ಈಗಾಗಲೇ {new_name} ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ", "Could not create file" : "ಕಡತ ರಚಿಸಲಾಗಲಿಲ್ಲ", "Could not create folder" : "ಕೋಶವನ್ನು ರಚಿಸಲಾಗಿಲ್ಲ", @@ -59,6 +50,7 @@ OC.L10N.register( "_%n file_::_%n files_" : ["%n ಕಡತ"], "You don’t have permission to upload or create files here" : "ನಿಮಗೆ ಇಲ್ಲಿ ಅಪ್ಲೋಡ್ ಅಥವಾ ಕಡತಗಳನ್ನು ರಚಿಸವ ಅನುಮತಿ ಇಲ್ಲ", "_Uploading %n file_::_Uploading %n files_" : ["%n 'ನೆ ಕಡತವನ್ನು ವರ್ಗಾಯಿಸಲಾಗುತ್ತಿದೆ"], + "File name cannot be empty." : "ಕಡತ ಹೆಸರು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ.", "_matches '{filter}'_::_match '{filter}'_" : [""], "Favorited" : "ಅಚ್ಚುಮೆಚ್ಚಿನವು", "Favorite" : "ಅಚ್ಚುಮೆಚ್ಚಿನ", @@ -74,7 +66,6 @@ OC.L10N.register( "Text file" : "ಸರಳಾಕ್ಷರದ ಕಡತ", "New folder" : "ಹೊಸ ಕಡತಕೋಶ", "Folder" : "ಕಡತಕೋಶ", - "From link" : "ಸಂಪರ್ಕ ಕೊಂಡಿ", "Upload" : "ವರ್ಗಾಯಿಸಿ", "Cancel upload" : "ವರ್ಗಾವಣೆ ರದ್ದು ಮಾಡಿ", "No files yet" : "ಇನ್ನೂ ಯಾವುದೇ ಕಡತಗಳು ಇಲ್ಲಿಲ", diff --git a/apps/files/l10n/kn.json b/apps/files/l10n/kn.json index c3644c270f8..5c2d0409f0b 100644 --- a/apps/files/l10n/kn.json +++ b/apps/files/l10n/kn.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "%s ಹೆಸರು ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ - ಸ್ಥಳ ಬದಲಾವಣೆ ಸಾಧ್ಯವಿಲ್ಲ", "Could not move %s" : "%s ಸ್ಥಳ ಬದಲಾವಣೆ ಸಾಧ್ಯವಿಲ್ಲ", "Permission denied" : "ಅನುಮತಿ ನಿರಾಕರಿಸಲಾಗಿದೆ", - "File name cannot be empty." : "ಕಡತ ಹೆಸರು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ.", - "\"%s\" is an invalid file name." : "\"%s\" ಅಮಾನ್ಯ ಕಡತ ಹೆಸರು.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "ಅಮಾನ್ಯವಾದ ಹೆಸರು, '\\', '/', '<', '>', ':', '\"', '|', '?' ಮತ್ತು '*' ಅನುಮತಿ ಇಲ್ಲ.", "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 ಈಗಾಗಲೇ ಬಳಸಲಾಗುತ್ತದೆ. ಬೇರೆ ಹೆಸರನ್ನು ಆಯ್ಕೆಮಾಡಿ.", - "Not a valid source" : "ತೋರಿಸಲಾದ ಸ್ಥಾನ ಅಮಾನ್ಯ", - "Server is not allowed to open URLs, please check the server configuration" : "ಸರ್ವರ್ URL ಗಳನ್ನು ತೆರೆಯಲು ಅನುಮತಿ ಇಲ್ಲ, ಸರ್ವರ್ ಕಾನ್ಫಿಗರೇಶನ್ ಪರಿಶೀಲಿಸಿ", - "The file exceeds your quota by %s" : "ಕಡತ ಪ್ರಮಾಣ ನಿಮಗಿರುವ ಮಿತಿಗಿಂತ %s ಹೆಚ್ಚಾಗಿದೆ", - "Error while downloading %s to %s" : "%s ರಿಂದ %s ವರ್ಗಾವಾಣೆ ಮಾಡುವಾಗ ಲೋಪವಾದೆ", "Error when creating the file" : "ಕಡತವನ್ನು ರಚಿಸುವಾಗ ದೋಷವಾಗಿದೆ", - "Folder name cannot be empty." : "ಕೊಶದ ಹೆಸರು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ.", "Error when creating the folder" : "ಕೊಶವನ್ನು ರಚಿಸುವಾಗ ದೋಷವಾಗಿದೆ", "Unable to set upload directory." : "ಪೇರಿಸವ ಕೋಶವನ್ನು ಹೊಂದಿಸಲಾಗಲಿಲ್ಲ.", "Invalid Token" : "ಅಮಾನ್ಯ ಸಾಂಕೇತಿಕ", @@ -33,7 +25,6 @@ "Home" : "ಮುಖಪುಟ", "Upload cancelled." : "ವರ್ಗಾವಣೆಯನ್ನು ರದ್ದು ಮಾಡಲಾಯಿತು.", "Could not get result from server." : "ಪರಿಚಾರಕ ಕಣಕದಿಂದ ಫಲಿತಾಂಶವನ್ನು ಪಡೆಯಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ.", - "URL cannot be empty" : "ಜಾಲದ ಕೊಂಡಿಯ ಹೆಸರು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ", "{new_name} already exists" : "ಈಗಾಗಲೇ {new_name} ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ", "Could not create file" : "ಕಡತ ರಚಿಸಲಾಗಲಿಲ್ಲ", "Could not create folder" : "ಕೋಶವನ್ನು ರಚಿಸಲಾಗಿಲ್ಲ", @@ -57,6 +48,7 @@ "_%n file_::_%n files_" : ["%n ಕಡತ"], "You don’t have permission to upload or create files here" : "ನಿಮಗೆ ಇಲ್ಲಿ ಅಪ್ಲೋಡ್ ಅಥವಾ ಕಡತಗಳನ್ನು ರಚಿಸವ ಅನುಮತಿ ಇಲ್ಲ", "_Uploading %n file_::_Uploading %n files_" : ["%n 'ನೆ ಕಡತವನ್ನು ವರ್ಗಾಯಿಸಲಾಗುತ್ತಿದೆ"], + "File name cannot be empty." : "ಕಡತ ಹೆಸರು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ.", "_matches '{filter}'_::_match '{filter}'_" : [""], "Favorited" : "ಅಚ್ಚುಮೆಚ್ಚಿನವು", "Favorite" : "ಅಚ್ಚುಮೆಚ್ಚಿನ", @@ -72,7 +64,6 @@ "Text file" : "ಸರಳಾಕ್ಷರದ ಕಡತ", "New folder" : "ಹೊಸ ಕಡತಕೋಶ", "Folder" : "ಕಡತಕೋಶ", - "From link" : "ಸಂಪರ್ಕ ಕೊಂಡಿ", "Upload" : "ವರ್ಗಾಯಿಸಿ", "Cancel upload" : "ವರ್ಗಾವಣೆ ರದ್ದು ಮಾಡಿ", "No files yet" : "ಇನ್ನೂ ಯಾವುದೇ ಕಡತಗಳು ಇಲ್ಲಿಲ", diff --git a/apps/files/l10n/ko.js b/apps/files/l10n/ko.js index d352bacc5ed..5301636d3d1 100644 --- a/apps/files/l10n/ko.js +++ b/apps/files/l10n/ko.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "항목 %s을(를) 이동시킬 수 없음 - 같은 이름의 파일이 이미 존재함", "Could not move %s" : "항목 %s을(를) 이동시킬 수 없음", "Permission denied" : "권한 거부됨", - "File name cannot be empty." : "파일 이름이 비어 있을 수 없습니다.", - "\"%s\" is an invalid file name." : "\"%s\"은(는) 잘못된 파일 이름입니다.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "폴더 이름이 올바르지 않습니다. 이름에 문자 '\\', '/', '<', '>', ':', '\"', '|', '? ', '*'는 사용할 수 없습니다.", "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에서 이미 사용 중입니다. 다른 이름을 사용하십시오.", - "Not a valid source" : "올바르지 않은 원본", - "Server is not allowed to open URLs, please check the server configuration" : "서버에서 URL을 열 수 없습니다. 서버 설정을 확인하십시오", - "The file exceeds your quota by %s" : "이 파일은 현재 할당량을 %s만큼 초과합니다", - "Error while downloading %s to %s" : "%s을(를) %s(으)로 다운로드하는 중 오류 발생", "Error when creating the file" : "파일 생성 중 오류 발생", - "Folder name cannot be empty." : "폴더 이름이 비어있을 수 없습니다.", "Error when creating the folder" : "폴더 생성 중 오류 발생", "Unable to set upload directory." : "업로드 디렉터리를 설정할 수 없습니다.", "Invalid Token" : "잘못된 토큰", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "업로드가 취소되었습니다.", "Could not get result from server." : "서버에서 결과를 가져올 수 없습니다.", "File upload is in progress. Leaving the page now will cancel the upload." : "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다.", - "URL cannot be empty" : "URL이 비어있을 수 없음", "{new_name} already exists" : "{new_name}이(가) 이미 존재함", "Could not create file" : "파일을 만들 수 없음", "Could not create folder" : "폴더를 만들 수 없음", - "Error fetching URL" : "URL을 가져올 수 없음", "Rename" : "이름 바꾸기", "Delete" : "삭제", "Disconnect storage" : "저장소 연결 해제", @@ -70,6 +60,7 @@ OC.L10N.register( "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}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오", @@ -79,6 +70,20 @@ OC.L10N.register( "{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>", + "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)", @@ -94,7 +99,6 @@ OC.L10N.register( "Text file" : "텍스트 파일", "New folder" : "새 폴더", "Folder" : "폴더", - "From link" : "링크에서", "Upload" : "업로드", "Cancel upload" : "업로드 취소", "No files yet" : "아직 파일 없음", diff --git a/apps/files/l10n/ko.json b/apps/files/l10n/ko.json index f12256b681a..1b9a9b27bc6 100644 --- a/apps/files/l10n/ko.json +++ b/apps/files/l10n/ko.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "항목 %s을(를) 이동시킬 수 없음 - 같은 이름의 파일이 이미 존재함", "Could not move %s" : "항목 %s을(를) 이동시킬 수 없음", "Permission denied" : "권한 거부됨", - "File name cannot be empty." : "파일 이름이 비어 있을 수 없습니다.", - "\"%s\" is an invalid file name." : "\"%s\"은(는) 잘못된 파일 이름입니다.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "폴더 이름이 올바르지 않습니다. 이름에 문자 '\\', '/', '<', '>', ':', '\"', '|', '? ', '*'는 사용할 수 없습니다.", "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에서 이미 사용 중입니다. 다른 이름을 사용하십시오.", - "Not a valid source" : "올바르지 않은 원본", - "Server is not allowed to open URLs, please check the server configuration" : "서버에서 URL을 열 수 없습니다. 서버 설정을 확인하십시오", - "The file exceeds your quota by %s" : "이 파일은 현재 할당량을 %s만큼 초과합니다", - "Error while downloading %s to %s" : "%s을(를) %s(으)로 다운로드하는 중 오류 발생", "Error when creating the file" : "파일 생성 중 오류 발생", - "Folder name cannot be empty." : "폴더 이름이 비어있을 수 없습니다.", "Error when creating the folder" : "폴더 생성 중 오류 발생", "Unable to set upload directory." : "업로드 디렉터리를 설정할 수 없습니다.", "Invalid Token" : "잘못된 토큰", @@ -41,11 +33,9 @@ "Upload cancelled." : "업로드가 취소되었습니다.", "Could not get result from server." : "서버에서 결과를 가져올 수 없습니다.", "File upload is in progress. Leaving the page now will cancel the upload." : "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다.", - "URL cannot be empty" : "URL이 비어있을 수 없음", "{new_name} already exists" : "{new_name}이(가) 이미 존재함", "Could not create file" : "파일을 만들 수 없음", "Could not create folder" : "폴더를 만들 수 없음", - "Error fetching URL" : "URL을 가져올 수 없음", "Rename" : "이름 바꾸기", "Delete" : "삭제", "Disconnect storage" : "저장소 연결 해제", @@ -68,6 +58,7 @@ "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}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오", @@ -77,6 +68,20 @@ "{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>", + "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)", @@ -92,7 +97,6 @@ "Text file" : "텍스트 파일", "New folder" : "새 폴더", "Folder" : "폴더", - "From link" : "링크에서", "Upload" : "업로드", "Cancel upload" : "업로드 취소", "No files yet" : "아직 파일 없음", diff --git a/apps/files/l10n/lt_LT.js b/apps/files/l10n/lt_LT.js index 89301e1eec8..3a61e0c1708 100644 --- a/apps/files/l10n/lt_LT.js +++ b/apps/files/l10n/lt_LT.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Nepavyko perkelti %s - failas su tokiu pavadinimu jau egzistuoja", "Could not move %s" : "Nepavyko perkelti %s", "Permission denied" : "Neturite teisių", - "File name cannot be empty." : "Failo pavadinimas negali būti tuščias.", - "\"%s\" is an invalid file name." : "„%s“ yra netinkamas failo pavadinimas.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Neleistinas pavadinimas, '\\', '/', '<', '>', ':', '\"', '|', '?' ir '*' yra neleidžiami.", "The target folder has been moved or deleted." : "Tikslo aplankas buvo perkeltas ar ištrintas.", "The name %s is already used in the folder %s. Please choose a different name." : "Pavadinimas %s jau naudojamas aplanke %s. Prašome pasirinkti kitokį pavadinimą.", - "Not a valid source" : "Netinkamas šaltinis", - "Server is not allowed to open URLs, please check the server configuration" : "Serveriui neleidžiama atverti URL, prašome patikrinti serverio konfigūraciją", - "The file exceeds your quota by %s" : "Failai viršyja jūsų kvotą per %s", - "Error while downloading %s to %s" : "Klaida siunčiant %s į %s", "Error when creating the file" : "Klaida kuriant failą", - "Folder name cannot be empty." : "Aplanko pavadinimas negali būti tuščias.", "Error when creating the folder" : "Klaida kuriant aplanką", "Unable to set upload directory." : "Nepavyksta nustatyti įkėlimų katalogo.", "Invalid Token" : "Netinkamas ženklas", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Įkėlimas atšauktas.", "Could not get result from server." : "Nepavyko gauti rezultato iš serverio.", "File upload is in progress. Leaving the page now will cancel the upload." : "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks.", - "URL cannot be empty" : "URL negali būti tuščias.", "{new_name} already exists" : "{new_name} jau egzistuoja", "Could not create file" : "Neįmanoma sukurti failo", "Could not create folder" : "Neįmanoma sukurti aplanko", - "Error fetching URL" : "Klauda gaunant URL", "Rename" : "Pervadinti", "Delete" : "Ištrinti", "Disconnect storage" : "Atjungti saugyklą", @@ -69,6 +59,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Jūs neturite leidimo čia įkelti arba kurti failus", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Jūsų visa vieta serveryje užimta", "Your storage is almost full ({usedSpacePercent}%)" : "Jūsų vieta serveryje beveik visa užimta ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifravimo programa įjungta, bet Jūsų raktai nėra pritaikyti. Prašome atsijungti ir vėl prisijungti", @@ -78,6 +69,19 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} ir {files}", "Favorited" : "Pažymėta mėgstamu", "Favorite" : "Mėgiamas", + "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>", + "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", + "%2$s created %1$s" : "%2$s sukūrė %1$s", + "%1$s was created in a public folder" : "%1$s buvo sukurta viešajame aplanke", + "You changed %1$s" : "Jūs pakeitėte %1$s", + "%2$s changed %1$s" : "%2$s pakeitė %1$s", + "You deleted %1$s" : "Jūs ištrynėte %1$s", + "%2$s deleted %1$s" : "%2$s ištrynė %1$s", + "You restored %1$s" : "Jūs atkūrėte %1$s", + "%2$s restored %1$s" : "%2$s atkurta %1$s", "%s could not be renamed as it has been deleted" : "%s negalėjo būti pervadintas, nes buvo ištrintas", "%s could not be renamed" : "%s negali būti pervadintas", "Upload (max. %s)" : "Įkelti (maks. %s)", @@ -93,7 +97,6 @@ OC.L10N.register( "Text file" : "Teksto failas", "New folder" : "Naujas aplankas", "Folder" : "Katalogas", - "From link" : "Iš nuorodos", "Upload" : "Įkelti", "Cancel upload" : "Atšaukti siuntimą", "No files yet" : "Dar nėra failų", diff --git a/apps/files/l10n/lt_LT.json b/apps/files/l10n/lt_LT.json index d9029085eac..8fb6da2c1c1 100644 --- a/apps/files/l10n/lt_LT.json +++ b/apps/files/l10n/lt_LT.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Nepavyko perkelti %s - failas su tokiu pavadinimu jau egzistuoja", "Could not move %s" : "Nepavyko perkelti %s", "Permission denied" : "Neturite teisių", - "File name cannot be empty." : "Failo pavadinimas negali būti tuščias.", - "\"%s\" is an invalid file name." : "„%s“ yra netinkamas failo pavadinimas.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Neleistinas pavadinimas, '\\', '/', '<', '>', ':', '\"', '|', '?' ir '*' yra neleidžiami.", "The target folder has been moved or deleted." : "Tikslo aplankas buvo perkeltas ar ištrintas.", "The name %s is already used in the folder %s. Please choose a different name." : "Pavadinimas %s jau naudojamas aplanke %s. Prašome pasirinkti kitokį pavadinimą.", - "Not a valid source" : "Netinkamas šaltinis", - "Server is not allowed to open URLs, please check the server configuration" : "Serveriui neleidžiama atverti URL, prašome patikrinti serverio konfigūraciją", - "The file exceeds your quota by %s" : "Failai viršyja jūsų kvotą per %s", - "Error while downloading %s to %s" : "Klaida siunčiant %s į %s", "Error when creating the file" : "Klaida kuriant failą", - "Folder name cannot be empty." : "Aplanko pavadinimas negali būti tuščias.", "Error when creating the folder" : "Klaida kuriant aplanką", "Unable to set upload directory." : "Nepavyksta nustatyti įkėlimų katalogo.", "Invalid Token" : "Netinkamas ženklas", @@ -41,11 +33,9 @@ "Upload cancelled." : "Įkėlimas atšauktas.", "Could not get result from server." : "Nepavyko gauti rezultato iš serverio.", "File upload is in progress. Leaving the page now will cancel the upload." : "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks.", - "URL cannot be empty" : "URL negali būti tuščias.", "{new_name} already exists" : "{new_name} jau egzistuoja", "Could not create file" : "Neįmanoma sukurti failo", "Could not create folder" : "Neįmanoma sukurti aplanko", - "Error fetching URL" : "Klauda gaunant URL", "Rename" : "Pervadinti", "Delete" : "Ištrinti", "Disconnect storage" : "Atjungti saugyklą", @@ -67,6 +57,7 @@ "You don’t have permission to upload or create files here" : "Jūs neturite leidimo čia įkelti arba kurti failus", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Jūsų visa vieta serveryje užimta", "Your storage is almost full ({usedSpacePercent}%)" : "Jūsų vieta serveryje beveik visa užimta ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifravimo programa įjungta, bet Jūsų raktai nėra pritaikyti. Prašome atsijungti ir vėl prisijungti", @@ -76,6 +67,19 @@ "{dirs} and {files}" : "{dirs} ir {files}", "Favorited" : "Pažymėta mėgstamu", "Favorite" : "Mėgiamas", + "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>", + "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", + "%2$s created %1$s" : "%2$s sukūrė %1$s", + "%1$s was created in a public folder" : "%1$s buvo sukurta viešajame aplanke", + "You changed %1$s" : "Jūs pakeitėte %1$s", + "%2$s changed %1$s" : "%2$s pakeitė %1$s", + "You deleted %1$s" : "Jūs ištrynėte %1$s", + "%2$s deleted %1$s" : "%2$s ištrynė %1$s", + "You restored %1$s" : "Jūs atkūrėte %1$s", + "%2$s restored %1$s" : "%2$s atkurta %1$s", "%s could not be renamed as it has been deleted" : "%s negalėjo būti pervadintas, nes buvo ištrintas", "%s could not be renamed" : "%s negali būti pervadintas", "Upload (max. %s)" : "Įkelti (maks. %s)", @@ -91,7 +95,6 @@ "Text file" : "Teksto failas", "New folder" : "Naujas aplankas", "Folder" : "Katalogas", - "From link" : "Iš nuorodos", "Upload" : "Įkelti", "Cancel upload" : "Atšaukti siuntimą", "No files yet" : "Dar nėra failų", diff --git a/apps/files/l10n/lv.js b/apps/files/l10n/lv.js index 3dc666bfbcb..4dfd9933380 100644 --- a/apps/files/l10n/lv.js +++ b/apps/files/l10n/lv.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Nevarēja pārvietot %s — jau eksistē datne ar tādu nosaukumu", "Could not move %s" : "Nevarēja pārvietot %s", "Permission denied" : "Pieeja liegta", - "File name cannot be empty." : "Datnes nosaukums nevar būt tukšs.", - "\"%s\" is an invalid file name." : "\"%s\" ir nepareizs datnes nosaukums.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nederīgs nosaukums, nav atļauti '\\', '/', '<', '>', ':', '\"', '|', '?' un '*'.", "The target folder has been moved or deleted." : "Mērķa mape ir pārvietota vai dzēsta", "The name %s is already used in the folder %s. Please choose a different name." : "Nosaukums '%s' jau tiek izmantots mapē '%s'. Lūdzu izvēlieties citu nosaukumu.", - "Not a valid source" : "Avots nav derīgs", - "Server is not allowed to open URLs, please check the server configuration" : "Serverim netiek atļauts atvērt saites, plūdzu pārbaudiet servera uzstādījumus", - "The file exceeds your quota by %s" : "Faila izmērs ir par %s lielāks par atļauto kvotu", - "Error while downloading %s to %s" : "Kļūda, lejupielādējot %s uz %s", "Error when creating the file" : "Kļūda veidojot datni", - "Folder name cannot be empty." : "Mape nevar būt tukša", "Error when creating the folder" : "Kļūda, veidojot mapi", "Unable to set upload directory." : "Nevar uzstādīt augšupielādes mapi.", "Invalid Token" : "Nepareiza pilnvara", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Augšupielāde ir atcelta.", "Could not get result from server." : "Nevar saņemt rezultātus no servera", "File upload is in progress. Leaving the page now will cancel the upload." : "Notiek augšupielāde. Pametot lapu tagad, tiks atcelta augšupielāde.", - "URL cannot be empty" : "URL nevar būt tukšs", "{new_name} already exists" : "{new_name} jau eksistē", "Could not create file" : "Neizdevās izveidot datni", "Could not create folder" : "Neizdevās izveidot mapi", - "Error fetching URL" : "Kļūda apstrādājot URL", "Rename" : "Pārsaukt", "Delete" : "Dzēst", "Disconnect storage" : "Atvienot krātuvi", @@ -70,15 +60,30 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Jums nav tiesību, augšupielādēt vai veidot, šeit datnes", "_Uploading %n file_::_Uploading %n files_" : ["%n","Augšupielāde %n failu","Augšupielāde %n failus"], "\"{name}\" is an invalid file name." : "\"{name}\" ir nepareizs datnes nosaukums.", + "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}'_" : ["","",""], + "_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", "Favorite" : "Iecienītais", + "An error occurred while trying to update the tags" : "Atjaunojot atzīmes notika kļūda", + "A new file or folder has been <strong>created</strong>" : "<strong>Izveidots</strong> jauns fails vai mape", + "A file or folder has been <strong>changed</strong>" : "<strong>Izmainīts</strong> fails vai mape", + "A file or folder has been <strong>deleted</strong>" : "<strong>Dzēsts</strong> fails vai mape", + "A file or folder has been <strong>restored</strong>" : "<strong>Atjaunots</strong> fails vai mape", + "You created %1$s" : "Tu izveidoji %1$s", + "%2$s created %1$s" : "%2$s izveidoja %1$s", + "%1$s was created in a public folder" : "%1$s tika izveidots publiskajā mapē", + "You changed %1$s" : "Tu izmainīji %1$s", + "%2$s changed %1$s" : "%2$s izmainīja %1$s", + "You deleted %1$s" : "Tu izdzēsi %1$s", + "%2$s deleted %1$s" : "%2$s izdzēsa %1$s", + "You restored %1$s" : "Tu atjaunoji %1$s", + "%2$s restored %1$s" : "%2$s atjaunoja %1$s", "%s could not be renamed as it has been deleted" : "Nevarēja pārsaukt %s, jo tas ir dzēsts", "%s could not be renamed" : "%s nevar tikt pārsaukts", "Upload (max. %s)" : "Augšupielādēt (maks. %s)", @@ -94,7 +99,6 @@ OC.L10N.register( "Text file" : "Teksta datne", "New folder" : "Jauna mape", "Folder" : "Mape", - "From link" : "No saites", "Upload" : "Augšupielādēt", "Cancel upload" : "Atcelt augšupielādi", "No files yet" : "Vēl nav neviena datne", diff --git a/apps/files/l10n/lv.json b/apps/files/l10n/lv.json index 0a09bc6cd19..e2f30c7289f 100644 --- a/apps/files/l10n/lv.json +++ b/apps/files/l10n/lv.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Nevarēja pārvietot %s — jau eksistē datne ar tādu nosaukumu", "Could not move %s" : "Nevarēja pārvietot %s", "Permission denied" : "Pieeja liegta", - "File name cannot be empty." : "Datnes nosaukums nevar būt tukšs.", - "\"%s\" is an invalid file name." : "\"%s\" ir nepareizs datnes nosaukums.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nederīgs nosaukums, nav atļauti '\\', '/', '<', '>', ':', '\"', '|', '?' un '*'.", "The target folder has been moved or deleted." : "Mērķa mape ir pārvietota vai dzēsta", "The name %s is already used in the folder %s. Please choose a different name." : "Nosaukums '%s' jau tiek izmantots mapē '%s'. Lūdzu izvēlieties citu nosaukumu.", - "Not a valid source" : "Avots nav derīgs", - "Server is not allowed to open URLs, please check the server configuration" : "Serverim netiek atļauts atvērt saites, plūdzu pārbaudiet servera uzstādījumus", - "The file exceeds your quota by %s" : "Faila izmērs ir par %s lielāks par atļauto kvotu", - "Error while downloading %s to %s" : "Kļūda, lejupielādējot %s uz %s", "Error when creating the file" : "Kļūda veidojot datni", - "Folder name cannot be empty." : "Mape nevar būt tukša", "Error when creating the folder" : "Kļūda, veidojot mapi", "Unable to set upload directory." : "Nevar uzstādīt augšupielādes mapi.", "Invalid Token" : "Nepareiza pilnvara", @@ -41,11 +33,9 @@ "Upload cancelled." : "Augšupielāde ir atcelta.", "Could not get result from server." : "Nevar saņemt rezultātus no servera", "File upload is in progress. Leaving the page now will cancel the upload." : "Notiek augšupielāde. Pametot lapu tagad, tiks atcelta augšupielāde.", - "URL cannot be empty" : "URL nevar būt tukšs", "{new_name} already exists" : "{new_name} jau eksistē", "Could not create file" : "Neizdevās izveidot datni", "Could not create folder" : "Neizdevās izveidot mapi", - "Error fetching URL" : "Kļūda apstrādājot URL", "Rename" : "Pārsaukt", "Delete" : "Dzēst", "Disconnect storage" : "Atvienot krātuvi", @@ -68,15 +58,30 @@ "You don’t have permission to upload or create files here" : "Jums nav tiesību, augšupielādēt vai veidot, šeit datnes", "_Uploading %n file_::_Uploading %n files_" : ["%n","Augšupielāde %n failu","Augšupielāde %n failus"], "\"{name}\" is an invalid file name." : "\"{name}\" ir nepareizs datnes nosaukums.", + "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}'_" : ["","",""], + "_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", "Favorite" : "Iecienītais", + "An error occurred while trying to update the tags" : "Atjaunojot atzīmes notika kļūda", + "A new file or folder has been <strong>created</strong>" : "<strong>Izveidots</strong> jauns fails vai mape", + "A file or folder has been <strong>changed</strong>" : "<strong>Izmainīts</strong> fails vai mape", + "A file or folder has been <strong>deleted</strong>" : "<strong>Dzēsts</strong> fails vai mape", + "A file or folder has been <strong>restored</strong>" : "<strong>Atjaunots</strong> fails vai mape", + "You created %1$s" : "Tu izveidoji %1$s", + "%2$s created %1$s" : "%2$s izveidoja %1$s", + "%1$s was created in a public folder" : "%1$s tika izveidots publiskajā mapē", + "You changed %1$s" : "Tu izmainīji %1$s", + "%2$s changed %1$s" : "%2$s izmainīja %1$s", + "You deleted %1$s" : "Tu izdzēsi %1$s", + "%2$s deleted %1$s" : "%2$s izdzēsa %1$s", + "You restored %1$s" : "Tu atjaunoji %1$s", + "%2$s restored %1$s" : "%2$s atjaunoja %1$s", "%s could not be renamed as it has been deleted" : "Nevarēja pārsaukt %s, jo tas ir dzēsts", "%s could not be renamed" : "%s nevar tikt pārsaukts", "Upload (max. %s)" : "Augšupielādēt (maks. %s)", @@ -92,7 +97,6 @@ "Text file" : "Teksta datne", "New folder" : "Jauna mape", "Folder" : "Mape", - "From link" : "No saites", "Upload" : "Augšupielādēt", "Cancel upload" : "Atcelt augšupielādi", "No files yet" : "Vēl nav neviena datne", diff --git a/apps/files/l10n/mk.js b/apps/files/l10n/mk.js index 3e73a634bd1..309721b0769 100644 --- a/apps/files/l10n/mk.js +++ b/apps/files/l10n/mk.js @@ -4,12 +4,7 @@ OC.L10N.register( "Unknown error" : "Непозната грешка", "Could not move %s - File with this name already exists" : "Не можам да го преместам %s - Датотека со такво име веќе постои", "Could not move %s" : "Не можам да ги префрлам %s", - "File name cannot be empty." : "Името на датотеката не може да биде празно.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Неправилно име. , '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' не се дозволени.", - "Not a valid source" : "Не е валиден извор", - "Error while downloading %s to %s" : "Грешка додека преземам %s to %s", "Error when creating the file" : "Грешка при креирање на датотека", - "Folder name cannot be empty." : "Името на папката не може да биде празно.", "Error when creating the folder" : "Грешка при креирање на папка", "Unable to set upload directory." : "Не може да се постави папката за префрлање на податоци.", "Invalid Token" : "Грешен токен", @@ -30,7 +25,6 @@ OC.L10N.register( "Upload cancelled." : "Преземањето е прекинато.", "Could not get result from server." : "Не можам да добијам резултат од серверот.", "File upload is in progress. Leaving the page now will cancel the upload." : "Подигање на датотека е во тек. Напуштење на страницата ќе го прекине.", - "URL cannot be empty" : "URL-то не може да биде празно", "{new_name} already exists" : "{new_name} веќе постои", "Could not create file" : "Не множам да креирам датотека", "Could not create folder" : "Не можам да креирам папка", @@ -49,10 +43,17 @@ OC.L10N.register( "_%n folder_::_%n folders_" : ["",""], "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], + "File name cannot be empty." : "Името на датотеката не може да биде празно.", "Your storage is full, files can not be updated or synced anymore!" : "Вашиот сториџ е полн, датотеките веќе не можат да се освежуваат или синхронизираат!", "Your storage is almost full ({usedSpacePercent}%)" : "Вашиот сториџ е скоро полн ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["",""], "{dirs} and {files}" : "{dirs} и {files}", + "You created %1$s" : "Вие креиравте %1$s", + "%2$s created %1$s" : "%2$s креирано %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", "%s could not be renamed" : "%s не може да биде преименуван", "File handling" : "Ракување со датотеки", "Maximum upload size" : "Максимална големина за подигање", @@ -64,7 +65,6 @@ OC.L10N.register( "Text file" : "Текстуална датотека", "New folder" : "Нова папка", "Folder" : "Папка", - "From link" : "Од врска", "Upload" : "Подигни", "Cancel upload" : "Откажи прикачување", "Upload too large" : "Фајлот кој се вчитува е преголем", diff --git a/apps/files/l10n/mk.json b/apps/files/l10n/mk.json index 57f8161f94b..4be8383eee7 100644 --- a/apps/files/l10n/mk.json +++ b/apps/files/l10n/mk.json @@ -2,12 +2,7 @@ "Unknown error" : "Непозната грешка", "Could not move %s - File with this name already exists" : "Не можам да го преместам %s - Датотека со такво име веќе постои", "Could not move %s" : "Не можам да ги префрлам %s", - "File name cannot be empty." : "Името на датотеката не може да биде празно.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Неправилно име. , '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' не се дозволени.", - "Not a valid source" : "Не е валиден извор", - "Error while downloading %s to %s" : "Грешка додека преземам %s to %s", "Error when creating the file" : "Грешка при креирање на датотека", - "Folder name cannot be empty." : "Името на папката не може да биде празно.", "Error when creating the folder" : "Грешка при креирање на папка", "Unable to set upload directory." : "Не може да се постави папката за префрлање на податоци.", "Invalid Token" : "Грешен токен", @@ -28,7 +23,6 @@ "Upload cancelled." : "Преземањето е прекинато.", "Could not get result from server." : "Не можам да добијам резултат од серверот.", "File upload is in progress. Leaving the page now will cancel the upload." : "Подигање на датотека е во тек. Напуштење на страницата ќе го прекине.", - "URL cannot be empty" : "URL-то не може да биде празно", "{new_name} already exists" : "{new_name} веќе постои", "Could not create file" : "Не множам да креирам датотека", "Could not create folder" : "Не можам да креирам папка", @@ -47,10 +41,17 @@ "_%n folder_::_%n folders_" : ["",""], "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], + "File name cannot be empty." : "Името на датотеката не може да биде празно.", "Your storage is full, files can not be updated or synced anymore!" : "Вашиот сториџ е полн, датотеките веќе не можат да се освежуваат или синхронизираат!", "Your storage is almost full ({usedSpacePercent}%)" : "Вашиот сториџ е скоро полн ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["",""], "{dirs} and {files}" : "{dirs} и {files}", + "You created %1$s" : "Вие креиравте %1$s", + "%2$s created %1$s" : "%2$s креирано %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", "%s could not be renamed" : "%s не може да биде преименуван", "File handling" : "Ракување со датотеки", "Maximum upload size" : "Максимална големина за подигање", @@ -62,7 +63,6 @@ "Text file" : "Текстуална датотека", "New folder" : "Нова папка", "Folder" : "Папка", - "From link" : "Од врска", "Upload" : "Подигни", "Cancel upload" : "Откажи прикачување", "Upload too large" : "Фајлот кој се вчитува е преголем", diff --git a/apps/files/l10n/ml_IN.js b/apps/files/l10n/ml_IN.js index ada7e5aa6c4..d5c495c932a 100644 --- a/apps/files/l10n/ml_IN.js +++ b/apps/files/l10n/ml_IN.js @@ -5,6 +5,12 @@ OC.L10N.register( "_%n folder_::_%n folders_" : ["",""], "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], - "_matches '{filter}'_::_match '{filter}'_" : ["",""] + "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "You created %1$s" : "നിങ്ങൾ %1$s സൃഷ്ടിച്ചു", + "%2$s created %1$s" : "%2$s %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 മായ്ച്ചു" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/ml_IN.json b/apps/files/l10n/ml_IN.json index e81680ca125..f318671cace 100644 --- a/apps/files/l10n/ml_IN.json +++ b/apps/files/l10n/ml_IN.json @@ -3,6 +3,12 @@ "_%n folder_::_%n folders_" : ["",""], "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], - "_matches '{filter}'_::_match '{filter}'_" : ["",""] + "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "You created %1$s" : "നിങ്ങൾ %1$s സൃഷ്ടിച്ചു", + "%2$s created %1$s" : "%2$s %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 മായ്ച്ചു" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/mn.js b/apps/files/l10n/mn.js index 9eb11fe8f6d..c6c47409a7b 100644 --- a/apps/files/l10n/mn.js +++ b/apps/files/l10n/mn.js @@ -6,6 +6,19 @@ OC.L10N.register( "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "A new file or folder has been <strong>created</strong>" : "Файл эсвэл хавтас амжилттай <strong>үүсгэгдлээ</strong>", + "A file or folder has been <strong>changed</strong>" : "Файл эсвэл хавтас амжилттай <strong>солигдлоо</strong>", + "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-ийг сэргээлээ", "Save" : "Хадгалах", "Settings" : "Тохиргоо", "Upload" : "Байршуулах" diff --git a/apps/files/l10n/mn.json b/apps/files/l10n/mn.json index 7b134c1f1a5..94667661929 100644 --- a/apps/files/l10n/mn.json +++ b/apps/files/l10n/mn.json @@ -4,6 +4,19 @@ "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "A new file or folder has been <strong>created</strong>" : "Файл эсвэл хавтас амжилттай <strong>үүсгэгдлээ</strong>", + "A file or folder has been <strong>changed</strong>" : "Файл эсвэл хавтас амжилттай <strong>солигдлоо</strong>", + "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-ийг сэргээлээ", "Save" : "Хадгалах", "Settings" : "Тохиргоо", "Upload" : "Байршуулах" diff --git a/apps/files/l10n/mr.js b/apps/files/l10n/mr.js new file mode 100644 index 00000000000..7988332fa91 --- /dev/null +++ b/apps/files/l10n/mr.js @@ -0,0 +1,9 @@ +OC.L10N.register( + "files", + { + "_%n folder_::_%n folders_" : ["",""], + "_%n file_::_%n files_" : ["",""], + "_Uploading %n file_::_Uploading %n files_" : ["",""], + "_matches '{filter}'_::_match '{filter}'_" : ["",""] +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/mr.json b/apps/files/l10n/mr.json new file mode 100644 index 00000000000..ef5fc586755 --- /dev/null +++ b/apps/files/l10n/mr.json @@ -0,0 +1,7 @@ +{ "translations": { + "_%n folder_::_%n folders_" : ["",""], + "_%n file_::_%n files_" : ["",""], + "_Uploading %n file_::_Uploading %n files_" : ["",""], + "_matches '{filter}'_::_match '{filter}'_" : ["",""] +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/files/l10n/ms_MY.js b/apps/files/l10n/ms_MY.js index e042aff7965..7472c6daa59 100644 --- a/apps/files/l10n/ms_MY.js +++ b/apps/files/l10n/ms_MY.js @@ -23,6 +23,9 @@ OC.L10N.register( "_%n file_::_%n files_" : [""], "_Uploading %n file_::_Uploading %n files_" : [""], "_matches '{filter}'_::_match '{filter}'_" : [""], + "You created %1$s" : "Anda telah membina %1$s", + "%2$s created %1$s" : "%2$s membina %1$s", + "You changed %1$s" : "Anda menukar %1$s", "File handling" : "Pengendalian fail", "Maximum upload size" : "Saiz maksimum muat naik", "max. possible: " : "maksimum:", diff --git a/apps/files/l10n/ms_MY.json b/apps/files/l10n/ms_MY.json index 5a2a66a89de..347dc860ec7 100644 --- a/apps/files/l10n/ms_MY.json +++ b/apps/files/l10n/ms_MY.json @@ -21,6 +21,9 @@ "_%n file_::_%n files_" : [""], "_Uploading %n file_::_Uploading %n files_" : [""], "_matches '{filter}'_::_match '{filter}'_" : [""], + "You created %1$s" : "Anda telah membina %1$s", + "%2$s created %1$s" : "%2$s membina %1$s", + "You changed %1$s" : "Anda menukar %1$s", "File handling" : "Pengendalian fail", "Maximum upload size" : "Saiz maksimum muat naik", "max. possible: " : "maksimum:", diff --git a/apps/files/l10n/nb_NO.js b/apps/files/l10n/nb_NO.js index a528ba4542b..f9c21ef3b13 100644 --- a/apps/files/l10n/nb_NO.js +++ b/apps/files/l10n/nb_NO.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Kan ikke flytte %s - En fil med samme navn finnes allerede", "Could not move %s" : "Kunne ikke flytte %s", "Permission denied" : "Tilgang nektet", - "File name cannot be empty." : "Filnavn kan ikke være tomt.", - "\"%s\" is an invalid file name." : "\"%s\" er et ugyldig filnavn.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ugyldig navn, '\\', '/', '<', '>', ':', '\"', '|', '?' og '*' er ikke tillatt.", "The target folder has been moved or deleted." : "Målmappen er blitt flyttet eller slettet.", "The name %s is already used in the folder %s. Please choose a different name." : "Navnet %s brukes allerede i mappen %s. Velg et annet navn.", - "Not a valid source" : "Ikke en gyldig kilde", - "Server is not allowed to open URLs, please check the server configuration" : "Serveren har ikke lov til å åpne URL-er. Sjekk konfigurasjon av server", - "The file exceeds your quota by %s" : "Filen overstiger din kvote med %s", - "Error while downloading %s to %s" : "Feil ved nedlasting av %s til %s", "Error when creating the file" : "Feil ved oppretting av filen", - "Folder name cannot be empty." : "Mappenavn kan ikke være tomt.", "Error when creating the folder" : "Feil ved oppretting av mappen", "Unable to set upload directory." : "Kunne ikke sette opplastingskatalog.", "Invalid Token" : "Ugyldig nøkkel", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Opplasting avbrutt.", "Could not get result from server." : "Fikk ikke resultat fra serveren.", "File upload is in progress. Leaving the page now will cancel the upload." : "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen.", - "URL cannot be empty" : "URL kan ikke være tom", "{new_name} already exists" : "{new_name} finnes allerede", "Could not create file" : "Klarte ikke å opprette fil", "Could not create folder" : "Klarte ikke å opprette mappe", - "Error fetching URL" : "Feil ved henting av URL", "Rename" : "Gi nytt navn", "Delete" : "Slett", "Disconnect storage" : "Koble fra lagring", @@ -70,15 +60,30 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Du har ikke tillatelse til å laste opp eller opprette filer her", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Lagringsplass er oppbrukt, filer kan ikke lenger oppdateres eller synkroniseres!", "Your storage is almost full ({usedSpacePercent}%)" : "Lagringsplass er nesten brukt opp ([usedSpacePercent}%)", "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}'_" : ["",""], + "_matches '{filter}'_::_match '{filter}'_" : [" stemmer med '{filter}'"," stemmer med '{filter}'"], "{dirs} and {files}" : "{dirs} og {files}", "Favorited" : "Er favoritt", "Favorite" : "Gjør til favoritt", + "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>", + "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", + "%2$s created %1$s" : "%2$s opprettet %1$s", + "%1$s was created in a public folder" : "%1$s ble opprettet i en offentlig mappe", + "You changed %1$s" : "Du endret %1$s", + "%2$s changed %1$s" : "%2$s endret %1$s", + "You deleted %1$s" : "Du slettet %1$s", + "%2$s deleted %1$s" : "%2$s slettet %1$s", + "You restored %1$s" : "Du gjenopprettet %1$s", + "%2$s restored %1$s" : "%2$s gjenopprettet %1$s", "%s could not be renamed as it has been deleted" : "%s kunne ikke gis nytt navn da den er blitt slettet", "%s could not be renamed" : "Kunne ikke gi nytt navn til %s", "Upload (max. %s)" : "Opplasting (maks. %s)", @@ -94,7 +99,6 @@ OC.L10N.register( "Text file" : "Tekstfil", "New folder" : "Ny mappe", "Folder" : "Mappe", - "From link" : "Fra lenke", "Upload" : "Last opp", "Cancel upload" : "Avbryt opplasting", "No files yet" : "Ingen filer ennå", diff --git a/apps/files/l10n/nb_NO.json b/apps/files/l10n/nb_NO.json index c3957977e3b..0eb72dbd2c7 100644 --- a/apps/files/l10n/nb_NO.json +++ b/apps/files/l10n/nb_NO.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Kan ikke flytte %s - En fil med samme navn finnes allerede", "Could not move %s" : "Kunne ikke flytte %s", "Permission denied" : "Tilgang nektet", - "File name cannot be empty." : "Filnavn kan ikke være tomt.", - "\"%s\" is an invalid file name." : "\"%s\" er et ugyldig filnavn.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ugyldig navn, '\\', '/', '<', '>', ':', '\"', '|', '?' og '*' er ikke tillatt.", "The target folder has been moved or deleted." : "Målmappen er blitt flyttet eller slettet.", "The name %s is already used in the folder %s. Please choose a different name." : "Navnet %s brukes allerede i mappen %s. Velg et annet navn.", - "Not a valid source" : "Ikke en gyldig kilde", - "Server is not allowed to open URLs, please check the server configuration" : "Serveren har ikke lov til å åpne URL-er. Sjekk konfigurasjon av server", - "The file exceeds your quota by %s" : "Filen overstiger din kvote med %s", - "Error while downloading %s to %s" : "Feil ved nedlasting av %s til %s", "Error when creating the file" : "Feil ved oppretting av filen", - "Folder name cannot be empty." : "Mappenavn kan ikke være tomt.", "Error when creating the folder" : "Feil ved oppretting av mappen", "Unable to set upload directory." : "Kunne ikke sette opplastingskatalog.", "Invalid Token" : "Ugyldig nøkkel", @@ -41,11 +33,9 @@ "Upload cancelled." : "Opplasting avbrutt.", "Could not get result from server." : "Fikk ikke resultat fra serveren.", "File upload is in progress. Leaving the page now will cancel the upload." : "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen.", - "URL cannot be empty" : "URL kan ikke være tom", "{new_name} already exists" : "{new_name} finnes allerede", "Could not create file" : "Klarte ikke å opprette fil", "Could not create folder" : "Klarte ikke å opprette mappe", - "Error fetching URL" : "Feil ved henting av URL", "Rename" : "Gi nytt navn", "Delete" : "Slett", "Disconnect storage" : "Koble fra lagring", @@ -68,15 +58,30 @@ "You don’t have permission to upload or create files here" : "Du har ikke tillatelse til å laste opp eller opprette filer her", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Lagringsplass er oppbrukt, filer kan ikke lenger oppdateres eller synkroniseres!", "Your storage is almost full ({usedSpacePercent}%)" : "Lagringsplass er nesten brukt opp ([usedSpacePercent}%)", "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}'_" : ["",""], + "_matches '{filter}'_::_match '{filter}'_" : [" stemmer med '{filter}'"," stemmer med '{filter}'"], "{dirs} and {files}" : "{dirs} og {files}", "Favorited" : "Er favoritt", "Favorite" : "Gjør til favoritt", + "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>", + "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", + "%2$s created %1$s" : "%2$s opprettet %1$s", + "%1$s was created in a public folder" : "%1$s ble opprettet i en offentlig mappe", + "You changed %1$s" : "Du endret %1$s", + "%2$s changed %1$s" : "%2$s endret %1$s", + "You deleted %1$s" : "Du slettet %1$s", + "%2$s deleted %1$s" : "%2$s slettet %1$s", + "You restored %1$s" : "Du gjenopprettet %1$s", + "%2$s restored %1$s" : "%2$s gjenopprettet %1$s", "%s could not be renamed as it has been deleted" : "%s kunne ikke gis nytt navn da den er blitt slettet", "%s could not be renamed" : "Kunne ikke gi nytt navn til %s", "Upload (max. %s)" : "Opplasting (maks. %s)", @@ -92,7 +97,6 @@ "Text file" : "Tekstfil", "New folder" : "Ny mappe", "Folder" : "Mappe", - "From link" : "Fra lenke", "Upload" : "Last opp", "Cancel upload" : "Avbryt opplasting", "No files yet" : "Ingen filer ennå", diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js index d6c654608db..e6039698a66 100644 --- a/apps/files/l10n/nl.js +++ b/apps/files/l10n/nl.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Kon %s niet verplaatsen - Er bestaat al een bestand met deze naam", "Could not move %s" : "Kon %s niet verplaatsen", "Permission denied" : "Toegang geweigerd", - "File name cannot be empty." : "Bestandsnaam kan niet leeg zijn.", - "\"%s\" is an invalid file name." : "\"%s\" is een ongeldige bestandsnaam.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Onjuiste naam; '\\', '/', '<', '>', ':', '\"', '|', '?' en '*' zijn niet toegestaan.", "The target folder has been moved or deleted." : "De doelmap is verplaatst of verwijderd.", "The name %s is already used in the folder %s. Please choose a different name." : "De naam %s bestaat al in map %s. Kies een andere naam.", - "Not a valid source" : "Geen geldige bron", - "Server is not allowed to open URLs, please check the server configuration" : "Server mag geen URL's openen, controleer de serverconfiguratie", - "The file exceeds your quota by %s" : "Het bestand overschrijdt uw quotum met %s", - "Error while downloading %s to %s" : "Fout bij downloaden %s naar %s", "Error when creating the file" : "Fout bij creëren bestand", - "Folder name cannot be empty." : "Mapnaam mag niet leeg zijn.", "Error when creating the folder" : "Fout bij aanmaken map", "Unable to set upload directory." : "Kan uploadmap niet instellen.", "Invalid Token" : "Ongeldig Token", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Uploaden geannuleerd.", "Could not get result from server." : "Kon het resultaat van de server niet terugkrijgen.", "File upload is in progress. Leaving the page now will cancel the upload." : "Bestandsupload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload.", - "URL cannot be empty" : "URL mag niet leeg zijn", "{new_name} already exists" : "{new_name} bestaat al", "Could not create file" : "Kon bestand niet creëren", "Could not create folder" : "Kon niet creëren map", - "Error fetching URL" : "Fout bij ophalen URL", "Rename" : "Naam wijzigen", "Delete" : "Verwijderen", "Disconnect storage" : "Verbinding met opslag verbreken", @@ -70,6 +60,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "U hebt geen toestemming om hier te uploaden of bestanden te maken", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Uw opslagruimte zit vol. Bestanden kunnen niet meer worden gewijzigd of gesynchroniseerd!", "Your storage is almost full ({usedSpacePercent}%)" : "Uw opslagruimte zit bijna vol ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Crypto app is geactiveerd, maar uw sleutels werden niet geïnitialiseerd. Log uit en log daarna opnieuw in.", @@ -79,6 +70,20 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} en {files}", "Favorited" : "Favoriet", "Favorite" : "Favoriet", + "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>", + "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", + "%2$s created %1$s" : "%2$s creëerde %1$s", + "%1$s was created in a public folder" : "%1$s werd gecreëerd in een openbare map", + "You changed %1$s" : "U wijzigde %1$s", + "%2$s changed %1$s" : "%2$s wijzigde %1$s", + "You deleted %1$s" : "U verwijderde %1$s", + "%2$s deleted %1$s" : "%2$s verwijderde %1$s", + "You restored %1$s" : "U herstelde %1$s", + "%2$s restored %1$s" : "%2$s herstelde %1$s", "%s could not be renamed as it has been deleted" : "%s kon niet worden hernoemd, omdat het verwijderd is", "%s could not be renamed" : "%s kon niet worden hernoemd", "Upload (max. %s)" : "Upload (max. %s)", @@ -86,6 +91,7 @@ OC.L10N.register( "Maximum upload size" : "Maximale bestandsgrootte voor uploads", "max. possible: " : "max. mogelijk: ", "Save" : "Bewaren", + "Can not be edited from here due to insufficient permissions." : "Kan hier niet worden bewerkt wegens onvoldoende permissies.", "Settings" : "Instellingen", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gebruik deze link <a href=\"%s\" target=\"_blank\">om uw bestanden via WebDAV te benaderen</a>", @@ -94,7 +100,6 @@ OC.L10N.register( "Text file" : "Tekstbestand", "New folder" : "Nieuwe map", "Folder" : "Map", - "From link" : "Vanaf link", "Upload" : "Uploaden", "Cancel upload" : "Upload afbreken", "No files yet" : "Nog geen bestanden.", diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json index d3e22bbdaa1..da7bfa12cf4 100644 --- a/apps/files/l10n/nl.json +++ b/apps/files/l10n/nl.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Kon %s niet verplaatsen - Er bestaat al een bestand met deze naam", "Could not move %s" : "Kon %s niet verplaatsen", "Permission denied" : "Toegang geweigerd", - "File name cannot be empty." : "Bestandsnaam kan niet leeg zijn.", - "\"%s\" is an invalid file name." : "\"%s\" is een ongeldige bestandsnaam.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Onjuiste naam; '\\', '/', '<', '>', ':', '\"', '|', '?' en '*' zijn niet toegestaan.", "The target folder has been moved or deleted." : "De doelmap is verplaatst of verwijderd.", "The name %s is already used in the folder %s. Please choose a different name." : "De naam %s bestaat al in map %s. Kies een andere naam.", - "Not a valid source" : "Geen geldige bron", - "Server is not allowed to open URLs, please check the server configuration" : "Server mag geen URL's openen, controleer de serverconfiguratie", - "The file exceeds your quota by %s" : "Het bestand overschrijdt uw quotum met %s", - "Error while downloading %s to %s" : "Fout bij downloaden %s naar %s", "Error when creating the file" : "Fout bij creëren bestand", - "Folder name cannot be empty." : "Mapnaam mag niet leeg zijn.", "Error when creating the folder" : "Fout bij aanmaken map", "Unable to set upload directory." : "Kan uploadmap niet instellen.", "Invalid Token" : "Ongeldig Token", @@ -41,11 +33,9 @@ "Upload cancelled." : "Uploaden geannuleerd.", "Could not get result from server." : "Kon het resultaat van de server niet terugkrijgen.", "File upload is in progress. Leaving the page now will cancel the upload." : "Bestandsupload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload.", - "URL cannot be empty" : "URL mag niet leeg zijn", "{new_name} already exists" : "{new_name} bestaat al", "Could not create file" : "Kon bestand niet creëren", "Could not create folder" : "Kon niet creëren map", - "Error fetching URL" : "Fout bij ophalen URL", "Rename" : "Naam wijzigen", "Delete" : "Verwijderen", "Disconnect storage" : "Verbinding met opslag verbreken", @@ -68,6 +58,7 @@ "You don’t have permission to upload or create files here" : "U hebt geen toestemming om hier te uploaden of bestanden te maken", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Uw opslagruimte zit vol. Bestanden kunnen niet meer worden gewijzigd of gesynchroniseerd!", "Your storage is almost full ({usedSpacePercent}%)" : "Uw opslagruimte zit bijna vol ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Crypto app is geactiveerd, maar uw sleutels werden niet geïnitialiseerd. Log uit en log daarna opnieuw in.", @@ -77,6 +68,20 @@ "{dirs} and {files}" : "{dirs} en {files}", "Favorited" : "Favoriet", "Favorite" : "Favoriet", + "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>", + "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", + "%2$s created %1$s" : "%2$s creëerde %1$s", + "%1$s was created in a public folder" : "%1$s werd gecreëerd in een openbare map", + "You changed %1$s" : "U wijzigde %1$s", + "%2$s changed %1$s" : "%2$s wijzigde %1$s", + "You deleted %1$s" : "U verwijderde %1$s", + "%2$s deleted %1$s" : "%2$s verwijderde %1$s", + "You restored %1$s" : "U herstelde %1$s", + "%2$s restored %1$s" : "%2$s herstelde %1$s", "%s could not be renamed as it has been deleted" : "%s kon niet worden hernoemd, omdat het verwijderd is", "%s could not be renamed" : "%s kon niet worden hernoemd", "Upload (max. %s)" : "Upload (max. %s)", @@ -84,6 +89,7 @@ "Maximum upload size" : "Maximale bestandsgrootte voor uploads", "max. possible: " : "max. mogelijk: ", "Save" : "Bewaren", + "Can not be edited from here due to insufficient permissions." : "Kan hier niet worden bewerkt wegens onvoldoende permissies.", "Settings" : "Instellingen", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gebruik deze link <a href=\"%s\" target=\"_blank\">om uw bestanden via WebDAV te benaderen</a>", @@ -92,7 +98,6 @@ "Text file" : "Tekstbestand", "New folder" : "Nieuwe map", "Folder" : "Map", - "From link" : "Vanaf link", "Upload" : "Uploaden", "Cancel upload" : "Upload afbreken", "No files yet" : "Nog geen bestanden.", diff --git a/apps/files/l10n/nn_NO.js b/apps/files/l10n/nn_NO.js index b7f217e0627..5e039c4711c 100644 --- a/apps/files/l10n/nn_NO.js +++ b/apps/files/l10n/nn_NO.js @@ -4,8 +4,6 @@ OC.L10N.register( "Unknown error" : "Ukjend feil", "Could not move %s - File with this name already exists" : "Klarte ikkje flytta %s – det finst allereie ei fil med dette namnet", "Could not move %s" : "Klarte ikkje flytta %s", - "File name cannot be empty." : "Filnamnet kan ikkje vera tomt.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ugyldig namn, «\\», «/», «<», «>», «:», «\"», «|», «?» og «*» er ikkje tillate.", "Unable to set upload directory." : "Klarte ikkje å endra opplastingsmappa.", "Invalid Token" : "Ugyldig token", "No file was uploaded. Unknown error" : "Ingen filer lasta opp. Ukjend feil", @@ -41,12 +39,23 @@ OC.L10N.register( "_%n folder_::_%n folders_" : ["%n mappe","%n mapper"], "_%n file_::_%n files_" : ["%n fil","%n filer"], "_Uploading %n file_::_Uploading %n files_" : ["Lastar opp %n fil","Lastar opp %n filer"], + "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.", "_matches '{filter}'_::_match '{filter}'_" : ["",""], "{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>", + "A file or folder has been <strong>changed</strong>" : "Ei fil eller mappe er <strong>endra</strong>", + "A file or folder has been <strong>deleted</strong>" : "Ei fil eller mappe er <strong>sletta</strong>", + "You created %1$s" : "Du oppretta %1$s", + "%2$s created %1$s" : "%2$s oppretta %1$s", + "%1$s was created in a public folder" : "%1$s oppretta i ei offentleg mappe", + "You changed %1$s" : "Du endra %1$s", + "%2$s changed %1$s" : "%2$s endra %1$s", + "You deleted %1$s" : "Du sletta %1$s", + "%2$s deleted %1$s" : "%2$s sletta %1$s", "%s could not be renamed" : "Klarte ikkje å omdøypa på %s", "File handling" : "Filhandtering", "Maximum upload size" : "Maksimal opplastingsstorleik", @@ -58,7 +67,6 @@ OC.L10N.register( "Text file" : "Tekst fil", "New folder" : "Ny mappe", "Folder" : "Mappe", - "From link" : "Frå lenkje", "Upload" : "Last opp", "Cancel upload" : "Avbryt opplasting", "Upload too large" : "For stor opplasting", diff --git a/apps/files/l10n/nn_NO.json b/apps/files/l10n/nn_NO.json index 49a8812db19..558808bee1a 100644 --- a/apps/files/l10n/nn_NO.json +++ b/apps/files/l10n/nn_NO.json @@ -2,8 +2,6 @@ "Unknown error" : "Ukjend feil", "Could not move %s - File with this name already exists" : "Klarte ikkje flytta %s – det finst allereie ei fil med dette namnet", "Could not move %s" : "Klarte ikkje flytta %s", - "File name cannot be empty." : "Filnamnet kan ikkje vera tomt.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ugyldig namn, «\\», «/», «<», «>», «:», «\"», «|», «?» og «*» er ikkje tillate.", "Unable to set upload directory." : "Klarte ikkje å endra opplastingsmappa.", "Invalid Token" : "Ugyldig token", "No file was uploaded. Unknown error" : "Ingen filer lasta opp. Ukjend feil", @@ -39,12 +37,23 @@ "_%n folder_::_%n folders_" : ["%n mappe","%n mapper"], "_%n file_::_%n files_" : ["%n fil","%n filer"], "_Uploading %n file_::_Uploading %n files_" : ["Lastar opp %n fil","Lastar opp %n filer"], + "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.", "_matches '{filter}'_::_match '{filter}'_" : ["",""], "{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>", + "A file or folder has been <strong>changed</strong>" : "Ei fil eller mappe er <strong>endra</strong>", + "A file or folder has been <strong>deleted</strong>" : "Ei fil eller mappe er <strong>sletta</strong>", + "You created %1$s" : "Du oppretta %1$s", + "%2$s created %1$s" : "%2$s oppretta %1$s", + "%1$s was created in a public folder" : "%1$s oppretta i ei offentleg mappe", + "You changed %1$s" : "Du endra %1$s", + "%2$s changed %1$s" : "%2$s endra %1$s", + "You deleted %1$s" : "Du sletta %1$s", + "%2$s deleted %1$s" : "%2$s sletta %1$s", "%s could not be renamed" : "Klarte ikkje å omdøypa på %s", "File handling" : "Filhandtering", "Maximum upload size" : "Maksimal opplastingsstorleik", @@ -56,7 +65,6 @@ "Text file" : "Tekst fil", "New folder" : "Ny mappe", "Folder" : "Mappe", - "From link" : "Frå lenkje", "Upload" : "Last opp", "Cancel upload" : "Avbryt opplasting", "Upload too large" : "For stor opplasting", diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js index 1c30ccf2f81..f468310169b 100644 --- a/apps/files/l10n/pl.js +++ b/apps/files/l10n/pl.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Nie można było przenieść %s - Plik o takiej nazwie już istnieje", "Could not move %s" : "Nie można było przenieść %s", "Permission denied" : "Dostęp zabroniony", - "File name cannot be empty." : "Nazwa pliku nie może być pusta.", - "\"%s\" is an invalid file name." : "\"%s\" jest nieprawidłową nazwą pliku.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nieprawidłowa nazwa. Znaki '\\', '/', '<', '>', ':', '\"', '|', '?' oraz '*' są niedozwolone.", "The target folder has been moved or deleted." : "Folder docelowy został przeniesiony lub usunięty", "The name %s is already used in the folder %s. Please choose a different name." : "Nazwa %s jest już używana w folderze %s. Proszę wybrać inną nazwę.", - "Not a valid source" : "Niepoprawne źródło", - "Server is not allowed to open URLs, please check the server configuration" : "Serwer nie mógł otworzyć adresów URL, należy sprawdzić konfigurację serwera", - "The file exceeds your quota by %s" : "Ten plik przekracza twój limit o %s", - "Error while downloading %s to %s" : "Błąd podczas pobierania %s do %S", "Error when creating the file" : "Błąd przy tworzeniu pliku", - "Folder name cannot be empty." : "Nazwa folderu nie może być pusta.", "Error when creating the folder" : "Błąd przy tworzeniu folderu", "Unable to set upload directory." : "Nie można ustawić katalog wczytywania.", "Invalid Token" : "Nieprawidłowy Token", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Wczytywanie anulowane.", "Could not get result from server." : "Nie można uzyskać wyniku z serwera.", "File upload is in progress. Leaving the page now will cancel the upload." : "Wysyłanie pliku jest w toku. Jeśli opuścisz tę stronę, wysyłanie zostanie przerwane.", - "URL cannot be empty" : "URL nie może być pusty", "{new_name} already exists" : "{new_name} już istnieje", "Could not create file" : "Nie można utworzyć pliku", "Could not create folder" : "Nie można utworzyć folderu", - "Error fetching URL" : "Błąd przy pobieraniu adresu URL", "Rename" : "Zmień nazwę", "Delete" : "Usuń", "Disconnect storage" : "Odłącz magazyn", @@ -68,6 +58,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Nie masz uprawnień do wczytywania lub tworzenia plików w tym miejscu", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Magazyn jest pełny. Pliki nie mogą zostać zaktualizowane lub zsynchronizowane!", "Your storage is almost full ({usedSpacePercent}%)" : "Twój magazyn jest prawie pełny ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacja szyfrująca jest aktywna, ale twoje klucze nie zostały zainicjowane, prosze wyloguj się i zaloguj ponownie.", @@ -76,6 +67,19 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["","",""], "{dirs} and {files}" : "{dirs} i {files}", "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>", + "A file or folder has been <strong>deleted</strong>" : "Plik lub folder został <strong>usunięty</strong>", + "A file or folder has been <strong>restored</strong>" : "Plik lub folder został <strong>przywrócy</strong>", + "You created %1$s" : "Utworzyłeś %1$s", + "%2$s created %1$s" : "%2$s utworzył %1$s", + "%1$s was created in a public folder" : "%1$s został utworzony w folderze publicznym", + "You changed %1$s" : "Zmieniłeś %1$s", + "%2$s changed %1$s" : "%2$s zmienił %1$s", + "You deleted %1$s" : "Usunąłeś %1$s", + "%2$s deleted %1$s" : "%2$s usunął %1$s", + "You restored %1$s" : "Przywróciłeś %1$s", + "%2$s restored %1$s" : "%2$s przywrócił %1$s", "%s could not be renamed as it has been deleted" : "%s nie może mieć zmienionej nazwy, ponieważ został usunięty", "%s could not be renamed" : "%s nie można zmienić nazwy", "Upload (max. %s)" : "Wysyłka (max. %s)", @@ -91,9 +95,10 @@ OC.L10N.register( "Text file" : "Plik tekstowy", "New folder" : "Nowy folder", "Folder" : "Folder", - "From link" : "Z odnośnika", "Upload" : "Wyślij", "Cancel upload" : "Anuluj wysyłanie", + "No entries found in this folder" : "Brak wpisów w tym folderze", + "Select all" : "Wybierz wszystko", "Upload too large" : "Ładowany plik jest za duży", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Pliki, które próbujesz przesłać, przekraczają maksymalną dopuszczalną wielkość.", "Files are being scanned, please wait." : "Skanowanie plików, proszę czekać.", diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json index a72ea2e9474..f88c6608f6a 100644 --- a/apps/files/l10n/pl.json +++ b/apps/files/l10n/pl.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Nie można było przenieść %s - Plik o takiej nazwie już istnieje", "Could not move %s" : "Nie można było przenieść %s", "Permission denied" : "Dostęp zabroniony", - "File name cannot be empty." : "Nazwa pliku nie może być pusta.", - "\"%s\" is an invalid file name." : "\"%s\" jest nieprawidłową nazwą pliku.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nieprawidłowa nazwa. Znaki '\\', '/', '<', '>', ':', '\"', '|', '?' oraz '*' są niedozwolone.", "The target folder has been moved or deleted." : "Folder docelowy został przeniesiony lub usunięty", "The name %s is already used in the folder %s. Please choose a different name." : "Nazwa %s jest już używana w folderze %s. Proszę wybrać inną nazwę.", - "Not a valid source" : "Niepoprawne źródło", - "Server is not allowed to open URLs, please check the server configuration" : "Serwer nie mógł otworzyć adresów URL, należy sprawdzić konfigurację serwera", - "The file exceeds your quota by %s" : "Ten plik przekracza twój limit o %s", - "Error while downloading %s to %s" : "Błąd podczas pobierania %s do %S", "Error when creating the file" : "Błąd przy tworzeniu pliku", - "Folder name cannot be empty." : "Nazwa folderu nie może być pusta.", "Error when creating the folder" : "Błąd przy tworzeniu folderu", "Unable to set upload directory." : "Nie można ustawić katalog wczytywania.", "Invalid Token" : "Nieprawidłowy Token", @@ -41,11 +33,9 @@ "Upload cancelled." : "Wczytywanie anulowane.", "Could not get result from server." : "Nie można uzyskać wyniku z serwera.", "File upload is in progress. Leaving the page now will cancel the upload." : "Wysyłanie pliku jest w toku. Jeśli opuścisz tę stronę, wysyłanie zostanie przerwane.", - "URL cannot be empty" : "URL nie może być pusty", "{new_name} already exists" : "{new_name} już istnieje", "Could not create file" : "Nie można utworzyć pliku", "Could not create folder" : "Nie można utworzyć folderu", - "Error fetching URL" : "Błąd przy pobieraniu adresu URL", "Rename" : "Zmień nazwę", "Delete" : "Usuń", "Disconnect storage" : "Odłącz magazyn", @@ -66,6 +56,7 @@ "You don’t have permission to upload or create files here" : "Nie masz uprawnień do wczytywania lub tworzenia plików w tym miejscu", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Magazyn jest pełny. Pliki nie mogą zostać zaktualizowane lub zsynchronizowane!", "Your storage is almost full ({usedSpacePercent}%)" : "Twój magazyn jest prawie pełny ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacja szyfrująca jest aktywna, ale twoje klucze nie zostały zainicjowane, prosze wyloguj się i zaloguj ponownie.", @@ -74,6 +65,19 @@ "_matches '{filter}'_::_match '{filter}'_" : ["","",""], "{dirs} and {files}" : "{dirs} i {files}", "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>", + "A file or folder has been <strong>deleted</strong>" : "Plik lub folder został <strong>usunięty</strong>", + "A file or folder has been <strong>restored</strong>" : "Plik lub folder został <strong>przywrócy</strong>", + "You created %1$s" : "Utworzyłeś %1$s", + "%2$s created %1$s" : "%2$s utworzył %1$s", + "%1$s was created in a public folder" : "%1$s został utworzony w folderze publicznym", + "You changed %1$s" : "Zmieniłeś %1$s", + "%2$s changed %1$s" : "%2$s zmienił %1$s", + "You deleted %1$s" : "Usunąłeś %1$s", + "%2$s deleted %1$s" : "%2$s usunął %1$s", + "You restored %1$s" : "Przywróciłeś %1$s", + "%2$s restored %1$s" : "%2$s przywrócił %1$s", "%s could not be renamed as it has been deleted" : "%s nie może mieć zmienionej nazwy, ponieważ został usunięty", "%s could not be renamed" : "%s nie można zmienić nazwy", "Upload (max. %s)" : "Wysyłka (max. %s)", @@ -89,9 +93,10 @@ "Text file" : "Plik tekstowy", "New folder" : "Nowy folder", "Folder" : "Folder", - "From link" : "Z odnośnika", "Upload" : "Wyślij", "Cancel upload" : "Anuluj wysyłanie", + "No entries found in this folder" : "Brak wpisów w tym folderze", + "Select all" : "Wybierz wszystko", "Upload too large" : "Ładowany plik jest za duży", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Pliki, które próbujesz przesłać, przekraczają maksymalną dopuszczalną wielkość.", "Files are being scanned, please wait." : "Skanowanie plików, proszę czekać.", diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js index 156d8555baf..151da33a388 100644 --- a/apps/files/l10n/pt_BR.js +++ b/apps/files/l10n/pt_BR.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Impossível mover %s - Já existe um arquivo com esse nome", "Could not move %s" : "Impossível mover %s", "Permission denied" : "Permissão Negada", - "File name cannot be empty." : "O nome do arquivo não pode estar vazio.", - "\"%s\" is an invalid file name." : "\"%s\" é um nome de arquivo inválido.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nome inválido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos.", "The target folder has been moved or deleted." : "A pasta de destino foi movida ou excluída.", "The name %s is already used in the folder %s. Please choose a different name." : "O nome %s já é usado na pasta %s. Por favor, escolha um nome diferente.", - "Not a valid source" : "Não é uma fonte válida", - "Server is not allowed to open URLs, please check the server configuration" : "O servidor não tem permissão para abrir URLs. Por favor, verifique a configuração do servidor.", - "The file exceeds your quota by %s" : "O arquivo excede sua cota por %s", - "Error while downloading %s to %s" : "Erro ao baixar %s para %s", "Error when creating the file" : "Erro ao criar o arquivo", - "Folder name cannot be empty." : "O nome da pasta não pode estar vazio.", "Error when creating the folder" : "Erro ao criar a pasta", "Unable to set upload directory." : "Impossível configurar o diretório de envio", "Invalid Token" : "Token inválido", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Envio cancelado.", "Could not get result from server." : "Não foi possível obter o resultado do servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "Envio de arquivo em andamento. Sair da página agora resultará no cancelamento do envio.", - "URL cannot be empty" : "URL não pode estar vazia", "{new_name} already exists" : "{new_name} já existe", "Could not create file" : "Não foi possível criar o arquivo", "Could not create folder" : "Não foi possível criar a pasta", - "Error fetching URL" : "Erro ao buscar URL", "Rename" : "Renomear", "Delete" : "Excluir", "Disconnect storage" : "Desconectar armazenagem", @@ -70,6 +60,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Você não tem permissão para enviar ou criar arquivos aqui", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Seu armazenamento está cheio, arquivos não podem mais ser atualizados ou sincronizados!", "Your storage is almost full ({usedSpacePercent}%)" : "Seu armazenamento está quase cheio ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App de criptografia está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente", @@ -79,6 +70,20 @@ OC.L10N.register( "{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>", + "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", + "%2$s created %1$s" : "%2$s criou %1$s", + "%1$s was created in a public folder" : "%1$s foi criado em uma pasta pública", + "You changed %1$s" : "Você modificou %1$s", + "%2$s changed %1$s" : "%2$s modificou %1$s", + "You deleted %1$s" : "Você excluiu %1$s ", + "%2$s deleted %1$s" : "%2$s eliminou %1$s", + "You restored %1$s" : "Você restaurou %1$s", + "%2$s restored %1$s" : "%2$s restaurou %1$s", "%s could not be renamed as it has been deleted" : "%s não pode ser renomeado pois foi apagado", "%s could not be renamed" : "%s não pode ser renomeado", "Upload (max. %s)" : "Envio (max. %s)", @@ -86,6 +91,7 @@ OC.L10N.register( "Maximum upload size" : "Tamanho máximo para envio", "max. possible: " : "max. possível:", "Save" : "Salvar", + "Can not be edited from here due to insufficient permissions." : "Não pode ser editado a partir daqui devido a permissões insuficientes.", "Settings" : "Configurações", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use este endereço <a href=\"%s\" target=\"_blank\">para ter acesso aos seus Arquivos via WebDAV</a>", @@ -94,7 +100,6 @@ OC.L10N.register( "Text file" : "Arquivo texto", "New folder" : "Nova pasta", "Folder" : "Pasta", - "From link" : "Do link", "Upload" : "Enviar", "Cancel upload" : "Cancelar envio", "No files yet" : "Nenhum arquivo até agora", diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json index caabd009e16..6c390ed5137 100644 --- a/apps/files/l10n/pt_BR.json +++ b/apps/files/l10n/pt_BR.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Impossível mover %s - Já existe um arquivo com esse nome", "Could not move %s" : "Impossível mover %s", "Permission denied" : "Permissão Negada", - "File name cannot be empty." : "O nome do arquivo não pode estar vazio.", - "\"%s\" is an invalid file name." : "\"%s\" é um nome de arquivo inválido.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nome inválido, '\\', '/', '<', '>', ':', '\"', '|', '?' e '*' não são permitidos.", "The target folder has been moved or deleted." : "A pasta de destino foi movida ou excluída.", "The name %s is already used in the folder %s. Please choose a different name." : "O nome %s já é usado na pasta %s. Por favor, escolha um nome diferente.", - "Not a valid source" : "Não é uma fonte válida", - "Server is not allowed to open URLs, please check the server configuration" : "O servidor não tem permissão para abrir URLs. Por favor, verifique a configuração do servidor.", - "The file exceeds your quota by %s" : "O arquivo excede sua cota por %s", - "Error while downloading %s to %s" : "Erro ao baixar %s para %s", "Error when creating the file" : "Erro ao criar o arquivo", - "Folder name cannot be empty." : "O nome da pasta não pode estar vazio.", "Error when creating the folder" : "Erro ao criar a pasta", "Unable to set upload directory." : "Impossível configurar o diretório de envio", "Invalid Token" : "Token inválido", @@ -41,11 +33,9 @@ "Upload cancelled." : "Envio cancelado.", "Could not get result from server." : "Não foi possível obter o resultado do servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "Envio de arquivo em andamento. Sair da página agora resultará no cancelamento do envio.", - "URL cannot be empty" : "URL não pode estar vazia", "{new_name} already exists" : "{new_name} já existe", "Could not create file" : "Não foi possível criar o arquivo", "Could not create folder" : "Não foi possível criar a pasta", - "Error fetching URL" : "Erro ao buscar URL", "Rename" : "Renomear", "Delete" : "Excluir", "Disconnect storage" : "Desconectar armazenagem", @@ -68,6 +58,7 @@ "You don’t have permission to upload or create files here" : "Você não tem permissão para enviar ou criar arquivos aqui", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Seu armazenamento está cheio, arquivos não podem mais ser atualizados ou sincronizados!", "Your storage is almost full ({usedSpacePercent}%)" : "Seu armazenamento está quase cheio ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App de criptografia está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente", @@ -77,6 +68,20 @@ "{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>", + "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", + "%2$s created %1$s" : "%2$s criou %1$s", + "%1$s was created in a public folder" : "%1$s foi criado em uma pasta pública", + "You changed %1$s" : "Você modificou %1$s", + "%2$s changed %1$s" : "%2$s modificou %1$s", + "You deleted %1$s" : "Você excluiu %1$s ", + "%2$s deleted %1$s" : "%2$s eliminou %1$s", + "You restored %1$s" : "Você restaurou %1$s", + "%2$s restored %1$s" : "%2$s restaurou %1$s", "%s could not be renamed as it has been deleted" : "%s não pode ser renomeado pois foi apagado", "%s could not be renamed" : "%s não pode ser renomeado", "Upload (max. %s)" : "Envio (max. %s)", @@ -84,6 +89,7 @@ "Maximum upload size" : "Tamanho máximo para envio", "max. possible: " : "max. possível:", "Save" : "Salvar", + "Can not be edited from here due to insufficient permissions." : "Não pode ser editado a partir daqui devido a permissões insuficientes.", "Settings" : "Configurações", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use este endereço <a href=\"%s\" target=\"_blank\">para ter acesso aos seus Arquivos via WebDAV</a>", @@ -92,7 +98,6 @@ "Text file" : "Arquivo texto", "New folder" : "Nova pasta", "Folder" : "Pasta", - "From link" : "Do link", "Upload" : "Enviar", "Cancel upload" : "Cancelar envio", "No files yet" : "Nenhum arquivo até agora", diff --git a/apps/files/l10n/pt_PT.js b/apps/files/l10n/pt_PT.js index fd920a75ffa..3bed206883c 100644 --- a/apps/files/l10n/pt_PT.js +++ b/apps/files/l10n/pt_PT.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Não foi possível mover %s - Já existe um ficheiro com este nome", "Could not move %s" : "Não foi possível mover %s", "Permission denied" : "Permissão negada", - "File name cannot be empty." : "O nome do ficheiro não pode estar em branco.", - "\"%s\" is an invalid file name." : "\"%s\" é um nome de ficheiro inválido.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nome Inválido, Não são permitidos os carateres '\\', '/', '<', '>', ':', '\"', '|', '?' e '*'.", "The target folder has been moved or deleted." : "A pasta de destino foi movida ou eliminada.", "The name %s is already used in the folder %s. Please choose a different name." : "O nome %s já está em uso na pasta %s. Por favor escolha um nome diferente.", - "Not a valid source" : "Não é uma fonte válida", - "Server is not allowed to open URLs, please check the server configuration" : "O servidor não consegue abrir URLs, por favor verifique a configuração do servidor", - "The file exceeds your quota by %s" : "O ficheiro excede a sua quota por %s", - "Error while downloading %s to %s" : "Erro ao transferir %s para %s", "Error when creating the file" : "Erro ao criar o ficheiro", - "Folder name cannot be empty." : "O nome da pasta não pode estar vazio.", "Error when creating the folder" : "Erro ao criar a pasta", "Unable to set upload directory." : "Não foi possível criar o diretório de upload", "Invalid Token" : "Token inválido", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Envio cancelado.", "Could not get result from server." : "Não foi possível obter o resultado do servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "Envio de ficheiro em progresso. Se deixar a página agora, irá cancelar o envio.", - "URL cannot be empty" : "URL não pode estar vazio", "{new_name} already exists" : "O nome {new_name} já existe", "Could not create file" : "Não pôde criar ficheiro", "Could not create folder" : "Não pôde criar pasta", - "Error fetching URL" : "Erro ao obter URL", "Rename" : "Renomear", "Delete" : "Apagar", "Disconnect storage" : "Desconete o armazenamento", @@ -61,6 +51,7 @@ OC.L10N.register( "Error" : "Erro", "Could not rename file" : "Não pôde renomear o ficheiro", "Error deleting file." : "Erro ao apagar o ficheiro.", + "No entries in this folder match '{filter}'" : "Nenhumas entradas nesta pasta correspondem a '{filter}'", "Name" : "Nome", "Size" : "Tamanho", "Modified" : "Modificado", @@ -69,14 +60,30 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Você não tem permissão para enviar ou criar ficheiros aqui", "_Uploading %n file_::_Uploading %n files_" : ["A carregar %n ficheiro","A carregar %n ficheiros"], "\"{name}\" is an invalid file name." : "\"{name}\" é um nome de ficheiro inválido.", + "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}'_" : ["",""], + "_matches '{filter}'_::_match '{filter}'_" : ["corresponde a '{filter}'","correspondem a '{filter}'"], "{dirs} and {files}" : "{dirs} e {files}", + "Favorited" : "Assinalado como Favorito", "Favorite" : "Favorito", + "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", + "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", + "%2$s created %1$s" : "%2$s criou %1$s", + "%1$s was created in a public folder" : "%1$s foi criado numa pasta pública", + "You changed %1$s" : "Alterou %1$s", + "%2$s changed %1$s" : "%2$s alterou %1$s", + "You deleted %1$s" : "Apagou %1$s", + "%2$s deleted %1$s" : "%2$s apagou %1$s", + "You restored %1$s" : "Restaurou %1$s", + "%2$s restored %1$s" : "%2$s restaurou %1$s", "%s could not be renamed as it has been deleted" : "Não foi possível renomear %s devido a ter sido eliminado", "%s could not be renamed" : "%s não pode ser renomeada", "Upload (max. %s)" : "Enviar (max. %s)", @@ -84,6 +91,7 @@ OC.L10N.register( "Maximum upload size" : "Tamanho máximo de envio", "max. possible: " : "Máx. possível: ", "Save" : "Guardar", + "Can not be edited from here due to insufficient permissions." : "Não pode ser editado a partir daqui devido a permissões insuficientes.", "Settings" : "Definições", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilize esta ligação para <a href=\"%s\" target=\"_blank\">aceder aos seus ficheiros via WebDAV</a>", @@ -92,15 +100,17 @@ OC.L10N.register( "Text file" : "Ficheiro de Texto", "New folder" : "Nova Pasta", "Folder" : "Pasta", - "From link" : "Da hiperligação", "Upload" : "Enviar", "Cancel upload" : "Cancelar o envio", + "No files yet" : "Ainda não há arquivos", + "Upload some content or sync with your devices!" : "Carregue algum conteúdo ou sincronize com os seus aparelhos!", "No entries found in this folder" : "Não foram encontradas entradas nesta pasta", "Select all" : "Seleccionar todos", "Upload too large" : "Upload muito grande", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os ficheiro que está a tentar enviar excedem o tamanho máximo de envio neste servidor.", "Files are being scanned, please wait." : "Os ficheiros estão a ser analisados, por favor aguarde.", "Currently scanning" : "A analisar", - "No favorites" : "Sem favoritos" + "No favorites" : "Sem favoritos", + "Files and folders you mark as favorite will show up here" : "Os ficheiros e pastas que marcou como favoritos serão mostrados aqui" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/pt_PT.json b/apps/files/l10n/pt_PT.json index 742d5349bdb..76c123492fb 100644 --- a/apps/files/l10n/pt_PT.json +++ b/apps/files/l10n/pt_PT.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Não foi possível mover %s - Já existe um ficheiro com este nome", "Could not move %s" : "Não foi possível mover %s", "Permission denied" : "Permissão negada", - "File name cannot be empty." : "O nome do ficheiro não pode estar em branco.", - "\"%s\" is an invalid file name." : "\"%s\" é um nome de ficheiro inválido.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nome Inválido, Não são permitidos os carateres '\\', '/', '<', '>', ':', '\"', '|', '?' e '*'.", "The target folder has been moved or deleted." : "A pasta de destino foi movida ou eliminada.", "The name %s is already used in the folder %s. Please choose a different name." : "O nome %s já está em uso na pasta %s. Por favor escolha um nome diferente.", - "Not a valid source" : "Não é uma fonte válida", - "Server is not allowed to open URLs, please check the server configuration" : "O servidor não consegue abrir URLs, por favor verifique a configuração do servidor", - "The file exceeds your quota by %s" : "O ficheiro excede a sua quota por %s", - "Error while downloading %s to %s" : "Erro ao transferir %s para %s", "Error when creating the file" : "Erro ao criar o ficheiro", - "Folder name cannot be empty." : "O nome da pasta não pode estar vazio.", "Error when creating the folder" : "Erro ao criar a pasta", "Unable to set upload directory." : "Não foi possível criar o diretório de upload", "Invalid Token" : "Token inválido", @@ -41,11 +33,9 @@ "Upload cancelled." : "Envio cancelado.", "Could not get result from server." : "Não foi possível obter o resultado do servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "Envio de ficheiro em progresso. Se deixar a página agora, irá cancelar o envio.", - "URL cannot be empty" : "URL não pode estar vazio", "{new_name} already exists" : "O nome {new_name} já existe", "Could not create file" : "Não pôde criar ficheiro", "Could not create folder" : "Não pôde criar pasta", - "Error fetching URL" : "Erro ao obter URL", "Rename" : "Renomear", "Delete" : "Apagar", "Disconnect storage" : "Desconete o armazenamento", @@ -59,6 +49,7 @@ "Error" : "Erro", "Could not rename file" : "Não pôde renomear o ficheiro", "Error deleting file." : "Erro ao apagar o ficheiro.", + "No entries in this folder match '{filter}'" : "Nenhumas entradas nesta pasta correspondem a '{filter}'", "Name" : "Nome", "Size" : "Tamanho", "Modified" : "Modificado", @@ -67,14 +58,30 @@ "You don’t have permission to upload or create files here" : "Você não tem permissão para enviar ou criar ficheiros aqui", "_Uploading %n file_::_Uploading %n files_" : ["A carregar %n ficheiro","A carregar %n ficheiros"], "\"{name}\" is an invalid file name." : "\"{name}\" é um nome de ficheiro inválido.", + "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}'_" : ["",""], + "_matches '{filter}'_::_match '{filter}'_" : ["corresponde a '{filter}'","correspondem a '{filter}'"], "{dirs} and {files}" : "{dirs} e {files}", + "Favorited" : "Assinalado como Favorito", "Favorite" : "Favorito", + "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", + "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", + "%2$s created %1$s" : "%2$s criou %1$s", + "%1$s was created in a public folder" : "%1$s foi criado numa pasta pública", + "You changed %1$s" : "Alterou %1$s", + "%2$s changed %1$s" : "%2$s alterou %1$s", + "You deleted %1$s" : "Apagou %1$s", + "%2$s deleted %1$s" : "%2$s apagou %1$s", + "You restored %1$s" : "Restaurou %1$s", + "%2$s restored %1$s" : "%2$s restaurou %1$s", "%s could not be renamed as it has been deleted" : "Não foi possível renomear %s devido a ter sido eliminado", "%s could not be renamed" : "%s não pode ser renomeada", "Upload (max. %s)" : "Enviar (max. %s)", @@ -82,6 +89,7 @@ "Maximum upload size" : "Tamanho máximo de envio", "max. possible: " : "Máx. possível: ", "Save" : "Guardar", + "Can not be edited from here due to insufficient permissions." : "Não pode ser editado a partir daqui devido a permissões insuficientes.", "Settings" : "Definições", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilize esta ligação para <a href=\"%s\" target=\"_blank\">aceder aos seus ficheiros via WebDAV</a>", @@ -90,15 +98,17 @@ "Text file" : "Ficheiro de Texto", "New folder" : "Nova Pasta", "Folder" : "Pasta", - "From link" : "Da hiperligação", "Upload" : "Enviar", "Cancel upload" : "Cancelar o envio", + "No files yet" : "Ainda não há arquivos", + "Upload some content or sync with your devices!" : "Carregue algum conteúdo ou sincronize com os seus aparelhos!", "No entries found in this folder" : "Não foram encontradas entradas nesta pasta", "Select all" : "Seleccionar todos", "Upload too large" : "Upload muito grande", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os ficheiro que está a tentar enviar excedem o tamanho máximo de envio neste servidor.", "Files are being scanned, please wait." : "Os ficheiros estão a ser analisados, por favor aguarde.", "Currently scanning" : "A analisar", - "No favorites" : "Sem favoritos" + "No favorites" : "Sem favoritos", + "Files and folders you mark as favorite will show up here" : "Os ficheiros e pastas que marcou como favoritos serão mostrados aqui" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/ro.js b/apps/files/l10n/ro.js index 37f384a2dd5..a6a0e4ad058 100644 --- a/apps/files/l10n/ro.js +++ b/apps/files/l10n/ro.js @@ -7,19 +7,11 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "%s nu se poate muta - Fișierul cu acest nume există deja ", "Could not move %s" : "Nu se poate muta %s", "Permission denied" : "Accesul interzis", - "File name cannot be empty." : "Numele fișierului nu poate rămâne gol.", - "\"%s\" is an invalid file name." : "\"%s\" este un nume de fișier nevalid", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nume nevalide, '\\', '/', '<', '>', ':', '\"', '|', '?' și '*' nu sunt permise.", "The target folder has been moved or deleted." : "Dosarul țintă a fost mutat sau șters.", "The name %s is already used in the folder %s. Please choose a different name." : "Numele %s este deja este folosit în dosarul %s. Te rog alege alt nume.", - "Not a valid source" : "Sursă nevalidă", - "Server is not allowed to open URLs, please check the server configuration" : "Serverului nu ii este permis sa deschida URL-ul , verificati setarile serverului", - "The file exceeds your quota by %s" : "Fisierul depaseste limita cu %s", - "Error while downloading %s to %s" : "Eroare la descarcarea %s in %s", - "Error when creating the file" : "Eroare la crearea fisierului", - "Folder name cannot be empty." : "Numele folderului nu poate fi liber.", - "Error when creating the folder" : "Eroare la crearea folderului", - "Unable to set upload directory." : "Imposibil de a seta directorul pentru incărcare.", + "Error when creating the file" : "Eroare la crearea fișierului", + "Error when creating the folder" : "Eroare la crearea dosarului", + "Unable to set upload directory." : "Imposibil de a seta directorul pentru încărcare.", "Invalid Token" : "Jeton Invalid", "No file was uploaded. Unknown error" : "Niciun fișier nu a fost încărcat. Eroare necunoscută", "There is no error, the file uploaded with success" : "Nu a apărut nici o eroare, fișierul a fost încărcat cu succes", @@ -43,23 +35,21 @@ OC.L10N.register( "Upload cancelled." : "Încărcare anulată.", "Could not get result from server." : "Nu se poate obține rezultatul de la server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Fișierul este în curs de încărcare. Părăsirea paginii va întrerupe încărcarea.", - "URL cannot be empty" : "URL nu poate fi gol", "{new_name} already exists" : "{new_name} există deja", "Could not create file" : "Nu s-a putut crea fisierul", "Could not create folder" : "Nu s-a putut crea folderul", - "Error fetching URL" : "Eroare încarcare URL", "Rename" : "Redenumește", "Delete" : "Șterge", - "Disconnect storage" : "Stocare deconectata", - "Unshare" : "Anulare", + "Disconnect storage" : "Deconectează stocarea", + "Unshare" : "Nu mai partaja", "Download" : "Descarcă", - "Select" : "Selectează", + "Select" : "Alege", "Pending" : "În așteptare", "Error moving file." : "Eroare la mutarea fișierului.", "Error moving file" : "Eroare la mutarea fișierului", "Error" : "Eroare", - "Could not rename file" : "Nu s-a putut redenumi fisierul", - "Error deleting file." : "Eroare la ștergerea fisierului.", + "Could not rename file" : "Nu s-a putut redenumi fișierul", + "Error deleting file." : "Eroare la ștergerea fișierului.", "Name" : "Nume", "Size" : "Mărime", "Modified" : "Modificat", @@ -68,6 +58,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Nu aveti permisiunea de a incarca sau crea fisiere 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", @@ -76,6 +67,19 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["","",""], "{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>", + "A file or folder has been <strong>changed</strong>" : "Un nou fișier sau dosar a fost <strong>modificat</strong>", + "A file or folder has been <strong>deleted</strong>" : "Un nou fișier sau dosar a fost <strong>șters</strong>", + "A file or folder has been <strong>restored</strong>" : "Un fișier sau dosar a fost <strong>restaurat</strong>", + "You created %1$s" : "Ai creat %1$s", + "%2$s created %1$s" : "%2$s a creat %1$s", + "%1$s was created in a public folder" : "%1$s a fost creat în dosarul public", + "You changed %1$s" : "Ai schimbat %1$s", + "%2$s changed %1$s" : "%2$s a schimbat %1$s", + "You deleted %1$s" : "Ai şters %1$s", + "%2$s deleted %1$s" : "%2$s a șters %1$s", + "You restored %1$s" : "Ai restaurat %1$s", + "%2$s restored %1$s" : "%2$s a restaurat %1$s", "%s could not be renamed as it has been deleted" : "%s nu a putut fi redenumit deoarece a fost sters", "%s could not be renamed" : "%s nu a putut fi redenumit", "Upload (max. %s)" : "Încarcă (max. %s)", @@ -91,12 +95,12 @@ OC.L10N.register( "Text file" : "Fișier text", "New folder" : "Un nou dosar", "Folder" : "Dosar", - "From link" : "De la adresa", "Upload" : "Încărcă", "Cancel upload" : "Anulează încărcarea", + "No files yet" : "Niciun fișier încă", "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ă.", - "Currently scanning" : "Acum scaneaza" + "Currently scanning" : "Acum scanează" }, "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"); diff --git a/apps/files/l10n/ro.json b/apps/files/l10n/ro.json index 8889e9ab8e9..fc44e5bf312 100644 --- a/apps/files/l10n/ro.json +++ b/apps/files/l10n/ro.json @@ -5,19 +5,11 @@ "Could not move %s - File with this name already exists" : "%s nu se poate muta - Fișierul cu acest nume există deja ", "Could not move %s" : "Nu se poate muta %s", "Permission denied" : "Accesul interzis", - "File name cannot be empty." : "Numele fișierului nu poate rămâne gol.", - "\"%s\" is an invalid file name." : "\"%s\" este un nume de fișier nevalid", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nume nevalide, '\\', '/', '<', '>', ':', '\"', '|', '?' și '*' nu sunt permise.", "The target folder has been moved or deleted." : "Dosarul țintă a fost mutat sau șters.", "The name %s is already used in the folder %s. Please choose a different name." : "Numele %s este deja este folosit în dosarul %s. Te rog alege alt nume.", - "Not a valid source" : "Sursă nevalidă", - "Server is not allowed to open URLs, please check the server configuration" : "Serverului nu ii este permis sa deschida URL-ul , verificati setarile serverului", - "The file exceeds your quota by %s" : "Fisierul depaseste limita cu %s", - "Error while downloading %s to %s" : "Eroare la descarcarea %s in %s", - "Error when creating the file" : "Eroare la crearea fisierului", - "Folder name cannot be empty." : "Numele folderului nu poate fi liber.", - "Error when creating the folder" : "Eroare la crearea folderului", - "Unable to set upload directory." : "Imposibil de a seta directorul pentru incărcare.", + "Error when creating the file" : "Eroare la crearea fișierului", + "Error when creating the folder" : "Eroare la crearea dosarului", + "Unable to set upload directory." : "Imposibil de a seta directorul pentru încărcare.", "Invalid Token" : "Jeton Invalid", "No file was uploaded. Unknown error" : "Niciun fișier nu a fost încărcat. Eroare necunoscută", "There is no error, the file uploaded with success" : "Nu a apărut nici o eroare, fișierul a fost încărcat cu succes", @@ -41,23 +33,21 @@ "Upload cancelled." : "Încărcare anulată.", "Could not get result from server." : "Nu se poate obține rezultatul de la server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Fișierul este în curs de încărcare. Părăsirea paginii va întrerupe încărcarea.", - "URL cannot be empty" : "URL nu poate fi gol", "{new_name} already exists" : "{new_name} există deja", "Could not create file" : "Nu s-a putut crea fisierul", "Could not create folder" : "Nu s-a putut crea folderul", - "Error fetching URL" : "Eroare încarcare URL", "Rename" : "Redenumește", "Delete" : "Șterge", - "Disconnect storage" : "Stocare deconectata", - "Unshare" : "Anulare", + "Disconnect storage" : "Deconectează stocarea", + "Unshare" : "Nu mai partaja", "Download" : "Descarcă", - "Select" : "Selectează", + "Select" : "Alege", "Pending" : "În așteptare", "Error moving file." : "Eroare la mutarea fișierului.", "Error moving file" : "Eroare la mutarea fișierului", "Error" : "Eroare", - "Could not rename file" : "Nu s-a putut redenumi fisierul", - "Error deleting file." : "Eroare la ștergerea fisierului.", + "Could not rename file" : "Nu s-a putut redenumi fișierul", + "Error deleting file." : "Eroare la ștergerea fișierului.", "Name" : "Nume", "Size" : "Mărime", "Modified" : "Modificat", @@ -66,6 +56,7 @@ "You don’t have permission to upload or create files here" : "Nu aveti permisiunea de a incarca sau crea fisiere 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", @@ -74,6 +65,19 @@ "_matches '{filter}'_::_match '{filter}'_" : ["","",""], "{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>", + "A file or folder has been <strong>changed</strong>" : "Un nou fișier sau dosar a fost <strong>modificat</strong>", + "A file or folder has been <strong>deleted</strong>" : "Un nou fișier sau dosar a fost <strong>șters</strong>", + "A file or folder has been <strong>restored</strong>" : "Un fișier sau dosar a fost <strong>restaurat</strong>", + "You created %1$s" : "Ai creat %1$s", + "%2$s created %1$s" : "%2$s a creat %1$s", + "%1$s was created in a public folder" : "%1$s a fost creat în dosarul public", + "You changed %1$s" : "Ai schimbat %1$s", + "%2$s changed %1$s" : "%2$s a schimbat %1$s", + "You deleted %1$s" : "Ai şters %1$s", + "%2$s deleted %1$s" : "%2$s a șters %1$s", + "You restored %1$s" : "Ai restaurat %1$s", + "%2$s restored %1$s" : "%2$s a restaurat %1$s", "%s could not be renamed as it has been deleted" : "%s nu a putut fi redenumit deoarece a fost sters", "%s could not be renamed" : "%s nu a putut fi redenumit", "Upload (max. %s)" : "Încarcă (max. %s)", @@ -89,12 +93,12 @@ "Text file" : "Fișier text", "New folder" : "Un nou dosar", "Folder" : "Dosar", - "From link" : "De la adresa", "Upload" : "Încărcă", "Cancel upload" : "Anulează încărcarea", + "No files yet" : "Niciun fișier încă", "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ă.", - "Currently scanning" : "Acum scaneaza" + "Currently scanning" : "Acum scanează" },"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));" }
\ No newline at end of file diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js index 853cb02112d..b81df425d6c 100644 --- a/apps/files/l10n/ru.js +++ b/apps/files/l10n/ru.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Невозможно переместить %s - файл с таким именем уже существует", "Could not move %s" : "Невозможно переместить %s", "Permission denied" : "В доступе отказано", - "File name cannot be empty." : "Имя файла не может быть пустым.", - "\"%s\" is an invalid file name." : "\"%s\" недопустимое имя файла.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Неправильное имя, символы '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' недопустимы.", "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. Укажите другое имя.", - "Not a valid source" : "Неправильный источник", - "Server is not allowed to open URLs, please check the server configuration" : "Сервер не позволяет открывать URL-адреса, проверьте настройки сервера", - "The file exceeds your quota by %s" : "Размер файла превышает квоту на %s", - "Error while downloading %s to %s" : "Ошибка при скачивании %s в %s", "Error when creating the file" : "Ошибка при создании файла", - "Folder name cannot be empty." : "Имя каталога не может быть пустым.", "Error when creating the folder" : "Ошибка создания каталога", "Unable to set upload directory." : "Невозможно установить каталог загрузки.", "Invalid Token" : "Недопустимый маркер", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Загрузка отменена.", "Could not get result from server." : "Не удалось получить ответ от сервера.", "File upload is in progress. Leaving the page now will cancel the upload." : "Идёт загрузка файла. Покинув страницу, вы прервёте загрузку.", - "URL cannot be empty" : "Ссылка не может быть пустой.", "{new_name} already exists" : "{new_name} уже существует", "Could not create file" : "Не удалось создать файл", "Could not create folder" : "Не удалось создать каталог", - "Error fetching URL" : "Ошибка получения URL", "Rename" : "Переименовать", "Delete" : "Удалить", "Disconnect storage" : "Отсоединить хранилище", @@ -70,6 +60,7 @@ OC.L10N.register( "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" : "Приложение для шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите заново", @@ -79,6 +70,20 @@ OC.L10N.register( "{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> файл или каталог", + "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)", @@ -86,6 +91,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>", @@ -94,7 +100,6 @@ OC.L10N.register( "Text file" : "Текстовый файл", "New folder" : "Новый каталог", "Folder" : "Каталог", - "From link" : "Объект по ссылке", "Upload" : "Загрузить", "Cancel upload" : "Отменить загрузку", "No files yet" : "Пока ещё нет файлов", diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json index 4852a8aebcd..6292bb28d14 100644 --- a/apps/files/l10n/ru.json +++ b/apps/files/l10n/ru.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Невозможно переместить %s - файл с таким именем уже существует", "Could not move %s" : "Невозможно переместить %s", "Permission denied" : "В доступе отказано", - "File name cannot be empty." : "Имя файла не может быть пустым.", - "\"%s\" is an invalid file name." : "\"%s\" недопустимое имя файла.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Неправильное имя, символы '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' недопустимы.", "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. Укажите другое имя.", - "Not a valid source" : "Неправильный источник", - "Server is not allowed to open URLs, please check the server configuration" : "Сервер не позволяет открывать URL-адреса, проверьте настройки сервера", - "The file exceeds your quota by %s" : "Размер файла превышает квоту на %s", - "Error while downloading %s to %s" : "Ошибка при скачивании %s в %s", "Error when creating the file" : "Ошибка при создании файла", - "Folder name cannot be empty." : "Имя каталога не может быть пустым.", "Error when creating the folder" : "Ошибка создания каталога", "Unable to set upload directory." : "Невозможно установить каталог загрузки.", "Invalid Token" : "Недопустимый маркер", @@ -41,11 +33,9 @@ "Upload cancelled." : "Загрузка отменена.", "Could not get result from server." : "Не удалось получить ответ от сервера.", "File upload is in progress. Leaving the page now will cancel the upload." : "Идёт загрузка файла. Покинув страницу, вы прервёте загрузку.", - "URL cannot be empty" : "Ссылка не может быть пустой.", "{new_name} already exists" : "{new_name} уже существует", "Could not create file" : "Не удалось создать файл", "Could not create folder" : "Не удалось создать каталог", - "Error fetching URL" : "Ошибка получения URL", "Rename" : "Переименовать", "Delete" : "Удалить", "Disconnect storage" : "Отсоединить хранилище", @@ -68,6 +58,7 @@ "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" : "Приложение для шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите заново", @@ -77,6 +68,20 @@ "{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> файл или каталог", + "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)", @@ -84,6 +89,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>", @@ -92,7 +98,6 @@ "Text file" : "Текстовый файл", "New folder" : "Новый каталог", "Folder" : "Каталог", - "From link" : "Объект по ссылке", "Upload" : "Загрузить", "Cancel upload" : "Отменить загрузку", "No files yet" : "Пока ещё нет файлов", diff --git a/apps/files/l10n/si_LK.js b/apps/files/l10n/si_LK.js index 9802fc8b821..9911cabb19d 100644 --- a/apps/files/l10n/si_LK.js +++ b/apps/files/l10n/si_LK.js @@ -25,6 +25,10 @@ OC.L10N.register( "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "A new file or folder has been <strong>created</strong>" : "නව ගොනුවක් හෝ බහාලුමක් <strong> නිර්මාණය කර ඇත</ strong> ", + "A file or folder has been <strong>changed</strong>" : "ගොනුවක් හෝ ෆෝල්ඩරයක් <strong>වෙනස්</strong> වී ඇත", + "A file or folder has been <strong>deleted</strong>" : "ගොනුවක් හෝ ෆෝල්ඩරයක් <strong>මකා දමා</strong> ඇත", + "A file or folder has been <strong>restored</strong>" : "ගොනුවක් හෝ ෆෝල්ඩරයක් <strong>ප්රතිස්ථාපනය</strong> කර ඇත", "File handling" : "ගොනු පරිහරණය", "Maximum upload size" : "උඩුගත කිරීමක උපරිම ප්රමාණය", "max. possible: " : "හැකි උපරිමය:", @@ -33,7 +37,6 @@ OC.L10N.register( "New" : "නව", "Text file" : "පෙළ ගොනුව", "Folder" : "ෆෝල්ඩරය", - "From link" : "යොමුවෙන්", "Upload" : "උඩුගත කරන්න", "Cancel upload" : "උඩුගත කිරීම අත් හරින්න", "Upload too large" : "උඩුගත කිරීම විශාල වැඩිය", diff --git a/apps/files/l10n/si_LK.json b/apps/files/l10n/si_LK.json index 5a3f4574170..395c69e2f90 100644 --- a/apps/files/l10n/si_LK.json +++ b/apps/files/l10n/si_LK.json @@ -23,6 +23,10 @@ "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "A new file or folder has been <strong>created</strong>" : "නව ගොනුවක් හෝ බහාලුමක් <strong> නිර්මාණය කර ඇත</ strong> ", + "A file or folder has been <strong>changed</strong>" : "ගොනුවක් හෝ ෆෝල්ඩරයක් <strong>වෙනස්</strong> වී ඇත", + "A file or folder has been <strong>deleted</strong>" : "ගොනුවක් හෝ ෆෝල්ඩරයක් <strong>මකා දමා</strong> ඇත", + "A file or folder has been <strong>restored</strong>" : "ගොනුවක් හෝ ෆෝල්ඩරයක් <strong>ප්රතිස්ථාපනය</strong> කර ඇත", "File handling" : "ගොනු පරිහරණය", "Maximum upload size" : "උඩුගත කිරීමක උපරිම ප්රමාණය", "max. possible: " : "හැකි උපරිමය:", @@ -31,7 +35,6 @@ "New" : "නව", "Text file" : "පෙළ ගොනුව", "Folder" : "ෆෝල්ඩරය", - "From link" : "යොමුවෙන්", "Upload" : "උඩුගත කරන්න", "Cancel upload" : "උඩුගත කිරීම අත් හරින්න", "Upload too large" : "උඩුගත කිරීම විශාල වැඩිය", diff --git a/apps/files/l10n/sk_SK.js b/apps/files/l10n/sk_SK.js index 3dd7dd1b27a..11b2e4d852b 100644 --- a/apps/files/l10n/sk_SK.js +++ b/apps/files/l10n/sk_SK.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Nie je možné presunúť %s - súbor s týmto menom už existuje", "Could not move %s" : "Nie je možné presunúť %s", "Permission denied" : "Prístup bol odmietnutý", - "File name cannot be empty." : "Meno súboru nemôže byť prázdne", - "\"%s\" is an invalid file name." : "\"%s\" je neplatné meno súboru.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nesprávne meno, '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nie sú povolené hodnoty.", "The target folder has been moved or deleted." : "Cieľový priečinok bol premiestnený alebo odstránený.", "The name %s is already used in the folder %s. Please choose a different name." : "Názov %s už používa priečinok s%. Prosím zvoľte iný názov.", - "Not a valid source" : "Neplatný zdroj", - "Server is not allowed to open URLs, please check the server configuration" : "Server nie je oprávnený otvárať adresy URL. Overte nastavenia servera.", - "The file exceeds your quota by %s" : "Súbor prekračuje vašu kvótu o %s", - "Error while downloading %s to %s" : "Chyba pri sťahovaní súboru %s do %s", "Error when creating the file" : "Chyba pri vytváraní súboru", - "Folder name cannot be empty." : "Názov priečinka nemôže byť prázdny.", "Error when creating the folder" : "Chyba pri vytváraní priečinka", "Unable to set upload directory." : "Nemožno nastaviť priečinok pre nahrané súbory.", "Invalid Token" : "Neplatný token", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Odosielanie je zrušené.", "Could not get result from server." : "Nepodarilo sa dostať výsledky zo servera.", "File upload is in progress. Leaving the page now will cancel the upload." : "Opustenie stránky zruší práve prebiehajúce odosielanie súboru.", - "URL cannot be empty" : "URL nemôže byť prázdna", "{new_name} already exists" : "{new_name} už existuje", "Could not create file" : "Nemožno vytvoriť súbor", "Could not create folder" : "Nemožno vytvoriť priečinok", - "Error fetching URL" : "Chyba pri načítavaní URL", "Rename" : "Premenovať", "Delete" : "Zmazať", "Disconnect storage" : "Odpojiť úložisko", @@ -70,6 +60,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Nemáte oprávnenie sem nahrávať alebo vytvoriť súbory", "_Uploading %n file_::_Uploading %n files_" : ["Nahrávam %n súbor","Nahrávam %n súbory","Nahrávam %n súborov"], "\"{name}\" is an invalid file name." : "\"{name}\" je neplatné meno súboru.", + "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.", @@ -79,6 +70,20 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} a {files}", "Favorited" : "Pridané k obľúbeným", "Favorite" : "Obľúbené", + "An error occurred while trying to update the tags" : "Pri pokuse o aktualizáciu štítkov došlo k chybe", + "A new file or folder has been <strong>created</strong>" : "Nový súbor alebo priečinok bol <strong>vytvorený</strong>", + "A file or folder has been <strong>changed</strong>" : "Súbor alebo priečinok bol <strong>zmenený</strong>", + "A file or folder has been <strong>deleted</strong>" : "Súbor alebo priečinok bol <strong>odstránený</strong>", + "A file or folder has been <strong>restored</strong>" : "Súbor alebo priečinok bol <strong>obnovený</strong>", + "You created %1$s" : "Vytvorili ste %1$s", + "%2$s created %1$s" : "%2$s vytvoril %1$s", + "%1$s was created in a public folder" : "%1$s vytvorený vo verejnom priečinku", + "You changed %1$s" : "Zmenili ste %1$s", + "%2$s changed %1$s" : "%2$s zmenil %1$s", + "You deleted %1$s" : "Bol zmazaný %1$s", + "%2$s deleted %1$s" : "%2$s zmazal %1$s", + "You restored %1$s" : "Bol obnovený %1$s", + "%2$s restored %1$s" : "%2$s obnovil %1$s", "%s could not be renamed as it has been deleted" : "%s nebolo možné premenovať, pretože bol zmazaný", "%s could not be renamed" : "%s nemohol byť premenovaný", "Upload (max. %s)" : "Nahrať (max. %s)", @@ -94,7 +99,6 @@ OC.L10N.register( "Text file" : "Textový súbor", "New folder" : "Nový priečinok", "Folder" : "Priečinok", - "From link" : "Z odkazu", "Upload" : "Nahrať", "Cancel upload" : "Zrušiť nahrávanie", "No files yet" : "Zatiaľ žiadne súbory.", diff --git a/apps/files/l10n/sk_SK.json b/apps/files/l10n/sk_SK.json index ab2cf57be75..f99a0703612 100644 --- a/apps/files/l10n/sk_SK.json +++ b/apps/files/l10n/sk_SK.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Nie je možné presunúť %s - súbor s týmto menom už existuje", "Could not move %s" : "Nie je možné presunúť %s", "Permission denied" : "Prístup bol odmietnutý", - "File name cannot be empty." : "Meno súboru nemôže byť prázdne", - "\"%s\" is an invalid file name." : "\"%s\" je neplatné meno súboru.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Nesprávne meno, '\\', '/', '<', '>', ':', '\"', '|', '?' a '*' nie sú povolené hodnoty.", "The target folder has been moved or deleted." : "Cieľový priečinok bol premiestnený alebo odstránený.", "The name %s is already used in the folder %s. Please choose a different name." : "Názov %s už používa priečinok s%. Prosím zvoľte iný názov.", - "Not a valid source" : "Neplatný zdroj", - "Server is not allowed to open URLs, please check the server configuration" : "Server nie je oprávnený otvárať adresy URL. Overte nastavenia servera.", - "The file exceeds your quota by %s" : "Súbor prekračuje vašu kvótu o %s", - "Error while downloading %s to %s" : "Chyba pri sťahovaní súboru %s do %s", "Error when creating the file" : "Chyba pri vytváraní súboru", - "Folder name cannot be empty." : "Názov priečinka nemôže byť prázdny.", "Error when creating the folder" : "Chyba pri vytváraní priečinka", "Unable to set upload directory." : "Nemožno nastaviť priečinok pre nahrané súbory.", "Invalid Token" : "Neplatný token", @@ -41,11 +33,9 @@ "Upload cancelled." : "Odosielanie je zrušené.", "Could not get result from server." : "Nepodarilo sa dostať výsledky zo servera.", "File upload is in progress. Leaving the page now will cancel the upload." : "Opustenie stránky zruší práve prebiehajúce odosielanie súboru.", - "URL cannot be empty" : "URL nemôže byť prázdna", "{new_name} already exists" : "{new_name} už existuje", "Could not create file" : "Nemožno vytvoriť súbor", "Could not create folder" : "Nemožno vytvoriť priečinok", - "Error fetching URL" : "Chyba pri načítavaní URL", "Rename" : "Premenovať", "Delete" : "Zmazať", "Disconnect storage" : "Odpojiť úložisko", @@ -68,6 +58,7 @@ "You don’t have permission to upload or create files here" : "Nemáte oprávnenie sem nahrávať alebo vytvoriť súbory", "_Uploading %n file_::_Uploading %n files_" : ["Nahrávam %n súbor","Nahrávam %n súbory","Nahrávam %n súborov"], "\"{name}\" is an invalid file name." : "\"{name}\" je neplatné meno súboru.", + "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.", @@ -77,6 +68,20 @@ "{dirs} and {files}" : "{dirs} a {files}", "Favorited" : "Pridané k obľúbeným", "Favorite" : "Obľúbené", + "An error occurred while trying to update the tags" : "Pri pokuse o aktualizáciu štítkov došlo k chybe", + "A new file or folder has been <strong>created</strong>" : "Nový súbor alebo priečinok bol <strong>vytvorený</strong>", + "A file or folder has been <strong>changed</strong>" : "Súbor alebo priečinok bol <strong>zmenený</strong>", + "A file or folder has been <strong>deleted</strong>" : "Súbor alebo priečinok bol <strong>odstránený</strong>", + "A file or folder has been <strong>restored</strong>" : "Súbor alebo priečinok bol <strong>obnovený</strong>", + "You created %1$s" : "Vytvorili ste %1$s", + "%2$s created %1$s" : "%2$s vytvoril %1$s", + "%1$s was created in a public folder" : "%1$s vytvorený vo verejnom priečinku", + "You changed %1$s" : "Zmenili ste %1$s", + "%2$s changed %1$s" : "%2$s zmenil %1$s", + "You deleted %1$s" : "Bol zmazaný %1$s", + "%2$s deleted %1$s" : "%2$s zmazal %1$s", + "You restored %1$s" : "Bol obnovený %1$s", + "%2$s restored %1$s" : "%2$s obnovil %1$s", "%s could not be renamed as it has been deleted" : "%s nebolo možné premenovať, pretože bol zmazaný", "%s could not be renamed" : "%s nemohol byť premenovaný", "Upload (max. %s)" : "Nahrať (max. %s)", @@ -92,7 +97,6 @@ "Text file" : "Textový súbor", "New folder" : "Nový priečinok", "Folder" : "Priečinok", - "From link" : "Z odkazu", "Upload" : "Nahrať", "Cancel upload" : "Zrušiť nahrávanie", "No files yet" : "Zatiaľ žiadne súbory.", diff --git a/apps/files/l10n/sl.js b/apps/files/l10n/sl.js index f6d3cac7da5..ebe469953dc 100644 --- a/apps/files/l10n/sl.js +++ b/apps/files/l10n/sl.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Datoteke %s ni mogoče premakniti - datoteka s tem imenom že obstaja.", "Could not move %s" : "Datoteke %s ni mogoče premakniti", "Permission denied" : "Za to opravilo ni ustreznih dovoljenj.", - "File name cannot be empty." : "Ime datoteke ne sme biti prazno polje.", - "\"%s\" is an invalid file name." : "\"%s\" je neveljavno ime datoteke.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Neveljavno ime; znaki '\\', '/', '<', '>', ':', '\"', '|', '?' in '*' niso dovoljeni.", "The target folder has been moved or deleted." : "Ciljna mapa je premaknjena ali izbrisana.", "The name %s is already used in the folder %s. Please choose a different name." : "Ime %s je že v mapi %s že v uporabi. Izbrati je treba drugo ime.", - "Not a valid source" : "Vir ni veljaven", - "Server is not allowed to open URLs, please check the server configuration" : "Odpiranje naslovov URL preko strežnika ni dovoljeno. Preverite nastavitve strežnika.", - "The file exceeds your quota by %s" : "Datoteka presega omejitev velikosti za %s", - "Error while downloading %s to %s" : "Napaka med prejemanjem %s v mapo %s", "Error when creating the file" : "Napaka med ustvarjanjem datoteke", - "Folder name cannot be empty." : "Ime mape ne more biti prazna vrednost.", "Error when creating the folder" : "Napaka med ustvarjanjem mape", "Unable to set upload directory." : "Mapo, v katero boste prenašali dokumente, ni mogoče določiti", "Invalid Token" : "Neveljaven žeton", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Pošiljanje je preklicano.", "Could not get result from server." : "Ni mogoče pridobiti podatkov s strežnika.", "File upload is in progress. Leaving the page now will cancel the upload." : "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano.", - "URL cannot be empty" : "Polje naslova URL ne sme biti prazno", "{new_name} already exists" : "{new_name} že obstaja", "Could not create file" : "Ni mogoče ustvariti datoteke", "Could not create folder" : "Ni mogoče ustvariti mape", - "Error fetching URL" : "Napaka pridobivanja naslova URL", "Rename" : "Preimenuj", "Delete" : "Izbriši", "Disconnect storage" : "Odklopi shrambo", @@ -70,15 +60,30 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Ni ustreznih dovoljenj za pošiljanje ali ustvarjanje datotek na tem mestu.", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Shramba je povsem napolnjena. Datotek ni več mogoče posodabljati in usklajevati!", "Your storage is almost full ({usedSpacePercent}%)" : "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}'_" : ["","","",""], + "_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", "Favorite" : "Priljubljene", + "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>.", + "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", + "%2$s created %1$s" : "%2$s je ustvaril %1$s", + "%1$s was created in a public folder" : "Datoteka %1$s je ustvarjena v javni mapi.", + "You changed %1$s" : "Spremenili ste %1$s", + "%2$s changed %1$s" : "%2$s je spremenil %1$s", + "You deleted %1$s" : "Izbrisali ste %1$s", + "%2$s deleted %1$s" : "%2$s je izbrisal %1$s", + "You restored %1$s" : "Obnovljen je predmet %1$s", + "%2$s restored %1$s" : "Uporabnik %2$s je obnovil predmet %1$s.", "%s could not be renamed as it has been deleted" : "Datoteke %s ni mogoče preimenovati, ker je bila že prej izbrisana.", "%s could not be renamed" : "%s ni mogoče preimenovati", "Upload (max. %s)" : "Pošiljanje (omejitev %s)", @@ -94,7 +99,6 @@ OC.L10N.register( "Text file" : "Besedilna datoteka", "New folder" : "Nova mapa", "Folder" : "Mapa", - "From link" : "Iz povezave", "Upload" : "Pošlji", "Cancel upload" : "Prekliči pošiljanje", "No files yet" : "Ni datotek", diff --git a/apps/files/l10n/sl.json b/apps/files/l10n/sl.json index bd32a62ef46..4a767eaf391 100644 --- a/apps/files/l10n/sl.json +++ b/apps/files/l10n/sl.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Datoteke %s ni mogoče premakniti - datoteka s tem imenom že obstaja.", "Could not move %s" : "Datoteke %s ni mogoče premakniti", "Permission denied" : "Za to opravilo ni ustreznih dovoljenj.", - "File name cannot be empty." : "Ime datoteke ne sme biti prazno polje.", - "\"%s\" is an invalid file name." : "\"%s\" je neveljavno ime datoteke.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Neveljavno ime; znaki '\\', '/', '<', '>', ':', '\"', '|', '?' in '*' niso dovoljeni.", "The target folder has been moved or deleted." : "Ciljna mapa je premaknjena ali izbrisana.", "The name %s is already used in the folder %s. Please choose a different name." : "Ime %s je že v mapi %s že v uporabi. Izbrati je treba drugo ime.", - "Not a valid source" : "Vir ni veljaven", - "Server is not allowed to open URLs, please check the server configuration" : "Odpiranje naslovov URL preko strežnika ni dovoljeno. Preverite nastavitve strežnika.", - "The file exceeds your quota by %s" : "Datoteka presega omejitev velikosti za %s", - "Error while downloading %s to %s" : "Napaka med prejemanjem %s v mapo %s", "Error when creating the file" : "Napaka med ustvarjanjem datoteke", - "Folder name cannot be empty." : "Ime mape ne more biti prazna vrednost.", "Error when creating the folder" : "Napaka med ustvarjanjem mape", "Unable to set upload directory." : "Mapo, v katero boste prenašali dokumente, ni mogoče določiti", "Invalid Token" : "Neveljaven žeton", @@ -41,11 +33,9 @@ "Upload cancelled." : "Pošiljanje je preklicano.", "Could not get result from server." : "Ni mogoče pridobiti podatkov s strežnika.", "File upload is in progress. Leaving the page now will cancel the upload." : "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano.", - "URL cannot be empty" : "Polje naslova URL ne sme biti prazno", "{new_name} already exists" : "{new_name} že obstaja", "Could not create file" : "Ni mogoče ustvariti datoteke", "Could not create folder" : "Ni mogoče ustvariti mape", - "Error fetching URL" : "Napaka pridobivanja naslova URL", "Rename" : "Preimenuj", "Delete" : "Izbriši", "Disconnect storage" : "Odklopi shrambo", @@ -68,15 +58,30 @@ "You don’t have permission to upload or create files here" : "Ni ustreznih dovoljenj za pošiljanje ali ustvarjanje datotek na tem mestu.", "_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.", "Your storage is full, files can not be updated or synced anymore!" : "Shramba je povsem napolnjena. Datotek ni več mogoče posodabljati in usklajevati!", "Your storage is almost full ({usedSpacePercent}%)" : "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}'_" : ["","","",""], + "_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", "Favorite" : "Priljubljene", + "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>.", + "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", + "%2$s created %1$s" : "%2$s je ustvaril %1$s", + "%1$s was created in a public folder" : "Datoteka %1$s je ustvarjena v javni mapi.", + "You changed %1$s" : "Spremenili ste %1$s", + "%2$s changed %1$s" : "%2$s je spremenil %1$s", + "You deleted %1$s" : "Izbrisali ste %1$s", + "%2$s deleted %1$s" : "%2$s je izbrisal %1$s", + "You restored %1$s" : "Obnovljen je predmet %1$s", + "%2$s restored %1$s" : "Uporabnik %2$s je obnovil predmet %1$s.", "%s could not be renamed as it has been deleted" : "Datoteke %s ni mogoče preimenovati, ker je bila že prej izbrisana.", "%s could not be renamed" : "%s ni mogoče preimenovati", "Upload (max. %s)" : "Pošiljanje (omejitev %s)", @@ -92,7 +97,6 @@ "Text file" : "Besedilna datoteka", "New folder" : "Nova mapa", "Folder" : "Mapa", - "From link" : "Iz povezave", "Upload" : "Pošlji", "Cancel upload" : "Prekliči pošiljanje", "No files yet" : "Ni datotek", diff --git a/apps/files/l10n/sq.js b/apps/files/l10n/sq.js index eb4ca7564d9..400d1ca37d5 100644 --- a/apps/files/l10n/sq.js +++ b/apps/files/l10n/sq.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "E pa mundur zhvendosja e %s - ekziston nje skedar me te njetin emer", "Could not move %s" : "Nuk mund të zhvendoset %s", "Permission denied" : "Nuk ka të drejtë", - "File name cannot be empty." : "Emri i skedarit nuk mund të jetë bosh.", - "\"%s\" is an invalid file name." : "\"%s\" është i pavlefshëm si emër skedari.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Emër jo i vlefshëm, '\\', '/', '<', '>', ':', '\"', '|', '?' dhe '*' nuk lejohen.", "The target folder has been moved or deleted." : "Dosja e destinacionit është zhvendosur ose fshirë.", "The name %s is already used in the folder %s. Please choose a different name." : "Emri %s është i përdorur në dosjen %s. Ju lutem zgjidhni një emër tjetër.", - "Not a valid source" : "Burim i pavlefshëm", - "Server is not allowed to open URLs, please check the server configuration" : "Serverit nuk i lejohet të hapë URL, ju lutem kontrolloni konfigurimin e serverit", - "The file exceeds your quota by %s" : "Ky skedar tejkalon kuotën tuaj me %s", - "Error while downloading %s to %s" : "Gabim gjatë shkarkimit të %s në %s", "Error when creating the file" : "Gabim gjatë krijimit të skedarit", - "Folder name cannot be empty." : "Emri i dosjes nuk mund të jetë bosh.", "Error when creating the folder" : "Gabim gjatë krijimit të dosjes", "Unable to set upload directory." : "E pa mundur të vendoset dosja e ngarkimit", "Invalid Token" : "Shenjë e gabuar", @@ -42,11 +34,9 @@ OC.L10N.register( "Upload cancelled." : "Ngarkimi u anullua", "Could not get result from server." : "Nuk mund të merret ndonjë rezultat nga serveri.", "File upload is in progress. Leaving the page now will cancel the upload." : "Skedari duke u ngarkuar. Largimi nga faqja do të anullojë ngarkimin", - "URL cannot be empty" : "URL-i nuk mund të jetë bosh", "{new_name} already exists" : "{new_name} është ekzistues ", "Could not create file" : "Skedari nuk mund të krijohet", "Could not create folder" : "I pamundur krijimi i kartelës", - "Error fetching URL" : "Gabim në ngarkimin e URL", "Rename" : "Riemëro", "Delete" : "Fshi", "Disconnect storage" : "Shkëput hapësirën e memorizimit", @@ -66,6 +56,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Ju nuk keni të drejta për të ngarkuar apo krijuar skedarë këtu", "_Uploading %n file_::_Uploading %n files_" : ["Po ngarkoj %n skedar","Po ngarkoj %n skedarë"], "\"{name}\" is an invalid file name." : "\"{name}\" është emër i pavlefshëm.", + "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", @@ -73,6 +64,19 @@ OC.L10N.register( "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.", "_matches '{filter}'_::_match '{filter}'_" : ["",""], "{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>", + "A file or folder has been <strong>deleted</strong>" : "Një skedar ose një dosje është <strong>fshirë</strong>", + "A file or folder has been <strong>restored</strong>" : "Një skedar ose dosje është <strong>rikthyer</strong>", + "You created %1$s" : "Ju krijuat %1$s", + "%2$s created %1$s" : "%2$s krijuar %1$s", + "%1$s was created in a public folder" : "%1$s është krijuar në një dosje publike", + "You changed %1$s" : "Ju ndryshuat %1$s", + "%2$s changed %1$s" : "%2$s ndryshuar %1$s", + "You deleted %1$s" : "Ju fshitë %1$s", + "%2$s deleted %1$s" : "%2$s fshirë %1$s", + "You restored %1$s" : "Ju rikthyet %1$s", + "%2$s restored %1$s" : "%2$s riktheu %1$s", "%s could not be renamed as it has been deleted" : "%s nuk mund të riemërtohet sepse është fshirë", "%s could not be renamed" : "Nuk është i mundur riemërtimi i %s", "Upload (max. %s)" : "Ngarko (maks. %s)", @@ -88,7 +92,6 @@ OC.L10N.register( "Text file" : "Skedar tekst", "New folder" : "Dosje e're", "Folder" : "Dosje", - "From link" : "Nga lidhja", "Upload" : "Ngarko", "Cancel upload" : "Anullo ngarkimin", "Upload too large" : "Ngarkimi shumë i madh", diff --git a/apps/files/l10n/sq.json b/apps/files/l10n/sq.json index 44cc00477bd..400b4397c19 100644 --- a/apps/files/l10n/sq.json +++ b/apps/files/l10n/sq.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "E pa mundur zhvendosja e %s - ekziston nje skedar me te njetin emer", "Could not move %s" : "Nuk mund të zhvendoset %s", "Permission denied" : "Nuk ka të drejtë", - "File name cannot be empty." : "Emri i skedarit nuk mund të jetë bosh.", - "\"%s\" is an invalid file name." : "\"%s\" është i pavlefshëm si emër skedari.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Emër jo i vlefshëm, '\\', '/', '<', '>', ':', '\"', '|', '?' dhe '*' nuk lejohen.", "The target folder has been moved or deleted." : "Dosja e destinacionit është zhvendosur ose fshirë.", "The name %s is already used in the folder %s. Please choose a different name." : "Emri %s është i përdorur në dosjen %s. Ju lutem zgjidhni një emër tjetër.", - "Not a valid source" : "Burim i pavlefshëm", - "Server is not allowed to open URLs, please check the server configuration" : "Serverit nuk i lejohet të hapë URL, ju lutem kontrolloni konfigurimin e serverit", - "The file exceeds your quota by %s" : "Ky skedar tejkalon kuotën tuaj me %s", - "Error while downloading %s to %s" : "Gabim gjatë shkarkimit të %s në %s", "Error when creating the file" : "Gabim gjatë krijimit të skedarit", - "Folder name cannot be empty." : "Emri i dosjes nuk mund të jetë bosh.", "Error when creating the folder" : "Gabim gjatë krijimit të dosjes", "Unable to set upload directory." : "E pa mundur të vendoset dosja e ngarkimit", "Invalid Token" : "Shenjë e gabuar", @@ -40,11 +32,9 @@ "Upload cancelled." : "Ngarkimi u anullua", "Could not get result from server." : "Nuk mund të merret ndonjë rezultat nga serveri.", "File upload is in progress. Leaving the page now will cancel the upload." : "Skedari duke u ngarkuar. Largimi nga faqja do të anullojë ngarkimin", - "URL cannot be empty" : "URL-i nuk mund të jetë bosh", "{new_name} already exists" : "{new_name} është ekzistues ", "Could not create file" : "Skedari nuk mund të krijohet", "Could not create folder" : "I pamundur krijimi i kartelës", - "Error fetching URL" : "Gabim në ngarkimin e URL", "Rename" : "Riemëro", "Delete" : "Fshi", "Disconnect storage" : "Shkëput hapësirën e memorizimit", @@ -64,6 +54,7 @@ "You don’t have permission to upload or create files here" : "Ju nuk keni të drejta për të ngarkuar apo krijuar skedarë këtu", "_Uploading %n file_::_Uploading %n files_" : ["Po ngarkoj %n skedar","Po ngarkoj %n skedarë"], "\"{name}\" is an invalid file name." : "\"{name}\" është emër i pavlefshëm.", + "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", @@ -71,6 +62,19 @@ "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.", "_matches '{filter}'_::_match '{filter}'_" : ["",""], "{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>", + "A file or folder has been <strong>deleted</strong>" : "Një skedar ose një dosje është <strong>fshirë</strong>", + "A file or folder has been <strong>restored</strong>" : "Një skedar ose dosje është <strong>rikthyer</strong>", + "You created %1$s" : "Ju krijuat %1$s", + "%2$s created %1$s" : "%2$s krijuar %1$s", + "%1$s was created in a public folder" : "%1$s është krijuar në një dosje publike", + "You changed %1$s" : "Ju ndryshuat %1$s", + "%2$s changed %1$s" : "%2$s ndryshuar %1$s", + "You deleted %1$s" : "Ju fshitë %1$s", + "%2$s deleted %1$s" : "%2$s fshirë %1$s", + "You restored %1$s" : "Ju rikthyet %1$s", + "%2$s restored %1$s" : "%2$s riktheu %1$s", "%s could not be renamed as it has been deleted" : "%s nuk mund të riemërtohet sepse është fshirë", "%s could not be renamed" : "Nuk është i mundur riemërtimi i %s", "Upload (max. %s)" : "Ngarko (maks. %s)", @@ -86,7 +90,6 @@ "Text file" : "Skedar tekst", "New folder" : "Dosje e're", "Folder" : "Dosje", - "From link" : "Nga lidhja", "Upload" : "Ngarko", "Cancel upload" : "Anullo ngarkimin", "Upload too large" : "Ngarkimi shumë i madh", diff --git a/apps/files/l10n/sr.js b/apps/files/l10n/sr.js index 73ed91ee7e3..790d95f78a0 100644 --- a/apps/files/l10n/sr.js +++ b/apps/files/l10n/sr.js @@ -1,54 +1,116 @@ OC.L10N.register( "files", { - "Could not move %s - File with this name already exists" : "Не могу да преместим %s – датотека с овим именом већ постоји", + "Storage not available" : "Складиште није доступно", + "Storage invalid" : "Неисправно складиште", + "Unknown error" : "Непозната грешка", + "Could not move %s - File with this name already exists" : "Не могу да преместим %s – фајл са овим називом већ постоји", "Could not move %s" : "Не могу да преместим %s", - "File name cannot be empty." : "Име датотеке не може бити празно.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Неисправан назив. Следећи знакови нису дозвољени: \\, /, <, >, :, \", |, ? и *.", - "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" : "Датотека није отпремљена", + "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:", + "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Отпремани фајл превазилази смерницу MAX_FILE_SIZE која је наведена у ХТМЛ обрасцу", + "The uploaded file was only partially uploaded" : "Отпремани фајл је само делимично отпремљен", + "No file was uploaded" : "Ништа није отпремљено", "Missing a temporary folder" : "Недостаје привремена фасцикла", "Failed to write to disk" : "Не могу да пишем на диск", "Not enough storage available" : "Нема довољно простора", - "Invalid directory." : "неисправна фасцикла.", - "Files" : "Датотеке", - "Home" : "Кућа", - "Upload cancelled." : "Отпремање је прекинуто.", - "File upload is in progress. Leaving the page now will cancel the upload." : "Отпремање датотеке је у току. Ако сада напустите страницу, прекинућете отпремање.", + "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" : "Обриши", - "Unshare" : "Укини дељење", + "Disconnect storage" : "Искључи складиште", + "Unshare" : "Не дели", "Download" : "Преузми", + "Select" : "Изабери", "Pending" : "На чекању", + "Unable to determine date" : "Не могу да одредим датум", + "Error moving file." : "Грешка при премештању фајла.", + "Error moving file" : "Грешка при премештању фајла", "Error" : "Грешка", - "Name" : "Име", + "Could not rename file" : "Не могу да преименујем фајл", + "Error deleting file." : "Грешка при брисању фајла.", + "No entries in this folder match '{filter}'" : "У овој фасцикли ништа се не поклапа са '{filter}'", + "Name" : "Назив", "Size" : "Величина", - "Modified" : "Измењено", - "_%n folder_::_%n folders_" : ["","",""], - "_%n file_::_%n files_" : ["","",""], - "_Uploading %n file_::_Uploading %n files_" : ["","",""], - "Your storage is full, files can not be updated or synced anymore!" : "Ваше складиште је пуно. Датотеке више не могу бити ажуриране ни синхронизоване.", - "Your storage is almost full ({usedSpacePercent}%)" : "Ваше складиште је скоро па пуно ({usedSpacePercent}%)", - "_matches '{filter}'_::_match '{filter}'_" : ["","",""], - "File handling" : "Управљање датотекама", - "Maximum upload size" : "Највећа величина датотеке", - "max. possible: " : "највећа величина:", + "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 фајлова"], + "\"{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" : "Омиљено", + "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>", + "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" : "Нова", - "Text file" : "текстуална датотека", + "WebDAV" : "ВебДАВ", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Користите ову адресу да <a href=\"%s\" target=\"_blank\"> приступите фајловима преко ВебДАВ-а</a>", + "New" : "Ново", + "New text file" : "Нов текстуални фајл", + "Text file" : "текстуални фајл", + "New folder" : "Нова фасцикла", "Folder" : "фасцикла", - "From link" : "Са везе", "Upload" : "Отпреми", - "Cancel upload" : "Прекини отпремање", - "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." : "Скенирам датотеке…" + "Cancel upload" : "Откажи отпремање", + "No files yet" : "Још нема фајлова", + "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." : "Скенирам фајлове, сачекајте.", + "Currently scanning" : "Тренутно скенирам", + "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/sr.json b/apps/files/l10n/sr.json index e0529d980fc..bb2e392a3f1 100644 --- a/apps/files/l10n/sr.json +++ b/apps/files/l10n/sr.json @@ -1,52 +1,114 @@ { "translations": { - "Could not move %s - File with this name already exists" : "Не могу да преместим %s – датотека с овим именом већ постоји", + "Storage not available" : "Складиште није доступно", + "Storage invalid" : "Неисправно складиште", + "Unknown error" : "Непозната грешка", + "Could not move %s - File with this name already exists" : "Не могу да преместим %s – фајл са овим називом већ постоји", "Could not move %s" : "Не могу да преместим %s", - "File name cannot be empty." : "Име датотеке не може бити празно.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Неисправан назив. Следећи знакови нису дозвољени: \\, /, <, >, :, \", |, ? и *.", - "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" : "Датотека није отпремљена", + "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:", + "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Отпремани фајл превазилази смерницу MAX_FILE_SIZE која је наведена у ХТМЛ обрасцу", + "The uploaded file was only partially uploaded" : "Отпремани фајл је само делимично отпремљен", + "No file was uploaded" : "Ништа није отпремљено", "Missing a temporary folder" : "Недостаје привремена фасцикла", "Failed to write to disk" : "Не могу да пишем на диск", "Not enough storage available" : "Нема довољно простора", - "Invalid directory." : "неисправна фасцикла.", - "Files" : "Датотеке", - "Home" : "Кућа", - "Upload cancelled." : "Отпремање је прекинуто.", - "File upload is in progress. Leaving the page now will cancel the upload." : "Отпремање датотеке је у току. Ако сада напустите страницу, прекинућете отпремање.", + "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" : "Обриши", - "Unshare" : "Укини дељење", + "Disconnect storage" : "Искључи складиште", + "Unshare" : "Не дели", "Download" : "Преузми", + "Select" : "Изабери", "Pending" : "На чекању", + "Unable to determine date" : "Не могу да одредим датум", + "Error moving file." : "Грешка при премештању фајла.", + "Error moving file" : "Грешка при премештању фајла", "Error" : "Грешка", - "Name" : "Име", + "Could not rename file" : "Не могу да преименујем фајл", + "Error deleting file." : "Грешка при брисању фајла.", + "No entries in this folder match '{filter}'" : "У овој фасцикли ништа се не поклапа са '{filter}'", + "Name" : "Назив", "Size" : "Величина", - "Modified" : "Измењено", - "_%n folder_::_%n folders_" : ["","",""], - "_%n file_::_%n files_" : ["","",""], - "_Uploading %n file_::_Uploading %n files_" : ["","",""], - "Your storage is full, files can not be updated or synced anymore!" : "Ваше складиште је пуно. Датотеке више не могу бити ажуриране ни синхронизоване.", - "Your storage is almost full ({usedSpacePercent}%)" : "Ваше складиште је скоро па пуно ({usedSpacePercent}%)", - "_matches '{filter}'_::_match '{filter}'_" : ["","",""], - "File handling" : "Управљање датотекама", - "Maximum upload size" : "Највећа величина датотеке", - "max. possible: " : "највећа величина:", + "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 фајлова"], + "\"{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" : "Омиљено", + "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>", + "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" : "Нова", - "Text file" : "текстуална датотека", + "WebDAV" : "ВебДАВ", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Користите ову адресу да <a href=\"%s\" target=\"_blank\"> приступите фајловима преко ВебДАВ-а</a>", + "New" : "Ново", + "New text file" : "Нов текстуални фајл", + "Text file" : "текстуални фајл", + "New folder" : "Нова фасцикла", "Folder" : "фасцикла", - "From link" : "Са везе", "Upload" : "Отпреми", - "Cancel upload" : "Прекини отпремање", - "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." : "Скенирам датотеке…" + "Cancel upload" : "Откажи отпремање", + "No files yet" : "Још нема фајлова", + "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." : "Скенирам фајлове, сачекајте.", + "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);" }
\ No newline at end of file diff --git a/apps/files/l10n/sr@latin.js b/apps/files/l10n/sr@latin.js index 65aafd9d1f3..c5bb11c48ca 100644 --- a/apps/files/l10n/sr@latin.js +++ b/apps/files/l10n/sr@latin.js @@ -7,17 +7,9 @@ OC.L10N.register( "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", "Permission denied" : "Pristup odbijen", - "File name cannot be empty." : "Ime fajla ne može biti prazno.", - "\"%s\" is an invalid file name." : "\"%s\" je neispravno ime fajla.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Neispravno ime, '\\', '/', '<', '>', ':', '\"', '|', '?' i '*' nisu dozvoljeni.", "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.", - "Not a valid source" : "Nije ispravan izvor", - "Server is not allowed to open URLs, please check the server configuration" : "Serveru nije dozvoljeno da otvara URL-ove, molimo proverite podešavanja servera", - "The file exceeds your quota by %s" : "Ovaj fajl prevazilazi Vašu kvotu za %s", - "Error while downloading %s to %s" : "Greška pri preuzimanju %s u %s", "Error when creating the file" : "Greška pri kreiranju fajla", - "Folder name cannot be empty." : "Ime direktorijuma ne može da bude prazno.", "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", @@ -43,11 +35,9 @@ OC.L10N.register( "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.", - "URL cannot be empty" : "URL ne može biti prazan.", "{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", - "Error fetching URL" : "Greška pri preuzimanju URL-a", "Rename" : "Preimenij", "Delete" : "Obriši", "Disconnect storage" : "Nepovezano skladište", @@ -70,6 +60,7 @@ OC.L10N.register( "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.", "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.", @@ -79,6 +70,19 @@ OC.L10N.register( "{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", + "You changed %1$s" : "Izmenili ste %1$s", + "%2$s changed %1$s" : "%2$s je izmenio %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)", @@ -94,7 +98,6 @@ OC.L10N.register( "Text file" : "Tekstualni fajl", "New folder" : "Novi direktorijum", "Folder" : "Direktorijum", - "From link" : "Od prečice", "Upload" : "Pošalji", "Cancel upload" : "Otkaži otpremanje", "No files yet" : "Još nema fajlova", diff --git a/apps/files/l10n/sr@latin.json b/apps/files/l10n/sr@latin.json index 2366c3fee2b..3f0dc56c791 100644 --- a/apps/files/l10n/sr@latin.json +++ b/apps/files/l10n/sr@latin.json @@ -5,17 +5,9 @@ "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", "Permission denied" : "Pristup odbijen", - "File name cannot be empty." : "Ime fajla ne može biti prazno.", - "\"%s\" is an invalid file name." : "\"%s\" je neispravno ime fajla.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Neispravno ime, '\\', '/', '<', '>', ':', '\"', '|', '?' i '*' nisu dozvoljeni.", "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.", - "Not a valid source" : "Nije ispravan izvor", - "Server is not allowed to open URLs, please check the server configuration" : "Serveru nije dozvoljeno da otvara URL-ove, molimo proverite podešavanja servera", - "The file exceeds your quota by %s" : "Ovaj fajl prevazilazi Vašu kvotu za %s", - "Error while downloading %s to %s" : "Greška pri preuzimanju %s u %s", "Error when creating the file" : "Greška pri kreiranju fajla", - "Folder name cannot be empty." : "Ime direktorijuma ne može da bude prazno.", "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", @@ -41,11 +33,9 @@ "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.", - "URL cannot be empty" : "URL ne može biti prazan.", "{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", - "Error fetching URL" : "Greška pri preuzimanju URL-a", "Rename" : "Preimenij", "Delete" : "Obriši", "Disconnect storage" : "Nepovezano skladište", @@ -68,6 +58,7 @@ "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.", "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.", @@ -77,6 +68,19 @@ "{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", + "You changed %1$s" : "Izmenili ste %1$s", + "%2$s changed %1$s" : "%2$s je izmenio %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)", @@ -92,7 +96,6 @@ "Text file" : "Tekstualni fajl", "New folder" : "Novi direktorijum", "Folder" : "Direktorijum", - "From link" : "Od prečice", "Upload" : "Pošalji", "Cancel upload" : "Otkaži otpremanje", "No files yet" : "Još nema fajlova", diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js index 3919f6f3e4c..a14a7e37335 100644 --- a/apps/files/l10n/sv.js +++ b/apps/files/l10n/sv.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "Kunde inte flytta %s - Det finns redan en fil med detta namn", "Could not move %s" : "Kan inte flytta %s", "Permission denied" : "Behörighet nekad.", - "File name cannot be empty." : "Filnamn kan inte vara tomt.", - "\"%s\" is an invalid file name." : "\"%s\" är ett ogiltigt filnamn.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ogiltigt namn, '\\', '/', '<', '>', ':', '\"', '|', '?' och '*' är inte tillåtet.", "The target folder has been moved or deleted." : "Målmappen har flyttats eller tagits bort.", "The name %s is already used in the folder %s. Please choose a different name." : "Namnet %s används redan i katalogen %s. Välj ett annat namn.", - "Not a valid source" : "Inte en giltig källa", - "Server is not allowed to open URLs, please check the server configuration" : "Servern är inte tillåten att öppna URL:er, vänligen kontrollera server konfigurationen", - "The file exceeds your quota by %s" : "Filen överstiger din tilldelade kvot med %s", - "Error while downloading %s to %s" : "Fel under nerladdning från %s till %s", "Error when creating the file" : "Fel under skapande utav filen", - "Folder name cannot be empty." : "Katalognamn kan ej vara tomt.", "Error when creating the folder" : "Fel under skapande utav en katalog", "Unable to set upload directory." : "Kan inte sätta mapp för uppladdning.", "Invalid Token" : "Ogiltig token", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Uppladdning avbruten.", "Could not get result from server." : "Gick inte att hämta resultat från server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen.", - "URL cannot be empty" : "URL kan ej vara tomt", "{new_name} already exists" : "{new_name} finns redan", "Could not create file" : "Kunde ej skapa fil", "Could not create folder" : "Kunde ej skapa katalog", - "Error fetching URL" : "Fel vid hämtning av URL", "Rename" : "Byt namn", "Delete" : "Radera", "Disconnect storage" : "Koppla bort lagring", @@ -69,6 +59,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "Du har ej tillåtelse att ladda upp eller skapa filer här", "_Uploading %n file_::_Uploading %n files_" : ["Laddar upp %n fil","Laddar upp %n filer"], "\"{name}\" is an invalid file name." : "\"{name}\" är ett ogiltligt filnamn.", + "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", @@ -78,6 +69,19 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} och {files}", "Favorited" : "Favoritiserad", "Favorite" : "Favorit", + "A new file or folder has been <strong>created</strong>" : "En ny fil eller mapp har blivit <strong>skapad</strong>", + "A file or folder has been <strong>changed</strong>" : "En ny fil eller mapp har blivit <strong>ändrad</strong>", + "A file or folder has been <strong>deleted</strong>" : "En ny fil eller mapp har blivit <strong>raderad</strong>", + "A file or folder has been <strong>restored</strong>" : "En ny fil eller mapp har blivit <strong>återskapad</strong>", + "You created %1$s" : "Du skapade %1$s", + "%2$s created %1$s" : "%2$s skapade %1$s", + "%1$s was created in a public folder" : "%1$s skapades i en publik mapp", + "You changed %1$s" : "Du ändrade %1$s", + "%2$s changed %1$s" : "%2$s ändrade %1$s", + "You deleted %1$s" : "Du raderade %1$s", + "%2$s deleted %1$s" : "%2$s raderade %1$s", + "You restored %1$s" : "Du återkapade %1$s", + "%2$s restored %1$s" : "%2$s återskapade %1$s", "%s could not be renamed as it has been deleted" : "%s kan inte döpas om eftersom den har raderats", "%s could not be renamed" : "%s kunde inte namnändras", "Upload (max. %s)" : "Ladda upp (max. %s)", @@ -93,7 +97,6 @@ OC.L10N.register( "Text file" : "Textfil", "New folder" : "Ny mapp", "Folder" : "Mapp", - "From link" : "Från länk", "Upload" : "Ladda upp", "Cancel upload" : "Avbryt uppladdning", "No files yet" : "Inga filer ännu", diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json index 91432f89178..fd2e733e024 100644 --- a/apps/files/l10n/sv.json +++ b/apps/files/l10n/sv.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "Kunde inte flytta %s - Det finns redan en fil med detta namn", "Could not move %s" : "Kan inte flytta %s", "Permission denied" : "Behörighet nekad.", - "File name cannot be empty." : "Filnamn kan inte vara tomt.", - "\"%s\" is an invalid file name." : "\"%s\" är ett ogiltigt filnamn.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Ogiltigt namn, '\\', '/', '<', '>', ':', '\"', '|', '?' och '*' är inte tillåtet.", "The target folder has been moved or deleted." : "Målmappen har flyttats eller tagits bort.", "The name %s is already used in the folder %s. Please choose a different name." : "Namnet %s används redan i katalogen %s. Välj ett annat namn.", - "Not a valid source" : "Inte en giltig källa", - "Server is not allowed to open URLs, please check the server configuration" : "Servern är inte tillåten att öppna URL:er, vänligen kontrollera server konfigurationen", - "The file exceeds your quota by %s" : "Filen överstiger din tilldelade kvot med %s", - "Error while downloading %s to %s" : "Fel under nerladdning från %s till %s", "Error when creating the file" : "Fel under skapande utav filen", - "Folder name cannot be empty." : "Katalognamn kan ej vara tomt.", "Error when creating the folder" : "Fel under skapande utav en katalog", "Unable to set upload directory." : "Kan inte sätta mapp för uppladdning.", "Invalid Token" : "Ogiltig token", @@ -41,11 +33,9 @@ "Upload cancelled." : "Uppladdning avbruten.", "Could not get result from server." : "Gick inte att hämta resultat från server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen.", - "URL cannot be empty" : "URL kan ej vara tomt", "{new_name} already exists" : "{new_name} finns redan", "Could not create file" : "Kunde ej skapa fil", "Could not create folder" : "Kunde ej skapa katalog", - "Error fetching URL" : "Fel vid hämtning av URL", "Rename" : "Byt namn", "Delete" : "Radera", "Disconnect storage" : "Koppla bort lagring", @@ -67,6 +57,7 @@ "You don’t have permission to upload or create files here" : "Du har ej tillåtelse att ladda upp eller skapa filer här", "_Uploading %n file_::_Uploading %n files_" : ["Laddar upp %n fil","Laddar upp %n filer"], "\"{name}\" is an invalid file name." : "\"{name}\" är ett ogiltligt filnamn.", + "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", @@ -76,6 +67,19 @@ "{dirs} and {files}" : "{dirs} och {files}", "Favorited" : "Favoritiserad", "Favorite" : "Favorit", + "A new file or folder has been <strong>created</strong>" : "En ny fil eller mapp har blivit <strong>skapad</strong>", + "A file or folder has been <strong>changed</strong>" : "En ny fil eller mapp har blivit <strong>ändrad</strong>", + "A file or folder has been <strong>deleted</strong>" : "En ny fil eller mapp har blivit <strong>raderad</strong>", + "A file or folder has been <strong>restored</strong>" : "En ny fil eller mapp har blivit <strong>återskapad</strong>", + "You created %1$s" : "Du skapade %1$s", + "%2$s created %1$s" : "%2$s skapade %1$s", + "%1$s was created in a public folder" : "%1$s skapades i en publik mapp", + "You changed %1$s" : "Du ändrade %1$s", + "%2$s changed %1$s" : "%2$s ändrade %1$s", + "You deleted %1$s" : "Du raderade %1$s", + "%2$s deleted %1$s" : "%2$s raderade %1$s", + "You restored %1$s" : "Du återkapade %1$s", + "%2$s restored %1$s" : "%2$s återskapade %1$s", "%s could not be renamed as it has been deleted" : "%s kan inte döpas om eftersom den har raderats", "%s could not be renamed" : "%s kunde inte namnändras", "Upload (max. %s)" : "Ladda upp (max. %s)", @@ -91,7 +95,6 @@ "Text file" : "Textfil", "New folder" : "Ny mapp", "Folder" : "Mapp", - "From link" : "Från länk", "Upload" : "Ladda upp", "Cancel upload" : "Avbryt uppladdning", "No files yet" : "Inga filer ännu", diff --git a/apps/files/l10n/ta_IN.js b/apps/files/l10n/ta_IN.js index 72b5cd5b911..1515fcdd552 100644 --- a/apps/files/l10n/ta_IN.js +++ b/apps/files/l10n/ta_IN.js @@ -6,6 +6,15 @@ OC.L10N.register( "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "A new file or folder has been <strong>created</strong>" : "ஒரு புதிய கோப்புறை அல்லது ஆவணம் <strong> உருவாக்கப்பட்டுள்ளது.</strong>", + "A file or folder has been <strong>changed</strong>" : "ஒரு கோப்புறை அல்லது ஆவணம் <strong>மாற்றம் செய்யப்பட்டுள்ளது.</strong>", + "A file or folder has been <strong>deleted</strong>" : "ஒரு கோப்புறை அல்லது ஆவணம் <strong> நீக்கப்பட்டுள்ளது. </strong>", + "You created %1$s" : "நீங்கள் %1$s 'ஐ உருவாக்கி உள்ளீர்கள். ", + "%2$s created %1$s" : "%2$s , %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 'ஐ நீக்கியுள்ளார்.", "Settings" : "அமைப்புகள்", "New folder" : "புதிய கோப்புறை", "Upload" : "பதிவேற்று" diff --git a/apps/files/l10n/ta_IN.json b/apps/files/l10n/ta_IN.json index 8db012a7066..54b289a0780 100644 --- a/apps/files/l10n/ta_IN.json +++ b/apps/files/l10n/ta_IN.json @@ -4,6 +4,15 @@ "_%n file_::_%n files_" : ["",""], "_Uploading %n file_::_Uploading %n files_" : ["",""], "_matches '{filter}'_::_match '{filter}'_" : ["",""], + "A new file or folder has been <strong>created</strong>" : "ஒரு புதிய கோப்புறை அல்லது ஆவணம் <strong> உருவாக்கப்பட்டுள்ளது.</strong>", + "A file or folder has been <strong>changed</strong>" : "ஒரு கோப்புறை அல்லது ஆவணம் <strong>மாற்றம் செய்யப்பட்டுள்ளது.</strong>", + "A file or folder has been <strong>deleted</strong>" : "ஒரு கோப்புறை அல்லது ஆவணம் <strong> நீக்கப்பட்டுள்ளது. </strong>", + "You created %1$s" : "நீங்கள் %1$s 'ஐ உருவாக்கி உள்ளீர்கள். ", + "%2$s created %1$s" : "%2$s , %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 'ஐ நீக்கியுள்ளார்.", "Settings" : "அமைப்புகள்", "New folder" : "புதிய கோப்புறை", "Upload" : "பதிவேற்று" diff --git a/apps/files/l10n/ta_LK.js b/apps/files/l10n/ta_LK.js index 1ff2017ac28..7787f0a856f 100644 --- a/apps/files/l10n/ta_LK.js +++ b/apps/files/l10n/ta_LK.js @@ -1,7 +1,6 @@ OC.L10N.register( "files", { - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "செல்லுபடியற்ற பெயர்,'\\', '/', '<', '>', ':', '\"', '|', '?' மற்றும் '*' ஆகியன அனுமதிக்கப்படமாட்டாது.", "No file was uploaded. Unknown error" : "ஒரு கோப்பும் பதிவேற்றப்படவில்லை. அறியப்படாத வழு", "There is no error, the file uploaded with success" : "இங்கு வழு இல்லை, கோப்பு வெற்றிகரமாக பதிவேற்றப்பட்டது", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "பதிவேற்றப்பட்ட கோப்பானது HTML படிவத்தில் குறிப்பிடப்பட்டுள்ள MAX_FILE_SIZE directive ஐ விட கூடியது", @@ -38,7 +37,6 @@ OC.L10N.register( "New" : "புதிய", "Text file" : "கோப்பு உரை", "Folder" : "கோப்புறை", - "From link" : "இணைப்பிலிருந்து", "Upload" : "பதிவேற்றுக", "Cancel upload" : "பதிவேற்றலை இரத்து செய்க", "Upload too large" : "பதிவேற்றல் மிகப்பெரியது", diff --git a/apps/files/l10n/ta_LK.json b/apps/files/l10n/ta_LK.json index f945ee4032b..8812b6aa83f 100644 --- a/apps/files/l10n/ta_LK.json +++ b/apps/files/l10n/ta_LK.json @@ -1,5 +1,4 @@ { "translations": { - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "செல்லுபடியற்ற பெயர்,'\\', '/', '<', '>', ':', '\"', '|', '?' மற்றும் '*' ஆகியன அனுமதிக்கப்படமாட்டாது.", "No file was uploaded. Unknown error" : "ஒரு கோப்பும் பதிவேற்றப்படவில்லை. அறியப்படாத வழு", "There is no error, the file uploaded with success" : "இங்கு வழு இல்லை, கோப்பு வெற்றிகரமாக பதிவேற்றப்பட்டது", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "பதிவேற்றப்பட்ட கோப்பானது HTML படிவத்தில் குறிப்பிடப்பட்டுள்ள MAX_FILE_SIZE directive ஐ விட கூடியது", @@ -36,7 +35,6 @@ "New" : "புதிய", "Text file" : "கோப்பு உரை", "Folder" : "கோப்புறை", - "From link" : "இணைப்பிலிருந்து", "Upload" : "பதிவேற்றுக", "Cancel upload" : "பதிவேற்றலை இரத்து செய்க", "Upload too large" : "பதிவேற்றல் மிகப்பெரியது", diff --git a/apps/files/l10n/th_TH.js b/apps/files/l10n/th_TH.js index cba3ae369fc..e1cf5194952 100644 --- a/apps/files/l10n/th_TH.js +++ b/apps/files/l10n/th_TH.js @@ -4,8 +4,6 @@ OC.L10N.register( "Unknown error" : "ข้อผิดพลาดที่ไม่ทราบสาเหตุ", "Could not move %s - File with this name already exists" : "ไม่สามารถย้าย %s ได้ - ไฟล์ที่ใช้ชื่อนี้มีอยู่แล้ว", "Could not move %s" : "ไม่สามารถย้าย %s ได้", - "File name cannot be empty." : "ชื่อไฟล์ไม่สามารถเว้นว่างได้", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "ชื่อที่ใช้ไม่ถูกต้อง, '\\', '/', '<', '>', ':', '\"', '|', '?' และ '*' ไม่ได้รับอนุญาตให้ใช้งานได้", "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", @@ -35,6 +33,7 @@ OC.L10N.register( "_%n folder_::_%n folders_" : [""], "_%n file_::_%n files_" : [""], "_Uploading %n file_::_Uploading %n files_" : [""], + "File name cannot be empty." : "ชื่อไฟล์ไม่สามารถเว้นว่างได้", "Your storage is full, files can not be updated or synced anymore!" : "พื้นที่จัดเก็บข้อมูลของคุณเต็มแล้ว ไม่สามารถอัพเดทหรือผสานไฟล์ต่างๆได้อีกต่อไป", "Your storage is almost full ({usedSpacePercent}%)" : "พื้นที่จัดเก็บข้อมูลของคุณใกล้เต็มแล้ว ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : [""], @@ -49,7 +48,6 @@ OC.L10N.register( "Text file" : "ไฟล์ข้อความ", "New folder" : "โฟลเดอร์ใหม่", "Folder" : "แฟ้มเอกสาร", - "From link" : "จากลิงก์", "Upload" : "อัพโหลด", "Cancel upload" : "ยกเลิกการอัพโหลด", "Upload too large" : "ไฟล์ที่อัพโหลดมีขนาดใหญ่เกินไป", diff --git a/apps/files/l10n/th_TH.json b/apps/files/l10n/th_TH.json index 048a8d3d8be..22523db5d59 100644 --- a/apps/files/l10n/th_TH.json +++ b/apps/files/l10n/th_TH.json @@ -2,8 +2,6 @@ "Unknown error" : "ข้อผิดพลาดที่ไม่ทราบสาเหตุ", "Could not move %s - File with this name already exists" : "ไม่สามารถย้าย %s ได้ - ไฟล์ที่ใช้ชื่อนี้มีอยู่แล้ว", "Could not move %s" : "ไม่สามารถย้าย %s ได้", - "File name cannot be empty." : "ชื่อไฟล์ไม่สามารถเว้นว่างได้", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "ชื่อที่ใช้ไม่ถูกต้อง, '\\', '/', '<', '>', ':', '\"', '|', '?' และ '*' ไม่ได้รับอนุญาตให้ใช้งานได้", "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", @@ -33,6 +31,7 @@ "_%n folder_::_%n folders_" : [""], "_%n file_::_%n files_" : [""], "_Uploading %n file_::_Uploading %n files_" : [""], + "File name cannot be empty." : "ชื่อไฟล์ไม่สามารถเว้นว่างได้", "Your storage is full, files can not be updated or synced anymore!" : "พื้นที่จัดเก็บข้อมูลของคุณเต็มแล้ว ไม่สามารถอัพเดทหรือผสานไฟล์ต่างๆได้อีกต่อไป", "Your storage is almost full ({usedSpacePercent}%)" : "พื้นที่จัดเก็บข้อมูลของคุณใกล้เต็มแล้ว ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : [""], @@ -47,7 +46,6 @@ "Text file" : "ไฟล์ข้อความ", "New folder" : "โฟลเดอร์ใหม่", "Folder" : "แฟ้มเอกสาร", - "From link" : "จากลิงก์", "Upload" : "อัพโหลด", "Cancel upload" : "ยกเลิกการอัพโหลด", "Upload too large" : "ไฟล์ที่อัพโหลดมีขนาดใหญ่เกินไป", diff --git a/apps/files/l10n/tr.js b/apps/files/l10n/tr.js index 6a497a4b3c1..4dc78965996 100644 --- a/apps/files/l10n/tr.js +++ b/apps/files/l10n/tr.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "%s taşınamadı. Bu isimde dosya zaten mevcut", "Could not move %s" : "%s taşınamadı", "Permission denied" : "Erişim reddedildi", - "File name cannot be empty." : "Dosya adı boş olamaz.", - "\"%s\" is an invalid file name." : "\"%s\" geçersiz bir dosya adı.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Geçersiz isim. '\\', '/', '<', '>', ':', '\"', '|', '?' ve '*' karakterlerine izin verilmemektedir.", "The target folder has been moved or deleted." : "Hedef klasör taşındı veya silindi.", "The name %s is already used in the folder %s. Please choose a different name." : "%s ismi zaten %s klasöründe kullanılıyor. Lütfen farklı bir isim seçin.", - "Not a valid source" : "Geçerli bir kaynak değil", - "Server is not allowed to open URLs, please check the server configuration" : "Sunucunun adresleri açma izni yok, lütfen sunucu yapılandırmasını denetleyin", - "The file exceeds your quota by %s" : "Dosya, kotanızı %s aşıyor", - "Error while downloading %s to %s" : "%s, %s içine indirilirken hata", "Error when creating the file" : "Dosya oluşturulurken hata", - "Folder name cannot be empty." : "Klasör adı boş olamaz.", "Error when creating the folder" : "Klasör oluşturulurken hata", "Unable to set upload directory." : "Yükleme dizini ayarlanamadı.", "Invalid Token" : "Geçersiz Belirteç", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Yükleme iptal edildi.", "Could not get result from server." : "Sunucudan sonuç alınamadı.", "File upload is in progress. Leaving the page now will cancel the upload." : "Dosya yükleme işlemi sürüyor. Şu anda sayfadan ayrılmak yükleme işlemini iptal edecek.", - "URL cannot be empty" : "URL boş olamaz", "{new_name} already exists" : "{new_name} zaten mevcut", "Could not create file" : "Dosya oluşturulamadı", "Could not create folder" : "Klasör oluşturulamadı", - "Error fetching URL" : "Adres getirilirken hata", "Rename" : "Yeniden adlandır", "Delete" : "Sil", "Disconnect storage" : "Depolama bağlantısını kes", @@ -70,6 +60,7 @@ OC.L10N.register( "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.", "Your storage is full, files can not be updated or synced anymore!" : "Depolama alanınız dolu, artık dosyalar güncellenmeyecek veya eşitlenmeyecek.", "Your storage is almost full ({usedSpacePercent}%)" : "Depolama alanınız neredeyse dolu (%{usedSpacePercent})", "Encryption 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", @@ -79,6 +70,20 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} ve {files}", "Favorited" : "Sık kullanılanlara eklendi", "Favorite" : "Sık kullanılan", + "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>", + "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", + "%2$s created %1$s" : "%2$s, %1$s dosyasını oluşturdu", + "%1$s was created in a public folder" : "%1$s herkese açık klasörde oluşturuldu", + "You changed %1$s" : "%1$s dosyasını değiştirdiniz", + "%2$s changed %1$s" : "%2$s, %1$s dosyasını değiştirdi", + "You deleted %1$s" : "%1$s dosyasını sildiniz", + "%2$s deleted %1$s" : "%2$s, %1$s dosyasını sildi", + "You restored %1$s" : "%1$s ögesini geri aldınız", + "%2$s restored %1$s" : "%2$s, %1$s ögesini geri aldı", "%s could not be renamed as it has been deleted" : "%s, silindiği için adlandırılamadı", "%s could not be renamed" : "%s yeniden adlandırılamadı", "Upload (max. %s)" : "Yükle (azami: %s)", @@ -86,6 +91,7 @@ OC.L10N.register( "Maximum upload size" : "Azami yükleme boyutu", "max. possible: " : "mümkün olan en fazla: ", "Save" : "Kaydet", + "Can not be edited from here due to insufficient permissions." : "Yetersiz izinler buradan düzenlenemez.", "Settings" : "Ayarlar", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">Dosyalarınıza WebDAV aracılığıyla erişmek için</a> bu adresi kullanın", @@ -94,7 +100,6 @@ OC.L10N.register( "Text file" : "Metin dosyası", "New folder" : "Yeni klasör", "Folder" : "Klasör", - "From link" : "Bağlantıdan", "Upload" : "Yükle", "Cancel upload" : "Yüklemeyi iptal et", "No files yet" : "Henüz dosya yok", diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json index 7f23744c96a..693edb782e5 100644 --- a/apps/files/l10n/tr.json +++ b/apps/files/l10n/tr.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "%s taşınamadı. Bu isimde dosya zaten mevcut", "Could not move %s" : "%s taşınamadı", "Permission denied" : "Erişim reddedildi", - "File name cannot be empty." : "Dosya adı boş olamaz.", - "\"%s\" is an invalid file name." : "\"%s\" geçersiz bir dosya adı.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Geçersiz isim. '\\', '/', '<', '>', ':', '\"', '|', '?' ve '*' karakterlerine izin verilmemektedir.", "The target folder has been moved or deleted." : "Hedef klasör taşındı veya silindi.", "The name %s is already used in the folder %s. Please choose a different name." : "%s ismi zaten %s klasöründe kullanılıyor. Lütfen farklı bir isim seçin.", - "Not a valid source" : "Geçerli bir kaynak değil", - "Server is not allowed to open URLs, please check the server configuration" : "Sunucunun adresleri açma izni yok, lütfen sunucu yapılandırmasını denetleyin", - "The file exceeds your quota by %s" : "Dosya, kotanızı %s aşıyor", - "Error while downloading %s to %s" : "%s, %s içine indirilirken hata", "Error when creating the file" : "Dosya oluşturulurken hata", - "Folder name cannot be empty." : "Klasör adı boş olamaz.", "Error when creating the folder" : "Klasör oluşturulurken hata", "Unable to set upload directory." : "Yükleme dizini ayarlanamadı.", "Invalid Token" : "Geçersiz Belirteç", @@ -41,11 +33,9 @@ "Upload cancelled." : "Yükleme iptal edildi.", "Could not get result from server." : "Sunucudan sonuç alınamadı.", "File upload is in progress. Leaving the page now will cancel the upload." : "Dosya yükleme işlemi sürüyor. Şu anda sayfadan ayrılmak yükleme işlemini iptal edecek.", - "URL cannot be empty" : "URL boş olamaz", "{new_name} already exists" : "{new_name} zaten mevcut", "Could not create file" : "Dosya oluşturulamadı", "Could not create folder" : "Klasör oluşturulamadı", - "Error fetching URL" : "Adres getirilirken hata", "Rename" : "Yeniden adlandır", "Delete" : "Sil", "Disconnect storage" : "Depolama bağlantısını kes", @@ -68,6 +58,7 @@ "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.", "Your storage is full, files can not be updated or synced anymore!" : "Depolama alanınız dolu, artık dosyalar güncellenmeyecek veya eşitlenmeyecek.", "Your storage is almost full ({usedSpacePercent}%)" : "Depolama alanınız neredeyse dolu (%{usedSpacePercent})", "Encryption 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", @@ -77,6 +68,20 @@ "{dirs} and {files}" : "{dirs} ve {files}", "Favorited" : "Sık kullanılanlara eklendi", "Favorite" : "Sık kullanılan", + "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>", + "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", + "%2$s created %1$s" : "%2$s, %1$s dosyasını oluşturdu", + "%1$s was created in a public folder" : "%1$s herkese açık klasörde oluşturuldu", + "You changed %1$s" : "%1$s dosyasını değiştirdiniz", + "%2$s changed %1$s" : "%2$s, %1$s dosyasını değiştirdi", + "You deleted %1$s" : "%1$s dosyasını sildiniz", + "%2$s deleted %1$s" : "%2$s, %1$s dosyasını sildi", + "You restored %1$s" : "%1$s ögesini geri aldınız", + "%2$s restored %1$s" : "%2$s, %1$s ögesini geri aldı", "%s could not be renamed as it has been deleted" : "%s, silindiği için adlandırılamadı", "%s could not be renamed" : "%s yeniden adlandırılamadı", "Upload (max. %s)" : "Yükle (azami: %s)", @@ -84,6 +89,7 @@ "Maximum upload size" : "Azami yükleme boyutu", "max. possible: " : "mümkün olan en fazla: ", "Save" : "Kaydet", + "Can not be edited from here due to insufficient permissions." : "Yetersiz izinler buradan düzenlenemez.", "Settings" : "Ayarlar", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">Dosyalarınıza WebDAV aracılığıyla erişmek için</a> bu adresi kullanın", @@ -92,7 +98,6 @@ "Text file" : "Metin dosyası", "New folder" : "Yeni klasör", "Folder" : "Klasör", - "From link" : "Bağlantıdan", "Upload" : "Yükle", "Cancel upload" : "Yüklemeyi iptal et", "No files yet" : "Henüz dosya yok", diff --git a/apps/files/l10n/uk.js b/apps/files/l10n/uk.js index 83ac40ff889..3e83db2aa58 100644 --- a/apps/files/l10n/uk.js +++ b/apps/files/l10n/uk.js @@ -4,31 +4,23 @@ OC.L10N.register( "Storage not available" : "Сховище не доступне", "Storage invalid" : "Неправильне сховище", "Unknown error" : "Невідома помилка", - "Could not move %s - File with this name already exists" : "Не вдалося перемістити %s - Файл з таким ім'ям вже існує", + "Could not move %s - File with this name already exists" : "Не вдалося перемістити %s - файл з таким ім'ям вже існує", "Could not move %s" : "Не вдалося перемістити %s", "Permission denied" : "Доступ заборонено", - "File name cannot be empty." : " Ім'я файлу не може бути порожнім.", - "\"%s\" is an invalid file name." : "\"%s\" - це некоректне ім'я файлу.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Невірне ім'я, '\\', '/', '<', '>', ':', '\"', '|', '?' та '*' не дозволені.", "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. Оберіть інше ім'я.", - "Not a valid source" : "Недійсне джерело", - "Server is not allowed to open URLs, please check the server configuration" : "Серверу заборонено відкривати посилання, перевірте конфігурацію", - "The file exceeds your quota by %s" : "Файл перевищує вашу квоту на %s", - "Error while downloading %s to %s" : "Помилка завантаження %s до %s", "Error when creating the file" : "Помилка створення файлу", - "Folder name cannot be empty." : "Ім'я теки не може бути порожнім.", "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" : "Файл успішно вивантажено без помилок.", + "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" : "Не відвантажено жодного файлу", + "The uploaded file was only partially uploaded" : "Файл завантажений лише частково", + "No file was uploaded" : "Не завантажено жодного файлу", "Missing a temporary folder" : "Відсутній тимчасовий каталог", - "Failed to write to disk" : "Невдалося записати на диск", + "Failed to write to disk" : "Помилка запису на диск", "Not enough storage available" : "Місця більше немає", "Upload failed. Could not find uploaded file" : "Завантаження не вдалося. Неможливо знайти завантажений файл.", "Upload failed. Could not get file info." : "Завантаження не вдалося. Неможливо отримати інформацію про файл.", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "Завантаження перервано.", "Could not get result from server." : "Не вдалося отримати результат від сервера.", "File upload is in progress. Leaving the page now will cancel the upload." : "Виконується завантаження файлу. Закриття цієї сторінки приведе до відміни завантаження.", - "URL cannot be empty" : "URL не може бути порожнім", "{new_name} already exists" : "{new_name} вже існує", "Could not create file" : "Не вдалося створити файл", "Could not create folder" : "Не вдалося створити теку", - "Error fetching URL" : "Помилка отримання URL", "Rename" : "Перейменувати", "Delete" : "Видалити", "Disconnect storage" : "Від’єднати сховище", @@ -70,6 +60,7 @@ OC.L10N.register( "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" : "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову", @@ -79,6 +70,20 @@ OC.L10N.register( "{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>", + "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)", @@ -86,6 +91,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>", @@ -94,7 +100,6 @@ OC.L10N.register( "Text file" : "Текстовий файл", "New folder" : "Нова тека", "Folder" : "Тека", - "From link" : "З посилання", "Upload" : "Вивантажити", "Cancel upload" : "Перервати завантаження", "No files yet" : "Немає нічого", @@ -106,6 +111,6 @@ OC.L10N.register( "Files are being scanned, please wait." : "Файли скануються, зачекайте, будь-ласка.", "Currently scanning" : "Триває перевірка", "No favorites" : "Немає обраних", - "Files and folders you mark as favorite will show up here" : "Файли і папки, які ви помітити як улюблені з'явиться тут" + "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 67c13571dd7..cf4eb0eb5cb 100644 --- a/apps/files/l10n/uk.json +++ b/apps/files/l10n/uk.json @@ -2,31 +2,23 @@ "Storage not available" : "Сховище не доступне", "Storage invalid" : "Неправильне сховище", "Unknown error" : "Невідома помилка", - "Could not move %s - File with this name already exists" : "Не вдалося перемістити %s - Файл з таким ім'ям вже існує", + "Could not move %s - File with this name already exists" : "Не вдалося перемістити %s - файл з таким ім'ям вже існує", "Could not move %s" : "Не вдалося перемістити %s", "Permission denied" : "Доступ заборонено", - "File name cannot be empty." : " Ім'я файлу не може бути порожнім.", - "\"%s\" is an invalid file name." : "\"%s\" - це некоректне ім'я файлу.", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Невірне ім'я, '\\', '/', '<', '>', ':', '\"', '|', '?' та '*' не дозволені.", "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. Оберіть інше ім'я.", - "Not a valid source" : "Недійсне джерело", - "Server is not allowed to open URLs, please check the server configuration" : "Серверу заборонено відкривати посилання, перевірте конфігурацію", - "The file exceeds your quota by %s" : "Файл перевищує вашу квоту на %s", - "Error while downloading %s to %s" : "Помилка завантаження %s до %s", "Error when creating the file" : "Помилка створення файлу", - "Folder name cannot be empty." : "Ім'я теки не може бути порожнім.", "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" : "Файл успішно вивантажено без помилок.", + "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" : "Не відвантажено жодного файлу", + "The uploaded file was only partially uploaded" : "Файл завантажений лише частково", + "No file was uploaded" : "Не завантажено жодного файлу", "Missing a temporary folder" : "Відсутній тимчасовий каталог", - "Failed to write to disk" : "Невдалося записати на диск", + "Failed to write to disk" : "Помилка запису на диск", "Not enough storage available" : "Місця більше немає", "Upload failed. Could not find uploaded file" : "Завантаження не вдалося. Неможливо знайти завантажений файл.", "Upload failed. Could not get file info." : "Завантаження не вдалося. Неможливо отримати інформацію про файл.", @@ -41,11 +33,9 @@ "Upload cancelled." : "Завантаження перервано.", "Could not get result from server." : "Не вдалося отримати результат від сервера.", "File upload is in progress. Leaving the page now will cancel the upload." : "Виконується завантаження файлу. Закриття цієї сторінки приведе до відміни завантаження.", - "URL cannot be empty" : "URL не може бути порожнім", "{new_name} already exists" : "{new_name} вже існує", "Could not create file" : "Не вдалося створити файл", "Could not create folder" : "Не вдалося створити теку", - "Error fetching URL" : "Помилка отримання URL", "Rename" : "Перейменувати", "Delete" : "Видалити", "Disconnect storage" : "Від’єднати сховище", @@ -68,6 +58,7 @@ "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" : "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову", @@ -77,6 +68,20 @@ "{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>", + "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)", @@ -84,6 +89,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>", @@ -92,7 +98,6 @@ "Text file" : "Текстовий файл", "New folder" : "Нова тека", "Folder" : "Тека", - "From link" : "З посилання", "Upload" : "Вивантажити", "Cancel upload" : "Перервати завантаження", "No files yet" : "Немає нічого", @@ -104,6 +109,6 @@ "Files are being scanned, please wait." : "Файли скануються, зачекайте, будь-ласка.", "Currently scanning" : "Триває перевірка", "No favorites" : "Немає обраних", - "Files and folders you mark as favorite will show up here" : "Файли і папки, які ви помітити як улюблені з'явиться тут" + "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 19f5c24928c..450b112cc45 100644 --- a/apps/files/l10n/vi.js +++ b/apps/files/l10n/vi.js @@ -4,14 +4,8 @@ OC.L10N.register( "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", - "File name cannot be empty." : "Tên file không được rỗng", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Tên không hợp lệ, '\\', '/', '<', '>', ':', '\"', '|', '?' và '*' thì không được phép dùng.", "The name %s is already used in the folder %s. Please choose a different name." : "Tên %s đã được sử dụng trong thư mục %s. Hãy chọn tên khác.", - "Not a valid source" : "Nguồn không hợp lệ", - "Server is not allowed to open URLs, please check the server configuration" : "Server cấm mở URLs, vui lòng kiểm tra lại cấu hình server", - "Error while downloading %s to %s" : "Lỗi trong trong quá trình tải %s từ %s", "Error when creating the file" : "Lỗi khi tạo file", - "Folder name cannot be empty." : "Tên thư mục không thể để trống", "Error when creating the folder" : "Lỗi khi tạo thư mục", "Unable to set upload directory." : "Không thể thiết lập thư mục tải lên.", "Invalid Token" : "Xác thực không hợp lệ", @@ -34,7 +28,6 @@ OC.L10N.register( "Upload cancelled." : "Hủy tải lên", "Could not get result from server." : "Không thể nhận được kết quả từ máy chủ.", "File upload is in progress. Leaving the page now will cancel the upload." : "Tập tin tải lên đang được xử lý. Nếu bạn rời khỏi trang bây giờ sẽ hủy quá trình này.", - "URL cannot be empty" : "URL không thể để trống", "{new_name} already exists" : "{new_name} đã tồn tại", "Could not create file" : "Không thể tạo file", "Could not create folder" : "Không thể tạo thư mục", @@ -55,6 +48,7 @@ OC.L10N.register( "_%n file_::_%n files_" : ["%n tập tin"], "You don’t have permission to upload or create files here" : "Bạn không có quyền upload hoặc tạo files ở đây", "_Uploading %n file_::_Uploading %n files_" : ["Đang tải lên %n tập tin"], + "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", @@ -74,9 +68,9 @@ OC.L10N.register( "Text file" : "Tập tin văn bản", "New folder" : "Tạo thư mục", "Folder" : "Thư mục", - "From link" : "Từ liên kết", "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", "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 6ed283927c8..c6032f2a472 100644 --- a/apps/files/l10n/vi.json +++ b/apps/files/l10n/vi.json @@ -2,14 +2,8 @@ "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", - "File name cannot be empty." : "Tên file không được rỗng", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "Tên không hợp lệ, '\\', '/', '<', '>', ':', '\"', '|', '?' và '*' thì không được phép dùng.", "The name %s is already used in the folder %s. Please choose a different name." : "Tên %s đã được sử dụng trong thư mục %s. Hãy chọn tên khác.", - "Not a valid source" : "Nguồn không hợp lệ", - "Server is not allowed to open URLs, please check the server configuration" : "Server cấm mở URLs, vui lòng kiểm tra lại cấu hình server", - "Error while downloading %s to %s" : "Lỗi trong trong quá trình tải %s từ %s", "Error when creating the file" : "Lỗi khi tạo file", - "Folder name cannot be empty." : "Tên thư mục không thể để trống", "Error when creating the folder" : "Lỗi khi tạo thư mục", "Unable to set upload directory." : "Không thể thiết lập thư mục tải lên.", "Invalid Token" : "Xác thực không hợp lệ", @@ -32,7 +26,6 @@ "Upload cancelled." : "Hủy tải lên", "Could not get result from server." : "Không thể nhận được kết quả từ máy chủ.", "File upload is in progress. Leaving the page now will cancel the upload." : "Tập tin tải lên đang được xử lý. Nếu bạn rời khỏi trang bây giờ sẽ hủy quá trình này.", - "URL cannot be empty" : "URL không thể để trống", "{new_name} already exists" : "{new_name} đã tồn tại", "Could not create file" : "Không thể tạo file", "Could not create folder" : "Không thể tạo thư mục", @@ -53,6 +46,7 @@ "_%n file_::_%n files_" : ["%n tập tin"], "You don’t have permission to upload or create files here" : "Bạn không có quyền upload hoặc tạo files ở đây", "_Uploading %n file_::_Uploading %n files_" : ["Đang tải lên %n tập tin"], + "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", @@ -72,9 +66,9 @@ "Text file" : "Tập tin văn bản", "New folder" : "Tạo thư mục", "Folder" : "Thư mục", - "From link" : "Từ liên kết", "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", "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 f95fdd8082e..eed18de8a34 100644 --- a/apps/files/l10n/zh_CN.js +++ b/apps/files/l10n/zh_CN.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "无法移动 %s - 同名文件已存在", "Could not move %s" : "无法移动 %s", "Permission denied" : "拒绝访问", - "File name cannot be empty." : "文件名不能为空。", - "\"%s\" is an invalid file name." : "“%s” 是一个无效的文件名。", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "无效名称,'\\', '/', '<', '>', ':', '\"', '|', '?' 和 '*' 不被允许使用。", "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 中存在的名称。请使用其他名称。", - "Not a valid source" : "不是一个可用的源", - "Server is not allowed to open URLs, please check the server configuration" : "服务器没有允许打开URL网址,请检查服务器配置", - "The file exceeds your quota by %s" : "文件超过配额 %s", - "Error while downloading %s to %s" : "当下载 %s 到 %s 时出错", "Error when creating the file" : "创建文件时出错", - "Folder name cannot be empty." : "文件夹名称不能为空", "Error when creating the folder" : "创建文件夹出错", "Unable to set upload directory." : "无法设置上传文件夹。", "Invalid Token" : "无效密匙", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "上传已取消", "Could not get result from server." : "不能从服务器得到结果", "File upload is in progress. Leaving the page now will cancel the upload." : "文件正在上传中。现在离开此页会导致上传动作被取消。", - "URL cannot be empty" : "URL不能为空", "{new_name} already exists" : "{new_name} 已存在", "Could not create file" : "不能创建文件", "Could not create folder" : "不能创建文件夹", - "Error fetching URL" : "获取URL出错", "Rename" : "重命名", "Delete" : "删除", "Disconnect storage" : "断开储存连接", @@ -69,6 +59,7 @@ OC.L10N.register( "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}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "加密应用被启用了,但是你的加密密钥没有初始化,请重新登出登录系统一次。", @@ -78,6 +69,19 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} 和 {files}", "Favorited" : "已收藏", "Favorite" : "收藏", + "A new file or folder has been <strong>created</strong>" : "一个新的文件或文件夹已被<strong>创建</strong>", + "A file or folder has been <strong>changed</strong>" : "一个文件或文件夹已被<strong>修改</strong>", + "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)", @@ -93,7 +97,6 @@ OC.L10N.register( "Text file" : "文本文件", "New folder" : "增加文件夹", "Folder" : "文件夹", - "From link" : "来自链接", "Upload" : "上传", "Cancel upload" : "取消上传", "No files yet" : "尚无文件", diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json index d15062c8c30..c845dc6d11a 100644 --- a/apps/files/l10n/zh_CN.json +++ b/apps/files/l10n/zh_CN.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "无法移动 %s - 同名文件已存在", "Could not move %s" : "无法移动 %s", "Permission denied" : "拒绝访问", - "File name cannot be empty." : "文件名不能为空。", - "\"%s\" is an invalid file name." : "“%s” 是一个无效的文件名。", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "无效名称,'\\', '/', '<', '>', ':', '\"', '|', '?' 和 '*' 不被允许使用。", "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 中存在的名称。请使用其他名称。", - "Not a valid source" : "不是一个可用的源", - "Server is not allowed to open URLs, please check the server configuration" : "服务器没有允许打开URL网址,请检查服务器配置", - "The file exceeds your quota by %s" : "文件超过配额 %s", - "Error while downloading %s to %s" : "当下载 %s 到 %s 时出错", "Error when creating the file" : "创建文件时出错", - "Folder name cannot be empty." : "文件夹名称不能为空", "Error when creating the folder" : "创建文件夹出错", "Unable to set upload directory." : "无法设置上传文件夹。", "Invalid Token" : "无效密匙", @@ -41,11 +33,9 @@ "Upload cancelled." : "上传已取消", "Could not get result from server." : "不能从服务器得到结果", "File upload is in progress. Leaving the page now will cancel the upload." : "文件正在上传中。现在离开此页会导致上传动作被取消。", - "URL cannot be empty" : "URL不能为空", "{new_name} already exists" : "{new_name} 已存在", "Could not create file" : "不能创建文件", "Could not create folder" : "不能创建文件夹", - "Error fetching URL" : "获取URL出错", "Rename" : "重命名", "Delete" : "删除", "Disconnect storage" : "断开储存连接", @@ -67,6 +57,7 @@ "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}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "加密应用被启用了,但是你的加密密钥没有初始化,请重新登出登录系统一次。", @@ -76,6 +67,19 @@ "{dirs} and {files}" : "{dirs} 和 {files}", "Favorited" : "已收藏", "Favorite" : "收藏", + "A new file or folder has been <strong>created</strong>" : "一个新的文件或文件夹已被<strong>创建</strong>", + "A file or folder has been <strong>changed</strong>" : "一个文件或文件夹已被<strong>修改</strong>", + "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)", @@ -91,7 +95,6 @@ "Text file" : "文本文件", "New folder" : "增加文件夹", "Folder" : "文件夹", - "From link" : "来自链接", "Upload" : "上传", "Cancel upload" : "取消上传", "No files yet" : "尚无文件", diff --git a/apps/files/l10n/zh_HK.js b/apps/files/l10n/zh_HK.js index baac6520444..500c1feb9d4 100644 --- a/apps/files/l10n/zh_HK.js +++ b/apps/files/l10n/zh_HK.js @@ -17,6 +17,15 @@ OC.L10N.register( "_Uploading %n file_::_Uploading %n files_" : [""], "_matches '{filter}'_::_match '{filter}'_" : [""], "{dirs} and {files}" : "{dirs} 和 {files}", + "A new file or folder has been <strong>created</strong>" : "新檔案或資料夾已被 <strong> 新增 </strong>", + "A file or folder has been <strong>changed</strong>" : "檔案或資料夾已被 <strong> 變成 </strong>", + "A file or folder has been <strong>deleted</strong>" : "新檔案或資料夾已被 <strong> 刪除 </strong>", + "You created %1$s" : "你新增了%1$s", + "%2$s created %1$s" : "%2$s 新增了 %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", "Save" : "儲存", "Settings" : "設定", "WebDAV" : "WebDAV", diff --git a/apps/files/l10n/zh_HK.json b/apps/files/l10n/zh_HK.json index 9a3da38a217..a882312a203 100644 --- a/apps/files/l10n/zh_HK.json +++ b/apps/files/l10n/zh_HK.json @@ -15,6 +15,15 @@ "_Uploading %n file_::_Uploading %n files_" : [""], "_matches '{filter}'_::_match '{filter}'_" : [""], "{dirs} and {files}" : "{dirs} 和 {files}", + "A new file or folder has been <strong>created</strong>" : "新檔案或資料夾已被 <strong> 新增 </strong>", + "A file or folder has been <strong>changed</strong>" : "檔案或資料夾已被 <strong> 變成 </strong>", + "A file or folder has been <strong>deleted</strong>" : "新檔案或資料夾已被 <strong> 刪除 </strong>", + "You created %1$s" : "你新增了%1$s", + "%2$s created %1$s" : "%2$s 新增了 %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", "Save" : "儲存", "Settings" : "設定", "WebDAV" : "WebDAV", diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js index 817681e828d..eed43d7549a 100644 --- a/apps/files/l10n/zh_TW.js +++ b/apps/files/l10n/zh_TW.js @@ -7,17 +7,9 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "無法移動 %s ,同名的檔案已經存在", "Could not move %s" : "無法移動 %s", "Permission denied" : "存取被拒", - "File name cannot be empty." : "檔名不能為空", - "\"%s\" is an invalid file name." : "%s 是不合法的檔名。", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "檔名不合法,不允許 \\ / < > : \" | ? * 字元", "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 ,請換一個名字", - "Not a valid source" : "不是有效的來源", - "Server is not allowed to open URLs, please check the server configuration" : "伺服器上不允許開啓 URL ,請檢查伺服器設定", - "The file exceeds your quota by %s" : "這個檔案大小超出配額 %s", - "Error while downloading %s to %s" : "下載 %s 到 %s 失敗", "Error when creating the file" : "建立檔案失敗", - "Folder name cannot be empty." : "資料夾名稱不能留空", "Error when creating the folder" : "建立資料夾失敗", "Unable to set upload directory." : "無法設定上傳目錄", "Invalid Token" : "無效的 token", @@ -43,11 +35,9 @@ OC.L10N.register( "Upload cancelled." : "上傳已取消", "Could not get result from server." : "無法從伺服器取回結果", "File upload is in progress. Leaving the page now will cancel the upload." : "檔案上傳中,離開此頁面將會取消上傳。", - "URL cannot be empty" : "URL 不能留空", "{new_name} already exists" : "{new_name} 已經存在", "Could not create file" : "無法建立檔案", "Could not create folder" : "無法建立資料夾", - "Error fetching URL" : "抓取 URL 發生錯誤", "Rename" : "重新命名", "Delete" : "刪除", "Disconnect storage" : "斷開儲存空間連接", @@ -68,6 +58,7 @@ OC.L10N.register( "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}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "檔案加密已啓用,但是您的金鑰尚未初始化,請重新登入一次", @@ -76,6 +67,19 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : [""], "{dirs} and {files}" : "{dirs} 和 {files}", "Favorite" : "我的最愛", + "A new file or folder has been <strong>created</strong>" : "新的檔案或目錄已被 <strong>建立</strong>", + "A file or folder has been <strong>changed</strong>" : "檔案或目錄已被 <strong>變更</strong>", + "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)", @@ -91,7 +95,6 @@ OC.L10N.register( "Text file" : "文字檔", "New folder" : "新資料夾", "Folder" : "資料夾", - "From link" : "從連結", "Upload" : "上傳", "Cancel upload" : "取消上傳", "Upload too large" : "上傳過大", diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json index c043e06b4de..de2f2d82efe 100644 --- a/apps/files/l10n/zh_TW.json +++ b/apps/files/l10n/zh_TW.json @@ -5,17 +5,9 @@ "Could not move %s - File with this name already exists" : "無法移動 %s ,同名的檔案已經存在", "Could not move %s" : "無法移動 %s", "Permission denied" : "存取被拒", - "File name cannot be empty." : "檔名不能為空", - "\"%s\" is an invalid file name." : "%s 是不合法的檔名。", - "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." : "檔名不合法,不允許 \\ / < > : \" | ? * 字元", "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 ,請換一個名字", - "Not a valid source" : "不是有效的來源", - "Server is not allowed to open URLs, please check the server configuration" : "伺服器上不允許開啓 URL ,請檢查伺服器設定", - "The file exceeds your quota by %s" : "這個檔案大小超出配額 %s", - "Error while downloading %s to %s" : "下載 %s 到 %s 失敗", "Error when creating the file" : "建立檔案失敗", - "Folder name cannot be empty." : "資料夾名稱不能留空", "Error when creating the folder" : "建立資料夾失敗", "Unable to set upload directory." : "無法設定上傳目錄", "Invalid Token" : "無效的 token", @@ -41,11 +33,9 @@ "Upload cancelled." : "上傳已取消", "Could not get result from server." : "無法從伺服器取回結果", "File upload is in progress. Leaving the page now will cancel the upload." : "檔案上傳中,離開此頁面將會取消上傳。", - "URL cannot be empty" : "URL 不能留空", "{new_name} already exists" : "{new_name} 已經存在", "Could not create file" : "無法建立檔案", "Could not create folder" : "無法建立資料夾", - "Error fetching URL" : "抓取 URL 發生錯誤", "Rename" : "重新命名", "Delete" : "刪除", "Disconnect storage" : "斷開儲存空間連接", @@ -66,6 +56,7 @@ "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}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "檔案加密已啓用,但是您的金鑰尚未初始化,請重新登入一次", @@ -74,6 +65,19 @@ "_matches '{filter}'_::_match '{filter}'_" : [""], "{dirs} and {files}" : "{dirs} 和 {files}", "Favorite" : "我的最愛", + "A new file or folder has been <strong>created</strong>" : "新的檔案或目錄已被 <strong>建立</strong>", + "A file or folder has been <strong>changed</strong>" : "檔案或目錄已被 <strong>變更</strong>", + "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)", @@ -89,7 +93,6 @@ "Text file" : "文字檔", "New folder" : "新資料夾", "Folder" : "資料夾", - "From link" : "從連結", "Upload" : "上傳", "Cancel upload" : "取消上傳", "Upload too large" : "上傳過大", diff --git a/apps/files/lib/activity.php b/apps/files/lib/activity.php new file mode 100644 index 00000000000..be7acbc3c07 --- /dev/null +++ b/apps/files/lib/activity.php @@ -0,0 +1,278 @@ +<?php +/** + * ownCloud - Files Activity Extension + * + * @author Joas Schilling + * @copyright 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. + */ + +namespace OCA\Files; + +use OC\L10N\Factory; +use OCP\Activity\IExtension; +use OCP\IL10N; +use OCP\IURLGenerator; + +class Activity implements IExtension { + const FILTER_FILES = 'files'; + + const TYPE_SHARE_CREATED = 'file_created'; + const TYPE_SHARE_CHANGED = 'file_changed'; + const TYPE_SHARE_DELETED = 'file_deleted'; + const TYPE_SHARE_RESTORED = 'file_restored'; + + /** @var IL10N */ + protected $l; + + /** @var Factory */ + protected $languageFactory; + + /** @var IURLGenerator */ + protected $URLGenerator; + + /** + * @param Factory $languageFactory + * @param IURLGenerator $URLGenerator + */ + public function __construct(Factory $languageFactory, IURLGenerator $URLGenerator) { + $this->languageFactory = $languageFactory; + $this->URLGenerator = $URLGenerator; + $this->l = $this->getL10N(); + } + + /** + * @param string|null $languageCode + * @return IL10N + */ + protected function getL10N($languageCode = null) { + return $this->languageFactory->get('files', $languageCode); + } + + /** + * The extension can return an array of additional notification types. + * If no additional types are to be added false is to be returned + * + * @param string $languageCode + * @return array|false + */ + 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_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>'), + ]; + } + + /** + * For a given method additional types to be displayed in the settings can be returned. + * In case no additional types are to be added false is to be returned. + * + * @param string $method + * @return array|false + */ + public function getDefaultTypes($method) { + if ($method === 'stream') { + $settings = array(); + $settings[] = self::TYPE_SHARE_CREATED; + $settings[] = self::TYPE_SHARE_CHANGED; + $settings[] = self::TYPE_SHARE_DELETED; + $settings[] = self::TYPE_SHARE_RESTORED; + return $settings; + } + + return false; + } + + /** + * The extension can translate a given message to the requested languages. + * If no translation is available false is to be returned. + * + * @param string $app + * @param string $text + * @param array $params + * @param boolean $stripPath + * @param boolean $highlightParams + * @param string $languageCode + * @return string|false + */ + public function translate($app, $text, $params, $stripPath, $highlightParams, $languageCode) { + if ($app !== 'files') { + return false; + } + + switch ($text) { + case 'created_self': + return (string) $this->l->t('You created %1$s', $params); + case 'created_by': + return (string) $this->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); + case 'changed_self': + return (string) $this->l->t('You changed %1$s', $params); + case 'changed_by': + return (string) $this->l->t('%2$s changed %1$s', $params); + case 'deleted_self': + return (string) $this->l->t('You deleted %1$s', $params); + case 'deleted_by': + return (string) $this->l->t('%2$s deleted %1$s', $params); + case 'restored_self': + return (string) $this->l->t('You restored %1$s', $params); + case 'restored_by': + return (string) $this->l->t('%2$s restored %1$s', $params); + + default: + return false; + } + } + + /** + * The extension can define the type of parameters for translation + * + * Currently known types are: + * * file => will strip away the path of the file and add a tooltip with it + * * username => will add the avatar of the user + * + * @param string $app + * @param string $text + * @return array|false + */ + function getSpecialParameterList($app, $text) { + if ($app === 'files') { + switch ($text) { + case 'created_self': + case 'created_by': + case 'created_public': + case 'changed_self': + case 'changed_by': + case 'deleted_self': + case 'deleted_by': + case 'restored_self': + case 'restored_by': + return [ + 0 => 'file', + 1 => 'username', + ]; + } + } + + return false; + } + + /** + * A string naming the css class for the icon to be used can be returned. + * If no icon is known for the given type false is to be returned. + * + * @param string $type + * @return string|false + */ + public function getTypeIcon($type) { + switch ($type) { + case self::TYPE_SHARE_CHANGED: + return 'icon-change'; + case self::TYPE_SHARE_CREATED: + return 'icon-add-color'; + case self::TYPE_SHARE_DELETED: + return 'icon-delete-color'; + + default: + return false; + } + } + + /** + * The extension can define the parameter grouping by returning the index as integer. + * In case no grouping is required false is to be returned. + * + * @param array $activity + * @return integer|false + */ + public function getGroupParameter($activity) { + if ($activity['app'] === 'files') { + switch ($activity['subject']) { + case 'created_self': + case 'created_by': + case 'changed_self': + case 'changed_by': + case 'deleted_self': + case 'deleted_by': + case 'restored_self': + case 'restored_by': + return 0; + } + } + + return false; + } + + /** + * The extension can define additional navigation entries. The array returned has to contain two keys 'top' + * and 'apps' which hold arrays with the relevant entries. + * If no further entries are to be added false is no be returned. + * + * @return array|false + */ + public function getNavigation() { + return [ + 'apps' => [ + self::FILTER_FILES => [ + 'id' => self::FILTER_FILES, + 'name' => (string) $this->l->t('Files'), + 'url' => $this->URLGenerator->linkToRoute('activity.Activities.showList', ['filter' => self::FILTER_FILES]), + ], + ], + 'top' => [], + ]; + } + + /** + * The extension can check if a customer filter (given by a query string like filter=abc) is valid or not. + * + * @param string $filterValue + * @return boolean + */ + public function isFilterValid($filterValue) { + return $filterValue === self::FILTER_FILES; + } + + /** + * The extension can filter the types based on the filter if required. + * In case no filter is to be applied false is to be returned unchanged. + * + * @param array $types + * @param string $filter + * @return array|false + */ + public function filterNotificationTypes($types, $filter) { + if ($filter === self::FILTER_FILES) { + return array_intersect([ + self::TYPE_SHARE_CREATED, + self::TYPE_SHARE_CHANGED, + self::TYPE_SHARE_DELETED, + self::TYPE_SHARE_RESTORED, + ], $types); + } + return false; + } + + /** + * For a given filter the extension can specify the sql query conditions including parameters for that query. + * In case the extension does not know the filter false is to be returned. + * The query condition and the parameters are to be returned as array with two elements. + * E.g. return array('`app` = ? and `message` like ?', array('mail', 'ownCloud%')); + * + * @param string $filter + * @return array|false + */ + public function getQueryForFilter($filter) { + if ($filter === self::FILTER_FILES) { + return ['`app` = ?', ['files']]; + } + return false; + } +} diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php index 84b1a0f1662..bcca6f0a276 100644 --- a/apps/files/lib/helper.php +++ b/apps/files/lib/helper.php @@ -13,21 +13,26 @@ use OCP\Files\FileInfo; /** * Helper class for manipulating file information */ -class Helper -{ +class Helper { + /** + * @param string $dir + * @return array + * @throws \OCP\Files\NotFoundException + */ public static function buildFileStorageStatistics($dir) { // information about storage capacities $storageInfo = \OC_Helper::getStorageInfo($dir); - $l = new \OC_L10N('files'); $maxUploadFileSize = \OCP\Util::maxUploadFilesize($dir, $storageInfo['free']); $maxHumanFileSize = \OCP\Util::humanFileSize($maxUploadFileSize); $maxHumanFileSize = $l->t('Upload (max. %s)', array($maxHumanFileSize)); - return array('uploadMaxFilesize' => $maxUploadFileSize, - 'maxHumanFilesize' => $maxHumanFileSize, - 'freeSpace' => $storageInfo['free'], - 'usedSpacePercent' => (int)$storageInfo['relative']); + return [ + 'uploadMaxFilesize' => $maxUploadFileSize, + 'maxHumanFilesize' => $maxHumanFileSize, + 'freeSpace' => $storageInfo['free'], + 'usedSpacePercent' => (int)$storageInfo['relative'] + ]; } /** diff --git a/apps/files/settings.php b/apps/files/settings.php deleted file mode 100644 index 8687f013137..00000000000 --- a/apps/files/settings.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php - -/** -* ownCloud - ajax frontend -* -* @author Robin Appelman -* @copyright 2010 Robin Appelman icewind1991@gmail.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/>. -* -*/ - -// Check if we are a user -OCP\User::checkLoggedIn(); - -// Load the files we need -OCP\Util::addStyle( "files", "files" ); -OCP\Util::addscript( "files", "files" ); - -// Load the files -$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : ''; - -$files = array(); -foreach( \OC\Files\Filesystem::getDirectoryContent( $dir ) as $i ) { - $i["date"] = date( $CONFIG_DATEFORMAT, $i["mtime"] ); - $files[] = $i; -} - -// Make breadcrumb -$breadcrumb = array(); -$pathtohere = "/"; -foreach( explode( "/", $dir ) as $i ) { - if( $i != "" ) { - $pathtohere .= "$i/"; - $breadcrumb[] = array( "dir" => $pathtohere, "name" => $i ); - } -} - -// return template -$tmpl = new OCP\Template( "files", "index", "user" ); -$tmpl->assign( 'files', $files ); -$tmpl->assign( "breadcrumb", $breadcrumb ); -$tmpl->printPage(); diff --git a/apps/files/templates/admin.php b/apps/files/templates/admin.php index 6fb99b18add..adf756a12be 100644 --- a/apps/files/templates/admin.php +++ b/apps/files/templates/admin.php @@ -1,18 +1,18 @@ -<?php if($_['uploadChangable']):?> - <?php OCP\Util::addscript('files', 'admin'); ?> <form name="filesForm" class="section" action="#" method="post"> <h2><?php p($l->t('File handling')); ?></h2> <label for="maxUploadSize"><?php p($l->t( 'Maximum upload size' )); ?> </label> - <input type="text" name='maxUploadSize' id="maxUploadSize" value='<?php p($_['uploadMaxFilesize']) ?>'/> + <input type="text" name='maxUploadSize' id="maxUploadSize" value='<?php p($_['uploadMaxFilesize']) ?>' <?php if(!$_['uploadChangable']) { p('disabled'); } ?> /> <?php if($_['displayMaxPossibleUploadSize']):?> (<?php p($l->t('max. possible: ')); p($_['maxPossibleUploadSize']) ?>) <?php endif;?> <br/> <input type="hidden" value="<?php p($_['requesttoken']); ?>" name="requesttoken" /> - <input type="submit" name="submitFilesAdminSettings" id="submitFilesAdminSettings" - value="<?php p($l->t( 'Save' )); ?>"/> + <?php if($_['uploadChangable']): ?> + <input type="submit" name="submitFilesAdminSettings" id="submitFilesAdminSettings" + value="<?php p($l->t( 'Save' )); ?>"/> + <?php else: ?> + <?php p($l->t('Can not be edited from here due to insufficient permissions.')); ?> + <?php endif; ?> </form> - -<?php endif;?> diff --git a/apps/files/templates/list.php b/apps/files/templates/list.php index aa879002baa..f2292bfae36 100644 --- a/apps/files/templates/list.php +++ b/apps/files/templates/list.php @@ -12,9 +12,6 @@ data-type="folder" data-newname="<?php p($l->t('New folder')) ?>"> <p><?php p($l->t('Folder'));?></p> </li> - <li class="icon-link svg" data-type="web"> - <p><?php p($l->t('From link'));?></p> - </li> </ul> </div> <?php endif;?> diff --git a/apps/files/tests/controller/apicontrollertest.php b/apps/files/tests/controller/apicontrollertest.php new file mode 100644 index 00000000000..1be7a749a1b --- /dev/null +++ b/apps/files/tests/controller/apicontrollertest.php @@ -0,0 +1,243 @@ +<?php +/** + * Copyright (c) 2015 Lukas Reschke <lukas@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +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; +use OCP\IRequest; +use OCA\Files\Service\TagService; +use OCP\AppFramework\Http\DataResponse; + +/** + * Class ApiController + * + * @package OCA\Files\Controller + */ +class ApiControllerTest extends TestCase { + /** @var string */ + private $appName = 'files'; + /** @var IRequest */ + private $request; + /** @var TagService */ + private $tagService; + /** @var ApiController */ + private $apiController; + + public function setUp() { + $this->request = $this->getMockBuilder('\OCP\IRequest') + ->disableOriginalConstructor() + ->getMock(); + $this->tagService = $this->getMockBuilder('\OCA\Files\Service\TagService') + ->disableOriginalConstructor() + ->getMock(); + + $this->apiController = new ApiController( + $this->appName, + $this->request, + $this->tagService + ); + } + + public function testGetFilesByTagEmpty() { + $tagName = 'MyTagName'; + $this->tagService->expects($this->once()) + ->method('getFilesByTag') + ->with($this->equalTo([$tagName])) + ->will($this->returnValue([])); + + $expected = new DataResponse(['files' => []]); + $this->assertEquals($expected, $this->apiController->getFilesByTag([$tagName])); + } + + public function testGetFilesByTagSingle() { + $tagName = 'MyTagName'; + $fileInfo = new FileInfo( + '/root.txt', + $this->getMockBuilder('\OC\Files\Storage\Storage') + ->disableOriginalConstructor() + ->getMock(), + '/var/www/root.txt', + [ + 'mtime' => 55, + 'mimetype' => 'application/pdf', + 'size' => 1234, + 'etag' => 'MyEtag', + ], + $this->getMockBuilder('\OCP\Files\Mount\IMountPoint') + ->disableOriginalConstructor() + ->getMock() + ); + $this->tagService->expects($this->once()) + ->method('getFilesByTag') + ->with($this->equalTo([$tagName])) + ->will($this->returnValue([$fileInfo])); + + $expected = new DataResponse([ + 'files' => [ + [ + 'id' => null, + 'parentId' => null, + 'date' => 'January 1, 1970 at 12:00:55 AM GMT+0', + 'mtime' => 55000, + 'icon' => \OCA\Files\Helper::determineIcon($fileInfo), + 'name' => 'root.txt', + 'permissions' => null, + 'mimetype' => 'application/pdf', + 'size' => 1234, + 'type' => 'file', + 'etag' => 'MyEtag', + 'path' => '/', + 'tags' => [ + [ + 'MyTagName' + ] + ], + ], + ], + ]); + $this->assertEquals($expected, $this->apiController->getFilesByTag([$tagName])); + } + + public function testGetFilesByTagMultiple() { + $tagName = 'MyTagName'; + $fileInfo1 = new FileInfo( + '/root.txt', + $this->getMockBuilder('\OC\Files\Storage\Storage') + ->disableOriginalConstructor() + ->getMock(), + '/var/www/root.txt', + [ + 'mtime' => 55, + 'mimetype' => 'application/pdf', + 'size' => 1234, + 'etag' => 'MyEtag', + ], + $this->getMockBuilder('\OCP\Files\Mount\IMountPoint') + ->disableOriginalConstructor() + ->getMock() + ); + $fileInfo2 = new FileInfo( + '/root.txt', + $this->getMockBuilder('\OC\Files\Storage\Storage') + ->disableOriginalConstructor() + ->getMock(), + '/var/www/some/sub.txt', + [ + 'mtime' => 999, + 'mimetype' => 'application/binary', + 'size' => 9876, + 'etag' => 'SubEtag', + ], + $this->getMockBuilder('\OCP\Files\Mount\IMountPoint') + ->disableOriginalConstructor() + ->getMock() + ); + $this->tagService->expects($this->once()) + ->method('getFilesByTag') + ->with($this->equalTo([$tagName])) + ->will($this->returnValue([$fileInfo1, $fileInfo2])); + + $expected = new DataResponse([ + 'files' => [ + [ + 'id' => null, + 'parentId' => null, + 'date' => 'January 1, 1970 at 12:00:55 AM GMT+0', + 'mtime' => 55000, + 'icon' => \OCA\Files\Helper::determineIcon($fileInfo1), + 'name' => 'root.txt', + 'permissions' => null, + 'mimetype' => 'application/pdf', + 'size' => 1234, + 'type' => 'file', + 'etag' => 'MyEtag', + 'path' => '/', + 'tags' => [ + [ + 'MyTagName' + ] + ], + ], + [ + 'id' => null, + 'parentId' => null, + 'date' => 'January 1, 1970 at 12:16:39 AM GMT+0', + 'mtime' => 999000, + 'icon' => \OCA\Files\Helper::determineIcon($fileInfo2), + 'name' => 'root.txt', + 'permissions' => null, + 'mimetype' => 'application/binary', + 'size' => 9876, + 'type' => 'file', + 'etag' => 'SubEtag', + 'path' => '/', + 'tags' => [ + [ + 'MyTagName' + ] + ], + ] + ], + ]); + $this->assertEquals($expected, $this->apiController->getFilesByTag([$tagName])); + } + + public function testUpdateFileTagsEmpty() { + $expected = new DataResponse([]); + $this->assertEquals($expected, $this->apiController->updateFileTags('/path.txt')); + } + + public function testUpdateFileTagsWorking() { + $this->tagService->expects($this->once()) + ->method('updateFileTags') + ->with('/path.txt', ['Tag1', 'Tag2']); + + $expected = new DataResponse([ + 'tags' => [ + 'Tag1', + 'Tag2' + ], + ]); + $this->assertEquals($expected, $this->apiController->updateFileTags('/path.txt', ['Tag1', 'Tag2'])); + } + + public function testUpdateFileTagsNotFoundException() { + $this->tagService->expects($this->once()) + ->method('updateFileTags') + ->with('/path.txt', ['Tag1', 'Tag2']) + ->will($this->throwException(new NotFoundException('My error message'))); + + $expected = new DataResponse(['message' => 'My error message'], Http::STATUS_NOT_FOUND); + $this->assertEquals($expected, $this->apiController->updateFileTags('/path.txt', ['Tag1', 'Tag2'])); + } + + public function testUpdateFileTagsStorageNotAvailableException() { + $this->tagService->expects($this->once()) + ->method('updateFileTags') + ->with('/path.txt', ['Tag1', 'Tag2']) + ->will($this->throwException(new StorageNotAvailableException('My error message'))); + + $expected = new DataResponse(['message' => 'My error message'], Http::STATUS_SERVICE_UNAVAILABLE); + $this->assertEquals($expected, $this->apiController->updateFileTags('/path.txt', ['Tag1', 'Tag2'])); + } + + public function testUpdateFileTagsStorageGenericException() { + $this->tagService->expects($this->once()) + ->method('updateFileTags') + ->with('/path.txt', ['Tag1', 'Tag2']) + ->will($this->throwException(new \Exception('My error message'))); + + $expected = new DataResponse(['message' => 'My error message'], Http::STATUS_NOT_FOUND); + $this->assertEquals($expected, $this->apiController->updateFileTags('/path.txt', ['Tag1', 'Tag2'])); + } +} diff --git a/apps/files/tests/js/breadcrumbSpec.js b/apps/files/tests/js/breadcrumbSpec.js index 30784fd70ad..a26f0176f15 100644 --- a/apps/files/tests/js/breadcrumbSpec.js +++ b/apps/files/tests/js/breadcrumbSpec.js @@ -93,6 +93,31 @@ describe('OCA.Files.BreadCrumb tests', function() { expect($crumbs.eq(3).find('img').length).toEqual(0); expect($crumbs.eq(3).attr('data-dir')).toEqual('/somedir/with space/abc'); }); + it('Renders backslashes as regular directory separator', function() { + var $crumbs; + bc.setDirectory('/somedir\\with/mixed\\separators'); + $crumbs = bc.$el.find('.crumb'); + expect($crumbs.length).toEqual(5); + expect($crumbs.eq(0).find('a').attr('href')).toEqual('/#0'); + expect($crumbs.eq(0).find('img').length).toEqual(1); + expect($crumbs.eq(0).attr('data-dir')).toEqual('/'); + + expect($crumbs.eq(1).find('a').attr('href')).toEqual('/somedir#1'); + expect($crumbs.eq(1).find('img').length).toEqual(0); + expect($crumbs.eq(1).attr('data-dir')).toEqual('/somedir'); + + expect($crumbs.eq(2).find('a').attr('href')).toEqual('/somedir/with#2'); + expect($crumbs.eq(2).find('img').length).toEqual(0); + expect($crumbs.eq(2).attr('data-dir')).toEqual('/somedir/with'); + + expect($crumbs.eq(3).find('a').attr('href')).toEqual('/somedir/with/mixed#3'); + expect($crumbs.eq(3).find('img').length).toEqual(0); + expect($crumbs.eq(3).attr('data-dir')).toEqual('/somedir/with/mixed'); + + expect($crumbs.eq(4).find('a').attr('href')).toEqual('/somedir/with/mixed/separators#4'); + expect($crumbs.eq(4).find('img').length).toEqual(0); + expect($crumbs.eq(4).attr('data-dir')).toEqual('/somedir/with/mixed/separators'); + }); }); describe('Events', function() { it('Calls onClick handler when clicking on a crumb', function() { diff --git a/apps/files/tests/js/fileUploadSpec.js b/apps/files/tests/js/fileUploadSpec.js index 2b4341ef1c3..49b7265ced1 100644 --- a/apps/files/tests/js/fileUploadSpec.js +++ b/apps/files/tests/js/fileUploadSpec.js @@ -110,18 +110,5 @@ describe('OC.Upload tests', function() { 'Not enough free space, you are uploading 5 kB but only 1000 B is left' ); }); - it('does not add file if it has invalid characters', function() { - var result; - testFile.name = 'stars*stars.txt'; - - result = addFile(testFile); - - expect(result).toEqual(false); - expect(failStub.calledOnce).toEqual(true); - expect(failStub.getCall(0).args[1].textStatus).toEqual('invalidcharacters'); - expect(failStub.getCall(0).args[1].errorThrown.substr(0, 12)).toEqual( - 'Invalid name' - ); - }); }); }); diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js index 59e3f8a9d4e..d44365f6351 100644 --- a/apps/files/tests/js/filelistSpec.js +++ b/apps/files/tests/js/filelistSpec.js @@ -1221,7 +1221,7 @@ describe('OCA.Files.FileList tests', function() { "Content-Type": "application/json" }, JSON.stringify(data) - ]); + ]); }); it('fetches file list from server and renders it when reload() is called', function() { fileList.reload(); @@ -1242,6 +1242,10 @@ describe('OCA.Files.FileList tests', function() { expect(OC.parseQueryString(query)).toEqual({'dir': '/anothersubdir', sort: 'name', sortdirection: 'asc'}); fakeServer.respond(); }); + it('converts backslashes to slashes when calling changeDirectory()', function() { + fileList.changeDirectory('/another\\subdir'); + expect(fileList.getCurrentDirectory()).toEqual('/another/subdir'); + }); it('switches to root dir when current directory does not exist', function() { fakeServer.respondWith(/\/index\.php\/apps\/files\/ajax\/list.php\?dir=%2funexist/, [ 404, { diff --git a/apps/files/tests/js/filesSpec.js b/apps/files/tests/js/filesSpec.js index 4f8d5a29318..f20ba03e2f1 100644 --- a/apps/files/tests/js/filesSpec.js +++ b/apps/files/tests/js/filesSpec.js @@ -55,16 +55,6 @@ describe('OCA.Files.Files tests', function() { ' ', '.', '..', - 'back\\slash', - 'sl/ash', - 'lt<lt', - 'gt>gt', - 'col:on', - 'double"quote', - 'pi|pe', - 'dont?ask?questions?', - 'super*star', - 'new\nline', ' ..', '.. ', '. ', diff --git a/apps/files_encryption/ajax/adminrecovery.php b/apps/files_encryption/ajax/adminrecovery.php index 503c15b53a9..fd2d72e112e 100644 --- a/apps/files_encryption/ajax/adminrecovery.php +++ b/apps/files_encryption/ajax/adminrecovery.php @@ -43,7 +43,7 @@ $recoveryKeyId = \OC::$server->getAppConfig()->getValue('files_encryption', 'rec if (isset($_POST['adminEnableRecovery']) && $_POST['adminEnableRecovery'] === '1') { - $return = Helper::adminEnableRecovery($recoveryKeyId, $_POST['recoveryPassword']); + $return = Helper::adminEnableRecovery($recoveryKeyId, (string)$_POST['recoveryPassword']); // Return success or failure if ($return) { @@ -57,7 +57,7 @@ if (isset($_POST['adminEnableRecovery']) && $_POST['adminEnableRecovery'] === '1 isset($_POST['adminEnableRecovery']) && '0' === $_POST['adminEnableRecovery'] ) { - $return = Helper::adminDisableRecovery($_POST['recoveryPassword']); + $return = Helper::adminDisableRecovery((string)$_POST['recoveryPassword']); if ($return) { $successMessage = $l->t('Recovery key successfully disabled'); diff --git a/apps/files_encryption/ajax/changeRecoveryPassword.php b/apps/files_encryption/ajax/changeRecoveryPassword.php index 3d31b12af7c..58472f0fe28 100644 --- a/apps/files_encryption/ajax/changeRecoveryPassword.php +++ b/apps/files_encryption/ajax/changeRecoveryPassword.php @@ -17,9 +17,9 @@ $l = \OC::$server->getL10N('core'); $return = false; -$oldPassword = $_POST['oldPassword']; -$newPassword = $_POST['newPassword']; -$confirmPassword = $_POST['confirmPassword']; +$oldPassword = (string)$_POST['oldPassword']; +$newPassword = (string)$_POST['newPassword']; +$confirmPassword = (string)$_POST['confirmPassword']; //check if both passwords are the same if (empty($_POST['oldPassword'])) { diff --git a/apps/files_encryption/ajax/getMigrationStatus.php b/apps/files_encryption/ajax/getMigrationStatus.php index bb260199b19..ef3eb9fb10d 100644 --- a/apps/files_encryption/ajax/getMigrationStatus.php +++ b/apps/files_encryption/ajax/getMigrationStatus.php @@ -11,8 +11,8 @@ use OCA\Files_Encryption\Util; \OCP\JSON::checkAppEnabled('files_encryption'); -$loginname = isset($_POST['user']) ? $_POST['user'] : ''; -$password = isset($_POST['password']) ? $_POST['password'] : ''; +$loginname = isset($_POST['user']) ? (string)$_POST['user'] : ''; +$password = isset($_POST['password']) ? (string)$_POST['password'] : ''; $migrationStatus = Util::MIGRATION_COMPLETED; diff --git a/apps/files_encryption/ajax/updatePrivateKeyPassword.php b/apps/files_encryption/ajax/updatePrivateKeyPassword.php index 7161b0cff92..8dceb5a5209 100644 --- a/apps/files_encryption/ajax/updatePrivateKeyPassword.php +++ b/apps/files_encryption/ajax/updatePrivateKeyPassword.php @@ -18,8 +18,8 @@ $l = \OC::$server->getL10N('core'); $return = false; $errorMessage = $l->t('Could not update the private key password.'); -$oldPassword = $_POST['oldPassword']; -$newPassword = $_POST['newPassword']; +$oldPassword = (string)$_POST['oldPassword']; +$newPassword = (string)$_POST['newPassword']; $view = new \OC\Files\View('/'); $session = new \OCA\Files_Encryption\Session($view); diff --git a/apps/files_encryption/ajax/userrecovery.php b/apps/files_encryption/ajax/userrecovery.php index e49fee83a36..f42a6a4f477 100644 --- a/apps/files_encryption/ajax/userrecovery.php +++ b/apps/files_encryption/ajax/userrecovery.php @@ -23,7 +23,7 @@ if ( $util = new \OCA\Files_Encryption\Util($view, $userId); // Save recovery preference to DB - $return = $util->setRecoveryForUser($_POST['userEnableRecovery']); + $return = $util->setRecoveryForUser((string)$_POST['userEnableRecovery']); if ($_POST['userEnableRecovery'] === '1') { $util->addRecoveryKeys(); diff --git a/apps/files_encryption/appinfo/app.php b/apps/files_encryption/appinfo/app.php index 842b1a1ff27..b4a562d8629 100644 --- a/apps/files_encryption/appinfo/app.php +++ b/apps/files_encryption/appinfo/app.php @@ -26,6 +26,8 @@ if (!OC_Config::getValue('maintenance', false)) { OCP\User::logout(); } +\OC::$server->getCommandBus()->requireSync('\OC\Command\FileAccess'); + // Register settings scripts OCP\App::registerAdmin('files_encryption', 'settings-admin'); OCP\App::registerPersonal('files_encryption', 'settings-personal'); diff --git a/apps/files_encryption/command/migratekeys.php b/apps/files_encryption/command/migratekeys.php index 200d7367da6..d6db1f70892 100644 --- a/apps/files_encryption/command/migratekeys.php +++ b/apps/files_encryption/command/migratekeys.php @@ -62,11 +62,17 @@ class MigrateKeys extends Command { } $output->writeln("Migrating keys for users on backend <info>$name</info>"); - $users = $backend->getUsers(); - foreach ($users as $user) { + + $limit = 500; + $offset = 0; + do { + $users = $backend->getUsers('', $limit, $offset); + foreach ($users as $user) { $output->writeln(" <info>$user</info>"); $migration->reorganizeFolderStructureForUser($user); - } + } + $offset += $limit; + } while(count($users) >= $limit); } } diff --git a/apps/files_encryption/l10n/az.js b/apps/files_encryption/l10n/az.js index b8836e3611d..d6d243d165b 100644 --- a/apps/files_encryption/l10n/az.js +++ b/apps/files_encryption/l10n/az.js @@ -2,14 +2,52 @@ OC.L10N.register( "files_encryption", { "Unknown error" : "Bəlli olmayan səhv baş verdi", + "Missing recovery key password" : "Bərpa açarının şifrəsi çatışmır", + "Please repeat the recovery key password" : "Xahiş olunur bərpa açarı şifrəsini təkrarlayasınız", + "Repeated recovery key password does not match the provided recovery key password" : "Təkrar daxil edilən bərpa açarı şifrəsi, öncə daxil edilən bərpa açarı ilə üst-üstə düşmür ", "Recovery key successfully enabled" : "Bərpa açarı uğurla aktivləşdi", "Could not disable recovery key. Please check your recovery key password!" : "Geriqaytarılma açarını sondürmək olmur. Xahiş edirik geriqaytarılma key açarınızı yoxlayın.", "Recovery key successfully disabled" : "Bərpa açarı uğurla söndürüldü", + "Please provide the old recovery password" : "Xahiş olunur köhnə bərpa açarını daxil edəsiniz", + "Please provide a new recovery password" : "Xahiş olunur yeni bərpa açarı şifrəsini daxil esəsiniz", + "Please repeat the new recovery password" : "Xahiş olunur yeni bərpa açarını təkrarlayasınız", "Password successfully changed." : "Şifrə uğurla dəyişdirildi.", + "Could not change the password. Maybe the old password was not correct." : "Şifrəni dəyişmək olmur, ola bilər ki, köhnə şifrə düzgün olmayıb.", + "Could not update the private key password." : "Gizli açarın şifrəsini yeniləmək mümkün olmadı.", + "The old password was not correct, please try again." : "Köhnə şifrə düzgün deyildi, xahiş olunur yenidən cəhd edəsiniz.", + "The current log-in password was not correct, please try again." : "Hal-hazırki istifadəçi şifrəsi düzgün deyildi, xahiş olunur yenidən cəhd edəsiniz.", + "Private key password successfully updated." : "Gizli aşar şifrəsi uğurla yeniləndi.", + "File recovery settings updated" : "Fayl bərpa quraşdırmaları yeniləndi", + "Could not update file recovery" : "Fayl bərpasını yeniləmək olmur", + "Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Şifrələmə proqramı inisializasiya edilməyib! Ola bilər ki, şifrələnmə proqramı sizin sessiya müddətində yenidən işə salınıb. Xahiş olunur çıxıb yenidən girişə cəhd edəsiniz ki, şifrələnmə proqramı sizin istifadəçı adı üçün təkrar inisializasiya edilsin. ", "Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Sizin gizli açarınız doğru deyil! Təxmin edilir ki, sizin şifrə %s-dən kənarda dəyişdirilib(misal üçün sizin koorporativ qovluq). Siz öz şifrələnmiş fayllarınıza yetkinizi bərpa etmək üçün, öz şifrənizi şəxsi quraşdırmalarınızda yeniləyə bilərsiniz.", + "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu faylı deşifrə etmək olmur və ola bilər ki, bu paylaşımda olan fayldır. Xahiş olunur faylın sahibinə həmin faylı sizinlə yenidən paylaşım etməsini bildirəsiniz. ", "Unknown error. Please check your system settings or contact your administrator" : "Tanınmayan səhv. Xahiş olunur sistem quraşdırmalarınızı yoxlayın yada öz inzibatçınızla əlaqə yaradın", + "Initial encryption started... This can take some time. Please wait." : "İlkin şifələnmə başlandı... Bu müəyyən vaxt ala bilər. Xahiş olunur gözləyəsiniz.", "Initial encryption running... Please try again later." : "İlkin şifrələnmə işləyir... Xahiş olunur birazdan yenidən müraciət edəsiniz.", "Missing requirements." : "Taləbatlar çatışmır.", - "Go directly to your %spersonal settings%s." : "Birbaşa öz %sşəxsi quraşdırmalarınıza%s gedin." + "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Xahiş olunur ki, PHP-in OpenSSL genişlənməsi yüklənib və düzgün konfiqurasiya edilib. İndiki hal üçün şifrələnmə proqramı dayandırılmışdır.", + "Following users are not set up for encryption:" : "Göstərilən istifadəçilər şifrələnmə üçün quraşdırılmayıb:", + "Go directly to your %spersonal settings%s." : "Birbaşa öz %sşəxsi quraşdırmalarınıza%s gedin.", + "Server-side Encryption" : "Server-tərəf şifrələnmə", + "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", + "Enable recovery key (allow to recover users files in case of password loss):" : "Bərpa açarını aktivləşdir(şifrə itirilməsi hadısələrində, istifadəçi fayllarının bərpasına izin verir)", + "Recovery key password" : "Açar şifrənin bərpa edilməsi", + "Repeat Recovery key password" : "Bərpa açarın şifrəsini təkrar edin", + "Enabled" : "İşə salınıb", + "Disabled" : "Dayandırılıb", + "Change recovery key password:" : "Bərpa açarın şifrəsini dəyişdir:", + "Old Recovery key password" : "Köhnə bərpa açarı şifrəsi", + "New Recovery key password" : "Yeni bərpa açarı şifrəsi", + "Repeat New Recovery key password" : "Yeni bərpa açarı şifrəsini təkrar edin", + "Change Password" : "Şifrəni dəyişdir", + "Your private key password no longer matches your log-in password." : "Sizin gizli açar şifrəsi, artıq giriş adınızla uyğun gəlmir.", + "Set your old private key password to your current log-in password:" : "Köhnə açar şifrənizi, sizin hal-hazırki giriş şifrənizə təyin edin: ", + " If you don't remember your old password you can ask your administrator to recover your files." : "Əgər siz köhnə şifrənizi xatırlamırsınızsa, öz inzibatçınızdan fayllarınızın bərpasını istəyə bilərsiniz.", + "Old log-in password" : "Köhnə giriş şifrəsi", + "Current log-in password" : "Hal-hazırki giriş şifrəsi", + "Update Private Key Password" : "Gizli açar şifrəsini yenilə", + "Enable password recovery:" : "Şifrə bərpasını işə sal:", + "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Bu opsiyanın aktiv edilməsi sizə, şifrənin itdiyi hallarda bütün şifrələnmiş fayllarınıza yetkinin yenidən əldə edilməsinə şərait yaradacaq" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_encryption/l10n/az.json b/apps/files_encryption/l10n/az.json index 94ed72f4ddf..730e79a5084 100644 --- a/apps/files_encryption/l10n/az.json +++ b/apps/files_encryption/l10n/az.json @@ -1,13 +1,51 @@ { "translations": { "Unknown error" : "Bəlli olmayan səhv baş verdi", + "Missing recovery key password" : "Bərpa açarının şifrəsi çatışmır", + "Please repeat the recovery key password" : "Xahiş olunur bərpa açarı şifrəsini təkrarlayasınız", + "Repeated recovery key password does not match the provided recovery key password" : "Təkrar daxil edilən bərpa açarı şifrəsi, öncə daxil edilən bərpa açarı ilə üst-üstə düşmür ", "Recovery key successfully enabled" : "Bərpa açarı uğurla aktivləşdi", "Could not disable recovery key. Please check your recovery key password!" : "Geriqaytarılma açarını sondürmək olmur. Xahiş edirik geriqaytarılma key açarınızı yoxlayın.", "Recovery key successfully disabled" : "Bərpa açarı uğurla söndürüldü", + "Please provide the old recovery password" : "Xahiş olunur köhnə bərpa açarını daxil edəsiniz", + "Please provide a new recovery password" : "Xahiş olunur yeni bərpa açarı şifrəsini daxil esəsiniz", + "Please repeat the new recovery password" : "Xahiş olunur yeni bərpa açarını təkrarlayasınız", "Password successfully changed." : "Şifrə uğurla dəyişdirildi.", + "Could not change the password. Maybe the old password was not correct." : "Şifrəni dəyişmək olmur, ola bilər ki, köhnə şifrə düzgün olmayıb.", + "Could not update the private key password." : "Gizli açarın şifrəsini yeniləmək mümkün olmadı.", + "The old password was not correct, please try again." : "Köhnə şifrə düzgün deyildi, xahiş olunur yenidən cəhd edəsiniz.", + "The current log-in password was not correct, please try again." : "Hal-hazırki istifadəçi şifrəsi düzgün deyildi, xahiş olunur yenidən cəhd edəsiniz.", + "Private key password successfully updated." : "Gizli aşar şifrəsi uğurla yeniləndi.", + "File recovery settings updated" : "Fayl bərpa quraşdırmaları yeniləndi", + "Could not update file recovery" : "Fayl bərpasını yeniləmək olmur", + "Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Şifrələmə proqramı inisializasiya edilməyib! Ola bilər ki, şifrələnmə proqramı sizin sessiya müddətində yenidən işə salınıb. Xahiş olunur çıxıb yenidən girişə cəhd edəsiniz ki, şifrələnmə proqramı sizin istifadəçı adı üçün təkrar inisializasiya edilsin. ", "Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Sizin gizli açarınız doğru deyil! Təxmin edilir ki, sizin şifrə %s-dən kənarda dəyişdirilib(misal üçün sizin koorporativ qovluq). Siz öz şifrələnmiş fayllarınıza yetkinizi bərpa etmək üçün, öz şifrənizi şəxsi quraşdırmalarınızda yeniləyə bilərsiniz.", + "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu faylı deşifrə etmək olmur və ola bilər ki, bu paylaşımda olan fayldır. Xahiş olunur faylın sahibinə həmin faylı sizinlə yenidən paylaşım etməsini bildirəsiniz. ", "Unknown error. Please check your system settings or contact your administrator" : "Tanınmayan səhv. Xahiş olunur sistem quraşdırmalarınızı yoxlayın yada öz inzibatçınızla əlaqə yaradın", + "Initial encryption started... This can take some time. Please wait." : "İlkin şifələnmə başlandı... Bu müəyyən vaxt ala bilər. Xahiş olunur gözləyəsiniz.", "Initial encryption running... Please try again later." : "İlkin şifrələnmə işləyir... Xahiş olunur birazdan yenidən müraciət edəsiniz.", "Missing requirements." : "Taləbatlar çatışmır.", - "Go directly to your %spersonal settings%s." : "Birbaşa öz %sşəxsi quraşdırmalarınıza%s gedin." + "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Xahiş olunur ki, PHP-in OpenSSL genişlənməsi yüklənib və düzgün konfiqurasiya edilib. İndiki hal üçün şifrələnmə proqramı dayandırılmışdır.", + "Following users are not set up for encryption:" : "Göstərilən istifadəçilər şifrələnmə üçün quraşdırılmayıb:", + "Go directly to your %spersonal settings%s." : "Birbaşa öz %sşəxsi quraşdırmalarınıza%s gedin.", + "Server-side Encryption" : "Server-tərəf şifrələnmə", + "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", + "Enable recovery key (allow to recover users files in case of password loss):" : "Bərpa açarını aktivləşdir(şifrə itirilməsi hadısələrində, istifadəçi fayllarının bərpasına izin verir)", + "Recovery key password" : "Açar şifrənin bərpa edilməsi", + "Repeat Recovery key password" : "Bərpa açarın şifrəsini təkrar edin", + "Enabled" : "İşə salınıb", + "Disabled" : "Dayandırılıb", + "Change recovery key password:" : "Bərpa açarın şifrəsini dəyişdir:", + "Old Recovery key password" : "Köhnə bərpa açarı şifrəsi", + "New Recovery key password" : "Yeni bərpa açarı şifrəsi", + "Repeat New Recovery key password" : "Yeni bərpa açarı şifrəsini təkrar edin", + "Change Password" : "Şifrəni dəyişdir", + "Your private key password no longer matches your log-in password." : "Sizin gizli açar şifrəsi, artıq giriş adınızla uyğun gəlmir.", + "Set your old private key password to your current log-in password:" : "Köhnə açar şifrənizi, sizin hal-hazırki giriş şifrənizə təyin edin: ", + " If you don't remember your old password you can ask your administrator to recover your files." : "Əgər siz köhnə şifrənizi xatırlamırsınızsa, öz inzibatçınızdan fayllarınızın bərpasını istəyə bilərsiniz.", + "Old log-in password" : "Köhnə giriş şifrəsi", + "Current log-in password" : "Hal-hazırki giriş şifrəsi", + "Update Private Key Password" : "Gizli açar şifrəsini yenilə", + "Enable password recovery:" : "Şifrə bərpasını işə sal:", + "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Bu opsiyanın aktiv edilməsi sizə, şifrənin itdiyi hallarda bütün şifrələnmiş fayllarınıza yetkinin yenidən əldə edilməsinə şərait yaradacaq" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_encryption/l10n/bs.php b/apps/files_encryption/l10n/bs.php deleted file mode 100644 index 708e045adeb..00000000000 --- a/apps/files_encryption/l10n/bs.php +++ /dev/null @@ -1,5 +0,0 @@ -<?php -$TRANSLATIONS = array( -"Saving..." => "Spašavam..." -); -$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"; diff --git a/apps/files_encryption/l10n/cs_CZ.js b/apps/files_encryption/l10n/cs_CZ.js index 39cebae1018..42e14ca683f 100644 --- a/apps/files_encryption/l10n/cs_CZ.js +++ b/apps/files_encryption/l10n/cs_CZ.js @@ -6,7 +6,7 @@ OC.L10N.register( "Please repeat the recovery key password" : "Zopakujte prosím heslo klíče pro obnovu", "Repeated recovery key password does not match the provided recovery key password" : "Opakované heslo pro obnovu nesouhlasí se zadaným heslem", "Recovery key successfully enabled" : "Záchranný klíč byl úspěšně povolen", - "Could not disable recovery key. Please check your recovery key password!" : "Nelze zakázat záchranný klíč. Zkontrolujte prosím heslo vašeho záchranného klíče!", + "Could not disable recovery key. Please check your recovery key password!" : "Nelze zakázat záchranný klíč. Zkontrolujte prosím heslo svého záchranného klíče!", "Recovery key successfully disabled" : "Záchranný klíč byl úspěšně zakázán", "Please provide the old recovery password" : "Zadejte prosím staré heslo pro obnovu", "Please provide a new recovery password" : "Zadejte prosím nové heslo pro obnovu", @@ -42,8 +42,8 @@ OC.L10N.register( "Repeat New Recovery key password" : "Zopakujte nové heslo klíče pro obnovu", "Change Password" : "Změnit heslo", "Your private key password no longer matches your log-in password." : "Heslo vašeho soukromého klíče se již neshoduje s vaším přihlašovacím heslem.", - "Set your old private key password to your current log-in password:" : "Změňte vaše staré heslo soukromého klíče na stejné, jako je vaše současné přihlašovací heslo:", - " If you don't remember your old password you can ask your administrator to recover your files." : "Pokud si nepamatujete vaše původní heslo, můžete požádat správce o obnovu vašich souborů.", + "Set your old private key password to your current log-in password:" : "Změňte své staré heslo soukromého klíče na stejné, jako je vaše současné přihlašovací heslo:", + " If you don't remember your old password you can ask your administrator to recover your files." : "Pokud si nepamatujete své původní heslo, můžete požádat správce o obnovu vašich souborů.", "Old log-in password" : "Původní přihlašovací heslo", "Current log-in password" : "Aktuální přihlašovací heslo", "Update Private Key Password" : "Změnit heslo soukromého klíče", diff --git a/apps/files_encryption/l10n/cs_CZ.json b/apps/files_encryption/l10n/cs_CZ.json index 3fe4b4f57f1..6e724f8ea2e 100644 --- a/apps/files_encryption/l10n/cs_CZ.json +++ b/apps/files_encryption/l10n/cs_CZ.json @@ -4,7 +4,7 @@ "Please repeat the recovery key password" : "Zopakujte prosím heslo klíče pro obnovu", "Repeated recovery key password does not match the provided recovery key password" : "Opakované heslo pro obnovu nesouhlasí se zadaným heslem", "Recovery key successfully enabled" : "Záchranný klíč byl úspěšně povolen", - "Could not disable recovery key. Please check your recovery key password!" : "Nelze zakázat záchranný klíč. Zkontrolujte prosím heslo vašeho záchranného klíče!", + "Could not disable recovery key. Please check your recovery key password!" : "Nelze zakázat záchranný klíč. Zkontrolujte prosím heslo svého záchranného klíče!", "Recovery key successfully disabled" : "Záchranný klíč byl úspěšně zakázán", "Please provide the old recovery password" : "Zadejte prosím staré heslo pro obnovu", "Please provide a new recovery password" : "Zadejte prosím nové heslo pro obnovu", @@ -40,8 +40,8 @@ "Repeat New Recovery key password" : "Zopakujte nové heslo klíče pro obnovu", "Change Password" : "Změnit heslo", "Your private key password no longer matches your log-in password." : "Heslo vašeho soukromého klíče se již neshoduje s vaším přihlašovacím heslem.", - "Set your old private key password to your current log-in password:" : "Změňte vaše staré heslo soukromého klíče na stejné, jako je vaše současné přihlašovací heslo:", - " If you don't remember your old password you can ask your administrator to recover your files." : "Pokud si nepamatujete vaše původní heslo, můžete požádat správce o obnovu vašich souborů.", + "Set your old private key password to your current log-in password:" : "Změňte své staré heslo soukromého klíče na stejné, jako je vaše současné přihlašovací heslo:", + " If you don't remember your old password you can ask your administrator to recover your files." : "Pokud si nepamatujete své původní heslo, můžete požádat správce o obnovu vašich souborů.", "Old log-in password" : "Původní přihlašovací heslo", "Current log-in password" : "Aktuální přihlašovací heslo", "Update Private Key Password" : "Změnit heslo soukromého klíče", diff --git a/apps/files_encryption/l10n/de.js b/apps/files_encryption/l10n/de.js index e589640bbfb..544d7630833 100644 --- a/apps/files_encryption/l10n/de.js +++ b/apps/files_encryption/l10n/de.js @@ -23,7 +23,7 @@ OC.L10N.register( "Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Dein privater Schlüssel ist ungültig. Möglicher Weise wurde außerhalb von %s Dein Passwort geändert (z.B. in Deinem gemeinsamen Verzeichnis). Du kannst das Passwort Deines privaten Schlüssels in den persönlichen Einstellungen aktualisieren, um wieder an Deine Dateien zu gelangen.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Die Datei kann nicht entschlüsselt werden, da die Datei möglicherweise eine geteilte Datei ist. Bitte frage den Dateibesitzer, ob er die Datei nochmals mit Dir teilt.", "Unknown error. Please check your system settings or contact your administrator" : "Unbekannter Fehler. Bitte prüfe Deine Systemeinstellungen oder kontaktiere Deinen Administrator", - "Initial encryption started... This can take some time. Please wait." : "Initialverschlüsselung gestartet... Dies kann einige Zeit dauern. Bitte warten.", + "Initial encryption started... This can take some time. Please wait." : "Initialverschlüsselung gestartet… Dies kann einige Zeit dauern. Bitte warten.", "Initial encryption running... Please try again later." : "Anfangsverschlüsselung läuft … Bitte versuche es später wieder.", "Missing requirements." : "Fehlende Vorraussetzungen", "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Bitte stelle sicher, dass OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Die Verschlüsselungsanwendung ist vorerst deaktiviert.", diff --git a/apps/files_encryption/l10n/de.json b/apps/files_encryption/l10n/de.json index 99646e4a76a..7ba97e39ac5 100644 --- a/apps/files_encryption/l10n/de.json +++ b/apps/files_encryption/l10n/de.json @@ -21,7 +21,7 @@ "Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Dein privater Schlüssel ist ungültig. Möglicher Weise wurde außerhalb von %s Dein Passwort geändert (z.B. in Deinem gemeinsamen Verzeichnis). Du kannst das Passwort Deines privaten Schlüssels in den persönlichen Einstellungen aktualisieren, um wieder an Deine Dateien zu gelangen.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Die Datei kann nicht entschlüsselt werden, da die Datei möglicherweise eine geteilte Datei ist. Bitte frage den Dateibesitzer, ob er die Datei nochmals mit Dir teilt.", "Unknown error. Please check your system settings or contact your administrator" : "Unbekannter Fehler. Bitte prüfe Deine Systemeinstellungen oder kontaktiere Deinen Administrator", - "Initial encryption started... This can take some time. Please wait." : "Initialverschlüsselung gestartet... Dies kann einige Zeit dauern. Bitte warten.", + "Initial encryption started... This can take some time. Please wait." : "Initialverschlüsselung gestartet… Dies kann einige Zeit dauern. Bitte warten.", "Initial encryption running... Please try again later." : "Anfangsverschlüsselung läuft … Bitte versuche es später wieder.", "Missing requirements." : "Fehlende Vorraussetzungen", "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Bitte stelle sicher, dass OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Die Verschlüsselungsanwendung ist vorerst deaktiviert.", diff --git a/apps/files_encryption/l10n/es.js b/apps/files_encryption/l10n/es.js index 0ca865538eb..22c2b02a8e7 100644 --- a/apps/files_encryption/l10n/es.js +++ b/apps/files_encryption/l10n/es.js @@ -6,31 +6,31 @@ OC.L10N.register( "Please repeat the recovery key password" : "Por favor, repita la contraseña de recuperación", "Repeated recovery key password does not match the provided recovery key password" : "La contraseña de recuperación reintroducida no coincide con la contraseña de recuperación proporcionada.", "Recovery key successfully enabled" : "Se ha habilitado la recuperación de archivos", - "Could not disable recovery key. Please check your recovery key password!" : "No se pudo deshabilitar la clave de recuperación. Por favor compruebe su contraseña!", + "Could not disable recovery key. Please check your recovery key password!" : "No se pudo deshabilitar la clave de recuperación. Por favor, ¡compruebe su contraseña!", "Recovery key successfully disabled" : "Clave de recuperación deshabilitada", "Please provide the old recovery password" : "Por favor, ingrese su antigua contraseña de recuperación", "Please provide a new recovery password" : "Por favor, ingrese una nueva contraseña de recuperación", - "Please repeat the new recovery password" : "Por favor repita su nueva contraseña de recuperacion", + "Please repeat the new recovery password" : "Por favor, repita su nueva contraseña de recuperación", "Password successfully changed." : "Su contraseña ha sido cambiada", "Could not change the password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Compruebe que la contraseña actual sea correcta.", - "Could not update the private key password." : "No se pudo actualizar la contraseña de clave privada.", + "Could not update the private key password." : "No se pudo actualizar la contraseña de la clave privada.", "The old password was not correct, please try again." : "La antigua contraseña no es correcta, por favor intente de nuevo.", "The current log-in password was not correct, please try again." : "La contraseña de inicio de sesión actual no es correcto, por favor intente de nuevo.", "Private key password successfully updated." : "Contraseña de clave privada actualizada con éxito.", "File recovery settings updated" : "Opciones de recuperación de archivos actualizada", "Could not update file recovery" : "No se pudo actualizar la recuperación de archivos", - "Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "¡La aplicación de cifrado no ha sido inicializada! Quizá fue restablecida durante tu sesión. Por favor intenta cerrar la sesión y volver a iniciarla para inicializar la aplicación de cifrado.", - "Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "¡Su clave privada no es válida! Tal vez su contraseña ha sido cambiada desde fuera. de %s (Ej:Su directorio corporativo). Puede actualizar la contraseña de su clave privada en sus opciones personales para recuperar el acceso a sus archivos.", + "Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "¡La aplicación de cifrado no ha sido inicializada! Quizá se restableció durante su sesión. Por favor intente cerrar la sesión y volver a iniciarla para inicializar la aplicación de cifrado.", + "Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "¡Su clave privada no es válida! Tal vez su contraseña ha sido cambiada desde fuera de %s (Ej: su directorio corporativo). Puede actualizar la contraseña de su clave privada en sus opciones personales para recuperar el acceso a sus archivos.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.", - "Unknown error. Please check your system settings or contact your administrator" : "Error desconocido. Revise la configuración de su sistema o contacte a su administrador", - "Initial encryption started... This can take some time. Please wait." : "Encriptación iniciada..... Esto puede tomar un tiempo. Por favor espere.", + "Unknown error. Please check your system settings or contact your administrator" : "Error desconocido. Revise la configuración de su sistema o contacte con su administrador", + "Initial encryption started... This can take some time. Please wait." : "Ha comenzado el cifrado inicial... Esto puede tardar un rato. Por favor, espere.", "Initial encryption running... Please try again later." : "Cifrado inicial en curso... Inténtelo más tarde.", "Missing requirements." : "Requisitos incompletos.", "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Asegúrese de que OpenSSL y la extensión de PHP estén habilitados y configurados correctamente. Por el momento, la aplicación de cifrado ha sido deshabilitada.", "Following users are not set up for encryption:" : "Los siguientes usuarios no han sido configurados para el cifrado:", "Go directly to your %spersonal settings%s." : "Ir directamente a %sOpciones%s.", "Server-side Encryption" : "Cifrado en el servidor", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de crifrado está habilitada pero sus claves no han sido inicializadas, por favor, cierre la sesión y vuelva a iniciarla de nuevo.", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de cifrado está habilitada pero sus claves no se han inicializado, por favor, cierre la sesión y vuelva a iniciarla de nuevo.", "Enable recovery key (allow to recover users files in case of password loss):" : "Habilitar la clave de recuperación (permite recuperar los ficheros del usuario en caso de pérdida de la contraseña);", "Recovery key password" : "Contraseña de clave de recuperación", "Repeat Recovery key password" : "Repite la contraseña de clave de recuperación", @@ -46,7 +46,7 @@ OC.L10N.register( " If you don't remember your old password you can ask your administrator to recover your files." : "Si no recuerda su antigua contraseña puede pedir a su administrador que le recupere sus ficheros.", "Old log-in password" : "Contraseña de acceso antigua", "Current log-in password" : "Contraseña de acceso actual", - "Update Private Key Password" : "Actualizar Contraseña de Clave Privada", + "Update Private Key Password" : "Actualizar contraseña de clave privada", "Enable password recovery:" : "Habilitar la recuperación de contraseña:", "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción le permitirá volver a tener acceso a sus ficheros cifrados en caso de pérdida de contraseña" }, diff --git a/apps/files_encryption/l10n/es.json b/apps/files_encryption/l10n/es.json index 29d109dcd89..f31c325a239 100644 --- a/apps/files_encryption/l10n/es.json +++ b/apps/files_encryption/l10n/es.json @@ -4,31 +4,31 @@ "Please repeat the recovery key password" : "Por favor, repita la contraseña de recuperación", "Repeated recovery key password does not match the provided recovery key password" : "La contraseña de recuperación reintroducida no coincide con la contraseña de recuperación proporcionada.", "Recovery key successfully enabled" : "Se ha habilitado la recuperación de archivos", - "Could not disable recovery key. Please check your recovery key password!" : "No se pudo deshabilitar la clave de recuperación. Por favor compruebe su contraseña!", + "Could not disable recovery key. Please check your recovery key password!" : "No se pudo deshabilitar la clave de recuperación. Por favor, ¡compruebe su contraseña!", "Recovery key successfully disabled" : "Clave de recuperación deshabilitada", "Please provide the old recovery password" : "Por favor, ingrese su antigua contraseña de recuperación", "Please provide a new recovery password" : "Por favor, ingrese una nueva contraseña de recuperación", - "Please repeat the new recovery password" : "Por favor repita su nueva contraseña de recuperacion", + "Please repeat the new recovery password" : "Por favor, repita su nueva contraseña de recuperación", "Password successfully changed." : "Su contraseña ha sido cambiada", "Could not change the password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Compruebe que la contraseña actual sea correcta.", - "Could not update the private key password." : "No se pudo actualizar la contraseña de clave privada.", + "Could not update the private key password." : "No se pudo actualizar la contraseña de la clave privada.", "The old password was not correct, please try again." : "La antigua contraseña no es correcta, por favor intente de nuevo.", "The current log-in password was not correct, please try again." : "La contraseña de inicio de sesión actual no es correcto, por favor intente de nuevo.", "Private key password successfully updated." : "Contraseña de clave privada actualizada con éxito.", "File recovery settings updated" : "Opciones de recuperación de archivos actualizada", "Could not update file recovery" : "No se pudo actualizar la recuperación de archivos", - "Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "¡La aplicación de cifrado no ha sido inicializada! Quizá fue restablecida durante tu sesión. Por favor intenta cerrar la sesión y volver a iniciarla para inicializar la aplicación de cifrado.", - "Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "¡Su clave privada no es válida! Tal vez su contraseña ha sido cambiada desde fuera. de %s (Ej:Su directorio corporativo). Puede actualizar la contraseña de su clave privada en sus opciones personales para recuperar el acceso a sus archivos.", + "Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "¡La aplicación de cifrado no ha sido inicializada! Quizá se restableció durante su sesión. Por favor intente cerrar la sesión y volver a iniciarla para inicializar la aplicación de cifrado.", + "Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "¡Su clave privada no es válida! Tal vez su contraseña ha sido cambiada desde fuera de %s (Ej: su directorio corporativo). Puede actualizar la contraseña de su clave privada en sus opciones personales para recuperar el acceso a sus archivos.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.", - "Unknown error. Please check your system settings or contact your administrator" : "Error desconocido. Revise la configuración de su sistema o contacte a su administrador", - "Initial encryption started... This can take some time. Please wait." : "Encriptación iniciada..... Esto puede tomar un tiempo. Por favor espere.", + "Unknown error. Please check your system settings or contact your administrator" : "Error desconocido. Revise la configuración de su sistema o contacte con su administrador", + "Initial encryption started... This can take some time. Please wait." : "Ha comenzado el cifrado inicial... Esto puede tardar un rato. Por favor, espere.", "Initial encryption running... Please try again later." : "Cifrado inicial en curso... Inténtelo más tarde.", "Missing requirements." : "Requisitos incompletos.", "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Asegúrese de que OpenSSL y la extensión de PHP estén habilitados y configurados correctamente. Por el momento, la aplicación de cifrado ha sido deshabilitada.", "Following users are not set up for encryption:" : "Los siguientes usuarios no han sido configurados para el cifrado:", "Go directly to your %spersonal settings%s." : "Ir directamente a %sOpciones%s.", "Server-side Encryption" : "Cifrado en el servidor", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de crifrado está habilitada pero sus claves no han sido inicializadas, por favor, cierre la sesión y vuelva a iniciarla de nuevo.", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de cifrado está habilitada pero sus claves no se han inicializado, por favor, cierre la sesión y vuelva a iniciarla de nuevo.", "Enable recovery key (allow to recover users files in case of password loss):" : "Habilitar la clave de recuperación (permite recuperar los ficheros del usuario en caso de pérdida de la contraseña);", "Recovery key password" : "Contraseña de clave de recuperación", "Repeat Recovery key password" : "Repite la contraseña de clave de recuperación", @@ -44,7 +44,7 @@ " If you don't remember your old password you can ask your administrator to recover your files." : "Si no recuerda su antigua contraseña puede pedir a su administrador que le recupere sus ficheros.", "Old log-in password" : "Contraseña de acceso antigua", "Current log-in password" : "Contraseña de acceso actual", - "Update Private Key Password" : "Actualizar Contraseña de Clave Privada", + "Update Private Key Password" : "Actualizar contraseña de clave privada", "Enable password recovery:" : "Habilitar la recuperación de contraseña:", "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción le permitirá volver a tener acceso a sus ficheros cifrados en caso de pérdida de contraseña" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_encryption/l10n/fr.js b/apps/files_encryption/l10n/fr.js index 64a600500eb..09ddd64cb40 100644 --- a/apps/files_encryption/l10n/fr.js +++ b/apps/files_encryption/l10n/fr.js @@ -21,7 +21,7 @@ OC.L10N.register( "Could not update file recovery" : "Impossible de mettre à jour les fichiers de récupération", "Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "L'application de chiffrement n'est pas initialisée ! Peut-être que cette application a été réactivée pendant votre session. Veuillez essayer de vous déconnecter et ensuite de vous reconnecter pour initialiser l'application de chiffrement.", "Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée n'est pas valide ! Votre mot de passe a probablement été modifié hors de %s (ex. votre annuaire d'entreprise). Vous pouvez mettre à jour le mot de passe de votre clef privée dans les paramètres personnels pour pouvoir récupérer l'accès à vos fichiers chiffrés.", - "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de déchiffrer ce fichier, il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire de ce fichier de le repartager avec vous.", + "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de déchiffrer ce fichier : il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire du fichier de le partager à nouveau avec vous.", "Unknown error. Please check your system settings or contact your administrator" : "Erreur inconnue. Veuillez vérifier vos paramètres système ou contacter un administrateur.", "Initial encryption started... This can take some time. Please wait." : "Chiffrement initial démarré... Cela peut prendre un certain temps. Veuillez patienter.", "Initial encryption running... Please try again later." : "Chiffrement initial en cours... Veuillez ré-essayer ultérieurement.", diff --git a/apps/files_encryption/l10n/fr.json b/apps/files_encryption/l10n/fr.json index 1c64ab1f3c0..3b439872250 100644 --- a/apps/files_encryption/l10n/fr.json +++ b/apps/files_encryption/l10n/fr.json @@ -19,7 +19,7 @@ "Could not update file recovery" : "Impossible de mettre à jour les fichiers de récupération", "Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "L'application de chiffrement n'est pas initialisée ! Peut-être que cette application a été réactivée pendant votre session. Veuillez essayer de vous déconnecter et ensuite de vous reconnecter pour initialiser l'application de chiffrement.", "Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée n'est pas valide ! Votre mot de passe a probablement été modifié hors de %s (ex. votre annuaire d'entreprise). Vous pouvez mettre à jour le mot de passe de votre clef privée dans les paramètres personnels pour pouvoir récupérer l'accès à vos fichiers chiffrés.", - "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de déchiffrer ce fichier, il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire de ce fichier de le repartager avec vous.", + "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de déchiffrer ce fichier : il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire du fichier de le partager à nouveau avec vous.", "Unknown error. Please check your system settings or contact your administrator" : "Erreur inconnue. Veuillez vérifier vos paramètres système ou contacter un administrateur.", "Initial encryption started... This can take some time. Please wait." : "Chiffrement initial démarré... Cela peut prendre un certain temps. Veuillez patienter.", "Initial encryption running... Please try again later." : "Chiffrement initial en cours... Veuillez ré-essayer ultérieurement.", diff --git a/apps/files_encryption/l10n/gl.js b/apps/files_encryption/l10n/gl.js index 6e9983159fd..bd44dc65bc7 100644 --- a/apps/files_encryption/l10n/gl.js +++ b/apps/files_encryption/l10n/gl.js @@ -10,7 +10,7 @@ OC.L10N.register( "Recovery key successfully disabled" : "Desactivada satisfactoriamente a chave de recuperación", "Please provide the old recovery password" : "Introduza a chave de recuperación antiga", "Please provide a new recovery password" : "Introduza a nova chave de recuperación", - "Please repeat the new recovery password" : "Por favor repita a nova chave de recuperación", + "Please repeat the new recovery password" : "Repita a nova chave de recuperación", "Password successfully changed." : "O contrasinal foi cambiado satisfactoriamente", "Could not change the password. Maybe the old password was not correct." : "Non foi posíbel cambiar o contrasinal. Probabelmente o contrasinal antigo non é o correcto.", "Could not update the private key password." : "Non foi posíbel actualizar o contrasinal da chave privada.", @@ -26,11 +26,11 @@ OC.L10N.register( "Initial encryption started... This can take some time. Please wait." : "Comezou o cifrado inicial... Isto pode levar bastante tempo. Agarde.", "Initial encryption running... Please try again later." : "O cifrado inicial está en execución... Tenteo máis tarde.", "Missing requirements." : "Non se cumpren os requisitos.", - "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Asegúrese de que está instalado o OpenSSL xunto coa extensión PHP e que estean activados e configurados correctamente. Polo de agora foi desactivado a aplicación de cifrado.", + "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Asegúrese de que está instalado o OpenSSL xunto coa extensión PHP e que estean activados e configurados correctamente. Polo de agora foi desactivada a aplicación de cifrado.", "Following users are not set up for encryption:" : "Os seguintes usuarios non teñen configuración para o cifrado:", "Go directly to your %spersonal settings%s." : "Vaia directamente aos seus %saxustes persoais%s.", "Server-side Encryption" : "Cifrado na parte do servidor", - "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 inicializadas, saia da sesión e volva a acceder de novo", + "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Activar a chave de recuperación (permitirá recuperar os ficheiros dos usuarios no caso de perda do contrasinal):", "Recovery key password" : "Contrasinal da chave de recuperación", "Repeat Recovery key password" : "Repita o contrasinal da chave de recuperación", diff --git a/apps/files_encryption/l10n/gl.json b/apps/files_encryption/l10n/gl.json index 6295f339253..a1a8e606f1c 100644 --- a/apps/files_encryption/l10n/gl.json +++ b/apps/files_encryption/l10n/gl.json @@ -8,7 +8,7 @@ "Recovery key successfully disabled" : "Desactivada satisfactoriamente a chave de recuperación", "Please provide the old recovery password" : "Introduza a chave de recuperación antiga", "Please provide a new recovery password" : "Introduza a nova chave de recuperación", - "Please repeat the new recovery password" : "Por favor repita a nova chave de recuperación", + "Please repeat the new recovery password" : "Repita a nova chave de recuperación", "Password successfully changed." : "O contrasinal foi cambiado satisfactoriamente", "Could not change the password. Maybe the old password was not correct." : "Non foi posíbel cambiar o contrasinal. Probabelmente o contrasinal antigo non é o correcto.", "Could not update the private key password." : "Non foi posíbel actualizar o contrasinal da chave privada.", @@ -24,11 +24,11 @@ "Initial encryption started... This can take some time. Please wait." : "Comezou o cifrado inicial... Isto pode levar bastante tempo. Agarde.", "Initial encryption running... Please try again later." : "O cifrado inicial está en execución... Tenteo máis tarde.", "Missing requirements." : "Non se cumpren os requisitos.", - "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Asegúrese de que está instalado o OpenSSL xunto coa extensión PHP e que estean activados e configurados correctamente. Polo de agora foi desactivado a aplicación de cifrado.", + "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Asegúrese de que está instalado o OpenSSL xunto coa extensión PHP e que estean activados e configurados correctamente. Polo de agora foi desactivada a aplicación de cifrado.", "Following users are not set up for encryption:" : "Os seguintes usuarios non teñen configuración para o cifrado:", "Go directly to your %spersonal settings%s." : "Vaia directamente aos seus %saxustes persoais%s.", "Server-side Encryption" : "Cifrado na parte do servidor", - "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 inicializadas, saia da sesión e volva a acceder de novo", + "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Activar a chave de recuperación (permitirá recuperar os ficheiros dos usuarios no caso de perda do contrasinal):", "Recovery key password" : "Contrasinal da chave de recuperación", "Repeat Recovery key password" : "Repita o contrasinal da chave de recuperación", diff --git a/apps/files_encryption/l10n/id.js b/apps/files_encryption/l10n/id.js index 64b9cfe5d3b..c9137a51a11 100644 --- a/apps/files_encryption/l10n/id.js +++ b/apps/files_encryption/l10n/id.js @@ -13,6 +13,9 @@ OC.L10N.register( "Please repeat the new recovery password" : "Silakan ulangi sandi pemulihan baru", "Password successfully changed." : "Sandi berhasil diubah", "Could not change the password. Maybe the old password was not correct." : "Tidak dapat mengubah sandi. Kemungkinan sandi lama yang dimasukkan salah.", + "Could not update the private key password." : "Tidak dapat memperbarui sandi kunci private.", + "The old password was not correct, please try again." : "Sandi lama salah, mohon coba lagi.", + "The current log-in password was not correct, please try again." : "Sandi masuk saat ini salah, mohon coba lagi.", "Private key password successfully updated." : "Sandi kunci privat berhasil diperbarui.", "File recovery settings updated" : "Pengaturan pemulihan berkas diperbarui", "Could not update file recovery" : "Tidak dapat memperbarui pemulihan berkas", @@ -23,8 +26,10 @@ OC.L10N.register( "Initial encryption started... This can take some time. Please wait." : "Enskripsi awal dijalankan... Ini dapat memakan waktu. Silakan tunggu.", "Initial encryption running... Please try again later." : "Enkripsi awal sedang berjalan... Sialakn coba lagi nanti.", "Missing requirements." : "Persyaratan tidak terpenuhi.", + "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Mohon pastikan bahwa OpenSSL bersama ekstensi PHP diaktifkan dan terkonfigurasi dengan benar. Untuk sekarang, aplikasi enkripsi akan dinonaktifkan.", "Following users are not set up for encryption:" : "Pengguna berikut belum diatur untuk enkripsi:", "Go directly to your %spersonal settings%s." : "Langsung ke %spengaturan pribadi%s Anda.", + "Server-side Encryption" : "Enkripsi Sisi-Server", "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Aktifkan kunci pemulihan (memungkinkan pengguna untuk memulihkan berkas dalam kasus kehilangan sandi):", "Recovery key password" : "Sandi kunci pemulihan", @@ -35,13 +40,13 @@ OC.L10N.register( "Old Recovery key password" : "Sandi kunci Pemulihan Lama", "New Recovery key password" : "Sandi kunci Pemulihan Baru", "Repeat New Recovery key password" : "Ulangi sandi kunci Pemulihan baru", - "Change Password" : "Ubah sandi", + "Change Password" : "Ubah Sandi", "Your private key password no longer matches your log-in password." : "Sandi kunci private Anda tidak lagi cocok dengan sandi masuk Anda.", "Set your old private key password to your current log-in password:" : "Setel sandi kunci private Anda untuk sandi masuk Anda saat ini:", " If you don't remember your old password you can ask your administrator to recover your files." : "Jika Anda tidak ingat sandi lama, Anda dapat meminta administrator Anda untuk memulihkan berkas.", "Old log-in password" : "Sandi masuk yang lama", "Current log-in password" : "Sandi masuk saat ini", - "Update Private Key Password" : "Perbarui Sandi Kunci Privat", + "Update Private Key Password" : "Perbarui Sandi Kunci Private", "Enable password recovery:" : "Aktifkan sandi pemulihan:", "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Mengaktifkan opsi ini memungkinkan Anda untuk mendapatkan kembali akses ke berkas terenkripsi Anda dalam kasus kehilangan sandi" }, diff --git a/apps/files_encryption/l10n/id.json b/apps/files_encryption/l10n/id.json index 5ed73a38b46..5d77cef0b24 100644 --- a/apps/files_encryption/l10n/id.json +++ b/apps/files_encryption/l10n/id.json @@ -11,6 +11,9 @@ "Please repeat the new recovery password" : "Silakan ulangi sandi pemulihan baru", "Password successfully changed." : "Sandi berhasil diubah", "Could not change the password. Maybe the old password was not correct." : "Tidak dapat mengubah sandi. Kemungkinan sandi lama yang dimasukkan salah.", + "Could not update the private key password." : "Tidak dapat memperbarui sandi kunci private.", + "The old password was not correct, please try again." : "Sandi lama salah, mohon coba lagi.", + "The current log-in password was not correct, please try again." : "Sandi masuk saat ini salah, mohon coba lagi.", "Private key password successfully updated." : "Sandi kunci privat berhasil diperbarui.", "File recovery settings updated" : "Pengaturan pemulihan berkas diperbarui", "Could not update file recovery" : "Tidak dapat memperbarui pemulihan berkas", @@ -21,8 +24,10 @@ "Initial encryption started... This can take some time. Please wait." : "Enskripsi awal dijalankan... Ini dapat memakan waktu. Silakan tunggu.", "Initial encryption running... Please try again later." : "Enkripsi awal sedang berjalan... Sialakn coba lagi nanti.", "Missing requirements." : "Persyaratan tidak terpenuhi.", + "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Mohon pastikan bahwa OpenSSL bersama ekstensi PHP diaktifkan dan terkonfigurasi dengan benar. Untuk sekarang, aplikasi enkripsi akan dinonaktifkan.", "Following users are not set up for encryption:" : "Pengguna berikut belum diatur untuk enkripsi:", "Go directly to your %spersonal settings%s." : "Langsung ke %spengaturan pribadi%s Anda.", + "Server-side Encryption" : "Enkripsi Sisi-Server", "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Aktifkan kunci pemulihan (memungkinkan pengguna untuk memulihkan berkas dalam kasus kehilangan sandi):", "Recovery key password" : "Sandi kunci pemulihan", @@ -33,13 +38,13 @@ "Old Recovery key password" : "Sandi kunci Pemulihan Lama", "New Recovery key password" : "Sandi kunci Pemulihan Baru", "Repeat New Recovery key password" : "Ulangi sandi kunci Pemulihan baru", - "Change Password" : "Ubah sandi", + "Change Password" : "Ubah Sandi", "Your private key password no longer matches your log-in password." : "Sandi kunci private Anda tidak lagi cocok dengan sandi masuk Anda.", "Set your old private key password to your current log-in password:" : "Setel sandi kunci private Anda untuk sandi masuk Anda saat ini:", " If you don't remember your old password you can ask your administrator to recover your files." : "Jika Anda tidak ingat sandi lama, Anda dapat meminta administrator Anda untuk memulihkan berkas.", "Old log-in password" : "Sandi masuk yang lama", "Current log-in password" : "Sandi masuk saat ini", - "Update Private Key Password" : "Perbarui Sandi Kunci Privat", + "Update Private Key Password" : "Perbarui Sandi Kunci Private", "Enable password recovery:" : "Aktifkan sandi pemulihan:", "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Mengaktifkan opsi ini memungkinkan Anda untuk mendapatkan kembali akses ke berkas terenkripsi Anda dalam kasus kehilangan sandi" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/files_encryption/l10n/ms_MY.php b/apps/files_encryption/l10n/ms_MY.php deleted file mode 100644 index f73e61c1674..00000000000 --- a/apps/files_encryption/l10n/ms_MY.php +++ /dev/null @@ -1,5 +0,0 @@ -<?php -$TRANSLATIONS = array( -"Saving..." => "Simpan..." -); -$PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/files_encryption/l10n/nb_NO.js b/apps/files_encryption/l10n/nb_NO.js index a4fde8b8614..ff52350f98a 100644 --- a/apps/files_encryption/l10n/nb_NO.js +++ b/apps/files_encryption/l10n/nb_NO.js @@ -29,6 +29,7 @@ OC.L10N.register( "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Vennligst se til at OpenSSL sammen med PHP-utvidelsen er aktivert og riktig konfigurert. Krypterings-appen er foreløpig deaktivert.", "Following users are not set up for encryption:" : "Følgende brukere er ikke satt opp for kryptering:", "Go directly to your %spersonal settings%s." : "Gå direkte til dine %spersonlige innstillinger%s.", + "Server-side Encryption" : "Serverkryptering", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Aktiver gjenopprettingsnøkkel (tillat å gjenopprette brukerfiler i tilfelle tap av passord):", "Recovery key password" : "Passord for gjenopprettingsnøkkel", diff --git a/apps/files_encryption/l10n/nb_NO.json b/apps/files_encryption/l10n/nb_NO.json index 8bd4598d007..3aa4ec9e868 100644 --- a/apps/files_encryption/l10n/nb_NO.json +++ b/apps/files_encryption/l10n/nb_NO.json @@ -27,6 +27,7 @@ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Vennligst se til at OpenSSL sammen med PHP-utvidelsen er aktivert og riktig konfigurert. Krypterings-appen er foreløpig deaktivert.", "Following users are not set up for encryption:" : "Følgende brukere er ikke satt opp for kryptering:", "Go directly to your %spersonal settings%s." : "Gå direkte til dine %spersonlige innstillinger%s.", + "Server-side Encryption" : "Serverkryptering", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Aktiver gjenopprettingsnøkkel (tillat å gjenopprette brukerfiler i tilfelle tap av passord):", "Recovery key password" : "Passord for gjenopprettingsnøkkel", diff --git a/apps/files_encryption/l10n/oc.php b/apps/files_encryption/l10n/oc.php deleted file mode 100644 index 87d1e6ceffb..00000000000 --- a/apps/files_encryption/l10n/oc.php +++ /dev/null @@ -1,5 +0,0 @@ -<?php -$TRANSLATIONS = array( -"Saving..." => "Enregistra..." -); -$PLURAL_FORMS = "nplurals=2; plural=(n > 1);"; diff --git a/apps/files_encryption/l10n/pt_PT.js b/apps/files_encryption/l10n/pt_PT.js index 574a53e8f75..7d392923094 100644 --- a/apps/files_encryption/l10n/pt_PT.js +++ b/apps/files_encryption/l10n/pt_PT.js @@ -11,7 +11,7 @@ OC.L10N.register( "Please provide the old recovery password" : "Escreva a palavra-passe de recuperação antiga", "Please provide a new recovery password" : "Escreva a nova palavra-passe de recuperação", "Please repeat the new recovery password" : "Escreva de novo a nova palavra-passe de recuperação", - "Password successfully changed." : "Senha alterada com sucesso.", + "Password successfully changed." : "Palavra-passe alterada com sucesso.", "Could not change the password. Maybe the old password was not correct." : "Não foi possível alterar a senha. Possivelmente a senha antiga não está correta.", "Could not update the private key password." : "Não foi possível atualizar a senha da chave privada.", "The old password was not correct, please try again." : "A senha antiga não estava correta, por favor, tente de novo.", @@ -26,8 +26,10 @@ OC.L10N.register( "Initial encryption started... This can take some time. Please wait." : "A encriptação inicial foi iniciada ... Esta pode demorar algum tempo. Aguarde, por favor.", "Initial encryption running... Please try again later." : "A encriptação inicial está em execução ... Por favor, tente de novo mais tarde.", "Missing requirements." : "Requisitos em falta.", + "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, certifique-se de que o OpenSSL, em conjunto com a extensão PHP, está ativado e configurado corretamente. Por agora, a aplicação de encriptação está desactivada.", "Following users are not set up for encryption:" : "Os utilizadores seguintes não estão configurados para encriptação:", "Go directly to your %spersonal settings%s." : "Ir diretamente para as %sdefinições pessoais%s.", + "Server-side Encryption" : "Encriptação do lado do Servidor", "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Ativar a chave de recuperação (permite recuperar os ficheiros do utilizador, se perder a senha):", "Recovery key password" : "Senha da chave de recuperação", diff --git a/apps/files_encryption/l10n/pt_PT.json b/apps/files_encryption/l10n/pt_PT.json index 98314896c5b..5f7d0a22f34 100644 --- a/apps/files_encryption/l10n/pt_PT.json +++ b/apps/files_encryption/l10n/pt_PT.json @@ -9,7 +9,7 @@ "Please provide the old recovery password" : "Escreva a palavra-passe de recuperação antiga", "Please provide a new recovery password" : "Escreva a nova palavra-passe de recuperação", "Please repeat the new recovery password" : "Escreva de novo a nova palavra-passe de recuperação", - "Password successfully changed." : "Senha alterada com sucesso.", + "Password successfully changed." : "Palavra-passe alterada com sucesso.", "Could not change the password. Maybe the old password was not correct." : "Não foi possível alterar a senha. Possivelmente a senha antiga não está correta.", "Could not update the private key password." : "Não foi possível atualizar a senha da chave privada.", "The old password was not correct, please try again." : "A senha antiga não estava correta, por favor, tente de novo.", @@ -24,8 +24,10 @@ "Initial encryption started... This can take some time. Please wait." : "A encriptação inicial foi iniciada ... Esta pode demorar algum tempo. Aguarde, por favor.", "Initial encryption running... Please try again later." : "A encriptação inicial está em execução ... Por favor, tente de novo mais tarde.", "Missing requirements." : "Requisitos em falta.", + "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Por favor, certifique-se de que o OpenSSL, em conjunto com a extensão PHP, está ativado e configurado corretamente. Por agora, a aplicação de encriptação está desactivada.", "Following users are not set up for encryption:" : "Os utilizadores seguintes não estão configurados para encriptação:", "Go directly to your %spersonal settings%s." : "Ir diretamente para as %sdefinições pessoais%s.", + "Server-side Encryption" : "Encriptação do lado do Servidor", "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Ativar a chave de recuperação (permite recuperar os ficheiros do utilizador, se perder a senha):", "Recovery key password" : "Senha da chave de recuperação", diff --git a/apps/files_encryption/l10n/sl.js b/apps/files_encryption/l10n/sl.js index e944a68704d..529e5652187 100644 --- a/apps/files_encryption/l10n/sl.js +++ b/apps/files_encryption/l10n/sl.js @@ -29,6 +29,7 @@ OC.L10N.register( "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Preverite, ali je OpenSSL z ustrezno razširitvijo PHP omogočen in ustrezno nastavljen. Trenutno je šifriranje onemogočeno.", "Following users are not set up for encryption:" : "Navedeni uporabniki še nimajo nastavljenega šifriranja:", "Go directly to your %spersonal settings%s." : "Oglejte si %sosebne nastavitve%s.", + "Server-side Encryption" : "Strežniško šifriranje", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Omogoči ključ za obnovitev datotek (v primeru izgube gesla):", "Recovery key password" : "Ključ za obnovitev gesla", diff --git a/apps/files_encryption/l10n/sl.json b/apps/files_encryption/l10n/sl.json index 504f25ad0b4..6c3ffd97b89 100644 --- a/apps/files_encryption/l10n/sl.json +++ b/apps/files_encryption/l10n/sl.json @@ -27,6 +27,7 @@ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Preverite, ali je OpenSSL z ustrezno razširitvijo PHP omogočen in ustrezno nastavljen. Trenutno je šifriranje onemogočeno.", "Following users are not set up for encryption:" : "Navedeni uporabniki še nimajo nastavljenega šifriranja:", "Go directly to your %spersonal settings%s." : "Oglejte si %sosebne nastavitve%s.", + "Server-side Encryption" : "Strežniško šifriranje", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Omogoči ključ za obnovitev datotek (v primeru izgube gesla):", "Recovery key password" : "Ključ za obnovitev gesla", diff --git a/apps/files_encryption/l10n/sr.js b/apps/files_encryption/l10n/sr.js index d6f89d85ca6..dec2970e359 100644 --- a/apps/files_encryption/l10n/sr.js +++ b/apps/files_encryption/l10n/sr.js @@ -1,6 +1,53 @@ OC.L10N.register( "files_encryption", { - "Encryption" : "Шифровање" + "Unknown error" : "Непозната грешка", + "Missing recovery key password" : "Недостаје лозинка кључа за опоравак", + "Please repeat the recovery key password" : "Поновите лозинку кључа за опоравак", + "Repeated recovery key password does not match the provided recovery key password" : "Поновљена лозинка кључа за опоравак се не поклапа", + "Recovery key successfully enabled" : "Кључ за опоравак успешно укључен", + "Could not disable recovery key. Please check your recovery key password!" : "Не могу да искључим кључ за опоравак. Проверите лозинку!", + "Recovery key successfully disabled" : "Кључ за опоравак успешно искључен", + "Please provide the old recovery password" : "Унесите стару лозинку опоравка", + "Please provide a new recovery password" : "Унесите нову лозинку опоравка", + "Please repeat the new recovery password" : "Поновите нову лозинку опоравка", + "Password successfully changed." : "Лозинка успешно промењена.", + "Could not change the password. Maybe the old password was not correct." : "Не могу да променим лозинку. Можда стара лозинка није исправна.", + "Could not update the private key password." : "Не могу да ажурирам лозинку личног кључа.", + "The old password was not correct, please try again." : "Стара лозинка није исправна. Покушајте поново.", + "The current log-in password was not correct, please try again." : "Лозинка за пријаву није исправна. Покушајте поново.", + "Private key password successfully updated." : "Лозинка личног кључа је успешно ажурирана.", + "File recovery settings updated" : "Поставке опоравка фајла су ажуриране", + "Could not update file recovery" : "Не могу да ажурирам опоравак фајла", + "Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Апликација шифровања није иницијализована! Можда је поновно покренута током сесије. Покушајте да се одјавите па пријавите да се иницијализује поново.", + "Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Ваш лични кључ није исправан! Вероватно сте лозинку променили изван %s (нпр. ваш корпоративни директоријум). Лозинку личног кључа можете ажурирати у личним поставкама да бисте опоравили приступ вашим шифрованим фајловима.", + "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да дешифрујем фајл. Вероватно је то дељен фајл. Затражите од власника фајла да га поново подели са вама.", + "Unknown error. Please check your system settings or contact your administrator" : "Непозната грешка. Проверите поставке вашег система или контактирајте администратора.", + "Initial encryption started... This can take some time. Please wait." : "Почетно шифровање је покренуто... Ово може потрајати. Молим, сачекајте.", + "Initial encryption running... Please try again later." : "Почетно шифровање ради... Покушајте касније.", + "Missing requirements." : "Захтеви нису испуњени.", + "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Проверите да је ОпенССЛ заједно са ПХП проширењем, укључен и прописно подешен. За сада, шифровање је искључено.", + "Following users are not set up for encryption:" : "Следећи корисници нису подешени за шифровање:", + "Go directly to your %spersonal settings%s." : "Идите право на ваше %sличне поставке%s.", + "Server-side Encryption" : "Шифровање на страни сервера", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Апликација шифровања је укључена али ваши кључеви нису иницијализовани. Одјавите се и поново се пријавите.", + "Enable recovery key (allow to recover users files in case of password loss):" : "Омогући кључ за опоравак (омогућава опоравак корисничких фајлова у случају губитка лозинке):", + "Recovery key password" : "Лозинка кључа за опоравак", + "Repeat Recovery key password" : "Поновите лозинку кључа за опоравак", + "Enabled" : "укључено", + "Disabled" : "искључено", + "Change recovery key password:" : "Измена лозинке кључа опоравка:", + "Old Recovery key password" : "Стара лозинка кључа опоравка", + "New Recovery key password" : "Нова лозинка кључа опоравка", + "Repeat New Recovery key password" : "Поновите лозинку кључа опоравка", + "Change Password" : "Измени лозинку", + "Your private key password no longer matches your log-in password." : "Лозинка вашег личног кључа више није иста као ваша лозинка за пријаву.", + "Set your old private key password to your current log-in password:" : "Промените ваш стари приватни кључ-лозинку у вашу тренутну улазну лозинку:", + " If you don't remember your old password you can ask your administrator to recover your files." : "Ако се не сећате старе лозинке, можете затражити од администратора да опорави ваше фајлове.", + "Old log-in password" : "Стара лозинка за пријаву", + "Current log-in password" : "Тренутна лозинка за пријаву", + "Update Private Key Password" : "Ажурирај лозинку личног кључа", + "Enable password recovery:" : "Укључи опоравак лозинке:", + "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Укључивање ове опције омогућиће поновно добијање приступа вашим шифрованим фајловима у случају губитка лозинке" }, "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_encryption/l10n/sr.json b/apps/files_encryption/l10n/sr.json index db6beb276cb..6c39d417e38 100644 --- a/apps/files_encryption/l10n/sr.json +++ b/apps/files_encryption/l10n/sr.json @@ -1,4 +1,51 @@ { "translations": { - "Encryption" : "Шифровање" + "Unknown error" : "Непозната грешка", + "Missing recovery key password" : "Недостаје лозинка кључа за опоравак", + "Please repeat the recovery key password" : "Поновите лозинку кључа за опоравак", + "Repeated recovery key password does not match the provided recovery key password" : "Поновљена лозинка кључа за опоравак се не поклапа", + "Recovery key successfully enabled" : "Кључ за опоравак успешно укључен", + "Could not disable recovery key. Please check your recovery key password!" : "Не могу да искључим кључ за опоравак. Проверите лозинку!", + "Recovery key successfully disabled" : "Кључ за опоравак успешно искључен", + "Please provide the old recovery password" : "Унесите стару лозинку опоравка", + "Please provide a new recovery password" : "Унесите нову лозинку опоравка", + "Please repeat the new recovery password" : "Поновите нову лозинку опоравка", + "Password successfully changed." : "Лозинка успешно промењена.", + "Could not change the password. Maybe the old password was not correct." : "Не могу да променим лозинку. Можда стара лозинка није исправна.", + "Could not update the private key password." : "Не могу да ажурирам лозинку личног кључа.", + "The old password was not correct, please try again." : "Стара лозинка није исправна. Покушајте поново.", + "The current log-in password was not correct, please try again." : "Лозинка за пријаву није исправна. Покушајте поново.", + "Private key password successfully updated." : "Лозинка личног кључа је успешно ажурирана.", + "File recovery settings updated" : "Поставке опоравка фајла су ажуриране", + "Could not update file recovery" : "Не могу да ажурирам опоравак фајла", + "Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." : "Апликација шифровања није иницијализована! Можда је поновно покренута током сесије. Покушајте да се одјавите па пријавите да се иницијализује поново.", + "Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." : "Ваш лични кључ није исправан! Вероватно сте лозинку променили изван %s (нпр. ваш корпоративни директоријум). Лозинку личног кључа можете ажурирати у личним поставкама да бисте опоравили приступ вашим шифрованим фајловима.", + "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да дешифрујем фајл. Вероватно је то дељен фајл. Затражите од власника фајла да га поново подели са вама.", + "Unknown error. Please check your system settings or contact your administrator" : "Непозната грешка. Проверите поставке вашег система или контактирајте администратора.", + "Initial encryption started... This can take some time. Please wait." : "Почетно шифровање је покренуто... Ово може потрајати. Молим, сачекајте.", + "Initial encryption running... Please try again later." : "Почетно шифровање ради... Покушајте касније.", + "Missing requirements." : "Захтеви нису испуњени.", + "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Проверите да је ОпенССЛ заједно са ПХП проширењем, укључен и прописно подешен. За сада, шифровање је искључено.", + "Following users are not set up for encryption:" : "Следећи корисници нису подешени за шифровање:", + "Go directly to your %spersonal settings%s." : "Идите право на ваше %sличне поставке%s.", + "Server-side Encryption" : "Шифровање на страни сервера", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Апликација шифровања је укључена али ваши кључеви нису иницијализовани. Одјавите се и поново се пријавите.", + "Enable recovery key (allow to recover users files in case of password loss):" : "Омогући кључ за опоравак (омогућава опоравак корисничких фајлова у случају губитка лозинке):", + "Recovery key password" : "Лозинка кључа за опоравак", + "Repeat Recovery key password" : "Поновите лозинку кључа за опоравак", + "Enabled" : "укључено", + "Disabled" : "искључено", + "Change recovery key password:" : "Измена лозинке кључа опоравка:", + "Old Recovery key password" : "Стара лозинка кључа опоравка", + "New Recovery key password" : "Нова лозинка кључа опоравка", + "Repeat New Recovery key password" : "Поновите лозинку кључа опоравка", + "Change Password" : "Измени лозинку", + "Your private key password no longer matches your log-in password." : "Лозинка вашег личног кључа више није иста као ваша лозинка за пријаву.", + "Set your old private key password to your current log-in password:" : "Промените ваш стари приватни кључ-лозинку у вашу тренутну улазну лозинку:", + " If you don't remember your old password you can ask your administrator to recover your files." : "Ако се не сећате старе лозинке, можете затражити од администратора да опорави ваше фајлове.", + "Old log-in password" : "Стара лозинка за пријаву", + "Current log-in password" : "Тренутна лозинка за пријаву", + "Update Private Key Password" : "Ажурирај лозинку личног кључа", + "Enable password recovery:" : "Укључи опоравак лозинке:", + "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Укључивање ове опције омогућиће поновно добијање приступа вашим шифрованим фајловима у случају губитка лозинке" },"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_encryption/l10n/te.php b/apps/files_encryption/l10n/te.php deleted file mode 100644 index 10c7a08a554..00000000000 --- a/apps/files_encryption/l10n/te.php +++ /dev/null @@ -1,5 +0,0 @@ -<?php -$TRANSLATIONS = array( -"personal settings" => "వ్యక్తిగత అమరికలు" -); -$PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_encryption/l10n/uk.js b/apps/files_encryption/l10n/uk.js index e01a79f23c5..a5f70cf8589 100644 --- a/apps/files_encryption/l10n/uk.js +++ b/apps/files_encryption/l10n/uk.js @@ -29,6 +29,7 @@ OC.L10N.register( "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Будь ласка, переконайтеся, що OpenSSL разом з розширенням PHP включена і налаштована належним чином. В даний час, шифрування додатку було відключено.", "Following users are not set up for encryption:" : "Для наступних користувачів шифрування не налаштоване:", "Go directly to your %spersonal settings%s." : "Перейти навпростець до ваших %spersonal settings%s.", + "Server-side Encryption" : "Серверне шіфрування", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову", "Enable recovery key (allow to recover users files in case of password loss):" : "Ввімкнути ключ відновлення (дозволяє користувачам відновлювати файли при втраті паролю):", "Recovery key password" : "Пароль ключа відновлення", diff --git a/apps/files_encryption/l10n/uk.json b/apps/files_encryption/l10n/uk.json index 51dd3c26335..69c44021eae 100644 --- a/apps/files_encryption/l10n/uk.json +++ b/apps/files_encryption/l10n/uk.json @@ -27,6 +27,7 @@ "Please make sure that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." : "Будь ласка, переконайтеся, що OpenSSL разом з розширенням PHP включена і налаштована належним чином. В даний час, шифрування додатку було відключено.", "Following users are not set up for encryption:" : "Для наступних користувачів шифрування не налаштоване:", "Go directly to your %spersonal settings%s." : "Перейти навпростець до ваших %spersonal settings%s.", + "Server-side Encryption" : "Серверне шіфрування", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову", "Enable recovery key (allow to recover users files in case of password loss):" : "Ввімкнути ключ відновлення (дозволяє користувачам відновлювати файли при втраті паролю):", "Recovery key password" : "Пароль ключа відновлення", diff --git a/apps/files_encryption/lib/migration.php b/apps/files_encryption/lib/migration.php index cf5552f84ac..ad954db7ebb 100644 --- a/apps/files_encryption/lib/migration.php +++ b/apps/files_encryption/lib/migration.php @@ -1,5 +1,5 @@ <?php - /** +/** * ownCloud * * @copyright (C) 2014 ownCloud, Inc. @@ -35,6 +35,7 @@ class Migration { public function __construct() { $this->view = new \OC\Files\View(); + $this->view->getUpdater()->disable(); $this->public_share_key_id = Helper::getPublicShareKeyId(); $this->recovery_key_id = Helper::getRecoveryKeyId(); } @@ -42,10 +43,15 @@ class Migration { public function reorganizeFolderStructure() { $this->reorganizeSystemFolderStructure(); - $users = \OCP\User::getUsers(); - foreach ($users as $user) { - $this->reorganizeFolderStructureForUser($user); - } + $limit = 500; + $offset = 0; + do { + $users = \OCP\User::getUsers('', $limit, $offset); + foreach ($users as $user) { + $this->reorganizeFolderStructureForUser($user); + } + $offset += $limit; + } while (count($users) >= $limit); } public function reorganizeSystemFolderStructure() { @@ -69,6 +75,10 @@ class Migration { $this->view->deleteAll('/owncloud_private_key'); $this->view->deleteAll('/files_encryption/share-keys'); $this->view->deleteAll('/files_encryption/keyfiles'); + $storage = $this->view->getMount('')->getStorage(); + $storage->getScanner()->scan('files_encryption'); + $storage->getCache()->remove('owncloud_private_key'); + $storage->getCache()->remove('public-keys'); } @@ -91,6 +101,7 @@ class Migration { } // delete old folders $this->deleteOldKeys($user); + $this->view->getMount('/' . $user)->getStorage()->getScanner()->scan('files_encryption'); } } @@ -122,7 +133,7 @@ class Migration { while (($oldPublicKey = readdir($dh)) !== false) { if (!\OC\Files\Filesystem::isIgnoredDir($oldPublicKey)) { $newPublicKey = substr($oldPublicKey, 0, strlen($oldPublicKey) - strlen('.public.key')) . '.publicKey'; - $this->view->rename('public-keys/' . $oldPublicKey , 'files_encryption/public_keys/' . $newPublicKey); + $this->view->rename('public-keys/' . $oldPublicKey, 'files_encryption/public_keys/' . $newPublicKey); } } closedir($dh); @@ -136,7 +147,7 @@ class Migration { while (($oldPrivateKey = readdir($dh)) !== false) { if (!\OC\Files\Filesystem::isIgnoredDir($oldPrivateKey)) { $newPrivateKey = substr($oldPrivateKey, 0, strlen($oldPrivateKey) - strlen('.private.key')) . '.privateKey'; - $this->view->rename('owncloud_private_key/' . $oldPrivateKey , 'files_encryption/' . $newPrivateKey); + $this->view->rename('owncloud_private_key/' . $oldPrivateKey, 'files_encryption/' . $newPrivateKey); } } closedir($dh); @@ -144,10 +155,10 @@ class Migration { } private function renameUsersPrivateKey($user) { - $oldPrivateKey = $user . '/files_encryption/' . $user . '.private.key'; - $newPrivateKey = substr($oldPrivateKey, 0, strlen($oldPrivateKey) - strlen('.private.key')) . '.privateKey'; + $oldPrivateKey = $user . '/files_encryption/' . $user . '.private.key'; + $newPrivateKey = substr($oldPrivateKey, 0, strlen($oldPrivateKey) - strlen('.private.key')) . '.privateKey'; - $this->view->rename($oldPrivateKey, $newPrivateKey); + $this->view->rename($oldPrivateKey, $newPrivateKey); } private function getFileName($file, $trash) { @@ -181,7 +192,7 @@ class Migration { } private function getFilePath($path, $user, $trash) { - $offset = $trash ? strlen($user . '/files_trashbin/keyfiles') : strlen($user . '/files_encryption/keyfiles'); + $offset = $trash ? strlen($user . '/files_trashbin/keyfiles') : strlen($user . '/files_encryption/keyfiles'); return substr($path, $offset); } @@ -210,7 +221,7 @@ class Migration { $extension = $this->getExtension($file, $trash); $targetDir = $this->getTargetDir($user, $filePath, $filename, $extension, $trash); $this->createPathForKeys($targetDir); - $this->view->copy($path . '/' . $file, $targetDir . '/fileKey'); + $this->view->rename($path . '/' . $file, $targetDir . '/fileKey'); $this->renameShareKeys($user, $filePath, $filename, $targetDir, $trash); } } @@ -253,14 +264,10 @@ class Migration { if ($this->view->is_dir($oldShareKeyPath . '/' . $file)) { continue; } else { - if (substr($file, 0, strlen($filename) +1) === $filename . '.') { + if (substr($file, 0, strlen($filename) + 1) === $filename . '.') { $uid = $this->getUidFromShareKey($file, $filename, $trash); - if ($uid === $this->public_share_key_id || - $uid === $this->recovery_key_id || - \OCP\User::userExists($uid)) { - $this->view->copy($oldShareKeyPath . '/' . $file, $target . '/' . $uid . '.shareKey'); - } + $this->view->rename($oldShareKeyPath . '/' . $file, $target . '/' . $uid . '.shareKey'); } } diff --git a/apps/files_encryption/lib/stream.php b/apps/files_encryption/lib/stream.php index 644ac895a8f..7a60f0d685b 100644 --- a/apps/files_encryption/lib/stream.php +++ b/apps/files_encryption/lib/stream.php @@ -64,15 +64,17 @@ class Stream { private $keyId; private $handle; // Resource returned by fopen private $meta = array(); // Header / meta for source stream - private $writeCache; + private $cache; // Current block unencrypted + private $position; // Current pointer position in the unencrypted stream + private $writeFlag; // Flag to write current block when leaving it private $size; + private $headerSize = 0; // Size of header private $unencryptedSize; private $publicKey; private $encKeyfile; private $newFile; // helper var, we only need to write the keyfile for new files private $isLocalTmpFile = false; // do we operate on a local tmp file private $localTmpFile; // path of local tmp file - private $headerWritten = false; private $containHeader = false; // the file contain a header private $cipher; // cipher used for encryption/decryption /** @var \OCA\Files_Encryption\Util */ @@ -158,6 +160,17 @@ class Stream { $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; + $this->position = 0; + $this->cache = ''; + $this->writeFlag = 0; + + // Setting handle so it can be used for reading the header + if ($this->isLocalTmpFile) { + $this->handle = fopen($this->localTmpFile, $mode); + } else { + $this->handle = $this->rootView->fopen($this->rawPath, $mode); + } + if ( $mode === 'w' or $mode === 'w+' @@ -169,15 +182,12 @@ class Stream { $this->unencryptedSize = 0; } else { $this->size = $this->rootView->filesize($this->rawPath); + \OC_FileProxy::$enabled = true; + $this->unencryptedSize = $this->rootView->filesize($this->rawPath); + \OC_FileProxy::$enabled = false; $this->readHeader(); } - if ($this->isLocalTmpFile) { - $this->handle = fopen($this->localTmpFile, $mode); - } else { - $this->handle = $this->rootView->fopen($this->rawPath, $mode); - } - \OC_FileProxy::$enabled = $proxyStatus; if (!is_resource($this->handle)) { @@ -200,14 +210,8 @@ class Stream { private function readHeader() { - if ($this->isLocalTmpFile) { - $handle = fopen($this->localTmpFile, 'r'); - } else { - $handle = $this->rootView->fopen($this->rawPath, 'r'); - } - - if (is_resource($handle)) { - $data = fread($handle, Crypt::BLOCKSIZE); + if (is_resource($this->handle)) { + $data = fread($this->handle, Crypt::BLOCKSIZE); $header = Crypt::parseHeader($data); $this->cipher = Crypt::getCipher($header); @@ -215,9 +219,16 @@ class Stream { // remeber that we found a header if (!empty($header)) { $this->containHeader = true; + $this->headerSize = Crypt::BLOCKSIZE; + // if there's no header then decrypt the block and store it in the cache + } else { + if (!$this->getKey()) { + throw new \Exception('Encryption key not found for "' . $this->rawPath . '" during attempted read via stream'); + } else { + $this->cache = Crypt::symmetricDecryptFileContent($data, $this->plainKey, $this->cipher); + } } - fclose($handle); } } @@ -226,7 +237,7 @@ class Stream { * @return int position of the file pointer */ public function stream_tell() { - return ftell($this->handle); + return $this->position; } /** @@ -234,18 +245,41 @@ class Stream { * @param int $whence * @return bool true if fseek was successful, otherwise false */ + + // seeking the stream tries to move the pointer on the encrypted stream to the beginning of the target block + // if that works, it flushes the current block and changes the position in the unencrypted stream public function stream_seek($offset, $whence = SEEK_SET) { + // this wrapper needs to return "true" for success. + // the fseek call itself returns 0 on succeess - $this->flush(); + $return=false; - // ignore the header and just overstep it - if ($this->containHeader) { - $offset += Crypt::BLOCKSIZE; + switch($whence) { + case SEEK_SET: + if($offset < $this->unencryptedSize && $offset >= 0) { + $newPosition=$offset; + } + break; + case SEEK_CUR: + if($offset>=0) { + $newPosition=$offset+$this->position; + } + break; + case SEEK_END: + if($this->unencryptedSize + $offset >= 0) { + $newPosition=$this->unencryptedSize+$offset; + } + break; + default: + return $return; } - - // this wrapper needs to return "true" for success. - // the fseek call itself returns 0 on succeess - return !fseek($this->handle, $offset, $whence); + $newFilePosition=floor($newPosition/6126)*Crypt::BLOCKSIZE+$this->headerSize; + if (fseek($this->handle, $newFilePosition)===0) { + $this->flush(); + $this->position=$newPosition; + $return=true; + } + return $return; } @@ -256,35 +290,33 @@ class Stream { */ public function stream_read($count) { - $this->writeCache = ''; + $result = ''; - if ($count !== Crypt::BLOCKSIZE) { - \OCP\Util::writeLog('Encryption library', 'PHP "bug" 21641 no longer holds, decryption system requires refactoring', \OCP\Util::FATAL); - throw new EncryptionException('expected a block size of 8192 byte', EncryptionException::UNEXPECTED_BLOCK_SIZE); - } - - // Get the data from the file handle - $data = fread($this->handle, $count); - - // if this block contained the header we move on to the next block - if (Crypt::isHeader($data)) { - $data = fread($this->handle, $count); - } - - $result = null; + // limit to the end of the unencrypted file; otherwise getFileSize will fail and it is good practise anyway + $count=min($count,$this->unencryptedSize - $this->position); - if (strlen($data)) { + // loop over the 6126 sized unencrypted blocks + while ($count > 0) { - if (!$this->getKey()) { + $remainingLength = $count; - // Error! We don't have a key to decrypt the file with - throw new \Exception( - 'Encryption key not found for "' . $this->rawPath . '" during attempted read via stream'); + // update the cache of the current block + $this->readCache(); + + // determine the relative position in the current block + $blockPosition=($this->position % 6126); + // if entire read inside current block then only position needs to be updated + if ($remainingLength<(6126 - $blockPosition)) { + $result .= substr($this->cache,$blockPosition,$remainingLength); + $this->position += $remainingLength; + $count=0; + // otherwise remainder of current block is fetched, the block is flushed and the position updated } else { - - // Decrypt data - $result = Crypt::symmetricDecryptFileContent($data, $this->plainKey, $this->cipher); + $result .= substr($this->cache,$blockPosition); + $this->flush(); + $this->position += (6126 - $blockPosition); + $count -= (6126 - $blockPosition); } } @@ -328,16 +360,14 @@ class Stream { } - $util = new Util($this->rootView, $this->userId); - // Fetch and decrypt keyfile // Fetch existing keyfile - $this->encKeyfile = Keymanager::getFileKey($this->rootView, $util, $this->relPath); + $this->encKeyfile = Keymanager::getFileKey($this->rootView, $this->util, $this->relPath); // If a keyfile already exists if ($this->encKeyfile) { - $shareKey = Keymanager::getShareKey($this->rootView, $this->keyId, $util, $this->relPath); + $shareKey = Keymanager::getShareKey($this->rootView, $this->keyId, $this->util, $this->relPath); // if there is no valid private key return false if ($this->privateKey === false) { @@ -383,6 +413,9 @@ class Stream { fwrite($this->handle, $paddedHeader); $this->headerWritten = true; + $this->containHeader = true; + $this->headerSize = Crypt::BLOCKSIZE; + $this->size += $this->headerSize; } /** @@ -390,7 +423,7 @@ class Stream { * @param string $data data to be written to disk * @note the data will be written to the path stored in the stream handle, set in stream_open() * @note $data is only ever be a maximum of 8192 bytes long. This is set by PHP internally. stream_write() is called multiple times in a loop on data larger than 8192 bytes - * @note Because the encryption process used increases the length of $data, a writeCache is used to carry over data which would not fit in the required block size + * @note Because the encryption process used increases the length of $data, a cache is used to carry over data which would not fit in the required block size * @note Padding is added to each encrypted block to ensure that the resulting block is exactly 8192 bytes. This is removed during stream_read * @note PHP automatically updates the file pointer after writing data to reflect it's length. There is generally no need to update the poitner manually using fseek */ @@ -402,24 +435,10 @@ class Stream { return strlen($data); } - if ($this->headerWritten === false) { + if ($this->size === 0) { $this->writeHeader(); } - // Disable the file proxies so that encryption is not - // automatically attempted when the file is written to disk - - // we are handling that separately here and we don't want to - // get into an infinite loop - $proxyStatus = \OC_FileProxy::$enabled; - \OC_FileProxy::$enabled = false; - - // Get the length of the unencrypted data that we are handling - $length = strlen($data); - - // Find out where we are up to in the writing of data to the - // file - $pointer = ftell($this->handle); - // Get / generate the keyfile for the file we're handling // If we're writing a new file (not overwriting an existing // one), save the newly generated keyfile @@ -429,68 +448,51 @@ class Stream { } - // If extra data is left over from the last round, make sure it - // is integrated into the next 6126 / 8192 block - if ($this->writeCache) { - - // Concat writeCache to start of $data - $data = $this->writeCache . $data; - - // Clear the write cache, ready for reuse - it has been - // flushed and its old contents processed - $this->writeCache = ''; + $length=0; - } - - // While there still remains some data to be processed & written + // loop over $data to fit it in 6126 sized unencrypted blocks while (strlen($data) > 0) { - // Remaining length for this iteration, not of the - // entire file (may be greater than 8192 bytes) $remainingLength = strlen($data); - // If data remaining to be written is less than the - // size of 1 6126 byte block - if ($remainingLength < 6126) { - - // Set writeCache to contents of $data - // The writeCache will be carried over to the - // next write round, and added to the start of - // $data to ensure that written blocks are - // always the correct length. If there is still - // data in writeCache after the writing round - // has finished, then the data will be written - // to disk by $this->flush(). - $this->writeCache = $data; - - // Clear $data ready for next round - $data = ''; + // set the cache to the current 6126 block + $this->readCache(); + + // only allow writes on seekable streams, or at the end of the encrypted stream + // for seekable streams the pointer is moved back to the beginning of the encrypted block + // flush will start writing there when the position moves to another block + if((fseek($this->handle, floor($this->position/6126)*Crypt::BLOCKSIZE + $this->headerSize) === 0) || (floor($this->position/6126)*Crypt::BLOCKSIZE + $this->headerSize === $this->size)) { + + // switch the writeFlag so flush() will write the block + $this->writeFlag=1; + + // determine the relative position in the current block + $blockPosition=($this->position % 6126); + + // check if $data fits in current block + // if so, overwrite existing data (if any) + // update position and liberate $data + if ($remainingLength<(6126 - $blockPosition)) { + $this->cache=substr($this->cache,0,$blockPosition).$data.substr($this->cache,$blockPosition+$remainingLength); + $this->position += $remainingLength; + $length += $remainingLength; + $data = ''; + // if $data doens't fit the current block, the fill the current block and reiterate + // after the block is filled, it is flushed and $data is updated + } else { + $this->cache=substr($this->cache,0,$blockPosition).substr($data,0,6126-$blockPosition); + $this->flush(); + $this->position += (6126 - $blockPosition); + $length += (6126 - $blockPosition); + $data = substr($data, 6126 - $blockPosition); + } } else { - - // Read the chunk from the start of $data - $chunk = substr($data, 0, 6126); - - $encrypted = $this->preWriteEncrypt($chunk, $this->plainKey); - - // Write the data chunk to disk. This will be - // attended to the last data chunk if the file - // being handled totals more than 6126 bytes - fwrite($this->handle, $encrypted); - - // Remove the chunk we just processed from - // $data, leaving only unprocessed data in $data - // var, for handling on the next round - $data = substr($data, 6126); - + $data=''; } - } - $this->size = max($this->size, $pointer + $length); - $this->unencryptedSize += $length; - - \OC_FileProxy::$enabled = $proxyStatus; + $this->unencryptedSize = max($this->unencryptedSize,$this->position); return $length; @@ -537,6 +539,7 @@ class Stream { */ public function stream_flush() { + $this->flush(); return fflush($this->handle); // Not a typo: http://php.net/manual/en/function.fflush.php @@ -546,21 +549,48 @@ class Stream { * @return bool */ public function stream_eof() { - return feof($this->handle); + return ($this->position>=$this->unencryptedSize); } private function flush() { - if ($this->writeCache) { - + // write to disk only when writeFlag was set to 1 + if ($this->writeFlag === 1) { + // Disable the file proxies so that encryption is not + // automatically attempted when the file is written to disk - + // we are handling that separately here and we don't want to + // get into an infinite loop + $proxyStatus = \OC_FileProxy::$enabled; + \OC_FileProxy::$enabled = false; // Set keyfile property for file in question $this->getKey(); - - $encrypted = $this->preWriteEncrypt($this->writeCache, $this->plainKey); - + $encrypted = $this->preWriteEncrypt($this->cache, $this->plainKey); fwrite($this->handle, $encrypted); + $this->writeFlag = 0; + $this->size = max($this->size,ftell($this->handle)); + \OC_FileProxy::$enabled = $proxyStatus; + } + // always empty the cache (otherwise readCache() will not fill it with the new block) + $this->cache = ''; + } - $this->writeCache = ''; + private function readCache() { + // cache should always be empty string when this function is called + // don't try to fill the cache when trying to write at the end of the unencrypted file when it coincides with new block + if ($this->cache === '' && !($this->position===$this->unencryptedSize && ($this->position % 6126)===0)) { + // Get the data from the file handle + $data = fread($this->handle, Crypt::BLOCKSIZE); + $result = ''; + if (strlen($data)) { + if (!$this->getKey()) { + // Error! We don't have a key to decrypt the file with + throw new \Exception('Encryption key not found for "'. $this->rawPath . '" during attempted read via stream'); + } else { + // Decrypt data + $result = Crypt::symmetricDecryptFileContent($data, $this->plainKey, $this->cipher); + } + } + $this->cache = $result; } } @@ -581,7 +611,7 @@ class Stream { $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; - if ($this->rootView->file_exists($this->rawPath) && $this->size === 0) { + if ($this->rootView->file_exists($this->rawPath) && $this->size === $this->headerSize) { fclose($this->handle); $this->rootView->unlink($this->rawPath); } @@ -598,7 +628,7 @@ class Stream { $this->meta['mode'] !== 'r' && $this->meta['mode'] !== 'rb' && $this->isLocalTmpFile === false && - $this->size > 0 && + $this->size > $this->headerSize && $this->unencryptedSize > 0 ) { diff --git a/apps/files_encryption/tests/webdav.php b/apps/files_encryption/tests/webdav.php deleted file mode 100755 index bdbc9d7ef02..00000000000 --- a/apps/files_encryption/tests/webdav.php +++ /dev/null @@ -1,268 +0,0 @@ -<?php -/** - * ownCloud - * - * @author Florin Peter - * @copyright 2013 Florin Peter <owncloud@florin-peter.de> - * - * 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/>. - * - */ - -namespace OCA\Files_Encryption\Tests; - -/** - * Class Webdav - * - * this class provide basic webdav tests for PUT,GET and DELETE - */ -class Webdav extends TestCase { - - const TEST_ENCRYPTION_WEBDAV_USER1 = "test-webdav-user1"; - - public $userId; - public $pass; - /** - * @var \OC\Files\View - */ - public $view; - public $dataShort; - public $stateFilesTrashbin; - - private $storage; - - public static function setUpBeforeClass() { - parent::setUpBeforeClass(); - - // create test user - self::loginHelper(self::TEST_ENCRYPTION_WEBDAV_USER1, true); - - } - - protected function setUp() { - parent::setUp(); - - // reset backend - \OC_User::useBackend('database'); - - // set user id - \OC_User::setUserId(self::TEST_ENCRYPTION_WEBDAV_USER1); - $this->userId = self::TEST_ENCRYPTION_WEBDAV_USER1; - $this->pass = self::TEST_ENCRYPTION_WEBDAV_USER1; - - // init filesystem view - $this->view = new \OC\Files\View('/'); - list($this->storage, ) = $this->view->resolvePath('/'); - // init short data - $this->dataShort = 'hats'; - - // remember files_trashbin state - $this->stateFilesTrashbin = \OC_App::isEnabled('files_trashbin'); - - // we don't want to tests with app files_trashbin enabled - \OC_App::disable('files_trashbin'); - - // create test user - self::loginHelper(self::TEST_ENCRYPTION_WEBDAV_USER1); - } - - protected function tearDown() { - // reset app files_trashbin - if ($this->stateFilesTrashbin) { - \OC_App::enable('files_trashbin'); - } else { - \OC_App::disable('files_trashbin'); - } - - parent::tearDown(); - } - - public static function tearDownAfterClass() { - // cleanup test user - \OC_User::deleteUser(self::TEST_ENCRYPTION_WEBDAV_USER1); - - parent::tearDownAfterClass(); - } - - /** - * test webdav put random file - */ - function testWebdavPUT() { - - // generate filename - $filename = '/tmp-' . $this->getUniqueID() . '.txt'; - - // set server vars - $_SERVER['REQUEST_METHOD'] = 'OPTIONS'; - - $_SERVER['REQUEST_METHOD'] = 'PUT'; - $_SERVER['REQUEST_URI'] = '/remote.php/webdav' . $filename; - $_SERVER['HTTP_AUTHORIZATION'] = 'Basic dGVzdC13ZWJkYXYtdXNlcjE6dGVzdC13ZWJkYXYtdXNlcjE='; - $_SERVER['CONTENT_TYPE'] = 'application/octet-stream'; - $_SERVER['PATH_INFO'] = '/webdav' . $filename; - $_SERVER['CONTENT_LENGTH'] = strlen($this->dataShort); - - // handle webdav request - $this->handleWebdavRequest($this->dataShort); - - // check if file was created - $this->assertTrue($this->view->file_exists('/' . $this->userId . '/files' . $filename)); - - // check if key-file was created - $this->assertTrue($this->view->file_exists( - '/' . $this->userId . '/files_encryption/keys/' . $filename . '/fileKey')); - - // check if shareKey-file was created - $this->assertTrue($this->view->file_exists( - '/' . $this->userId . '/files_encryption/keys/' . $filename . '/' . $this->userId . '.shareKey')); - - // disable encryption proxy to prevent recursive calls - $proxyStatus = \OC_FileProxy::$enabled; - \OC_FileProxy::$enabled = false; - - // get encrypted file content - $encryptedContent = $this->view->file_get_contents('/' . $this->userId . '/files' . $filename); - - // restore proxy state - \OC_FileProxy::$enabled = $proxyStatus; - - // check if encrypted content is valid - $this->assertTrue(\OCA\Files_Encryption\Crypt::isCatfileContent($encryptedContent)); - - // get decrypted file contents - $decrypt = file_get_contents('crypt:///' . $this->userId . '/files' . $filename); - - // check if file content match with the written content - $this->assertEquals($this->dataShort, $decrypt); - - // return filename for next test - return $filename; - } - - /** - * test webdav get random file - * - * @depends testWebdavPUT - */ - function testWebdavGET($filename) { - - // set server vars - $_SERVER['REQUEST_METHOD'] = 'GET'; - $_SERVER['REQUEST_URI'] = '/remote.php/webdav' . $filename; - $_SERVER['HTTP_AUTHORIZATION'] = 'Basic dGVzdC13ZWJkYXYtdXNlcjE6dGVzdC13ZWJkYXYtdXNlcjE='; - $_SERVER['PATH_INFO'] = '/webdav' . $filename; - - // handle webdav request - $content = $this->handleWebdavRequest(); - - // check if file content match with the written content - $this->assertEquals($this->dataShort, $content); - - // return filename for next test - return $filename; - } - - /** - * test webdav delete random file - * @depends testWebdavGET - */ - function testWebdavDELETE($filename) { - // set server vars - $_SERVER['REQUEST_METHOD'] = 'DELETE'; - $_SERVER['REQUEST_URI'] = '/remote.php/webdav' . $filename; - $_SERVER['HTTP_AUTHORIZATION'] = 'Basic dGVzdC13ZWJkYXYtdXNlcjE6dGVzdC13ZWJkYXYtdXNlcjE='; - $_SERVER['PATH_INFO'] = '/webdav' . $filename; - - // at the beginning the file should exist - $this->assertTrue($this->view->file_exists('/' . $this->userId . '/files' . $filename)); - - // handle webdav request - $content = $this->handleWebdavRequest(); - - // check if file was removed - $this->assertFalse($this->view->file_exists('/' . $this->userId . '/files' . $filename)); - - // check if key-file was removed - $this->assertFalse($this->view->file_exists( - '/' . $this->userId . '/files_encryption/keys/' . $filename . '/fileKey')); - - // check if shareKey-file was removed - $this->assertFalse($this->view->file_exists( - '/' . $this->userId . '/files_encryption/keys/' . $filename . '/' . $this->userId . '.shareKey')); - } - - /** - * handle webdav request - * - * @param bool $body - * @note this init procedure is copied from /apps/files/appinfo/remote.php - */ - function handleWebdavRequest($body = false) { - // Backends - $authBackend = $this->getMockBuilder('OC_Connector_Sabre_Auth') - ->setMethods(['validateUserPass']) - ->getMock(); - $authBackend->expects($this->any()) - ->method('validateUserPass') - ->will($this->returnValue(true)); - - $lockBackend = new \OC_Connector_Sabre_Locks(); - $requestBackend = new \OC_Connector_Sabre_Request(); - - // Create ownCloud Dir - $root = '/' . $this->userId . '/files'; - $view = new \OC\Files\View($root); - $publicDir = new \OC_Connector_Sabre_Directory($view, $view->getFileInfo('')); - $objectTree = new \OC\Connector\Sabre\ObjectTree(); - $mountManager = \OC\Files\Filesystem::getMountManager(); - $objectTree->init($publicDir, $view, $mountManager); - - // Fire up server - $server = new \Sabre\DAV\Server($publicDir); - $server->httpRequest = $requestBackend; - $server->setBaseUri('/remote.php/webdav/'); - - // Load plugins - $server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend, 'ownCloud')); - $server->addPlugin(new \Sabre\DAV\Locks\Plugin($lockBackend)); - $server->addPlugin(new \Sabre\DAV\Browser\Plugin(false)); // Show something in the Browser, but no upload - $server->addPlugin(new \OC_Connector_Sabre_QuotaPlugin($view)); - $server->addPlugin(new \OC_Connector_Sabre_MaintenancePlugin()); - $server->debugExceptions = true; - - // Totally ugly hack to setup the FS - \OC::$server->getUserSession()->login($this->userId, $this->userId); - \OC_Util::setupFS($this->userId); - - // And off we go! - if ($body) { - $server->httpRequest->setBody($body); - } - - // turn on output buffering - ob_start(); - - // handle request - $server->exec(); - - // file content is written in the output buffer - $content = ob_get_contents(); - - // flush the output buffer and turn off output buffering - ob_end_clean(); - - // return captured content - return $content; - } -} diff --git a/apps/files_external/3rdparty/autoload.php b/apps/files_external/3rdparty/autoload.php new file mode 100644 index 00000000000..78e3de4ca0c --- /dev/null +++ b/apps/files_external/3rdparty/autoload.php @@ -0,0 +1,7 @@ +<?php + +// autoload.php @generated by Composer + +require_once __DIR__ . '/composer' . '/autoload_real.php'; + +return ComposerAutoloaderInit98fe9b281934250b3a93f69a5ce843b3::getLoader(); diff --git a/apps/files_external/3rdparty/composer.json b/apps/files_external/3rdparty/composer.json new file mode 100644 index 00000000000..b1315651c99 --- /dev/null +++ b/apps/files_external/3rdparty/composer.json @@ -0,0 +1,13 @@ +{ + "name": "files_external/3rdparty", + "description": "3rdparty components for files_external", + "license": "MIT", + "config": { + "vendor-dir": "." + }, + "require": { + "icewind/smb": "dev-master", + "icewind/streams": "0.2" + } +} + diff --git a/apps/files_external/3rdparty/composer.lock b/apps/files_external/3rdparty/composer.lock new file mode 100644 index 00000000000..0a7dcf89876 --- /dev/null +++ b/apps/files_external/3rdparty/composer.lock @@ -0,0 +1,101 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "hash": "c854ee7f5bdcb3f2c8ee0a8cfe5e193a", + "packages": [ + { + "name": "icewind/smb", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/icewind1991/SMB.git", + "reference": "ef4b128143b7272e97665b84862d77faabf7d36d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/icewind1991/SMB/zipball/ef4b128143b7272e97665b84862d77faabf7d36d", + "reference": "ef4b128143b7272e97665b84862d77faabf7d36d", + "shasum": "" + }, + "require": { + "icewind/streams": "0.2.x", + "php": ">=5.3" + }, + "require-dev": { + "satooshi/php-coveralls": "dev-master" + }, + "type": "library", + "autoload": { + "psr-4": { + "Icewind\\SMB\\": "src/", + "Icewind\\SMB\\Test\\": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Robin Appelman", + "email": "icewind@owncloud.com" + } + ], + "description": "php wrapper for smbclient and libsmbclient-php", + "time": "2015-03-13 12:17:14" + }, + { + "name": "icewind/streams", + "version": "0.2", + "source": { + "type": "git", + "url": "https://github.com/icewind1991/Streams.git", + "reference": "5aae45f2ddd3d1a6e2a496dd5d1e7857bfeb605a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/icewind1991/Streams/zipball/5aae45f2ddd3d1a6e2a496dd5d1e7857bfeb605a", + "reference": "5aae45f2ddd3d1a6e2a496dd5d1e7857bfeb605a", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "satooshi/php-coveralls": "dev-master" + }, + "type": "library", + "autoload": { + "psr-4": { + "Icewind\\Streams\\Tests\\": "tests/", + "Icewind\\Streams\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Robin Appelman", + "email": "icewind@owncloud.com" + } + ], + "description": "A set of generic stream wrappers", + "time": "2014-07-30 23:46:15" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "icewind/smb": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [] +} diff --git a/apps/files_external/3rdparty/composer/ClassLoader.php b/apps/files_external/3rdparty/composer/ClassLoader.php new file mode 100644 index 00000000000..5e1469e8307 --- /dev/null +++ b/apps/files_external/3rdparty/composer/ClassLoader.php @@ -0,0 +1,413 @@ +<?php + +/* + * This file is part of Composer. + * + * (c) Nils Adermann <naderman@naderman.de> + * Jordi Boggiano <j.boggiano@seld.be> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0 class loader + * + * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier <fabien@symfony.com> + * @author Jordi Boggiano <j.boggiano@seld.be> + */ +class ClassLoader +{ + // PSR-4 + private $prefixLengthsPsr4 = array(); + private $prefixDirsPsr4 = array(); + private $fallbackDirsPsr4 = array(); + + // PSR-0 + private $prefixesPsr0 = array(); + private $fallbackDirsPsr0 = array(); + + private $useIncludePath = false; + private $classMap = array(); + + private $classMapAuthoritative = false; + + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', $this->prefixesPsr0); + } + + return array(); + } + + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-0 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 base directories + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + } + + /** + * Unregisters this instance as an autoloader. + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return bool|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731 + if ('\\' == $class[0]) { + $class = substr($class, 1); + } + + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative) { + return false; + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if ($file === null && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if ($file === null) { + // Remember that this class does not exist. + return $this->classMap[$class] = false; + } + + return $file; + } + + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) { + if (0 === strpos($class, $prefix)) { + foreach ($this->prefixDirsPsr4[$prefix] as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + */ +function includeFile($file) +{ + include $file; +} diff --git a/apps/files_external/3rdparty/composer/autoload_classmap.php b/apps/files_external/3rdparty/composer/autoload_classmap.php new file mode 100644 index 00000000000..1bd6482f9ea --- /dev/null +++ b/apps/files_external/3rdparty/composer/autoload_classmap.php @@ -0,0 +1,9 @@ +<?php + +// autoload_classmap.php @generated by Composer + +$vendorDir = dirname(dirname(__FILE__)); +$baseDir = $vendorDir; + +return array( +); diff --git a/apps/files_external/3rdparty/composer/autoload_namespaces.php b/apps/files_external/3rdparty/composer/autoload_namespaces.php new file mode 100644 index 00000000000..71c9e91858d --- /dev/null +++ b/apps/files_external/3rdparty/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ +<?php + +// autoload_namespaces.php @generated by Composer + +$vendorDir = dirname(dirname(__FILE__)); +$baseDir = $vendorDir; + +return array( +); diff --git a/apps/files_external/3rdparty/composer/autoload_psr4.php b/apps/files_external/3rdparty/composer/autoload_psr4.php new file mode 100644 index 00000000000..7cfe0f1c46d --- /dev/null +++ b/apps/files_external/3rdparty/composer/autoload_psr4.php @@ -0,0 +1,13 @@ +<?php + +// autoload_psr4.php @generated by Composer + +$vendorDir = dirname(dirname(__FILE__)); +$baseDir = $vendorDir; + +return array( + 'Icewind\\Streams\\Tests\\' => array($vendorDir . '/icewind/streams/tests'), + 'Icewind\\Streams\\' => array($vendorDir . '/icewind/streams/src'), + 'Icewind\\SMB\\Test\\' => array($vendorDir . '/icewind/smb/tests'), + 'Icewind\\SMB\\' => array($vendorDir . '/icewind/smb/src'), +); diff --git a/apps/files_external/3rdparty/composer/autoload_real.php b/apps/files_external/3rdparty/composer/autoload_real.php new file mode 100644 index 00000000000..3391b322be0 --- /dev/null +++ b/apps/files_external/3rdparty/composer/autoload_real.php @@ -0,0 +1,50 @@ +<?php + +// autoload_real.php @generated by Composer + +class ComposerAutoloaderInit98fe9b281934250b3a93f69a5ce843b3 +{ + private static $loader; + + public static function loadClassLoader($class) + { + if ('Composer\Autoload\ClassLoader' === $class) { + require __DIR__ . '/ClassLoader.php'; + } + } + + public static function getLoader() + { + if (null !== self::$loader) { + return self::$loader; + } + + spl_autoload_register(array('ComposerAutoloaderInit98fe9b281934250b3a93f69a5ce843b3', 'loadClassLoader'), true, true); + self::$loader = $loader = new \Composer\Autoload\ClassLoader(); + spl_autoload_unregister(array('ComposerAutoloaderInit98fe9b281934250b3a93f69a5ce843b3', 'loadClassLoader')); + + $map = require __DIR__ . '/autoload_namespaces.php'; + foreach ($map as $namespace => $path) { + $loader->set($namespace, $path); + } + + $map = require __DIR__ . '/autoload_psr4.php'; + foreach ($map as $namespace => $path) { + $loader->setPsr4($namespace, $path); + } + + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + + $loader->register(true); + + return $loader; + } +} + +function composerRequire98fe9b281934250b3a93f69a5ce843b3($file) +{ + require $file; +} diff --git a/apps/files_external/3rdparty/composer/installed.json b/apps/files_external/3rdparty/composer/installed.json new file mode 100644 index 00000000000..eae04e877d2 --- /dev/null +++ b/apps/files_external/3rdparty/composer/installed.json @@ -0,0 +1,87 @@ +[ + { + "name": "icewind/streams", + "version": "0.2", + "version_normalized": "0.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/icewind1991/Streams.git", + "reference": "5aae45f2ddd3d1a6e2a496dd5d1e7857bfeb605a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/icewind1991/Streams/zipball/5aae45f2ddd3d1a6e2a496dd5d1e7857bfeb605a", + "reference": "5aae45f2ddd3d1a6e2a496dd5d1e7857bfeb605a", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "satooshi/php-coveralls": "dev-master" + }, + "time": "2014-07-30 23:46:15", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Icewind\\Streams\\Tests\\": "tests/", + "Icewind\\Streams\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Robin Appelman", + "email": "icewind@owncloud.com" + } + ], + "description": "A set of generic stream wrappers" + }, + { + "name": "icewind/smb", + "version": "dev-master", + "version_normalized": "9999999-dev", + "source": { + "type": "git", + "url": "https://github.com/icewind1991/SMB.git", + "reference": "ef4b128143b7272e97665b84862d77faabf7d36d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/icewind1991/SMB/zipball/ef4b128143b7272e97665b84862d77faabf7d36d", + "reference": "ef4b128143b7272e97665b84862d77faabf7d36d", + "shasum": "" + }, + "require": { + "icewind/streams": "0.2.x", + "php": ">=5.3" + }, + "require-dev": { + "satooshi/php-coveralls": "dev-master" + }, + "time": "2015-03-13 12:17:14", + "type": "library", + "installation-source": "source", + "autoload": { + "psr-4": { + "Icewind\\SMB\\": "src/", + "Icewind\\SMB\\Test\\": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Robin Appelman", + "email": "icewind@owncloud.com" + } + ], + "description": "php wrapper for smbclient and libsmbclient-php" + } +] diff --git a/apps/files_external/3rdparty/icewind/smb/.gitignore b/apps/files_external/3rdparty/icewind/smb/.gitignore new file mode 100644 index 00000000000..4f389129e2d --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/.gitignore @@ -0,0 +1,3 @@ +.idea +vendor +composer.lock diff --git a/apps/files_external/3rdparty/icewind/smb/.travis.yml b/apps/files_external/3rdparty/icewind/smb/.travis.yml new file mode 100644 index 00000000000..c1ac3727d08 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/.travis.yml @@ -0,0 +1,50 @@ +language: php +php: + - 5.3 + - 5.4 + - 5.5 + +env: + global: + - CURRENT_DIR=`pwd` + +before_install: + - pass=$(perl -e 'print crypt("test", "password")') + - sudo useradd -m -p $pass test + - sudo apt-get update -qq + - sudo apt-get install samba smbclient libsmbclient-dev libsmbclient + - wget -O /tmp/libsmbclient-php.zip https://github.com/eduardok/libsmbclient-php/archive/master.zip + - unzip /tmp/libsmbclient-php.zip -d /tmp + - cd /tmp/libsmbclient-php-master + - phpize && ./configure && make && sudo make install + - echo 'extension="libsmbclient.so"' >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini + - cd $CURRENT_DIR + - chmod go+w $HOME + - printf "%s\n%s\n" test test|sudo smbpasswd -s test + - sudo mkdir /home/test/test + - sudo chown test /home/test/test + - | + echo "[test] + comment = test + path = /home/test + guest ok = yes + writeable = yes + map archive = yes + map system = yes + map hidden = yes + create mask = 0777 + inherit permissions = yes" | sudo tee -a /etc/samba/smb.conf + - sudo service smbd restart + - testparm -s + +install: + - composer install --dev --no-interaction + +script: + - mkdir -p build/logs + - cd tests + - phpunit --coverage-clover ../build/logs/clover.xml --configuration phpunit.xml + +after_script: + - cd $CURRENT_DIR + - php vendor/bin/coveralls -v diff --git a/apps/files_external/3rdparty/icewind/smb/LICENSE.txt b/apps/files_external/3rdparty/icewind/smb/LICENSE.txt new file mode 100644 index 00000000000..16e3a1004ec --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/LICENSE.txt @@ -0,0 +1,19 @@ +Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/apps/files_external/3rdparty/icewind/smb/README.md b/apps/files_external/3rdparty/icewind/smb/README.md new file mode 100644 index 00000000000..a0864717b09 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/README.md @@ -0,0 +1,136 @@ +SMB +=== + +[![Coverage Status](https://img.shields.io/coveralls/icewind1991/SMB.svg)](https://coveralls.io/r/icewind1991/SMB?branch=master) +[![Build Status](https://travis-ci.org/icewind1991/SMB.svg?branch=master)](https://travis-ci.org/icewind1991/SMB) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/icewind1991/SMB/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/icewind1991/SMB/?branch=master) + +PHP wrapper for `smbclient` and [`libsmbclient-php`](https://github.com/eduardok/libsmbclient-php) + +- Reuses a single `smbclient` instance for multiple requests +- Doesn't leak the password to the process list +- Simple 1-on-1 mapping of SMB commands +- A stream-based api to remove the need for temporary files +- Support for using libsmbclient directly trough [`libsmbclient-php`](https://github.com/eduardok/libsmbclient-php) + +Examples +---- + +### Upload a file ### + +```php +<?php +use Icewind\SMB\Server; + +require('vendor/autoload.php'); + +$fileToUpload = __FILE__; + +$server = new Server('localhost', 'test', 'test'); +$share = $server->getShare('test'); +$share->put($fileToUpload, 'example.txt'); +``` + +### Download a file ### + +```php +<?php +use Icewind\SMB\Server; + +require('vendor/autoload.php'); + +$target = __DIR__ . '/target.txt'; + +$server = new Server('localhost', 'test', 'test'); +$share = $server->getShare('test'); +$share->get('example.txt', $target); +``` + +### List shares on the remote server ### + +```php +<?php +use Icewind\SMB\Server; + +require('vendor/autoload.php'); + +$server = new Server('localhost', 'test', 'test'); +$shares = $server->listShares(); + +foreach ($shares as $share) { + echo $share->getName() . "\n"; +} +``` + +### List the content of a folder ### + +```php +<?php +use Icewind\SMB\Server; + +require('vendor/autoload.php'); + +$server = new Server('localhost', 'test', 'test'); +$share = $server->getShare('test'); +$content = $share->dir('test'); + +foreach ($content as $info) { + echo $name->getName() . "\n"; + echo "\tsize :" . $info->getSize() . "\n"; +} +``` + +### Using read streams + +```php +<?php +use Icewind\SMB\Server; + +require('vendor/autoload.php'); + +$server = new Server('localhost', 'test', 'test'); +$share = $server->getShare('test'); + +$fh = $share->read('test.txt'); +echo fread($fh, 4086); +fclose($fh); +``` + +### Using write streams + +```php +<?php +use Icewind\SMB\Server; + +require('vendor/autoload.php'); + +$server = new Server('localhost', 'test', 'test'); +$share = $server->getShare('test'); + +$fh = $share->write('test.txt'); +fwrite($fh, 'bar'); +fclose($fh); +``` + +### Using libsmbclient-php ### + +Install [libsmbclient-php](https://github.com/eduardok/libsmbclient-php) + +```php +<?php +use Icewind\SMB\Server; +use Icewind\SMB\NativeServer; + +require('vendor/autoload.php'); + +$fileToUpload = __FILE__; + +if (Server::NativeAvailable()) { + $server = new NativeServer('localhost', 'test', 'test'); +} else { + echo 'libsmbclient-php not available, falling back to wrapping smbclient'; + $server = new Server('localhost', 'test', 'test'); +} +$share = $server->getShare('test'); +$share->put($fileToUpload, 'example.txt'); +``` diff --git a/apps/files_external/3rdparty/icewind/smb/composer.json b/apps/files_external/3rdparty/icewind/smb/composer.json new file mode 100644 index 00000000000..92f4280d775 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/composer.json @@ -0,0 +1,24 @@ +{ + "name" : "icewind/smb", + "description" : "php wrapper for smbclient and libsmbclient-php", + "license" : "MIT", + "authors" : [ + { + "name" : "Robin Appelman", + "email": "icewind@owncloud.com" + } + ], + "require" : { + "php": ">=5.3", + "icewind/streams": "0.2.x" + }, + "require-dev": { + "satooshi/php-coveralls" : "dev-master" + }, + "autoload" : { + "psr-4": { + "Icewind\\SMB\\": "src/", + "Icewind\\SMB\\Test\\": "tests/" + } + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Connection.php b/apps/files_external/3rdparty/icewind/smb/src/Connection.php new file mode 100644 index 00000000000..6191b11ac8e --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Connection.php @@ -0,0 +1,78 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB; + +use Icewind\SMB\Exception\AuthenticationException; +use Icewind\SMB\Exception\ConnectionException; +use Icewind\SMB\Exception\InvalidHostException; + +class Connection extends RawConnection { + const DELIMITER = 'smb:'; + + /** + * send input to smbclient + * + * @param string $input + */ + public function write($input) { + parent::write($input . PHP_EOL); + } + + /** + * get all unprocessed output from smbclient until the next prompt + * + * @throws ConnectionException + * @return string + */ + public function read() { + if (!$this->isValid()) { + throw new ConnectionException(); + } + $line = $this->readLine(); //first line is prompt + $this->checkConnectionError($line); + + $output = array(); + $line = $this->readLine(); + $length = mb_strlen(self::DELIMITER); + while (mb_substr($line, 0, $length) !== self::DELIMITER) { //next prompt functions as delimiter + $output[] .= $line; + $line = $this->readLine(); + } + return $output; + } + + /** + * check if the first line holds a connection failure + * + * @param $line + * @throws AuthenticationException + * @throws InvalidHostException + */ + private function checkConnectionError($line) { + $line = rtrim($line, ')'); + if (substr($line, -23) === ErrorCodes::LogonFailure) { + throw new AuthenticationException(); + } + if (substr($line, -26) === ErrorCodes::BadHostName) { + throw new InvalidHostException(); + } + if (substr($line, -22) === ErrorCodes::Unsuccessful) { + throw new InvalidHostException(); + } + if (substr($line, -28) === ErrorCodes::ConnectionRefused) { + throw new InvalidHostException(); + } + } + + public function close($terminate = true) { + if (is_resource($this->getInputStream())) { + $this->write('close' . PHP_EOL); + } + parent::close($terminate); + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/ErrorCodes.php b/apps/files_external/3rdparty/icewind/smb/src/ErrorCodes.php new file mode 100644 index 00000000000..d9f2507cba9 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/ErrorCodes.php @@ -0,0 +1,28 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB; + +class ErrorCodes { + /** + * connection errors + */ + const LogonFailure = 'NT_STATUS_LOGON_FAILURE'; + const BadHostName = 'NT_STATUS_BAD_NETWORK_NAME'; + const Unsuccessful = 'NT_STATUS_UNSUCCESSFUL'; + const ConnectionRefused = 'NT_STATUS_CONNECTION_REFUSED'; + + const PathNotFound = 'NT_STATUS_OBJECT_PATH_NOT_FOUND'; + const NoSuchFile = 'NT_STATUS_NO_SUCH_FILE'; + const ObjectNotFound = 'NT_STATUS_OBJECT_NAME_NOT_FOUND'; + const NameCollision = 'NT_STATUS_OBJECT_NAME_COLLISION'; + const AccessDenied = 'NT_STATUS_ACCESS_DENIED'; + const DirectoryNotEmpty = 'NT_STATUS_DIRECTORY_NOT_EMPTY'; + const FileIsADirectory = 'NT_STATUS_FILE_IS_A_DIRECTORY'; + const NotADirectory = 'NT_STATUS_NOT_A_DIRECTORY'; + const SharingViolation = 'NT_STATUS_SHARING_VIOLATION'; +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/AccessDeniedException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/AccessDeniedException.php new file mode 100644 index 00000000000..4b7d22b3540 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/AccessDeniedException.php @@ -0,0 +1,10 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Exception; + +class AccessDeniedException extends ConnectException {} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/AlreadyExistsException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/AlreadyExistsException.php new file mode 100644 index 00000000000..4636b9d1786 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/AlreadyExistsException.php @@ -0,0 +1,10 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Exception; + +class AlreadyExistsException extends InvalidRequestException {} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/AuthenticationException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/AuthenticationException.php new file mode 100644 index 00000000000..ddf5d7e34dc --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/AuthenticationException.php @@ -0,0 +1,10 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Exception; + +class AuthenticationException extends ConnectException{} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/ConnectException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/ConnectException.php new file mode 100644 index 00000000000..310d441bf5c --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/ConnectException.php @@ -0,0 +1,10 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Exception; + +class ConnectException extends Exception {} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/ConnectionException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/ConnectionException.php new file mode 100644 index 00000000000..21033560fc0 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/ConnectionException.php @@ -0,0 +1,10 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Exception; + +class ConnectionException extends ConnectException {} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/ConnectionRefusedException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/ConnectionRefusedException.php new file mode 100644 index 00000000000..ffebb4c8a51 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/ConnectionRefusedException.php @@ -0,0 +1,11 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Exception; + +class ConnectionRefusedException extends ConnectException { +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/Exception.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/Exception.php new file mode 100644 index 00000000000..3307ad57a24 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/Exception.php @@ -0,0 +1,10 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Exception; + +class Exception extends \Exception {} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/FileInUseException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/FileInUseException.php new file mode 100644 index 00000000000..46460eb6936 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/FileInUseException.php @@ -0,0 +1,10 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Exception; + +class FileInUseException extends InvalidRequestException {} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/ForbiddenException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/ForbiddenException.php new file mode 100644 index 00000000000..117d6a438ea --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/ForbiddenException.php @@ -0,0 +1,10 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Exception; + +class ForbiddenException extends InvalidRequestException {} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/HostDownException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/HostDownException.php new file mode 100644 index 00000000000..9ae762b6108 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/HostDownException.php @@ -0,0 +1,11 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Exception; + +class HostDownException extends ConnectException { +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/InvalidHostException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/InvalidHostException.php new file mode 100644 index 00000000000..4b17f1a4de6 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/InvalidHostException.php @@ -0,0 +1,10 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Exception; + +class InvalidHostException extends ConnectException {} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/InvalidRequestException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/InvalidRequestException.php new file mode 100644 index 00000000000..0dccd8b909e --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/InvalidRequestException.php @@ -0,0 +1,31 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Exception; + +class InvalidRequestException extends Exception { + /** + * @var string + */ + protected $path; + + /** + * @param string $path + * @param int $code + */ + public function __construct($path, $code = 0) { + parent::__construct('Invalid request for ' . $path, $code); + $this->path = $path; + } + + /** + * @return string + */ + public function getPath() { + return $this->path; + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/InvalidTypeException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/InvalidTypeException.php new file mode 100644 index 00000000000..63b79305ad4 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/InvalidTypeException.php @@ -0,0 +1,10 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Exception; + +class InvalidTypeException extends InvalidRequestException {} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/NoRouteToHostException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/NoRouteToHostException.php new file mode 100644 index 00000000000..03daf36d610 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/NoRouteToHostException.php @@ -0,0 +1,11 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Exception; + +class NoRouteToHostException extends ConnectException { +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/NotEmptyException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/NotEmptyException.php new file mode 100644 index 00000000000..789a76bcb9e --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/NotEmptyException.php @@ -0,0 +1,10 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Exception; + +class NotEmptyException extends InvalidRequestException {} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/NotFoundException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/NotFoundException.php new file mode 100644 index 00000000000..9ce97cd535b --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/NotFoundException.php @@ -0,0 +1,10 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Exception; + +class NotFoundException extends InvalidRequestException {} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Exception/TimedOutException.php b/apps/files_external/3rdparty/icewind/smb/src/Exception/TimedOutException.php new file mode 100644 index 00000000000..dd57c9b8ccc --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Exception/TimedOutException.php @@ -0,0 +1,11 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Exception; + +class TimedOutException extends ConnectException { +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/FileInfo.php b/apps/files_external/3rdparty/icewind/smb/src/FileInfo.php new file mode 100644 index 00000000000..ef9121a8f57 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/FileInfo.php @@ -0,0 +1,126 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB; + +class FileInfo implements IFileInfo { + /* + * Mappings of the DOS mode bits, as returned by smbc_getxattr() when the + * attribute name "system.dos_attr.mode" (or "system.dos_attr.*" or + * "system.*") is specified. + */ + const MODE_READONLY = 0x01; + const MODE_HIDDEN = 0x02; + const MODE_SYSTEM = 0x04; + const MODE_VOLUME_ID = 0x08; + const MODE_DIRECTORY = 0x10; + const MODE_ARCHIVE = 0x20; + const MODE_NORMAL = 0x80; + + /** + * @var string + */ + protected $path; + + /** + * @var string + */ + protected $name; + + /** + * @var int + */ + protected $size; + + /** + * @var int + */ + protected $time; + + /** + * @var int + */ + protected $mode; + + /** + * @param string $path + * @param string $name + * @param int $size + * @param int $time + * @param int $mode + */ + public function __construct($path, $name, $size, $time, $mode) { + $this->path = $path; + $this->name = $name; + $this->size = $size; + $this->time = $time; + $this->mode = $mode; + } + + /** + * @return string + */ + public function getPath() { + return $this->path; + } + + /** + * @return string + */ + public function getName() { + return $this->name; + } + + /** + * @return int + */ + public function getSize() { + return $this->size; + } + + /** + * @return int + */ + public function getMTime() { + return $this->time; + } + + /** + * @return bool + */ + public function isDirectory() { + return (bool)($this->mode & self::MODE_DIRECTORY); + } + + /** + * @return bool + */ + public function isReadOnly() { + return (bool)($this->mode & self::MODE_READONLY); + } + + /** + * @return bool + */ + public function isHidden() { + return (bool)($this->mode & self::MODE_HIDDEN); + } + + /** + * @return bool + */ + public function isSystem() { + return (bool)($this->mode & self::MODE_SYSTEM); + } + + /** + * @return bool + */ + public function isArchived() { + return (bool)($this->mode & self::MODE_ARCHIVE); + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/IFileInfo.php b/apps/files_external/3rdparty/icewind/smb/src/IFileInfo.php new file mode 100644 index 00000000000..16ea8cfbd04 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/IFileInfo.php @@ -0,0 +1,55 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB; + +interface IFileInfo { + /** + * @return string + */ + public function getPath(); + + /** + * @return string + */ + public function getName(); + + /** + * @return int + */ + public function getSize(); + + /** + * @return int + */ + public function getMTime(); + + /** + * @return bool + */ + public function isDirectory(); + + /** + * @return bool + */ + public function isReadOnly(); + + /** + * @return bool + */ + public function isHidden(); + + /** + * @return bool + */ + public function isSystem(); + + /** + * @return bool + */ + public function isArchived(); +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/IShare.php b/apps/files_external/3rdparty/icewind/smb/src/IShare.php new file mode 100644 index 00000000000..4851e9de053 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/IShare.php @@ -0,0 +1,134 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB; + +interface IShare { + /** + * Get the name of the share + * + * @return string + */ + public function getName(); + + /** + * Download a remote file + * + * @param string $source remove file + * @param string $target local file + * @return bool + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function get($source, $target); + + /** + * Upload a local file + * + * @param string $source local file + * @param string $target remove file + * @return bool + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function put($source, $target); + + /** + * Open a readable stream top a remote file + * + * @param string $source + * @return resource a read only stream with the contents of the remote file + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function read($source); + + /** + * Open a writable stream to a remote file + * + * @param string $target + * @return resource a write only stream to upload a remote file + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function write($target); + + /** + * Rename a remote file + * + * @param string $from + * @param string $to + * @return bool + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\AlreadyExistsException + */ + public function rename($from, $to); + + /** + * Delete a file on the share + * + * @param string $path + * @return bool + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function del($path); + + /** + * List the content of a remote folder + * + * @param $path + * @return \Icewind\SMB\IFileInfo[] + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function dir($path); + + /** + * @param string $path + * @return \Icewind\SMB\IFileInfo + * + * @throws \Icewind\SMB\Exception\NotFoundException + */ + public function stat($path); + + /** + * Create a folder on the share + * + * @param string $path + * @return bool + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\AlreadyExistsException + */ + public function mkdir($path); + + /** + * Remove a folder on the share + * + * @param string $path + * @return bool + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function rmdir($path); + + /** + * @param string $path + * @param int $mode a combination of FileInfo::MODE_READONLY, FileInfo::MODE_ARCHIVE, FileInfo::MODE_SYSTEM and FileInfo::MODE_HIDDEN, FileInfo::NORMAL + * @return mixed + */ + public function setMode($path, $mode); +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/NativeFileInfo.php b/apps/files_external/3rdparty/icewind/smb/src/NativeFileInfo.php new file mode 100644 index 00000000000..6ef5cf0c5b9 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/NativeFileInfo.php @@ -0,0 +1,142 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB; + +class NativeFileInfo implements IFileInfo { + const MODE_FILE = 0100000; + + /** + * @var string + */ + protected $path; + + /** + * @var string + */ + protected $name; + + /** + * @var \Icewind\SMB\NativeShare + */ + protected $share; + + /** + * @var array | null + */ + protected $statCache; + + /** + * @var int + */ + protected $modeCache; + + /** + * @param \Icewind\SMB\NativeShare $share + * @param string $path + * @param string $name + * @param array $stat + */ + public function __construct($share, $path, $name, $stat = null) { + $this->share = $share; + $this->path = $path; + $this->name = $name; + $this->statCache = $stat; + } + + /** + * @return string + */ + public function getPath() { + return $this->path; + } + + /** + * @return string + */ + public function getName() { + return $this->name; + } + + /** + * @return array + */ + protected function stat() { + if (!$this->statCache) { + $this->statCache = $this->share->getStat($this->getPath()); + } + return $this->statCache; + } + + /** + * @return int + */ + public function getSize() { + $stat = $this->stat(); + return $stat['size']; + } + + /** + * @return int + */ + public function getMTime() { + $stat = $this->stat(); + return $stat['mtime']; + } + + /** + * @return bool + */ + public function isDirectory() { + $stat = $this->stat(); + return !($stat['mode'] & self::MODE_FILE); + } + + /** + * @return int + */ + protected function getMode() { + if (!$this->modeCache) { + $attribute = $this->share->getAttribute($this->path, 'system.dos_attr.mode'); + // parse hex string + $this->modeCache = (int)hexdec(substr($attribute, 2)); + } + return $this->modeCache; + } + + /** + * @return bool + */ + public function isReadOnly() { + $mode = $this->getMode(); + return (bool)($mode & FileInfo::MODE_READONLY); + } + + /** + * @return bool + */ + public function isHidden() { + $mode = $this->getMode(); + return (bool)($mode & FileInfo::MODE_HIDDEN); + } + + /** + * @return bool + */ + public function isSystem() { + $mode = $this->getMode(); + return (bool)($mode & FileInfo::MODE_SYSTEM); + } + + /** + * @return bool + */ + public function isArchived() { + $mode = $this->getMode(); + return (bool)($mode & FileInfo::MODE_ARCHIVE); + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/NativeServer.php b/apps/files_external/3rdparty/icewind/smb/src/NativeServer.php new file mode 100644 index 00000000000..4628e3ec108 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/NativeServer.php @@ -0,0 +1,60 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB; + +class NativeServer extends Server { + /** + * @var \Icewind\SMB\NativeState + */ + protected $state; + + /** + * @param string $host + * @param string $user + * @param string $password + */ + public function __construct($host, $user, $password) { + parent::__construct($host, $user, $password); + $this->state = new NativeState(); + } + + protected function connect() { + $user = $this->getUser(); + $workgroup = null; + if (strpos($user, '/')) { + list($workgroup, $user) = explode($user, '/'); + } + $this->state->init($workgroup, $user, $this->getPassword()); + } + + /** + * @return \Icewind\SMB\IShare[] + * @throws \Icewind\SMB\Exception\AuthenticationException + * @throws \Icewind\SMB\Exception\InvalidHostException + */ + public function listShares() { + $this->connect(); + $shares = array(); + $dh = $this->state->opendir('smb://' . $this->getHost()); + while ($share = $this->state->readdir($dh)) { + if ($share['type'] === 'file share') { + $shares[] = $this->getShare($share['name']); + } + } + $this->state->closedir($dh); + return $shares; + } + + /** + * @param string $name + * @return \Icewind\SMB\IShare + */ + public function getShare($name) { + return new NativeShare($this, $name); + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/NativeShare.php b/apps/files_external/3rdparty/icewind/smb/src/NativeShare.php new file mode 100644 index 00000000000..c84e9611667 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/NativeShare.php @@ -0,0 +1,288 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB; + +class NativeShare implements IShare { + /** + * @var Server $server + */ + private $server; + + /** + * @var string $name + */ + private $name; + + /** + * @var \Icewind\SMB\NativeState $state + */ + private $state; + + /** + * @param Server $server + * @param string $name + */ + public function __construct($server, $name) { + $this->server = $server; + $this->name = $name; + $this->state = new NativeState(); + } + + /** + * @throws \Icewind\SMB\Exception\ConnectionException + * @throws \Icewind\SMB\Exception\AuthenticationException + * @throws \Icewind\SMB\Exception\InvalidHostException + */ + protected function connect() { + if ($this->state and $this->state instanceof NativeShare) { + return; + } + + $user = $this->server->getUser(); + if (strpos($user, '/')) { + list($workgroup, $user) = explode('/', $user); + } elseif (strpos($user, '\\')) { + list($workgroup, $user) = explode('\\', $user); + } else { + $workgroup = null; + } + $this->state->init($workgroup, $user, $this->server->getPassword()); + } + + /** + * Get the name of the share + * + * @return string + */ + public function getName() { + return $this->name; + } + + private function buildUrl($path) { + $url = sprintf('smb://%s/%s', $this->server->getHost(), $this->name); + if ($path) { + $path = trim($path, '/'); + $url .= '/'; + $url .= implode('/', array_map('rawurlencode', explode('/', $path))); + } + return $url; + } + + /** + * List the content of a remote folder + * + * @param string $path + * @return \Icewind\SMB\IFileInfo[] + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function dir($path) { + $this->connect(); + $files = array(); + + $dh = $this->state->opendir($this->buildUrl($path)); + while ($file = $this->state->readdir($dh)) { + $name = $file['name']; + if ($name !== '.' and $name !== '..') { + $files [] = new NativeFileInfo($this, $path . '/' . $name, $name); + } + } + + $this->state->closedir($dh); + return $files; + } + + /** + * @param string $path + * @return \Icewind\SMB\IFileInfo[] + */ + public function stat($path) { + return new NativeFileInfo($this, $path, basename($path), $this->getStat($path)); + } + + public function getStat($path) { + $this->connect(); + return $this->state->stat($this->buildUrl($path)); + } + + /** + * Create a folder on the share + * + * @param string $path + * @return bool + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\AlreadyExistsException + */ + public function mkdir($path) { + $this->connect(); + return $this->state->mkdir($this->buildUrl($path)); + } + + /** + * Remove a folder on the share + * + * @param string $path + * @return bool + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function rmdir($path) { + $this->connect(); + return $this->state->rmdir($this->buildUrl($path)); + } + + /** + * Delete a file on the share + * + * @param string $path + * @return bool + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function del($path) { + return $this->state->unlink($this->buildUrl($path)); + } + + /** + * Rename a remote file + * + * @param string $from + * @param string $to + * @return bool + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\AlreadyExistsException + */ + public function rename($from, $to) { + $this->connect(); + return $this->state->rename($this->buildUrl($from), $this->buildUrl($to)); + } + + /** + * Upload a local file + * + * @param string $source local file + * @param string $target remove file + * @return bool + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function put($source, $target) { + $this->connect(); + $sourceHandle = fopen($source, 'rb'); + $targetHandle = $this->state->create($this->buildUrl($target)); + + while ($data = fread($sourceHandle, 4096)) { + $this->state->write($targetHandle, $data); + } + $this->state->close($targetHandle); + return true; + } + + /** + * Download a remote file + * + * @param string $source remove file + * @param string $target local file + * @return bool + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function get($source, $target) { + $this->connect(); + $sourceHandle = $this->state->open($this->buildUrl($source), 'r'); + $targetHandle = fopen($target, 'wb'); + + while ($data = $this->state->read($sourceHandle, 4096)) { + fwrite($targetHandle, $data); + } + $this->state->close($sourceHandle); + return true; + } + + /** + * Open a readable stream top a remote file + * + * @param string $source + * @return resource a read only stream with the contents of the remote file + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function read($source) { + $this->connect(); + $handle = $this->state->open($this->buildUrl($source), 'r'); + return NativeStream::wrap($this->state, $handle, 'r'); + } + + /** + * Open a readable stream top a remote file + * + * @param string $source + * @return resource a read only stream with the contents of the remote file + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function write($source) { + $this->connect(); + $handle = $this->state->create($this->buildUrl($source)); + return NativeStream::wrap($this->state, $handle, 'w'); + } + + /** + * Get extended attributes for the path + * + * @param string $path + * @param string $attribute attribute to get the info + * @return string the attribute value + */ + public function getAttribute($path, $attribute) { + $this->connect(); + + $result = $this->state->getxattr($this->buildUrl($path), $attribute); + return $result; + } + + /** + * Get extended attributes for the path + * + * @param string $path + * @param string $attribute attribute to get the info + * @param mixed $value + * @return string the attribute value + */ + public function setAttribute($path, $attribute, $value) { + $this->connect(); + + if ($attribute === 'system.dos_attr.mode' and is_int($value)) { + $value = '0x' . dechex($value); + } + + return $this->state->setxattr($this->buildUrl($path), $attribute, $value); + } + + /** + * @param string $path + * @param int $mode a combination of FileInfo::MODE_READONLY, FileInfo::MODE_ARCHIVE, FileInfo::MODE_SYSTEM and FileInfo::MODE_HIDDEN, FileInfo::NORMAL + * @return mixed + */ + public function setMode($path, $mode) { + return $this->setAttribute($path, 'system.dos_attr.mode', $mode); + } + + public function __destruct() { + unset($this->state); + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/NativeState.php b/apps/files_external/3rdparty/icewind/smb/src/NativeState.php new file mode 100644 index 00000000000..e3e344d9e01 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/NativeState.php @@ -0,0 +1,308 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB; + +use Icewind\SMB\Exception\AlreadyExistsException; +use Icewind\SMB\Exception\ConnectionRefusedException; +use Icewind\SMB\Exception\Exception; +use Icewind\SMB\Exception\ForbiddenException; +use Icewind\SMB\Exception\HostDownException; +use Icewind\SMB\Exception\InvalidTypeException; +use Icewind\SMB\Exception\NoRouteToHostException; +use Icewind\SMB\Exception\NotEmptyException; +use Icewind\SMB\Exception\NotFoundException; +use Icewind\SMB\Exception\TimedOutException; + +/** + * Low level wrapper for libsmbclient-php for error handling + */ +class NativeState { + /** + * @var resource + */ + protected $state; + + protected $handlerSet = false; + + protected $connected = false; + + protected function handleError($path) { + $error = smbclient_state_errno($this->state); + switch ($error) { + // see error.h + case 0; + return; + case 1: + case 13: + throw new ForbiddenException($path, $error); + case 2: + throw new NotFoundException($path, $error); + case 17: + throw new AlreadyExistsException($path, $error); + case 20: + throw new InvalidTypeException($path, $error); + case 21: + throw new InvalidTypeException($path, $error); + case 39: + throw new NotEmptyException($path, $error); + case 110: + throw new TimedOutException($path, $error); + case 111: + throw new ConnectionRefusedException($path, $error); + case 112: + throw new HostDownException($path, $error); + case 113: + throw new NoRouteToHostException($path, $error); + default: + $message = 'Unknown error (' . $error . ')'; + if ($path) { + $message .= ' for ' . $path; + } + throw new Exception($message, $error); + } + } + + protected function testResult($result, $path) { + if ($result === false or $result === null) { + $this->handleError($path); + } + } + + /** + * @param string $workGroup + * @param string $user + * @param string $password + * @return bool + */ + public function init($workGroup, $user, $password) { + if ($this->connected) { + return true; + } + $this->state = smbclient_state_new(); + $result = @smbclient_state_init($this->state, $workGroup, $user, $password); + + $this->testResult($result, ''); + $this->connected = true; + return $result; + } + + /** + * @param string $uri + * @return resource + */ + public function opendir($uri) { + $result = @smbclient_opendir($this->state, $uri); + + $this->testResult($result, $uri); + return $result; + } + + /** + * @param resource $dir + * @return array + */ + public function readdir($dir) { + $result = @smbclient_readdir($this->state, $dir); + + $this->testResult($result, $dir); + return $result; + } + + /** + * @param $dir + * @return bool + */ + public function closedir($dir) { + $result = smbclient_closedir($this->state, $dir); + + $this->testResult($result, $dir); + return $result; + } + + /** + * @param string $old + * @param string $new + * @return bool + */ + public function rename($old, $new) { + $result = @smbclient_rename($this->state, $old, $this->state, $new); + + $this->testResult($result, $new); + return $result; + } + + /** + * @param string $uri + * @return bool + */ + public function unlink($uri) { + $result = @smbclient_unlink($this->state, $uri); + + $this->testResult($result, $uri); + return $result; + } + + /** + * @param string $uri + * @param int $mask + * @return bool + */ + public function mkdir($uri, $mask = 0777) { + $result = @smbclient_mkdir($this->state, $uri, $mask); + + $this->testResult($result, $uri); + return $result; + } + + /** + * @param string $uri + * @return bool + */ + public function rmdir($uri) { + $result = @smbclient_rmdir($this->state, $uri); + + $this->testResult($result, $uri); + return $result; + } + + /** + * @param string $uri + * @return array + */ + public function stat($uri) { + $result = @smbclient_stat($this->state, $uri); + + $this->testResult($result, $uri); + return $result; + } + + /** + * @param resource $file + * @return array + */ + public function fstat($file) { + $result = @smbclient_fstat($this->state, $file); + + $this->testResult($result, $file); + return $result; + } + + /** + * @param string $uri + * @param string $mode + * @param int $mask + * @return resource + */ + public function open($uri, $mode, $mask = 0666) { + $result = @smbclient_open($this->state, $uri, $mode, $mask); + + $this->testResult($result, $uri); + return $result; + } + + /** + * @param string $uri + * @param int $mask + * @return resource + */ + public function create($uri, $mask = 0666) { + $result = @smbclient_creat($this->state, $uri, $mask); + + $this->testResult($result, $uri); + return $result; + } + + /** + * @param resource $file + * @param int $bytes + * @return string + */ + public function read($file, $bytes) { + $result = @smbclient_read($this->state, $file, $bytes); + + $this->testResult($result, $file); + return $result; + } + + /** + * @param resource $file + * @param string $data + * @param int $length + * @return int + */ + public function write($file, $data, $length = null) { + $result = @smbclient_write($this->state, $file, $data, $length); + + $this->testResult($result, $file); + return $result; + } + + /** + * @param resource $file + * @param int $offset + * @param int $whence SEEK_SET | SEEK_CUR | SEEK_END + * @return int | bool new file offset as measured from the start of the file on success, false on failure. + */ + public function lseek($file, $offset, $whence = SEEK_SET) { + $result = @smbclient_lseek($this->state, $file, $offset, $whence); + + $this->testResult($result, $file); + return $result; + } + + /** + * @param resource $file + * @param int $size + * @return bool + */ + public function ftruncate($file, $size) { + $result = @smbclient_ftruncate($this->state, $file, $size); + + $this->testResult($result, $file); + return $result; + } + + public function close($file) { + $result = @smbclient_close($this->state, $file); + + $this->testResult($result, $file); + return $result; + } + + /** + * @param string $uri + * @param string $key + * @return string + */ + public function getxattr($uri, $key) { + $result = @smbclient_getxattr($this->state, $uri, $key); + + $this->testResult($result, $uri); + return $result; + } + + /** + * @param string $uri + * @param string $key + * @param string $value + * @param int $flags + * @return mixed + */ + public function setxattr($uri, $key, $value, $flags = 0) { + $result = @smbclient_setxattr($this->state, $uri, $key, $value, $flags); + + $this->testResult($result, $uri); + return $result; + } + + public function __destruct() { + if ($this->connected) { + smbclient_state_free($this->state); + } + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/NativeStream.php b/apps/files_external/3rdparty/icewind/smb/src/NativeStream.php new file mode 100644 index 00000000000..07bd2f1e797 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/NativeStream.php @@ -0,0 +1,114 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB; + +use Icewind\SMB\Exception\InvalidRequestException; +use Icewind\Streams\File; + +class NativeStream implements File { + /** + * @var resource + */ + public $context; + + /** + * @var \Icewind\SMB\NativeState + */ + private $state; + + /** + * @var resource + */ + private $handle; + + /** + * @var bool + */ + private $eof = false; + + /** + * Wrap a stream from libsmbclient-php into a regular php stream + * + * @param \Icewind\SMB\NativeState $state + * @param resource $smbStream + * @param string $mode + * @return resource + */ + public static function wrap($state, $smbStream, $mode) { + stream_wrapper_register('nativesmb', '\Icewind\SMB\NativeStream'); + $context = stream_context_create(array( + 'nativesmb' => array( + 'state' => $state, + 'handle' => $smbStream + ) + )); + $fh = fopen('nativesmb://', $mode, false, $context); + stream_wrapper_unregister('nativesmb'); + return $fh; + } + + public function stream_close() { + return $this->state->close($this->handle); + } + + public function stream_eof() { + return $this->eof; + } + + public function stream_flush() { + } + + + public function stream_open($path, $mode, $options, &$opened_path) { + $context = stream_context_get_options($this->context); + $this->state = $context['nativesmb']['state']; + $this->handle = $context['nativesmb']['handle']; + return true; + } + + public function stream_read($count) { + $result = $this->state->read($this->handle, $count); + if (strlen($result) < $count) { + $this->eof = true; + } + return $result; + } + + public function stream_seek($offset, $whence = SEEK_SET) { + $this->eof = false; + try { + return $this->state->lseek($this->handle, $offset, $whence) !== false; + } catch (InvalidRequestException $e) { + return false; + } + } + + public function stream_stat() { + return $this->state->fstat($this->handle); + } + + public function stream_tell() { + return $this->state->lseek($this->handle, 0, SEEK_CUR); + } + + public function stream_write($data) { + return $this->state->write($this->handle, $data); + } + + public function stream_truncate($size) { + return $this->state->ftruncate($this->handle, $size); + } + + public function stream_set_option($option, $arg1, $arg2) { + return false; + } + + public function stream_lock($operation) { + return false; + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Parser.php b/apps/files_external/3rdparty/icewind/smb/src/Parser.php new file mode 100644 index 00000000000..381c4917a92 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Parser.php @@ -0,0 +1,130 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB; + +use Icewind\SMB\Exception\AccessDeniedException; +use Icewind\SMB\Exception\AlreadyExistsException; +use Icewind\SMB\Exception\Exception; +use Icewind\SMB\Exception\FileInUseException; +use Icewind\SMB\Exception\InvalidTypeException; +use Icewind\SMB\Exception\NotEmptyException; +use Icewind\SMB\Exception\NotFoundException; + +class Parser { + /** + * @var \Icewind\SMB\TimeZoneProvider + */ + protected $timeZoneProvider; + + /** + * @param \Icewind\SMB\TimeZoneProvider $timeZoneProvider + */ + public function __construct(TimeZoneProvider $timeZoneProvider) { + $this->timeZoneProvider = $timeZoneProvider; + } + + public function checkForError($output, $path) { + if (count($output) === 0) { + return true; + } else { + if (strpos($output[0], 'does not exist')) { + throw new NotFoundException($path); + } + $parts = explode(' ', $output[0]); + $error = false; + foreach ($parts as $part) { + if (substr($part, 0, 9) === 'NT_STATUS') { + $error = $part; + } + } + switch ($error) { + case ErrorCodes::PathNotFound: + case ErrorCodes::ObjectNotFound: + case ErrorCodes::NoSuchFile: + throw new NotFoundException($path); + case ErrorCodes::NameCollision: + throw new AlreadyExistsException($path); + case ErrorCodes::AccessDenied: + throw new AccessDeniedException($path); + case ErrorCodes::DirectoryNotEmpty: + throw new NotEmptyException($path); + case ErrorCodes::FileIsADirectory: + case ErrorCodes::NotADirectory: + throw new InvalidTypeException($path); + case ErrorCodes::SharingViolation: + throw new FileInUseException($path); + default: + $message = 'Unknown error (' . $error . ')'; + if ($path) { + $message .= ' for ' . $path; + } + throw new Exception($message); + } + } + } + + public function parseMode($mode) { + $result = 0; + $modeStrings = array( + 'R' => FileInfo::MODE_READONLY, + 'H' => FileInfo::MODE_HIDDEN, + 'S' => FileInfo::MODE_SYSTEM, + 'D' => FileInfo::MODE_DIRECTORY, + 'A' => FileInfo::MODE_ARCHIVE, + 'N' => FileInfo::MODE_NORMAL + ); + foreach ($modeStrings as $char => $val) { + if (strpos($mode, $char) !== false) { + $result |= $val; + } + } + return $result; + } + + public function parseStat($output) { + $mtime = 0; + $mode = 0; + $size = 0; + foreach ($output as $line) { + list($name, $value) = explode(':', $line, 2); + $value = trim($value); + if ($name === 'write_time') { + $mtime = strtotime($value); + } else if ($name === 'attributes') { + $mode = hexdec(substr($value, 1, -1)); + } else if ($name === 'stream') { + list(, $size,) = explode(' ', $value); + $size = intval($size); + } + } + return array( + 'mtime' => $mtime, + 'mode' => $mode, + 'size' => $size + ); + } + + public function parseDir($output, $basePath) { + //last line is used space + array_pop($output); + $regex = '/^\s*(.*?)\s\s\s\s+(?:([NDHARS]*)\s+)?([0-9]+)\s+(.*)$/'; + //2 spaces, filename, optional type, size, date + $content = array(); + foreach ($output as $line) { + if (preg_match($regex, $line, $matches)) { + list(, $name, $mode, $size, $time) = $matches; + if ($name !== '.' and $name !== '..') { + $mode = $this->parseMode($mode); + $time = strtotime($time . ' ' . $this->timeZoneProvider->get()); + $content[] = new FileInfo($basePath . '/' . $name, $name, $size, $time, $mode); + } + } + } + return $content; + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/RawConnection.php b/apps/files_external/3rdparty/icewind/smb/src/RawConnection.php new file mode 100644 index 00000000000..926ce3714cf --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/RawConnection.php @@ -0,0 +1,165 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB; + +use Icewind\SMB\Exception\ConnectionException; + +class RawConnection { + /** + * @var string + */ + private $command; + + /** + * @var string[] + */ + private $env; + + /** + * @var resource[] $pipes + * + * $pipes[0] holds STDIN for smbclient + * $pipes[1] holds STDOUT for smbclient + */ + private $pipes; + + /** + * @var resource $process + */ + private $process; + + public function __construct($command, $env = array()) { + $this->command = $command; + $this->env = $env; + $this->connect(); + } + + private function connect() { + $descriptorSpec = array( + 0 => array('pipe', 'r'), // child reads from stdin + 1 => array('pipe', 'w'), // child writes to stdout + 2 => array('pipe', 'w'), // child writes to stderr + 3 => array('pipe', 'r'), // child reads from fd#3 + 4 => array('pipe', 'r'), // child reads from fd#4 + 5 => array('pipe', 'w') // child writes to fd#5 + ); + setlocale(LC_ALL, Server::LOCALE); + $env = array_merge($this->env, array( + 'CLI_FORCE_INTERACTIVE' => 'y', // Needed or the prompt isn't displayed!! + 'LC_ALL' => Server::LOCALE, + 'LANG' => Server::LOCALE, + 'COLUMNS' => 8192 // prevent smbclient from line-wrapping it's output + )); + $this->process = proc_open($this->command, $descriptorSpec, $this->pipes, '/', $env); + if (!$this->isValid()) { + throw new ConnectionException(); + } + } + + /** + * check if the connection is still active + * + * @return bool + */ + public function isValid() { + if (is_resource($this->process)) { + $status = proc_get_status($this->process); + return $status['running']; + } else { + return false; + } + } + + /** + * send input to the process + * + * @param string $input + */ + public function write($input) { + fwrite($this->getInputStream(), $input); + fflush($this->getInputStream()); + } + + /** + * read a line of output + * + * @return string + */ + public function readLine() { + return stream_get_line($this->getOutputStream(), 4086, "\n"); + } + + /** + * get all output until the process closes + * + * @return array + */ + public function readAll() { + $output = array(); + while ($line = $this->readLine()) { + $output[] = $line; + } + return $output; + } + + public function getInputStream() { + return $this->pipes[0]; + } + + public function getOutputStream() { + return $this->pipes[1]; + } + + public function getErrorStream() { + return $this->pipes[2]; + } + + public function getAuthStream() { + return $this->pipes[3]; + } + + public function getFileInputStream() { + return $this->pipes[4]; + } + + public function getFileOutputStream() { + return $this->pipes[5]; + } + + public function writeAuthentication($user, $password) { + $auth = ($password === false) + ? "username=$user" + : "username=$user\npassword=$password"; + + if (fwrite($this->getAuthStream(), $auth) === false) { + fclose($this->getAuthStream()); + return false; + } + fclose($this->getAuthStream()); + return true; + } + + public function close($terminate = true) { + if (!is_resource($this->process)) { + return; + } + if ($terminate) { + proc_terminate($this->process); + } + proc_close($this->process); + } + + public function reconnect() { + $this->close(); + $this->connect(); + } + + public function __destruct() { + $this->close(); + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Server.php b/apps/files_external/3rdparty/icewind/smb/src/Server.php new file mode 100644 index 00000000000..f7227d4baef --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Server.php @@ -0,0 +1,141 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB; + +use Icewind\SMB\Exception\AuthenticationException; +use Icewind\SMB\Exception\InvalidHostException; + +class Server { + const CLIENT = 'smbclient'; + const LOCALE = 'en_US.UTF-8'; + + /** + * @var string $host + */ + protected $host; + + /** + * @var string $user + */ + protected $user; + + /** + * @var string $password + */ + protected $password; + + /** + * Check if the smbclient php extension is available + * + * @return bool + */ + public static function NativeAvailable() { + return function_exists('smbclient_state_new'); + } + + /** + * @param string $host + * @param string $user + * @param string $password + */ + public function __construct($host, $user, $password) { + $this->host = $host; + $this->user = $user; + $this->password = $password; + } + + /** + * @return string + */ + public function getAuthString() { + return $this->user . '%' . $this->password; + } + + /** + * @return string + */ + public function getUser() { + return $this->user; + } + + /** + * @return string + */ + public function getPassword() { + return $this->password; + } + + /** + * return string + */ + public function getHost() { + return $this->host; + } + + /** + * @return \Icewind\SMB\IShare[] + * + * @throws \Icewind\SMB\Exception\AuthenticationException + * @throws \Icewind\SMB\Exception\InvalidHostException + */ + public function listShares() { + $command = Server::CLIENT . ' --authentication-file=/proc/self/fd/3' . + ' -gL ' . escapeshellarg($this->getHost()); + $connection = new RawConnection($command); + $connection->writeAuthentication($this->getUser(), $this->getPassword()); + $output = $connection->readAll(); + + $line = $output[0]; + + $line = rtrim($line, ')'); + if (substr($line, -23) === ErrorCodes::LogonFailure) { + throw new AuthenticationException(); + } + if (substr($line, -26) === ErrorCodes::BadHostName) { + throw new InvalidHostException(); + } + if (substr($line, -22) === ErrorCodes::Unsuccessful) { + throw new InvalidHostException(); + } + if (substr($line, -28) === ErrorCodes::ConnectionRefused) { + throw new InvalidHostException(); + } + + $shareNames = array(); + foreach ($output as $line) { + if (strpos($line, '|')) { + list($type, $name, $description) = explode('|', $line); + if (strtolower($type) === 'disk') { + $shareNames[$name] = $description; + } + } + } + + $shares = array(); + foreach ($shareNames as $name => $description) { + $shares[] = $this->getShare($name); + } + return $shares; + } + + /** + * @param string $name + * @return \Icewind\SMB\IShare + */ + public function getShare($name) { + return new Share($this, $name); + } + + /** + * @return string + */ + public function getTimeZone() { + $command = 'net time zone -S ' . escapeshellarg($this->getHost()); + return exec($command); + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Share.php b/apps/files_external/3rdparty/icewind/smb/src/Share.php new file mode 100644 index 00000000000..025a84380a1 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Share.php @@ -0,0 +1,395 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB; + +use Icewind\SMB\Exception\AccessDeniedException; +use Icewind\SMB\Exception\AlreadyExistsException; +use Icewind\SMB\Exception\ConnectionException; +use Icewind\SMB\Exception\Exception; +use Icewind\SMB\Exception\FileInUseException; +use Icewind\SMB\Exception\InvalidTypeException; +use Icewind\SMB\Exception\NotEmptyException; +use Icewind\SMB\Exception\NotFoundException; +use Icewind\Streams\CallbackWrapper; + +class Share implements IShare { + /** + * @var Server $server + */ + private $server; + + /** + * @var string $name + */ + private $name; + + /** + * @var Connection $connection + */ + public $connection; + + /** + * @var \Icewind\SMB\Parser + */ + protected $parser; + + /** + * @param Server $server + * @param string $name + */ + public function __construct($server, $name) { + $this->server = $server; + $this->name = $name; + $this->parser = new Parser(new TimeZoneProvider($this->server->getHost())); + } + + /** + * @throws \Icewind\SMB\Exception\ConnectionException + * @throws \Icewind\SMB\Exception\AuthenticationException + * @throws \Icewind\SMB\Exception\InvalidHostException + */ + protected function connect() { + if ($this->connection and $this->connection->isValid()) { + return; + } + $command = sprintf('%s --authentication-file=/proc/self/fd/3 //%s/%s', + Server::CLIENT, + $this->server->getHost(), + $this->name + ); + $this->connection = new Connection($command); + $this->connection->writeAuthentication($this->server->getUser(), $this->server->getPassword()); + if (!$this->connection->isValid()) { + throw new ConnectionException(); + } + } + + protected function reconnect() { + $this->connection->reconnect(); + $this->connection->writeAuthentication($this->server->getUser(), $this->server->getPassword()); + if (!$this->connection->isValid()) { + throw new ConnectionException(); + } + } + + /** + * Get the name of the share + * + * @return string + */ + public function getName() { + return $this->name; + } + + protected function simpleCommand($command, $path) { + $path = $this->escapePath($path); + $cmd = $command . ' ' . $path; + $output = $this->execute($cmd); + return $this->parseOutput($output, $path); + } + + /** + * List the content of a remote folder + * + * @param $path + * @return \Icewind\SMB\IFileInfo[] + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function dir($path) { + $escapedPath = $this->escapePath($path); + $output = $this->execute('cd ' . $escapedPath); + //check output for errors + $this->parseOutput($output, $path); + $output = $this->execute('dir'); + $this->execute('cd /'); + + return $this->parser->parseDir($output, $path); + } + + /** + * @param string $path + * @return \Icewind\SMB\IFileInfo[] + */ + public function stat($path) { + $escapedPath = $this->escapePath($path); + $output = $this->execute('allinfo ' . $escapedPath); + if (count($output) < 3) { + $this->parseOutput($output, $path); + } + $stat = $this->parser->parseStat($output); + return new FileInfo($path, basename($path), $stat['size'], $stat['mtime'], $stat['mode']); + } + + /** + * Create a folder on the share + * + * @param string $path + * @return bool + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\AlreadyExistsException + */ + public function mkdir($path) { + return $this->simpleCommand('mkdir', $path); + } + + /** + * Remove a folder on the share + * + * @param string $path + * @return bool + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function rmdir($path) { + return $this->simpleCommand('rmdir', $path); + } + + /** + * Delete a file on the share + * + * @param string $path + * @param bool $secondTry + * @return bool + * @throws InvalidTypeException + * @throws NotFoundException + * @throws \Exception + */ + public function del($path, $secondTry = false) { + //del return a file not found error when trying to delete a folder + //we catch it so we can check if $path doesn't exist or is of invalid type + try { + return $this->simpleCommand('del', $path); + } catch (NotFoundException $e) { + //no need to do anything with the result, we just check if this throws the not found error + try { + $this->simpleCommand('ls', $path); + } catch (NotFoundException $e2) { + throw $e; + } catch (\Exception $e2) { + throw new InvalidTypeException($path); + } + throw $e; + } catch (FileInUseException $e) { + if ($secondTry) { + throw $e; + } + $this->reconnect(); + return $this->del($path, true); + } + } + + /** + * Rename a remote file + * + * @param string $from + * @param string $to + * @return bool + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\AlreadyExistsException + */ + public function rename($from, $to) { + $path1 = $this->escapePath($from); + $path2 = $this->escapePath($to); + $cmd = 'rename ' . $path1 . ' ' . $path2; + $output = $this->execute($cmd); + return $this->parseOutput($output, $to); + } + + /** + * Upload a local file + * + * @param string $source local file + * @param string $target remove file + * @return bool + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function put($source, $target) { + $path1 = $this->escapeLocalPath($source); //first path is local, needs different escaping + $path2 = $this->escapePath($target); + $output = $this->execute('put ' . $path1 . ' ' . $path2); + return $this->parseOutput($output, $target); + } + + /** + * Download a remote file + * + * @param string $source remove file + * @param string $target local file + * @return bool + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function get($source, $target) { + $path1 = $this->escapePath($source); + $path2 = $this->escapeLocalPath($target); //second path is local, needs different escaping + $output = $this->execute('get ' . $path1 . ' ' . $path2); + return $this->parseOutput($output, $source); + } + + /** + * Open a readable stream to a remote file + * + * @param string $source + * @return resource a read only stream with the contents of the remote file + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function read($source) { + $source = $this->escapePath($source); + // close the single quote, open a double quote where we put the single quote... + $source = str_replace('\'', '\'"\'"\'', $source); + // since returned stream is closed by the caller we need to create a new instance + // since we can't re-use the same file descriptor over multiple calls + $command = sprintf('%s --authentication-file=/proc/self/fd/3 //%s/%s -c \'get %s /proc/self/fd/5\'', + Server::CLIENT, + $this->server->getHost(), + $this->name, + $source + ); + $connection = new Connection($command); + $connection->writeAuthentication($this->server->getUser(), $this->server->getPassword()); + $fh = $connection->getFileOutputStream(); + stream_context_set_option($fh, 'file', 'connection', $connection); + return $fh; + } + + /** + * Open a writable stream to a remote file + * + * @param string $target + * @return resource a write only stream to upload a remote file + * + * @throws \Icewind\SMB\Exception\NotFoundException + * @throws \Icewind\SMB\Exception\InvalidTypeException + */ + public function write($target) { + $target = $this->escapePath($target); + // close the single quote, open a double quote where we put the single quote... + $target = str_replace('\'', '\'"\'"\'', $target); + // since returned stream is closed by the caller we need to create a new instance + // since we can't re-use the same file descriptor over multiple calls + $command = sprintf('%s --authentication-file=/proc/self/fd/3 //%s/%s -c \'put /proc/self/fd/4 %s\'', + Server::CLIENT, + $this->server->getHost(), + $this->name, + $target + ); + $connection = new RawConnection($command); + $connection->writeAuthentication($this->server->getUser(), $this->server->getPassword()); + $fh = $connection->getFileInputStream(); + + // use a close callback to ensure the upload is finished before continuing + // this also serves as a way to keep the connection in scope + return CallbackWrapper::wrap($fh, null, null, function () use ($connection) { + $connection->close(false); // dont terminate, give the upload some time + }); + } + + /** + * @param string $path + * @param int $mode a combination of FileInfo::MODE_READONLY, FileInfo::MODE_ARCHIVE, FileInfo::MODE_SYSTEM and FileInfo::MODE_HIDDEN, FileInfo::NORMAL + * @return mixed + */ + public function setMode($path, $mode) { + $modeString = ''; + $modeMap = array( + FileInfo::MODE_READONLY => 'r', + FileInfo::MODE_HIDDEN => 'h', + FileInfo::MODE_ARCHIVE => 'a', + FileInfo::MODE_SYSTEM => 's' + ); + foreach ($modeMap as $modeByte => $string) { + if ($mode & $modeByte) { + $modeString .= $string; + } + } + $path = $this->escapePath($path); + + // first reset the mode to normal + $cmd = 'setmode ' . $path . ' -rsha'; + $output = $this->execute($cmd); + $this->parseOutput($output, $path); + + // then set the modes we want + $cmd = 'setmode ' . $path . ' ' . $modeString; + $output = $this->execute($cmd); + return $this->parseOutput($output, $path); + } + + /** + * @param string $command + * @return array + */ + protected function execute($command) { + $this->connect(); + $this->connection->write($command . PHP_EOL); + $output = $this->connection->read(); + return $output; + } + + /** + * check output for errors + * + * @param string[] $lines + * @param string $path + * + * @throws NotFoundException + * @throws \Icewind\SMB\Exception\AlreadyExistsException + * @throws \Icewind\SMB\Exception\AccessDeniedException + * @throws \Icewind\SMB\Exception\NotEmptyException + * @throws \Icewind\SMB\Exception\InvalidTypeException + * @throws \Icewind\SMB\Exception\Exception + * @return bool + */ + protected function parseOutput($lines, $path = '') { + $this->parser->checkForError($lines, $path); + } + + /** + * @param string $string + * @return string + */ + protected function escape($string) { + return escapeshellarg($string); + } + + /** + * @param string $path + * @return string + */ + protected function escapePath($path) { + if ($path === '/') { + $path = ''; + } + $path = str_replace('/', '\\', $path); + $path = str_replace('"', '^"', $path); + return '"' . $path . '"'; + } + + /** + * @param string $path + * @return string + */ + protected function escapeLocalPath($path) { + $path = str_replace('"', '\"', $path); + return '"' . $path . '"'; + } + + public function __destruct() { + unset($this->connection); + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php b/apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php new file mode 100644 index 00000000000..22406a4f956 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php @@ -0,0 +1,35 @@ +<?php +/** + * Copyright (c) 2015 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB; + +class TimeZoneProvider { + /** + * @var string + */ + private $host; + + /** + * @var string + */ + private $timeZone; + + /** + * @param string $host + */ + function __construct($host) { + $this->host = $host; + } + + public function get() { + if (!$this->timeZone) { + $command = 'net time zone -S ' . escapeshellarg($this->host); + $this->timeZone = exec($command); + } + return $this->timeZone; + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/tests/AbstractShare.php b/apps/files_external/3rdparty/icewind/smb/tests/AbstractShare.php new file mode 100644 index 00000000000..f8ccb7119ed --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/tests/AbstractShare.php @@ -0,0 +1,539 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Test; + +use Icewind\SMB\FileInfo; + +abstract class AbstractShare extends \PHPUnit_Framework_TestCase { + /** + * @var \Icewind\SMB\Server $server + */ + protected $server; + + /** + * @var \Icewind\SMB\IShare $share + */ + protected $share; + + /** + * @var string $root + */ + protected $root; + + protected $config; + + public function tearDown() { + try { + if ($this->share) { + $this->cleanDir($this->root); + } + unset($this->share); + } catch (\Exception $e) { + unset($this->share); + throw $e; + } + } + + public function nameProvider() { + // / ? < > \ : * | " are illegal characters in path on windows + return array( + array('simple'), + array('with spaces_and-underscores'), + array("single'quote'"), + array('日本語'), + array('url %2F +encode'), + array('a somewhat longer filename than the other with more charaters as the all the other filenames'), + array('$as#d€££Ö€ßœĚęĘĞĜΣΥΦΩΫ') + ); + } + + public function fileDataProvider() { + return array( + array('Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua'), + array('Mixed language, 日本語 が わからか and Various _/* characters \\|” €') + ); + } + + public function nameAndDataProvider() { + $names = $this->nameProvider(); + $data = $this->fileDataProvider(); + $result = array(); + foreach ($names as $name) { + foreach ($data as $text) { + $result[] = array($name[0], $text[0]); + } + } + return $result; + } + + public function cleanDir($dir) { + $content = $this->share->dir($dir); + foreach ($content as $metadata) { + if ($metadata->isDirectory()) { + $this->cleanDir($metadata->getPath()); + } else { + $this->share->del($metadata->getPath()); + } + } + $this->share->rmdir($dir); + } + + private function getTextFile($text = '') { + if (!$text) { + $text = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua'; + } + $file = tempnam('/tmp', 'smb_test_'); + file_put_contents($file, $text); + return $file; + } + + public function testListShares() { + $shares = $this->server->listShares(); + foreach ($shares as $share) { + if ($share->getName() === $this->config->share) { + return; + } + } + $this->fail('Share "' . $this->config->share . '" not found'); + } + + public function testRootStartsEmpty() { + $this->assertEquals(array(), $this->share->dir($this->root)); + } + + /** + * @dataProvider nameProvider + */ + public function testMkdir($name) { + $this->share->mkdir($this->root . '/' . $name); + $dirs = $this->share->dir($this->root); + $this->assertCount(1, $dirs); + $this->assertEquals($name, $dirs[0]->getName()); + $this->assertTrue($dirs[0]->isDirectory()); + } + + /** + * @dataProvider nameProvider + */ + public function testRenameDirectory($name) { + $this->share->mkdir($this->root . '/' . $name); + $this->share->rename($this->root . '/' . $name, $this->root . '/' . $name . '_rename'); + $dirs = $this->share->dir($this->root); + $this->assertEquals(1, count($dirs)); + $this->assertEquals($name . '_rename', $dirs[0]->getName()); + } + + /** + * @dataProvider nameProvider + */ + public function testRmdir($name) { + $this->share->mkdir($this->root . '/' . $name); + $this->share->rmdir($this->root . '/' . $name); + $this->assertCount(0, $this->share->dir($this->root)); + } + + /** + * @dataProvider nameAndDataProvider + */ + public function testPut($name, $text) { + $tmpFile = $this->getTextFile($text); + $size = filesize($tmpFile); + + $this->share->put($tmpFile, $this->root . '/' . $name); + unlink($tmpFile); + + $files = $this->share->dir($this->root); + $this->assertCount(1, $files); + $this->assertEquals($name, $files[0]->getName()); + $this->assertEquals($size, $files[0]->getSize()); + $this->assertFalse($files[0]->isDirectory()); + } + + /** + * @dataProvider nameProvider + */ + public function testRenameFile($name) { + $tmpFile = $this->getTextFile(); + + $this->share->put($tmpFile, $this->root . '/' . $name); + unlink($tmpFile); + + $this->share->rename($this->root . '/' . $name, $this->root . '/' . $name . '_renamed'); + + $files = $this->share->dir($this->root); + $this->assertEquals(1, count($files)); + $this->assertEquals($name . '_renamed', $files[0]->getName()); + } + + /** + * @dataProvider nameAndDataProvider + */ + public function testGet($name, $text) { + $tmpFile = $this->getTextFile($text); + + $this->share->put($tmpFile, $this->root . '/' . $name); + unlink($tmpFile); + + $targetFile = tempnam('/tmp', 'smb_test_'); + $this->share->get($this->root . '/' . $name, $targetFile); + + $this->assertEquals($text, file_get_contents($targetFile)); + unlink($targetFile); + } + + /** + * @dataProvider nameProvider + */ + public function testDel($name) { + $tmpFile = $this->getTextFile(); + + $this->share->put($tmpFile, $this->root . '/' . $name); + unlink($tmpFile); + + $this->share->del($this->root . '/' . $name); + $this->assertCount(0, $this->share->dir($this->root)); + } + + /** + * @expectedException \Icewind\SMB\Exception\NotFoundException + */ + public function testCreateFolderInNonExistingFolder() { + $this->share->mkdir($this->root . '/foo/bar'); + } + + /** + * @expectedException \Icewind\SMB\Exception\NotFoundException + */ + public function testRemoveFolderInNonExistingFolder() { + $this->share->rmdir($this->root . '/foo/bar'); + } + + /** + * @expectedException \Icewind\SMB\Exception\NotFoundException + */ + public function testRemoveNonExistingFolder() { + $this->share->rmdir($this->root . '/foo'); + } + + /** + * @expectedException \Icewind\SMB\Exception\AlreadyExistsException + */ + public function testCreateExistingFolder() { + $this->share->mkdir($this->root . '/bar'); + $this->share->mkdir($this->root . '/bar'); + $this->share->rmdir($this->root . '/bar'); + } + + /** + * @expectedException \Icewind\SMB\Exception\InvalidTypeException + */ + public function testCreateFileExistingFolder() { + $this->share->mkdir($this->root . '/bar'); + $this->share->put($this->getTextFile(), $this->root . '/bar'); + $this->share->rmdir($this->root . '/bar'); + } + + /** + * @expectedException \Icewind\SMB\Exception\NotFoundException + */ + public function testCreateFileInNonExistingFolder() { + $this->share->put($this->getTextFile(), $this->root . '/foo/bar'); + } + + /** + * @expectedException \Icewind\SMB\Exception\NotFoundException + */ + public function testTestRemoveNonExistingFile() { + $this->share->del($this->root . '/foo'); + } + + /** + * @expectedException \Icewind\SMB\Exception\NotFoundException + */ + public function testDownloadNonExistingFile() { + $this->share->get($this->root . '/foo', '/dev/null'); + } + + /** + * @expectedException \Icewind\SMB\Exception\InvalidTypeException + */ + public function testDownloadFolder() { + $this->share->mkdir($this->root . '/foobar'); + $this->share->get($this->root . '/foobar', '/dev/null'); + $this->share->rmdir($this->root . '/foobar'); + } + + /** + * @expectedException \Icewind\SMB\Exception\InvalidTypeException + */ + public function testDelFolder() { + $this->share->mkdir($this->root . '/foobar'); + $this->share->del($this->root . '/foobar'); + $this->share->rmdir($this->root . '/foobar'); + } + + /** + * @expectedException \Icewind\SMB\Exception\InvalidTypeException + */ + public function testRmdirFile() { + $this->share->put($this->getTextFile(), $this->root . '/foobar'); + $this->share->rmdir($this->root . '/foobar'); + $this->share->del($this->root . '/foobar'); + } + + /** + * @expectedException \Icewind\SMB\Exception\NotEmptyException + */ + public function testRmdirNotEmpty() { + $this->share->mkdir($this->root . '/foobar'); + $this->share->put($this->getTextFile(), $this->root . '/foobar/asd'); + $this->share->rmdir($this->root . '/foobar'); + } + + /** + * @expectedException \Icewind\SMB\Exception\NotFoundException + */ + public function testDirNonExisting() { + $this->share->dir('/foobar/asd'); + } + + /** + * @expectedException \Icewind\SMB\Exception\NotFoundException + */ + public function testRmDirNonExisting() { + $this->share->rmdir('/foobar/asd'); + } + + /** + * @expectedException \Icewind\SMB\Exception\NotFoundException + */ + public function testRenameNonExisting() { + $this->share->rename('/foobar/asd', '/foobar/bar'); + } + + /** + * @expectedException \Icewind\SMB\Exception\NotFoundException + */ + public function testRenameTargetNonExisting() { + $txt = $this->getTextFile(); + $this->share->put($txt, $this->root . '/foo.txt'); + unlink($txt); + $this->share->rename($this->root . '/foo.txt', $this->root . '/bar/foo.txt'); + } + + public function testModifiedDate() { + $now = time(); + $this->share->put($this->getTextFile(), $this->root . '/foo.txt'); + $dir = $this->share->dir($this->root); + $mtime = $dir[0]->getMTime(); + $this->assertTrue(abs($now - $mtime) <= 2, 'Modified time differs by ' . abs($now - $mtime) . ' seconds'); + $this->share->del($this->root . '/foo.txt'); + } + + /** + * @dataProvider nameAndDataProvider + */ + public function testReadStream($name, $text) { + $sourceFile = $this->getTextFile($text); + $this->share->put($sourceFile, $this->root . '/' . $name); + $fh = $this->share->read($this->root . '/' . $name); + $content = stream_get_contents($fh); + fclose($fh); + $this->share->del($this->root . '/' . $name); + + $this->assertEquals(file_get_contents($sourceFile), $content); + } + + /** + * @dataProvider nameAndDataProvider + */ + public function testWriteStream($name, $text) { + $fh = $this->share->write($this->root . '/' . $name); + fwrite($fh, $text); + fclose($fh); + + $tmpFile1 = tempnam('/tmp', 'smb_test_'); + $this->share->get($this->root . '/' . $name, $tmpFile1); + $this->assertEquals($text, file_get_contents($tmpFile1)); + $this->share->del($this->root . '/' . $name); + unlink($tmpFile1); + } + + public function testDir() { + $txtFile = $this->getTextFile(); + + $this->share->mkdir($this->root . '/dir'); + $this->share->put($txtFile, $this->root . '/file.txt'); + unlink($txtFile); + + $dir = $this->share->dir($this->root); + if ($dir[0]->getName() === 'dir') { + $dirEntry = $dir[0]; + } else { + $dirEntry = $dir[1]; + } + $this->assertTrue($dirEntry->isDirectory()); + $this->assertFalse($dirEntry->isReadOnly()); + $this->assertFalse($dirEntry->isReadOnly()); + + if ($dir[0]->getName() === 'file.txt') { + $fileEntry = $dir[0]; + } else { + $fileEntry = $dir[1]; + } + $this->assertFalse($fileEntry->isDirectory()); + $this->assertFalse($fileEntry->isReadOnly()); + $this->assertFalse($fileEntry->isReadOnly()); + } + + /** + * @dataProvider nameProvider + */ + public function testStat($name) { + $txtFile = $this->getTextFile(); + $size = filesize($txtFile); + + $this->share->put($txtFile, $this->root . '/' . $name); + unlink($txtFile); + + $info = $this->share->stat($this->root . '/' . $name); + $this->assertEquals($size, $info->getSize()); + } + + /** + * @expectedException \Icewind\SMB\Exception\NotFoundException + */ + public function testStatNonExisting() { + $this->share->stat($this->root . '/fo.txt'); + } + + /** + * note setting archive and system bit is not supported + * + * @dataProvider nameProvider + */ + public function testSetMode($name) { + $txtFile = $this->getTextFile(); + + $this->share->put($txtFile, $this->root . '/' . $name); + + $this->share->setMode($this->root . '/' . $name, FileInfo::MODE_NORMAL); + $info = $this->share->stat($this->root . '/' . $name); + $this->assertFalse($info->isReadOnly()); + $this->assertFalse($info->isArchived()); + $this->assertFalse($info->isSystem()); + $this->assertFalse($info->isHidden()); + + $this->share->setMode($this->root . '/' . $name, FileInfo::MODE_READONLY); + $info = $this->share->stat($this->root . '/' . $name); + $this->assertTrue($info->isReadOnly()); + $this->assertFalse($info->isArchived()); + $this->assertFalse($info->isSystem()); + $this->assertFalse($info->isHidden()); + + $this->share->setMode($this->root . '/' . $name, FileInfo::MODE_ARCHIVE); + $info = $this->share->stat($this->root . '/' . $name); + $this->assertFalse($info->isReadOnly()); + $this->assertTrue($info->isArchived()); + $this->assertFalse($info->isSystem()); + $this->assertFalse($info->isHidden()); + + $this->share->setMode($this->root . '/' . $name, FileInfo::MODE_READONLY | FileInfo::MODE_ARCHIVE); + $info = $this->share->stat($this->root . '/' . $name); + $this->assertTrue($info->isReadOnly()); + $this->assertTrue($info->isArchived()); + $this->assertFalse($info->isSystem()); + $this->assertFalse($info->isHidden()); + + $this->share->setMode($this->root . '/' . $name, FileInfo::MODE_HIDDEN); + $info = $this->share->stat($this->root . '/' . $name); + $this->assertFalse($info->isReadOnly()); + $this->assertFalse($info->isArchived()); + $this->assertFalse($info->isSystem()); + $this->assertTrue($info->isHidden()); + + $this->share->setMode($this->root . '/' . $name, FileInfo::MODE_SYSTEM); + $info = $this->share->stat($this->root . '/' . $name); + $this->assertFalse($info->isReadOnly()); + $this->assertFalse($info->isArchived()); + $this->assertTrue($info->isSystem()); + $this->assertFalse($info->isHidden()); + + $this->share->setMode($this->root . '/' . $name, FileInfo::MODE_NORMAL); + $info = $this->share->stat($this->root . '/' . $name); + $this->assertFalse($info->isReadOnly()); + $this->assertFalse($info->isArchived()); + $this->assertFalse($info->isSystem()); + $this->assertFalse($info->isHidden()); + } + + public function pathProvider() { + // / ? < > \ : * | " are illegal characters in path on windows + return array( + array('dir/sub/foo.txt'), + array('bar.txt'), + array("single'quote'/sub/foo.txt"), + array('日本語/url %2F +encode/asd.txt'), + array( + 'a somewhat longer folder than the other with more charaters as the all the other filenames/' . + 'followed by a somewhat long file name after that.txt' + ) + ); + } + + /** + * @dataProvider pathProvider + */ + public function testSubDirs($path) { + $dirs = explode('/', $path); + $name = array_pop($dirs); + $fullPath = ''; + foreach ($dirs as $dir) { + $fullPath .= '/' . $dir; + $this->share->mkdir($this->root . $fullPath); + } + $txtFile = $this->getTextFile(); + $size = filesize($txtFile); + $this->share->put($txtFile, $this->root . $fullPath . '/' . $name); + unlink($txtFile); + $info = $this->share->stat($this->root . $fullPath . '/' . $name); + $this->assertEquals($size, $info->getSize()); + $this->assertFalse($info->isHidden()); + } + + public function testDelAfterStat() { + $name = 'foo.txt'; + $txtFile = $this->getTextFile(); + + $this->share->put($txtFile, $this->root . '/' . $name); + unlink($txtFile); + + $this->share->stat($this->root . '/' . $name); + $this->share->del($this->root . '/foo.txt'); + } + + /** + * @param $name + * @dataProvider nameProvider + */ + public function testDirPaths($name) { + $txtFile = $this->getTextFile(); + $this->share->mkdir($this->root . '/' . $name); + $this->share->put($txtFile, $this->root . '/' . $name . '/' . $name); + unlink($txtFile); + + $content = $this->share->dir($this->root . '/' . $name); + $this->assertCount(1, $content); + $this->assertEquals($name, $content[0]->getName()); + } + + public function testStatRoot() { + $info = $this->share->stat('/'); + $this->assertInstanceOf('\Icewind\SMB\IFileInfo', $info); + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/tests/NativeShare.php b/apps/files_external/3rdparty/icewind/smb/tests/NativeShare.php new file mode 100644 index 00000000000..d8e10235c12 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/tests/NativeShare.php @@ -0,0 +1,27 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Test; + +use Icewind\SMB\NativeServer; + +class NativeShare extends AbstractShare { + public function setUp() { + if (!function_exists('smbclient_state_new')) { + $this->markTestSkipped('libsmbclient php extension not installed'); + } + $this->config = json_decode(file_get_contents(__DIR__ . '/config.json')); + $this->server = new NativeServer($this->config->host, $this->config->user, $this->config->password); + $this->share = $this->server->getShare($this->config->share); + if ($this->config->root) { + $this->root = '/' . $this->config->root . '/' . uniqid(); + } else { + $this->root = '/' . uniqid(); + } + $this->share->mkdir($this->root); + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/tests/NativeStream.php b/apps/files_external/3rdparty/icewind/smb/tests/NativeStream.php new file mode 100644 index 00000000000..2d7b62fedeb --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/tests/NativeStream.php @@ -0,0 +1,143 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Test; + +use Icewind\SMB\NativeServer; + +class NativeStream extends \PHPUnit_Framework_TestCase { + /** + * @var \Icewind\SMB\Server $server + */ + protected $server; + + /** + * @var \Icewind\SMB\NativeShare $share + */ + protected $share; + + /** + * @var string $root + */ + protected $root; + + protected $config; + + public function setUp() { + if (!function_exists('smbclient_state_new')) { + $this->markTestSkipped('libsmbclient php extension not installed'); + } + $this->config = json_decode(file_get_contents(__DIR__ . '/config.json')); + $this->server = new NativeServer($this->config->host, $this->config->user, $this->config->password); + $this->share = $this->server->getShare($this->config->share); + if ($this->config->root) { + $this->root = '/' . $this->config->root . '/' . uniqid(); + } else { + $this->root = '/' . uniqid(); + } + $this->share->mkdir($this->root); + } + + private function getTextFile() { + $text = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua'; + $file = tempnam('/tmp', 'smb_test_'); + file_put_contents($file, $text); + return $file; + } + + public function testSeekTell() { + $sourceFile = $this->getTextFile(); + $this->share->put($sourceFile, $this->root . '/foobar'); + $fh = $this->share->read($this->root . '/foobar'); + $content = fread($fh, 3); + $this->assertEquals('Lor', $content); + + fseek($fh, -2, SEEK_CUR); + + $content = fread($fh, 3); + $this->assertEquals('ore', $content); + + fseek($fh, 3, SEEK_SET); + + $content = fread($fh, 3); + $this->assertEquals('em ', $content); + + fseek($fh, -3, SEEK_END); + + $content = fread($fh, 3); + $this->assertEquals('qua', $content); + + fseek($fh, -3, SEEK_END); + $this->assertEquals(120, ftell($fh)); + } + + public function testStat() { + $sourceFile = $this->getTextFile(); + $this->share->put($sourceFile, $this->root . '/foobar'); + $fh = $this->share->read($this->root . '/foobar'); + $stat = fstat($fh); + $this->assertEquals(filesize($sourceFile), $stat['size']); + unlink($sourceFile); + } + + public function testTruncate() { + if (version_compare(phpversion(), '5.4.0', '<')) { + $this->markTestSkipped('php <5.4 doesn\'t support truncate for stream wrappers'); + } + $fh = $this->share->write($this->root . '/foobar'); + fwrite($fh, 'foobar'); + ftruncate($fh, 3); + fclose($fh); + + $fh = $this->share->read($this->root . '/foobar'); + $this->assertEquals('foo', stream_get_contents($fh)); + } + + public function testEOF() { + if (version_compare(phpversion(), '5.4.0', '<')) { + $this->markTestSkipped('php <5.4 doesn\'t support truncate for stream wrappers'); + } + $fh = $this->share->write($this->root . '/foobar'); + fwrite($fh, 'foobar'); + fclose($fh); + + $fh = $this->share->read($this->root . '/foobar'); + fread($fh, 3); + $this->assertFalse(feof($fh)); + fread($fh, 5); + $this->assertTrue(feof($fh)); + } + + public function testLockUnsupported() { + $fh = $this->share->write($this->root . '/foobar'); + $this->assertFalse(flock($fh, LOCK_SH)); + } + + public function testSetOptionUnsupported() { + $fh = $this->share->write($this->root . '/foobar'); + $this->assertFalse(stream_set_blocking($fh, false)); + } + + public function tearDown() { + if ($this->share) { + $this->cleanDir($this->root); + } + unset($this->share); + } + + public function cleanDir($dir) { + $content = $this->share->dir($dir); + foreach ($content as $metadata) { + if ($metadata->isDirectory()) { + $this->cleanDir($metadata->getPath()); + } else { + $this->share->del($metadata->getPath()); + } + } + $this->share->rmdir($dir); + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/tests/Parser.php b/apps/files_external/3rdparty/icewind/smb/tests/Parser.php new file mode 100644 index 00000000000..5caa048a664 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/tests/Parser.php @@ -0,0 +1,103 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Test; + + +use Icewind\SMB\FileInfo; + +class Parser extends \PHPUnit_Framework_TestCase { + public function modeProvider() { + return array( + array('D', FileInfo::MODE_DIRECTORY), + array('A', FileInfo::MODE_ARCHIVE), + array('S', FileInfo::MODE_SYSTEM), + array('H', FileInfo::MODE_HIDDEN), + array('R', FileInfo::MODE_READONLY), + array('N', FileInfo::MODE_NORMAL), + array('RA', FileInfo::MODE_READONLY | FileInfo::MODE_ARCHIVE), + array('RAH', FileInfo::MODE_READONLY | FileInfo::MODE_ARCHIVE | FileInfo::MODE_HIDDEN) + ); + } + + /** + * @param string $timeZone + * @return \Icewind\SMB\TimeZoneProvider + */ + private function getTimeZoneProvider($timeZone) { + $mock = $this->getMockBuilder('\Icewind\SMB\TimeZoneProvider') + ->disableOriginalConstructor() + ->getMock(); + $mock->expects($this->any()) + ->method('get') + ->will($this->returnValue($timeZone)); + return $mock; + } + + /** + * @dataProvider modeProvider + */ + public function testParseMode($string, $mode) { + $parser = new \Icewind\SMB\Parser($this->getTimeZoneProvider('UTC')); + $this->assertEquals($mode, $parser->parseMode($string), 'Failed parsing ' . $string); + } + + public function statProvider() { + return array( + array( + array( + 'altname: test.txt', + 'create_time: Sat Oct 12 07:05:58 PM 2013 CEST', + 'access_time: Tue Oct 15 02:58:48 PM 2013 CEST', + 'write_time: Sat Oct 12 07:05:58 PM 2013 CEST', + 'change_time: Sat Oct 12 07:05:58 PM 2013 CEST', + 'attributes: (80)', + 'stream: [::$DATA], 29634 bytes' + ), + array( + 'mtime' => strtotime('12 Oct 2013 19:05:58 CEST'), + 'mode' => FileInfo::MODE_NORMAL, + 'size' => 29634 + ) + ) + ); + } + + /** + * @dataProvider statProvider + */ + public function testStat($output, $stat) { + $parser = new \Icewind\SMB\Parser($this->getTimeZoneProvider('UTC')); + $this->assertEquals($stat, $parser->parseStat($output)); + } + + public function dirProvider() { + return array( + array( + array( + ' . D 0 Tue Aug 26 19:11:56 2014', + ' .. DR 0 Sun Oct 28 15:24:02 2012', + ' c.pdf N 29634 Sat Oct 12 19:05:58 2013', + '', + ' 62536 blocks of size 8388608. 57113 blocks available' + ), + array( + new FileInfo('/c.pdf', 'c.pdf', 29634, strtotime('12 Oct 2013 19:05:58 CEST'), + FileInfo::MODE_NORMAL) + ) + ) + ); + } + + /** + * @dataProvider dirProvider + */ + public function testDir($output, $dir) { + $parser = new \Icewind\SMB\Parser($this->getTimeZoneProvider('CEST')); + $this->assertEquals($dir, $parser->parseDir($output, '')); + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/tests/Server.php b/apps/files_external/3rdparty/icewind/smb/tests/Server.php new file mode 100644 index 00000000000..9f62886654f --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/tests/Server.php @@ -0,0 +1,57 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Test; + +class Server extends \PHPUnit_Framework_TestCase { + /** + * @var \Icewind\SMB\Server $server + */ + private $server; + + private $config; + + public function setUp() { + $this->config = json_decode(file_get_contents(__DIR__ . '/config.json')); + $this->server = new \Icewind\SMB\Server($this->config->host, $this->config->user, $this->config->password); + } + + public function testListShares() { + $shares = $this->server->listShares(); + foreach ($shares as $share) { + if ($share->getName() === $this->config->share) { + return; + } + } + $this->fail('Share "' . $this->config->share . '" not found'); + } + + /** + * @expectedException \Icewind\SMB\Exception\AuthenticationException + */ + public function testWrongUserName() { + $this->markTestSkipped('This fails for no reason on travis'); + $server = new \Icewind\SMB\Server($this->config->host, uniqid(), uniqid()); + $server->listShares(); + } + + /** + * @expectedException \Icewind\SMB\Exception\AuthenticationException + */ + public function testWrongPassword() { + $server = new \Icewind\SMB\Server($this->config->host, $this->config->user, uniqid()); + $server->listShares(); + } + + /** + * @expectedException \Icewind\SMB\Exception\InvalidHostException + */ + public function testWrongHost() { + $server = new \Icewind\SMB\Server(uniqid(), $this->config->user, $this->config->password); + $server->listShares(); + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/tests/Share.php b/apps/files_external/3rdparty/icewind/smb/tests/Share.php new file mode 100644 index 00000000000..a629914d748 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/tests/Share.php @@ -0,0 +1,24 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Test; + +use Icewind\SMB\Server as NormalServer; + +class Share extends AbstractShare { + public function setUp() { + $this->config = json_decode(file_get_contents(__DIR__ . '/config.json')); + $this->server = new NormalServer($this->config->host, $this->config->user, $this->config->password); + $this->share = $this->server->getShare($this->config->share); + if ($this->config->root) { + $this->root = '/' . $this->config->root . '/' . uniqid(); + } else { + $this->root = '/' . uniqid(); + } + $this->share->mkdir($this->root); + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/tests/bootstrap.php b/apps/files_external/3rdparty/icewind/smb/tests/bootstrap.php new file mode 100644 index 00000000000..dc2e34b183e --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/tests/bootstrap.php @@ -0,0 +1,9 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +date_default_timezone_set('UTC'); +require_once __DIR__.'/../vendor/autoload.php'; diff --git a/apps/files_external/3rdparty/icewind/smb/tests/config.json b/apps/files_external/3rdparty/icewind/smb/tests/config.json new file mode 100644 index 00000000000..0ecd7e3715d --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/tests/config.json @@ -0,0 +1,7 @@ +{ + "host": "localhost", + "user": "test", + "password": "test", + "share": "test", + "root": "test" +} diff --git a/apps/files_external/3rdparty/icewind/smb/tests/phpunit.xml b/apps/files_external/3rdparty/icewind/smb/tests/phpunit.xml new file mode 100644 index 00000000000..3ab244dd34f --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/tests/phpunit.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" ?> +<phpunit bootstrap="bootstrap.php"> + <testsuite name='SMB'> + <directory suffix='.php'>./</directory> + </testsuite> +</phpunit> diff --git a/apps/files_external/3rdparty/icewind/streams/.gitignore b/apps/files_external/3rdparty/icewind/streams/.gitignore new file mode 100644 index 00000000000..4f389129e2d --- /dev/null +++ b/apps/files_external/3rdparty/icewind/streams/.gitignore @@ -0,0 +1,3 @@ +.idea +vendor +composer.lock diff --git a/apps/files_external/3rdparty/icewind/streams/.travis.yml b/apps/files_external/3rdparty/icewind/streams/.travis.yml new file mode 100644 index 00000000000..dfa52767dda --- /dev/null +++ b/apps/files_external/3rdparty/icewind/streams/.travis.yml @@ -0,0 +1,26 @@ +language: php +php: + - 5.3 + - 5.4 + - 5.5 + - hhvm + +matrix: + allow_failures: + - php: hhvm # due to facebook/hhvm#3321 + +env: + global: + - CURRENT_DIR=`pwd` + +install: + - composer install --dev --no-interaction + +script: + - mkdir -p build/logs + - cd tests + - phpunit --coverage-clover ../build/logs/clover.xml --configuration phpunit.xml + +after_script: + - cd $CURRENT_DIR + - php vendor/bin/coveralls -v diff --git a/apps/files_external/3rdparty/icewind/streams/README.md b/apps/files_external/3rdparty/icewind/streams/README.md new file mode 100644 index 00000000000..54f6d19a560 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/streams/README.md @@ -0,0 +1,52 @@ +#Streams# + +[![Build Status](https://travis-ci.org/icewind1991/Streams.svg?branch=master)](https://travis-ci.org/icewind1991/Streams) +[![Coverage Status](https://img.shields.io/coveralls/icewind1991/Streams.svg)](https://coveralls.io/r/icewind1991/Streams?branch=master) + +Generic stream wrappers for php. + +##CallBackWrapper## + +A `CallBackWrapper` can be used to register callbacks on read, write and closing of the stream, +it wraps an existing stream and can thus be used for any stream in php + +The callbacks are passed in the stream context along with the source stream +and can be any valid [php callable](http://php.net/manual/en/language.types.callable.php) + +###Example### +```php +<?php + +use \Icewind\Streams\CallBackWrapper; + +require('vendor/autoload.php'); + +// get an existing stream to wrap +$source = fopen('php://temp', 'r+'); + +// register the callbacks +$stream = CallbackWrapper::wrap($source, + // read callback + function ($count) { + echo "read " . $count . "bytes\n"; + }, + // write callback + function ($data) { + echo "wrote '" . $data . "'\n"; + }, + // close callback + function () { + echo "stream closed\n"; + }); + +fwrite($stream, 'some dummy data'); + +rewind($stream); +fread($stream, 5); + +fclose($stream); +``` + +Note: due to php's internal stream buffering the `$count` passed to the read callback +will be equal to php's internal buffer size (8192 on default) an not the number of bytes +requested by `fopen()` diff --git a/apps/files_external/3rdparty/icewind/streams/composer.json b/apps/files_external/3rdparty/icewind/streams/composer.json new file mode 100644 index 00000000000..86d3c834258 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/streams/composer.json @@ -0,0 +1,23 @@ +{ + "name" : "icewind/streams", + "description" : "A set of generic stream wrappers", + "license" : "MIT", + "authors" : [ + { + "name" : "Robin Appelman", + "email": "icewind@owncloud.com" + } + ], + "require" : { + "php": ">=5.3" + }, + "require-dev" : { + "satooshi/php-coveralls": "dev-master" + }, + "autoload" : { + "psr-4": { + "Icewind\\Streams\\Tests\\": "tests/", + "Icewind\\Streams\\": "src/" + } + } +} diff --git a/apps/files_external/3rdparty/icewind/streams/src/CallbackWrapper.php b/apps/files_external/3rdparty/icewind/streams/src/CallbackWrapper.php new file mode 100644 index 00000000000..fd99aa6ebe8 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/streams/src/CallbackWrapper.php @@ -0,0 +1,110 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\Streams; + +/** + * Wrapper that provides callbacks for write, read and close + * + * The following options should be passed in the context when opening the stream + * [ + * 'callback' => [ + * 'source' => resource + * 'read' => function($count){} (optional) + * 'write' => function($data){} (optional) + * 'close' => function(){} (optional) + * ] + * ] + * + * All callbacks are called after the operation is executed on the source stream + */ +class CallbackWrapper extends Wrapper { + /** + * @var callable + */ + protected $readCallback; + + /** + * @var callable + */ + protected $writeCallback; + + /** + * @var callable + */ + protected $closeCallback; + + /** + * Wraps a stream with the provided callbacks + * + * @param resource $source + * @param callable $read (optional) + * @param callable $write (optional) + * @param callable $close (optional) + * @return resource + * + * @throws \BadMethodCallException + */ + public static function wrap($source, $read = null, $write = null, $close = null) { + $context = stream_context_create(array( + 'callback' => array( + 'source' => $source, + 'read' => $read, + 'write' => $write, + 'close' => $close + ) + )); + stream_wrapper_register('callback', '\Icewind\Streams\CallbackWrapper'); + try { + $wrapped = fopen('callback://', 'r+', false, $context); + } catch (\BadMethodCallException $e) { + stream_wrapper_unregister('callback'); + throw $e; + } + stream_wrapper_unregister('callback'); + return $wrapped; + } + + public function stream_open($path, $mode, $options, &$opened_path) { + $context = $this->loadContext('callback'); + + if (isset($context['read']) and is_callable($context['read'])) { + $this->readCallback = $context['read']; + } + if (isset($context['write']) and is_callable($context['write'])) { + $this->writeCallback = $context['write']; + } + if (isset($context['close']) and is_callable($context['close'])) { + $this->closeCallback = $context['close']; + } + return true; + } + + public function stream_read($count) { + $result = parent::stream_read($count); + if ($this->readCallback) { + call_user_func($this->readCallback, $count); + } + return $result; + } + + public function stream_write($data) { + $result = parent::stream_write($data); + if ($this->writeCallback) { + call_user_func($this->writeCallback, $data); + } + return $result; + } + + public function stream_close() { + $result = parent::stream_close(); + if ($this->closeCallback) { + call_user_func($this->closeCallback); + } + return $result; + } +} diff --git a/apps/files_external/3rdparty/icewind/streams/src/Directory.php b/apps/files_external/3rdparty/icewind/streams/src/Directory.php new file mode 100644 index 00000000000..c80a878386b --- /dev/null +++ b/apps/files_external/3rdparty/icewind/streams/src/Directory.php @@ -0,0 +1,35 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\Streams; + +/** + * Interface for stream wrappers that implements a directory + */ +interface Directory { + /** + * @param string $path + * @param array $options + * @return bool + */ + public function dir_opendir($path, $options); + + /** + * @return string + */ + public function dir_readdir(); + + /** + * @return bool + */ + public function dir_closedir(); + + /** + * @return bool + */ + public function dir_rewinddir(); +} diff --git a/apps/files_external/3rdparty/icewind/streams/src/File.php b/apps/files_external/3rdparty/icewind/streams/src/File.php new file mode 100644 index 00000000000..6202ef4a4b4 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/streams/src/File.php @@ -0,0 +1,86 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\Streams; + +/** + * Interface for stream wrappers that implements a file + */ +interface File { + /** + * @param string $path + * @param string $mode + * @param int $options + * @param string &$opened_path + * @return bool + */ + public function stream_open($path, $mode, $options, &$opened_path); + + /** + * @param string $offset + * @param int $whence + * @return bool + */ + public function stream_seek($offset, $whence = SEEK_SET); + + /** + * @return int + */ + public function stream_tell(); + + /** + * @param int $count + * @return string + */ + public function stream_read($count); + + /** + * @param string $data + * @return int + */ + public function stream_write($data); + + /** + * @param int $option + * @param int $arg1 + * @param int $arg2 + * @return bool + */ + public function stream_set_option($option, $arg1, $arg2); + + /** + * @param int $size + * @return bool + */ + public function stream_truncate($size); + + /** + * @return array + */ + public function stream_stat(); + + /** + * @param int $operation + * @return bool + */ + public function stream_lock($operation); + + /** + * @return bool + */ + public function stream_flush(); + + /** + * @return bool + */ + public function stream_eof(); + + /** + * @return bool + */ + public function stream_close(); +} diff --git a/apps/files_external/3rdparty/icewind/streams/src/IteratorDirectory.php b/apps/files_external/3rdparty/icewind/streams/src/IteratorDirectory.php new file mode 100644 index 00000000000..c4eac5d4ed3 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/streams/src/IteratorDirectory.php @@ -0,0 +1,123 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\Streams; + +/** + * Create a directory handle from an iterator or array + * + * The following options should be passed in the context when opening the stream + * [ + * 'dir' => [ + * 'array' => string[] + * 'iterator' => \Iterator + * ] + * ] + * + * Either 'array' or 'iterator' need to be set, if both are set, 'iterator' takes preference + */ +class IteratorDirectory implements Directory { + /** + * @var resource + */ + public $context; + + /** + * @var \Iterator + */ + protected $iterator; + + /** + * Load the source from the stream context and return the context options + * + * @param string $name + * @return array + * @throws \Exception + */ + protected function loadContext($name) { + $context = stream_context_get_options($this->context); + if (isset($context[$name])) { + $context = $context[$name]; + } else { + throw new \BadMethodCallException('Invalid context, "' . $name . '" options not set'); + } + if (isset($context['iterator']) and $context['iterator'] instanceof \Iterator) { + $this->iterator = $context['iterator']; + } else if (isset($context['array']) and is_array($context['array'])) { + $this->iterator = new \ArrayIterator($context['array']); + } else { + throw new \BadMethodCallException('Invalid context, iterator or array not set'); + } + return $context; + } + + /** + * @param string $path + * @param array $options + * @return bool + */ + public function dir_opendir($path, $options) { + $this->loadContext('dir'); + return true; + } + + /** + * @return string + */ + public function dir_readdir() { + if ($this->iterator->valid()) { + $result = $this->iterator->current(); + $this->iterator->next(); + return $result; + } else { + return false; + } + } + + /** + * @return bool + */ + public function dir_closedir() { + return true; + } + + /** + * @return bool + */ + public function dir_rewinddir() { + $this->iterator->rewind(); + return true; + } + + /** + * Creates a directory handle from the provided array or iterator + * + * @param \Iterator | array $source + * @return resource + * + * @throws \BadMethodCallException + */ + public static function wrap($source) { + if ($source instanceof \Iterator) { + $context = stream_context_create(array( + 'dir' => array( + 'iterator' => $source) + )); + } else if (is_array($source)) { + $context = stream_context_create(array( + 'dir' => array( + 'array' => $source) + )); + } else { + throw new \BadMethodCallException('$source should be an Iterator or array'); + } + stream_wrapper_register('iterator', '\Icewind\Streams\IteratorDirectory'); + $wrapped = opendir('iterator://', $context); + stream_wrapper_unregister('iterator'); + return $wrapped; + } +} diff --git a/apps/files_external/3rdparty/icewind/streams/src/NullWrapper.php b/apps/files_external/3rdparty/icewind/streams/src/NullWrapper.php new file mode 100644 index 00000000000..8cbaaa756d3 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/streams/src/NullWrapper.php @@ -0,0 +1,42 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\Streams; + +/** + * Stream wrapper that does nothing, used for tests + */ +class NullWrapper extends Wrapper { + /** + * Wraps a stream with the provided callbacks + * + * @param resource $source + * @return resource + * + * @throws \BadMethodCallException + */ + public static function wrap($source) { + $context = stream_context_create(array( + 'null' => array( + 'source' => $source) + )); + stream_wrapper_register('null', '\Icewind\Streams\NullWrapper'); + try { + $wrapped = fopen('null://', 'r+', false, $context); + } catch (\BadMethodCallException $e) { + stream_wrapper_unregister('null'); + throw $e; + } + stream_wrapper_unregister('null'); + return $wrapped; + } + + public function stream_open($path, $mode, $options, &$opened_path) { + $this->loadContext('null'); + return true; + } +} diff --git a/apps/files_external/3rdparty/icewind/streams/src/Wrapper.php b/apps/files_external/3rdparty/icewind/streams/src/Wrapper.php new file mode 100644 index 00000000000..2e3a6e6cd88 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/streams/src/Wrapper.php @@ -0,0 +1,110 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\Streams; + +/** + * Base class for stream wrappers, wraps an existing stream + * + * This wrapper itself doesn't implement any functionality but is just a base class for other wrappers to extend + */ +abstract class Wrapper implements File { + /** + * @var resource + */ + public $context; + + /** + * The wrapped stream + * + * @var resource + */ + protected $source; + + /** + * Load the source from the stream context and return the context options + * + * @param string $name + * @return array + * @throws \Exception + */ + protected function loadContext($name) { + $context = stream_context_get_options($this->context); + if (isset($context[$name])) { + $context = $context[$name]; + } else { + throw new \BadMethodCallException('Invalid context, "callable" options not set'); + } + if (isset($context['source']) and is_resource($context['source'])) { + $this->setSourceStream($context['source']); + } else { + throw new \BadMethodCallException('Invalid context, source not set'); + } + return $context; + } + + /** + * @param resource $source + */ + protected function setSourceStream($source) { + $this->source = $source; + } + + public function stream_seek($offset, $whence = SEEK_SET) { + $result = fseek($this->source, $offset, $whence); + return $result == 0 ? true : false; + } + + public function stream_tell() { + return ftell($this->source); + } + + public function stream_read($count) { + return fread($this->source, $count); + } + + public function stream_write($data) { + return fwrite($this->source, $data); + } + + public function stream_set_option($option, $arg1, $arg2) { + switch ($option) { + case STREAM_OPTION_BLOCKING: + stream_set_blocking($this->source, $arg1); + break; + case STREAM_OPTION_READ_TIMEOUT: + stream_set_timeout($this->source, $arg1, $arg2); + break; + case STREAM_OPTION_WRITE_BUFFER: + stream_set_write_buffer($this->source, $arg1); + } + } + + public function stream_truncate($size) { + return ftruncate($this->source, $size); + } + + public function stream_stat() { + return fstat($this->source); + } + + public function stream_lock($mode) { + return flock($this->source, $mode); + } + + public function stream_flush() { + return fflush($this->source); + } + + public function stream_eof() { + return feof($this->source); + } + + public function stream_close() { + return fclose($this->source); + } +} diff --git a/apps/files_external/3rdparty/icewind/streams/tests/CallbackWrapper.php b/apps/files_external/3rdparty/icewind/streams/tests/CallbackWrapper.php new file mode 100644 index 00000000000..229b629dcd9 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/streams/tests/CallbackWrapper.php @@ -0,0 +1,72 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\Streams\Tests; + +class CallbackWrapper extends Wrapper { + + /** + * @param resource $source + * @param callable $read + * @param callable $write + * @param callable $close + * @return resource + */ + protected function wrapSource($source, $read = null, $write = null, $close = null) { + return \Icewind\Streams\CallbackWrapper::wrap($source, $read, $write, $close); + } + + /** + * @expectedException \BadMethodCallException + */ + public function testWrapInvalidSource() { + $this->wrapSource('foo'); + } + + public function testReadCallback() { + $called = false; + $callBack = function () use (&$called) { + $called = true; + }; + + $source = fopen('php://temp', 'r+'); + fwrite($source, 'foobar'); + rewind($source); + + $wrapped = $this->wrapSource($source, $callBack); + $this->assertEquals('foo', fread($wrapped, 3)); + $this->assertTrue($called); + } + + public function testWriteCallback() { + $lastData = ''; + $callBack = function ($data) use (&$lastData) { + $lastData = $data; + }; + + $source = fopen('php://temp', 'r+'); + + $wrapped = $this->wrapSource($source, null, $callBack); + fwrite($wrapped, 'foobar'); + $this->assertEquals('foobar', $lastData); + } + + public function testCloseCallback() { + $called = false; + $callBack = function () use (&$called) { + $called = true; + }; + + $source = fopen('php://temp', 'r+'); + fwrite($source, 'foobar'); + rewind($source); + + $wrapped = $this->wrapSource($source, null, null, $callBack); + fclose($wrapped); + $this->assertTrue($called); + } +} diff --git a/apps/files_external/3rdparty/icewind/streams/tests/IteratorDirectory.php b/apps/files_external/3rdparty/icewind/streams/tests/IteratorDirectory.php new file mode 100644 index 00000000000..0d990468368 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/streams/tests/IteratorDirectory.php @@ -0,0 +1,130 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\Streams\Tests; + +class IteratorDirectory extends \PHPUnit_Framework_TestCase { + + /** + * @param \Iterator | array $source + * @return resource + */ + protected function wrapSource($source) { + return \Icewind\Streams\IteratorDirectory::wrap($source); + } + + /** + * @expectedException \BadMethodCallException + */ + public function testNoContext() { + $context = stream_context_create(array()); + stream_wrapper_register('iterator', '\Icewind\Streams\IteratorDirectory'); + try { + opendir('iterator://', $context); + stream_wrapper_unregister('iterator'); + } catch (\Exception $e) { + stream_wrapper_unregister('iterator'); + throw $e; + } + } + + /** + * @expectedException \BadMethodCallException + */ + public function testInvalidSource() { + $context = stream_context_create(array( + 'dir' => array( + 'array' => 2 + ) + )); + stream_wrapper_register('iterator', '\Icewind\Streams\IteratorDirectory'); + try { + opendir('iterator://', $context); + stream_wrapper_unregister('iterator'); + } catch (\Exception $e) { + stream_wrapper_unregister('iterator'); + throw $e; + } + } + + /** + * @expectedException \BadMethodCallException + */ + public function testWrapInvalidSource() { + $this->wrapSource(2); + } + + public function fileListProvider() { + $longList = array_fill(0, 500, 'foo'); + return array( + array( + array( + 'foo', + 'bar', + 'qwerty' + ) + ), + array( + array( + 'with spaces', + 'under_scores', + '日本語', + 'character %$_', + '.', + '0', + 'double "quotes"', + "single 'quotes'" + ) + ), + array( + array( + 'single item' + ) + ), + array( + $longList + ), + array( + array() + ) + ); + } + + protected function basicTest($fileList, $dh) { + $result = array(); + + while (($file = readdir($dh)) !== false) { + $result[] = $file; + } + + $this->assertEquals($fileList, $result); + + rewinddir($dh); + if (count($fileList)) { + $this->assertEquals($fileList[0], readdir($dh)); + } else { + $this->assertFalse(readdir($dh)); + } + } + + /** + * @dataProvider fileListProvider + */ + public function testBasicIterator($fileList) { + $iterator = new \ArrayIterator($fileList); + $dh = $this->wrapSource($iterator); + $this->basicTest($fileList, $dh); + } + + /** + * @dataProvider fileListProvider + */ + public function testBasicArray($fileList) { + $dh = $this->wrapSource($fileList); + $this->basicTest($fileList, $dh); + } +} diff --git a/apps/files_external/3rdparty/icewind/streams/tests/NullWrapper.php b/apps/files_external/3rdparty/icewind/streams/tests/NullWrapper.php new file mode 100644 index 00000000000..ba42b4dfea1 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/streams/tests/NullWrapper.php @@ -0,0 +1,59 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\Streams\Tests; + +class NullWrapper extends Wrapper { + + /** + * @param resource $source + * @return resource + */ + protected function wrapSource($source) { + return \Icewind\Streams\NullWrapper::wrap($source); + } + + /** + * @expectedException \BadMethodCallException + */ + public function testNoContext() { + stream_wrapper_register('null', '\Icewind\Streams\NullWrapper'); + $context = stream_context_create(array()); + try { + fopen('null://', 'r+', false, $context); + stream_wrapper_unregister('null'); + } catch (\Exception $e) { + stream_wrapper_unregister('null'); + throw $e; + } + } + + /** + * @expectedException \BadMethodCallException + */ + public function testNoSource() { + stream_wrapper_register('null', '\Icewind\Streams\NullWrapper'); + $context = stream_context_create(array( + 'null' => array( + 'source' => 'bar' + ) + )); + try { + fopen('null://', 'r+', false, $context); + } catch (\Exception $e) { + stream_wrapper_unregister('null'); + throw $e; + } + } + + /** + * @expectedException \BadMethodCallException + */ + public function testWrapInvalidSource() { + $this->wrapSource('foo'); + } +} diff --git a/apps/files_external/3rdparty/icewind/streams/tests/Wrapper.php b/apps/files_external/3rdparty/icewind/streams/tests/Wrapper.php new file mode 100644 index 00000000000..6bb644dd611 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/streams/tests/Wrapper.php @@ -0,0 +1,105 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\Streams\Tests; + +abstract class Wrapper extends \PHPUnit_Framework_TestCase { + /** + * @param resource $source + * @return resource + */ + abstract protected function wrapSource($source); + + public function testRead() { + $source = fopen('php://temp', 'r+'); + fwrite($source, 'foobar'); + rewind($source); + + $wrapped = $this->wrapSource($source); + $this->assertEquals('foo', fread($wrapped, 3)); + $this->assertEquals('bar', fread($wrapped, 3)); + $this->assertEquals('', fread($wrapped, 3)); + } + + public function testWrite() { + $source = fopen('php://temp', 'r+'); + rewind($source); + + $wrapped = $this->wrapSource($source); + + $this->assertEquals(6, fwrite($wrapped, 'foobar')); + rewind($source); + $this->assertEquals('foobar', stream_get_contents($source)); + } + + public function testClose() { + $source = fopen('php://temp', 'r+'); + rewind($source); + + $wrapped = $this->wrapSource($source); + + fclose($wrapped); + $this->assertFalse(is_resource($source)); + } + + public function testSeekTell() { + $source = fopen('php://temp', 'r+'); + fwrite($source, 'foobar'); + rewind($source); + + $wrapped = $this->wrapSource($source); + + $this->assertEquals(0, ftell($wrapped)); + + fseek($wrapped, 2); + $this->assertEquals(2, ftell($source)); + $this->assertEquals(2, ftell($wrapped)); + + fseek($wrapped, 2, SEEK_CUR); + $this->assertEquals(4, ftell($source)); + $this->assertEquals(4, ftell($wrapped)); + + fseek($wrapped, -1, SEEK_END); + $this->assertEquals(5, ftell($source)); + $this->assertEquals(5, ftell($wrapped)); + } + + public function testStat() { + $source = fopen(__FILE__, 'r+'); + $wrapped = $this->wrapSource($source); + $this->assertEquals(stat(__FILE__), fstat($wrapped)); + } + + public function testTruncate() { + if (version_compare(phpversion(), '5.4.0', '<')) { + $this->markTestSkipped('php <5.4 doesn\'t support truncate for stream wrappers'); + } + $source = fopen('php://temp', 'r+'); + fwrite($source, 'foobar'); + rewind($source); + $wrapped = $this->wrapSource($source); + + ftruncate($wrapped, 2); + $this->assertEquals('fo', fread($wrapped, 10)); + } + + public function testLock() { + $source = tmpfile(); + $wrapped = $this->wrapSource($source); + if (!flock($wrapped, LOCK_EX)) { + $this->fail('Unable to acquire lock'); + } + } + + public function testStreamOptions() { + $source = fopen('php://temp', 'r+'); + $wrapped = $this->wrapSource($source); + stream_set_blocking($wrapped, 0); + stream_set_timeout($wrapped, 1, 0); + stream_set_write_buffer($wrapped, 0); + } +} diff --git a/apps/files_external/3rdparty/icewind/streams/tests/bootstrap.php b/apps/files_external/3rdparty/icewind/streams/tests/bootstrap.php new file mode 100644 index 00000000000..2c17fd57feb --- /dev/null +++ b/apps/files_external/3rdparty/icewind/streams/tests/bootstrap.php @@ -0,0 +1,9 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +date_default_timezone_set('UTC'); +require_once __DIR__ . '/../vendor/autoload.php'; diff --git a/apps/files_external/3rdparty/icewind/streams/tests/phpunit.xml b/apps/files_external/3rdparty/icewind/streams/tests/phpunit.xml new file mode 100644 index 00000000000..e3d96352c43 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/streams/tests/phpunit.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" ?> +<phpunit bootstrap="bootstrap.php"> + <testsuite name='Stream'> + <directory suffix='.php'>./</directory> + </testsuite> +</phpunit> diff --git a/apps/files_external/3rdparty/smb4php/smb.php b/apps/files_external/3rdparty/smb4php/smb.php deleted file mode 100644 index e325506fa14..00000000000 --- a/apps/files_external/3rdparty/smb4php/smb.php +++ /dev/null @@ -1,516 +0,0 @@ -<?php -################################################################### -# smb.php -# This class implements a SMB stream wrapper based on 'smbclient' -# -# Date: lun oct 22 10:35:35 CEST 2007 -# -# Homepage: http://www.phpclasses.org/smb4php -# -# Copyright (c) 2007 Victor M. Varela <vmvarela@gmail.com> -# Copyright (c) 2012 Frank Karlitschek <frank@owncloud.org> -# Copyright (c) 2014 Robin McCorkell <rmccorkell@karoshi.org.uk> -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# 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 General Public License for more details. -# -# On the official website http://www.phpclasses.org/smb4php the -# license is listed as LGPL so we assume that this is -# dual-licensed GPL/LGPL -################################################################### - -define ('SMB4PHP_VERSION', '0.8'); - -################################################################### -# CONFIGURATION SECTION - Change for your needs -################################################################### - -define ('SMB4PHP_SMBCLIENT', 'smbclient'); -define ('SMB4PHP_SMBOPTIONS', 'TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE SO_RCVBUF=8192 SO_SNDBUF=8192'); -define ('SMB4PHP_AUTHMODE', 'arg'); # set to 'env' to use USER enviroment variable - -################################################################### -# SMB - commands that does not need an instance -################################################################### - -$GLOBALS['__smb_cache'] = array ('stat' => array (), 'dir' => array ()); - -class smb { - - private static $regexp = array ( - '^added interface ip=(.*) bcast=(.*) nmask=(.*)$' => 'skip', - 'Anonymous login successful' => 'skip', - '^Domain=\[(.*)\] OS=\[(.*)\] Server=\[(.*)\]$' => 'skip', - '^\tSharename[ ]+Type[ ]+Comment$' => 'shares', - '^\t---------[ ]+----[ ]+-------$' => 'skip', - '^\tServer [ ]+Comment$' => 'servers', - '^\t---------[ ]+-------$' => 'skip', - '^\tWorkgroup[ ]+Master$' => 'workg', - '^\t(.*)[ ]+(Disk|IPC)[ ]+IPC.*$' => 'skip', - '^\tIPC\\\$(.*)[ ]+IPC' => 'skip', - '^\t(.*)[ ]+(Disk)[ ]+(.*)$' => 'share', - '^\t(.*)[ ]+(Printer)[ ]+(.*)$' => 'skip', - '([0-9]+) blocks of size ([0-9]+)\. ([0-9]+) blocks available' => 'skip', - 'Got a positive name query response from ' => 'skip', - '^(session setup failed): (.*)$' => 'error', - '^(.*): ERRSRV - ERRbadpw' => 'error', - '^Error returning browse list: (.*)$' => 'error', - '^tree connect failed: (.*)$' => 'error', - '^(Connection to .* failed)(.*)$' => 'error-connect', - '^NT_STATUS_(.*) ' => 'error', - '^NT_STATUS_(.*)\$' => 'error', - 'ERRDOS - ERRbadpath \((.*).\)' => 'error', - 'cd (.*): (.*)$' => 'error', - '^cd (.*): NT_STATUS_(.*)' => 'error', - '^\t(.*)$' => 'srvorwg', - '^([0-9]+)[ ]+([0-9]+)[ ]+(.*)$' => 'skip', - '^Job ([0-9]+) cancelled' => 'skip', - '^[ ]+(.*)[ ]+([0-9]+)[ ]+(Mon|Tue|Wed|Thu|Fri|Sat|Sun)[ ](Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[ ]+([0-9]+)[ ]+([0-9]{2}:[0-9]{2}:[0-9]{2})[ ]([0-9]{4})$' => 'files', - '^message start: ERRSRV - (ERRmsgoff)' => 'error' - ); - - function getRegexp() { - return self::$regexp; - } - - function parse_url ($url) { - $pu = parse_url (trim($url)); - foreach (array ('domain', 'user', 'pass', 'host', 'port', 'path') as $i) { - if (! isset($pu[$i])) { - $pu[$i] = ''; - } - } - if (count ($userdomain = explode (';', urldecode ($pu['user']))) > 1) { - @list ($pu['domain'], $pu['user']) = $userdomain; - } - $path = preg_replace (array ('/^\//', '/\/$/'), '', urldecode ($pu['path'])); - list ($pu['share'], $pu['path']) = (preg_match ('/^([^\/]+)\/(.*)/', $path, $regs)) - ? array ($regs[1], preg_replace ('/\//', '\\', $regs[2])) - : array ($path, ''); - $pu['type'] = $pu['path'] ? 'path' : ($pu['share'] ? 'share' : ($pu['host'] ? 'host' : '**error**')); - if (! ($pu['port'] = intval(@$pu['port']))) { - $pu['port'] = 139; - } - - // decode user and password - $pu['user'] = urldecode($pu['user']); - $pu['pass'] = urldecode($pu['pass']); - return $pu; - } - - - function look ($purl) { - return smb::client ('-L ' . escapeshellarg ($purl['host']), $purl); - } - - - function execute ($command, $purl, $regexp = NULL) { - return smb::client ('-d 0 ' - . escapeshellarg ('//' . $purl['host'] . '/' . $purl['share']) - . ' -c ' . escapeshellarg ($command), $purl, $regexp - ); - } - - function client ($params, $purl, $regexp = NULL) { - - if ($regexp === NULL) $regexp = smb::$regexp; - - if (SMB4PHP_AUTHMODE == 'env') { - putenv("USER={$purl['user']}%{$purl['pass']}"); - $auth = ''; - } else { - $auth = ($purl['user'] <> '' ? (' -U ' . escapeshellarg ($purl['user'] . '%' . $purl['pass'])) : ''); - } - if ($purl['domain'] <> '') { - $auth .= ' -W ' . escapeshellarg ($purl['domain']); - } - $port = ($purl['port'] <> 139 ? ' -p ' . escapeshellarg ($purl['port']) : ''); - $options = '-O ' . escapeshellarg(SMB4PHP_SMBOPTIONS); - - // this put env is necessary to read the output of smbclient correctly - $old_locale = getenv('LC_ALL'); - putenv('LC_ALL=en_US.UTF-8'); - $output = popen ('TZ=UTC '.SMB4PHP_SMBCLIENT." -N {$auth} {$options} {$port} {$options} {$params} 2>/dev/null", 'r'); - $gotInfo = false; - $info = array (); - $info['info']= array (); - $mode = ''; - while ($line = fgets ($output, 4096)) { - list ($tag, $regs, $i) = array ('skip', array (), array ()); - reset ($regexp); - foreach ($regexp as $r => $t) if (preg_match ('/'.$r.'/', $line, $regs)) { - $tag = $t; - break; - } - switch ($tag) { - case 'skip': continue; - case 'shares': $mode = 'shares'; break; - case 'servers': $mode = 'servers'; break; - case 'workg': $mode = 'workgroups'; break; - case 'share': - list($name, $type) = array ( - trim(substr($line, 1, 15)), - trim(strtolower(substr($line, 17, 10))) - ); - $i = ($type <> 'disk' && preg_match('/^(.*) Disk/', $line, $regs)) - ? array(trim($regs[1]), 'disk') - : array($name, 'disk'); - break; - case 'srvorwg': - list ($name, $master) = array ( - strtolower(trim(substr($line,1,21))), - strtolower(trim(substr($line, 22))) - ); - $i = ($mode == 'servers') ? array ($name, "server") : array ($name, "workgroup", $master); - break; - case 'files': - list ($attr, $name) = preg_match ("/^(.*)[ ]+([D|A|H|N|S|R]+)$/", trim ($regs[1]), $regs2) - ? array (trim ($regs2[2]), trim ($regs2[1])) - : array ('', trim ($regs[1])); - list ($his, $im) = array ( - explode(':', $regs[6]), 1 + strpos("JanFebMarAprMayJunJulAugSepOctNovDec", $regs[4]) / 3); - $i = ($name <> '.' && $name <> '..') - ? array ( - $name, - (strpos($attr,'D') === FALSE) ? 'file' : 'folder', - 'attr' => $attr, - 'size' => intval($regs[2]), - 'time' => mktime ($his[0], $his[1], $his[2], $im, $regs[5], $regs[7]) - ) - : array(); - break; - case 'error': - if(substr($regs[0],0,22)=='NT_STATUS_NO_SUCH_FILE'){ - return false; - }elseif(substr($regs[0],0,31)=='NT_STATUS_OBJECT_NAME_COLLISION'){ - return false; - }elseif(substr($regs[0],0,31)=='NT_STATUS_OBJECT_PATH_NOT_FOUND'){ - return false; - }elseif(substr($regs[0],0,31)=='NT_STATUS_OBJECT_NAME_NOT_FOUND'){ - return false; - }elseif(substr($regs[0],0,29)=='NT_STATUS_FILE_IS_A_DIRECTORY'){ - return false; - } - trigger_error($regs[0].' params('.$params.')', E_USER_ERROR); - case 'error-connect': - // connection error can happen after obtaining share list if - // NetBIOS is disabled/blocked on the target server, - // in which case we keep the info and continue - if (!$gotInfo) { - return false; - } - } - if ($i) switch ($i[1]) { - case 'file': - case 'folder': $info['info'][$i[0]] = $i; - case 'disk': - case 'server': - case 'workgroup': $info[$i[1]][] = $i[0]; - $gotInfo = true; - } - } - pclose($output); - - - // restore previous locale - if ($old_locale===false) { - putenv('LC_ALL'); - } else { - putenv('LC_ALL='.$old_locale); - } - - return $info; - } - - - # stats - - function url_stat ($url, $flags = STREAM_URL_STAT_LINK) { - if ($s = smb::getstatcache($url)) { - return $s; - } - list ($stat, $pu) = array (false, smb::parse_url ($url)); - switch ($pu['type']) { - case 'host': - if ($o = smb::look ($pu)) - $stat = stat ("/tmp"); - else - trigger_error ("url_stat(): list failed for host '{$pu['host']}'", E_USER_WARNING); - break; - case 'share': - if (smb::execute("ls", $pu)) - $stat = stat ("/tmp"); - else - trigger_error ("url_stat(): disk resource '{$pu['share']}' not found in '{$pu['host']}'", E_USER_WARNING); - break; - case 'path': - if ($o = smb::execute ('dir "'.$pu['path'].'"', $pu)) { - $p = explode('\\', $pu['path']); - $name = $p[count($p)-1]; - if (isset ($o['info'][$name])) { - $stat = smb::addstatcache ($url, $o['info'][$name]); - } else { - trigger_error ("url_stat(): path '{$pu['path']}' not found", E_USER_WARNING); - } - } else { - return false; -// trigger_error ("url_stat(): dir failed for path '{$pu['path']}'", E_USER_WARNING); - } - break; - default: trigger_error ('error in URL', E_USER_ERROR); - } - return $stat; - } - - function addstatcache ($url, $info) { - $url = str_replace('//', '/', $url); - $url = rtrim($url, '/'); - global $__smb_cache; - $is_file = (strpos ($info['attr'],'D') === FALSE); - $s = ($is_file) ? stat ('/etc/passwd') : stat ('/tmp'); - $s[7] = $s['size'] = $info['size']; - $s[8] = $s[9] = $s[10] = $s['atime'] = $s['mtime'] = $s['ctime'] = $info['time']; - return $__smb_cache['stat'][$url] = $s; - } - - function getstatcache ($url) { - $url = str_replace('//', '/', $url); - $url = rtrim($url, '/'); - global $__smb_cache; - return isset ($__smb_cache['stat'][$url]) ? $__smb_cache['stat'][$url] : FALSE; - } - - function clearstatcache ($url='') { - $url = str_replace('//', '/', $url); - $url = rtrim($url, '/'); - global $__smb_cache; - if ($url == '') $__smb_cache['stat'] = array (); else unset ($__smb_cache['stat'][$url]); - } - - - # commands - - function unlink ($url) { - $pu = smb::parse_url($url); - if ($pu['type'] <> 'path') trigger_error('unlink(): error in URL', E_USER_ERROR); - smb::clearstatcache ($url); - smb_stream_wrapper::cleardircache (dirname($url)); - return smb::execute ('del "'.$pu['path'].'"', $pu); - } - - function rename ($url_from, $url_to) { - $replace = false; - list ($from, $to) = array (smb::parse_url($url_from), smb::parse_url($url_to)); - if ($from['host'] <> $to['host'] || - $from['share'] <> $to['share'] || - $from['user'] <> $to['user'] || - $from['pass'] <> $to['pass'] || - $from['domain'] <> $to['domain']) { - trigger_error('rename(): FROM & TO must be in same server-share-user-pass-domain', E_USER_ERROR); - } - if ($from['type'] <> 'path' || $to['type'] <> 'path') { - trigger_error('rename(): error in URL', E_USER_ERROR); - } - smb::clearstatcache ($url_from); - $cmd = ''; - // check if target file exists - if (smb::url_stat($url_to)) { - // delete target file first - $cmd = 'del "' . $to['path'] . '"; '; - $replace = true; - } - $cmd .= 'rename "' . $from['path'] . '" "' . $to['path'] . '"'; - $result = smb::execute($cmd, $to); - if ($replace) { - // clear again, else the cache will return the info - // from the old file - smb::clearstatcache ($url_to); - } - return $result !== false; - } - - function mkdir ($url, $mode, $options) { - $pu = smb::parse_url($url); - if ($pu['type'] <> 'path') trigger_error('mkdir(): error in URL', E_USER_ERROR); - return smb::execute ('mkdir "'.$pu['path'].'"', $pu)!==false; - } - - function rmdir ($url) { - $pu = smb::parse_url($url); - if ($pu['type'] <> 'path') trigger_error('rmdir(): error in URL', E_USER_ERROR); - smb::clearstatcache ($url); - smb_stream_wrapper::cleardircache (dirname($url)); - return smb::execute ('rmdir "'.$pu['path'].'"', $pu)!==false; - } - -} - -################################################################### -# SMB_STREAM_WRAPPER - class to be registered for smb:// URLs -################################################################### - -class smb_stream_wrapper extends smb { - - # variables - - private $stream, $url, $parsed_url = array (), $mode, $tmpfile; - private $need_flush = FALSE; - private $dir = array (), $dir_index = -1; - - - # directories - - function dir_opendir ($url, $options) { - if ($d = $this->getdircache ($url)) { - $this->dir = $d; - $this->dir_index = 0; - return TRUE; - } - $pu = smb::parse_url ($url); - switch ($pu['type']) { - case 'host': - if ($o = smb::look ($pu)) { - $this->dir = $o['disk']; - $this->dir_index = 0; - } else { - trigger_error ("dir_opendir(): list failed for host '{$pu['host']}'", E_USER_WARNING); - return false; - } - break; - case 'share': - case 'path': - if (is_array($o = smb::execute ('dir "'.$pu['path'].'\*"', $pu))) { - $this->dir = array_keys($o['info']); - $this->dir_index = 0; - $this->adddircache ($url, $this->dir); - if(substr($url,-1,1)=='/'){ - $url=substr($url,0,-1); - } - foreach ($o['info'] as $name => $info) { - smb::addstatcache($url . '/' . $name, $info); - } - } else { - trigger_error ("dir_opendir(): dir failed for path '".$pu['path']."'", E_USER_WARNING); - return false; - } - break; - default: - trigger_error ('dir_opendir(): error in URL', E_USER_ERROR); - return false; - } - return TRUE; - } - - function dir_readdir () { - return ($this->dir_index < count($this->dir)) ? $this->dir[$this->dir_index++] : FALSE; - } - - function dir_rewinddir () { $this->dir_index = 0; } - - function dir_closedir () { $this->dir = array(); $this->dir_index = -1; return TRUE; } - - - # cache - - function adddircache ($url, $content) { - $url = str_replace('//', '/', $url); - $url = rtrim($url, '/'); - global $__smb_cache; - return $__smb_cache['dir'][$url] = $content; - } - - function getdircache ($url) { - $url = str_replace('//', '/', $url); - $url = rtrim($url, '/'); - global $__smb_cache; - return isset ($__smb_cache['dir'][$url]) ? $__smb_cache['dir'][$url] : FALSE; - } - - function cleardircache ($url='') { - $url = str_replace('//', '/', $url); - $url = rtrim($url, '/'); - global $__smb_cache; - if ($url == ''){ - $__smb_cache['dir'] = array (); - }else{ - unset ($__smb_cache['dir'][$url]); - } - } - - - # streams - - function stream_open ($url, $mode, $options, $opened_path) { - $this->url = $url; - $this->mode = $mode; - $this->parsed_url = $pu = smb::parse_url($url); - if ($pu['type'] <> 'path') trigger_error('stream_open(): error in URL', E_USER_ERROR); - switch ($mode) { - case 'r': - case 'r+': - case 'rb': - case 'a': - case 'a+': $this->tmpfile = tempnam('/tmp', 'smb.down.'); - $result = smb::execute ('get "'.$pu['path'].'" "'.$this->tmpfile.'"', $pu); - if($result === false){ - return $result; - } - break; - case 'w': - case 'w+': - case 'wb': - case 'x': - case 'x+': $this->cleardircache(); - $this->tmpfile = tempnam('/tmp', 'smb.up.'); - $this->need_flush=true; - } - $this->stream = fopen ($this->tmpfile, $mode); - return TRUE; - } - - function stream_close () { return fclose($this->stream); } - - function stream_read ($count) { return fread($this->stream, $count); } - - function stream_write ($data) { $this->need_flush = TRUE; return fwrite($this->stream, $data); } - - function stream_eof () { return feof($this->stream); } - - function stream_tell () { return ftell($this->stream); } - - // PATCH: the wrapper must return true when fseek succeeded by returning 0. - function stream_seek ($offset, $whence=null) { return fseek($this->stream, $offset, $whence) === 0; } - - function stream_flush () { - if ($this->mode <> 'r' && $this->need_flush) { - smb::clearstatcache ($this->url); - smb::execute ('put "'.$this->tmpfile.'" "'.$this->parsed_url['path'].'"', $this->parsed_url); - $this->need_flush = FALSE; - } - } - - function stream_stat () { return smb::url_stat ($this->url); } - - function __destruct () { - if ($this->tmpfile <> '') { - if ($this->need_flush) $this->stream_flush (); - unlink ($this->tmpfile); - - } - } - -} - -################################################################### -# Register 'smb' protocol ! -################################################################### - -stream_wrapper_register('smb', 'smb_stream_wrapper') - or die ('Failed to register protocol'); diff --git a/apps/files_external/ajax/addMountPoint.php b/apps/files_external/ajax/addMountPoint.php deleted file mode 100644 index 4903120c2a8..00000000000 --- a/apps/files_external/ajax/addMountPoint.php +++ /dev/null @@ -1,26 +0,0 @@ -<?php - -OCP\JSON::checkAppEnabled('files_external'); -OCP\JSON::callCheck(); - -if ($_POST['isPersonal'] == 'true') { - OCP\JSON::checkLoggedIn(); - $isPersonal = true; -} else { - OCP\JSON::checkAdminUser(); - $isPersonal = false; -} - -$mountPoint = $_POST['mountPoint']; -$oldMountPoint = $_POST['oldMountPoint']; -$class = $_POST['class']; -$options = $_POST['classOptions']; -$type = $_POST['mountType']; -$applicable = $_POST['applicable']; - -if ($oldMountPoint and $oldMountPoint !== $mountPoint) { - OC_Mount_Config::removeMountPoint($oldMountPoint, $type, $applicable, $isPersonal); -} - -$status = OC_Mount_Config::addMountPoint($mountPoint, $class, $options, $type, $applicable, $isPersonal); -OCP\JSON::success(array('data' => array('message' => $status))); diff --git a/apps/files_external/ajax/applicable.php b/apps/files_external/ajax/applicable.php index 1f0147758e7..3af6aef57fb 100644 --- a/apps/files_external/ajax/applicable.php +++ b/apps/files_external/ajax/applicable.php @@ -9,13 +9,13 @@ $pattern = ''; $limit = null; $offset = null; if (isset($_GET['pattern'])) { - $pattern = $_GET['pattern']; + $pattern = (string)$_GET['pattern']; } if (isset($_GET['limit'])) { - $limit = $_GET['limit']; + $limit = (int)$_GET['limit']; } if (isset($_GET['offset'])) { - $offset = $_GET['offset']; + $offset = (int)$_GET['offset']; } $groups = \OC_Group::getGroups($pattern, $limit, $offset); diff --git a/apps/files_external/ajax/dropbox.php b/apps/files_external/ajax/dropbox.php index db417de4b2d..8080ca390b1 100644 --- a/apps/files_external/ajax/dropbox.php +++ b/apps/files_external/ajax/dropbox.php @@ -8,13 +8,13 @@ OCP\JSON::callCheck(); $l = \OC::$server->getL10N('files_external'); if (isset($_POST['app_key']) && isset($_POST['app_secret'])) { - $oauth = new Dropbox_OAuth_Curl($_POST['app_key'], $_POST['app_secret']); + $oauth = new Dropbox_OAuth_Curl((string)$_POST['app_key'], (string)$_POST['app_secret']); if (isset($_POST['step'])) { switch ($_POST['step']) { case 1: try { if (isset($_POST['callback'])) { - $callback = $_POST['callback']; + $callback = (string)$_POST['callback']; } else { $callback = null; } @@ -31,7 +31,7 @@ if (isset($_POST['app_key']) && isset($_POST['app_secret'])) { case 2: if (isset($_POST['request_token']) && isset($_POST['request_token_secret'])) { try { - $oauth->setToken($_POST['request_token'], $_POST['request_token_secret']); + $oauth->setToken((string)$_POST['request_token'], (string)$_POST['request_token_secret']); $token = $oauth->getAccessToken(); OCP\JSON::success(array('access_token' => $token['token'], 'access_token_secret' => $token['token_secret'])); diff --git a/apps/files_external/ajax/google.php b/apps/files_external/ajax/google.php index b80f24bbd2c..66c244acfbc 100644 --- a/apps/files_external/ajax/google.php +++ b/apps/files_external/ajax/google.php @@ -10,9 +10,9 @@ $l = \OC::$server->getL10N('files_external'); if (isset($_POST['client_id']) && isset($_POST['client_secret']) && isset($_POST['redirect'])) { $client = new Google_Client(); - $client->setClientId($_POST['client_id']); - $client->setClientSecret($_POST['client_secret']); - $client->setRedirectUri($_POST['redirect']); + $client->setClientId((string)$_POST['client_id']); + $client->setClientSecret((string)$_POST['client_secret']); + $client->setRedirectUri((string)$_POST['redirect']); $client->setScopes(array('https://www.googleapis.com/auth/drive')); $client->setAccessType('offline'); if (isset($_POST['step'])) { @@ -30,7 +30,7 @@ if (isset($_POST['client_id']) && isset($_POST['client_secret']) && isset($_POST } } else if ($step == 2 && isset($_POST['code'])) { try { - $token = $client->authenticate($_POST['code']); + $token = $client->authenticate((string)$_POST['code']); OCP\JSON::success(array('data' => array( 'token' => $token ))); diff --git a/apps/files_external/ajax/removeMountPoint.php b/apps/files_external/ajax/removeMountPoint.php deleted file mode 100644 index 2f5dbcfdbac..00000000000 --- a/apps/files_external/ajax/removeMountPoint.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php - -OCP\JSON::checkAppEnabled('files_external'); -OCP\JSON::callCheck(); - -if (!isset($_POST['isPersonal'])) - return; -if (!isset($_POST['mountPoint'])) - return; -if (!isset($_POST['mountType'])) - return; -if (!isset($_POST['applicable'])) - return; - -if ($_POST['isPersonal'] == 'true') { - OCP\JSON::checkLoggedIn(); - $isPersonal = true; -} else { - OCP\JSON::checkAdminUser(); - $isPersonal = false; -} - -OC_Mount_Config::removeMountPoint($_POST['mountPoint'], $_POST['mountType'], $_POST['applicable'], $isPersonal); diff --git a/apps/files_external/appinfo/app.php b/apps/files_external/appinfo/app.php index 9b5994338a1..7ea1e96bf2f 100644 --- a/apps/files_external/appinfo/app.php +++ b/apps/files_external/appinfo/app.php @@ -6,6 +6,8 @@ * later. * See the COPYING-README file. */ +$app = new \OCA\Files_external\Appinfo\Application(); + $l = \OC::$server->getL10N('files_external'); OC::$CLASSPATH['OC\Files\Storage\StreamWrapper'] = 'files_external/lib/streamwrapper.php'; @@ -18,47 +20,52 @@ OC::$CLASSPATH['OC\Files\Storage\SMB_OC'] = 'files_external/lib/smb_oc.php'; OC::$CLASSPATH['OC\Files\Storage\AmazonS3'] = 'files_external/lib/amazons3.php'; OC::$CLASSPATH['OC\Files\Storage\Dropbox'] = 'files_external/lib/dropbox.php'; OC::$CLASSPATH['OC\Files\Storage\SFTP'] = 'files_external/lib/sftp.php'; +OC::$CLASSPATH['OC\Files\Storage\SFTP_Key'] = 'files_external/lib/sftp_key.php'; OC::$CLASSPATH['OC_Mount_Config'] = 'files_external/lib/config.php'; OC::$CLASSPATH['OCA\Files\External\Api'] = 'files_external/lib/api.php'; +require_once __DIR__ . '/../3rdparty/autoload.php'; + OCP\App::registerAdmin('files_external', 'settings'); if (OCP\Config::getAppValue('files_external', 'allow_user_mounting', 'yes') == 'yes') { OCP\App::registerPersonal('files_external', 'personal'); } -\OCA\Files\App::getNavigationManager()->add( - array( - "id" => 'extstoragemounts', - "appname" => 'files_external', - "script" => 'list.php', - "order" => 30, - "name" => $l->t('External storage') - ) -); +\OCA\Files\App::getNavigationManager()->add([ + "id" => 'extstoragemounts', + "appname" => 'files_external', + "script" => 'list.php', + "order" => 30, + "name" => $l->t('External storage') +]); // connecting hooks OCP\Util::connectHook('OC_Filesystem', 'post_initMountPoints', '\OC_Mount_Config', 'initMountPointsHook'); OCP\Util::connectHook('OC_User', 'post_login', 'OC\Files\Storage\SMB_OC', 'login'); -OC_Mount_Config::registerBackend('\OC\Files\Storage\Local', array( +OC_Mount_Config::registerBackend('\OC\Files\Storage\Local', [ 'backend' => (string)$l->t('Local'), 'priority' => 150, - 'configuration' => array( - 'datadir' => (string)$l->t('Location')))); + 'configuration' => [ + 'datadir' => (string)$l->t('Location') + ], +]); -OC_Mount_Config::registerBackend('\OC\Files\Storage\AmazonS3', array( +OC_Mount_Config::registerBackend('\OC\Files\Storage\AmazonS3', [ 'backend' => (string)$l->t('Amazon S3'), 'priority' => 100, - 'configuration' => array( + 'configuration' => [ 'key' => (string)$l->t('Key'), 'secret' => '*'.$l->t('Secret'), - 'bucket' => (string)$l->t('Bucket')), - 'has_dependencies' => true)); + 'bucket' => (string)$l->t('Bucket'), + ], + 'has_dependencies' => true, +]); -OC_Mount_Config::registerBackend('\OC\Files\Storage\AmazonS3', array( +OC_Mount_Config::registerBackend('\OC\Files\Storage\AmazonS3', [ 'backend' => (string)$l->t('Amazon S3 and compliant'), 'priority' => 100, - 'configuration' => array( + 'configuration' => [ 'key' => (string)$l->t('Access Key'), 'secret' => '*'.$l->t('Secret Key'), 'bucket' => (string)$l->t('Bucket'), @@ -66,48 +73,56 @@ OC_Mount_Config::registerBackend('\OC\Files\Storage\AmazonS3', array( 'port' => '&'.$l->t('Port'), 'region' => '&'.$l->t('Region'), 'use_ssl' => '!'.$l->t('Enable SSL'), - 'use_path_style' => '!'.$l->t('Enable Path Style')), - 'has_dependencies' => true)); + 'use_path_style' => '!'.$l->t('Enable Path Style') + ], + 'has_dependencies' => true, +]); -OC_Mount_Config::registerBackend('\OC\Files\Storage\Dropbox', array( +OC_Mount_Config::registerBackend('\OC\Files\Storage\Dropbox', [ 'backend' => 'Dropbox', 'priority' => 100, - 'configuration' => array( + 'configuration' => [ 'configured' => '#configured', 'app_key' => (string)$l->t('App key'), 'app_secret' => '*'.$l->t('App secret'), 'token' => '#token', - 'token_secret' => '#token_secret'), + 'token_secret' => '#token_secret' + ], 'custom' => 'dropbox', - 'has_dependencies' => true)); + 'has_dependencies' => true, +]); -OC_Mount_Config::registerBackend('\OC\Files\Storage\FTP', array( +OC_Mount_Config::registerBackend('\OC\Files\Storage\FTP', [ 'backend' => 'FTP', 'priority' => 100, - 'configuration' => array( + 'configuration' => [ 'host' => (string)$l->t('Host'), 'user' => (string)$l->t('Username'), 'password' => '*'.$l->t('Password'), 'root' => '&'.$l->t('Remote subfolder'), - 'secure' => '!'.$l->t('Secure ftps://')), - 'has_dependencies' => true)); + 'secure' => '!'.$l->t('Secure ftps://') + ], + 'has_dependencies' => true, +]); -OC_Mount_Config::registerBackend('\OC\Files\Storage\Google', array( +OC_Mount_Config::registerBackend('\OC\Files\Storage\Google', [ 'backend' => 'Google Drive', 'priority' => 100, - 'configuration' => array( + 'configuration' => [ 'configured' => '#configured', 'client_id' => (string)$l->t('Client ID'), 'client_secret' => '*'.$l->t('Client secret'), - 'token' => '#token'), + 'token' => '#token', + ], 'custom' => 'google', - 'has_dependencies' => true)); + 'has_dependencies' => true, +]); -OC_Mount_Config::registerBackend('\OC\Files\Storage\Swift', array( +OC_Mount_Config::registerBackend('\OC\Files\Storage\Swift', [ 'backend' => (string)$l->t('OpenStack Object Storage'), 'priority' => 100, - 'configuration' => array( + 'configuration' => [ 'user' => (string)$l->t('Username'), 'bucket' => (string)$l->t('Bucket'), 'region' => '&'.$l->t('Region (optional for OpenStack Object Storage)'), @@ -117,63 +132,86 @@ OC_Mount_Config::registerBackend('\OC\Files\Storage\Swift', array( 'service_name' => '&'.$l->t('Service Name (required for OpenStack Object Storage)'), 'url' => '&'.$l->t('URL of identity endpoint (required for OpenStack Object Storage)'), 'timeout' => '&'.$l->t('Timeout of HTTP requests in seconds'), - ), - 'has_dependencies' => true)); + ], + 'has_dependencies' => true, +]); if (!OC_Util::runningOnWindows()) { - OC_Mount_Config::registerBackend('\OC\Files\Storage\SMB', array( + OC_Mount_Config::registerBackend('\OC\Files\Storage\SMB', [ 'backend' => 'SMB / CIFS', 'priority' => 100, - 'configuration' => array( + 'configuration' => [ 'host' => (string)$l->t('Host'), 'user' => (string)$l->t('Username'), 'password' => '*'.$l->t('Password'), 'share' => (string)$l->t('Share'), - 'root' => '&'.$l->t('Remote subfolder')), - 'has_dependencies' => true)); + 'root' => '&'.$l->t('Remote subfolder'), + ], + 'has_dependencies' => true, + ]); - OC_Mount_Config::registerBackend('\OC\Files\Storage\SMB_OC', array( + OC_Mount_Config::registerBackend('\OC\Files\Storage\SMB_OC', [ 'backend' => (string)$l->t('SMB / CIFS using OC login'), 'priority' => 90, - 'configuration' => array( + 'configuration' => [ 'host' => (string)$l->t('Host'), 'username_as_share' => '!'.$l->t('Username as share'), 'share' => '&'.$l->t('Share'), - 'root' => '&'.$l->t('Remote subfolder')), - 'has_dependencies' => true)); + 'root' => '&'.$l->t('Remote subfolder'), + ], + 'has_dependencies' => true, + ]); } -OC_Mount_Config::registerBackend('\OC\Files\Storage\DAV', array( +OC_Mount_Config::registerBackend('\OC\Files\Storage\DAV', [ 'backend' => 'WebDAV', 'priority' => 100, - 'configuration' => array( + 'configuration' => [ 'host' => (string)$l->t('URL'), 'user' => (string)$l->t('Username'), 'password' => '*'.$l->t('Password'), 'root' => '&'.$l->t('Remote subfolder'), - 'secure' => '!'.$l->t('Secure https://')), - 'has_dependencies' => true)); + 'secure' => '!'.$l->t('Secure https://'), + ], + 'has_dependencies' => true, +]); -OC_Mount_Config::registerBackend('\OC\Files\Storage\OwnCloud', array( +OC_Mount_Config::registerBackend('\OC\Files\Storage\OwnCloud', [ 'backend' => 'ownCloud', 'priority' => 100, - 'configuration' => array( + 'configuration' => [ 'host' => (string)$l->t('URL'), 'user' => (string)$l->t('Username'), 'password' => '*'.$l->t('Password'), 'root' => '&'.$l->t('Remote subfolder'), - 'secure' => '!'.$l->t('Secure https://')))); + 'secure' => '!'.$l->t('Secure https://'), + ], +]); -OC_Mount_Config::registerBackend('\OC\Files\Storage\SFTP', array( +OC_Mount_Config::registerBackend('\OC\Files\Storage\SFTP', [ 'backend' => 'SFTP', 'priority' => 100, - 'configuration' => array( + 'configuration' => [ 'host' => (string)$l->t('Host'), 'user' => (string)$l->t('Username'), 'password' => '*'.$l->t('Password'), - 'root' => '&'.$l->t('Remote subfolder')))); + 'root' => '&'.$l->t('Remote subfolder'), + ], +]); +OC_Mount_Config::registerBackend('\OC\Files\Storage\SFTP_Key', [ + 'backend' => 'SFTP with secret key login', + 'priority' => 100, + 'configuration' => array( + 'host' => (string)$l->t('Host'), + 'user' => (string)$l->t('Username'), + 'public_key' => (string)$l->t('Public key'), + 'private_key' => '#private_key', + 'root' => '&'.$l->t('Remote subfolder')), + 'custom' => 'sftp_key', + ] +); $mountProvider = new \OCA\Files_External\Config\ConfigAdapter(); \OC::$server->getMountProviderCollection()->registerProvider($mountProvider); diff --git a/apps/files_external/appinfo/application.php b/apps/files_external/appinfo/application.php new file mode 100644 index 00000000000..3e6b80ccb48 --- /dev/null +++ b/apps/files_external/appinfo/application.php @@ -0,0 +1,34 @@ +<?php +/** + * Copyright (c) 2015 University of Edinburgh <Ross.Nicoll@ed.ac.uk> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OCA\Files_External\Appinfo; + +use \OCA\Files_External\Controller\AjaxController; +use \OCP\AppFramework\App; +use \OCP\IContainer; + +/** + * @package OCA\Files_External\Appinfo + */ +class Application extends App { + public function __construct(array $urlParams=array()) { + parent::__construct('files_external', $urlParams); + + $container = $this->getContainer(); + + /** + * Controllers + */ + $container->registerService('AjaxController', function (IContainer $c) { + return new AjaxController( + $c->query('AppName'), + $c->query('Request') + ); + }); + } +} diff --git a/apps/files_external/appinfo/routes.php b/apps/files_external/appinfo/routes.php index b852b34c5d3..a090fca20ea 100644 --- a/apps/files_external/appinfo/routes.php +++ b/apps/files_external/appinfo/routes.php @@ -20,13 +20,31 @@ * */ -/** @var $this OC\Route\Router */ +namespace OCA\Files_External\Appinfo; -$this->create('files_external_add_mountpoint', 'ajax/addMountPoint.php') - ->actionInclude('files_external/ajax/addMountPoint.php'); -$this->create('files_external_remove_mountpoint', 'ajax/removeMountPoint.php') - ->actionInclude('files_external/ajax/removeMountPoint.php'); +/** + * @var $this \OC\Route\Router + **/ +$application = new Application(); +$application->registerRoutes( + $this, + array( + 'resources' => array( + 'global_storages' => array('url' => '/globalstorages'), + 'user_storages' => array('url' => '/userstorages'), + ), + 'routes' => array( + array( + 'name' => 'Ajax#getSshKeys', + 'url' => '/ajax/sftp_key.php', + 'verb' => 'POST', + 'requirements' => array() + ) + ) + ) +); +// TODO: move these to app framework $this->create('files_external_add_root_certificate', 'ajax/addRootCertificate.php') ->actionInclude('files_external/ajax/addRootCertificate.php'); $this->create('files_external_remove_root_certificate', 'ajax/removeRootCertificate.php') @@ -37,10 +55,11 @@ $this->create('files_external_dropbox', 'ajax/dropbox.php') $this->create('files_external_google', 'ajax/google.php') ->actionInclude('files_external/ajax/google.php'); + $this->create('files_external_list_applicable', '/applicable') ->actionInclude('files_external/ajax/applicable.php'); -OC_API::register('get', +\OC_API::register('get', '/apps/files_external/api/v1/mounts', array('\OCA\Files\External\Api', 'getUserMounts'), 'files_external'); diff --git a/apps/files_external/controller/ajaxcontroller.php b/apps/files_external/controller/ajaxcontroller.php new file mode 100644 index 00000000000..141fc7817d2 --- /dev/null +++ b/apps/files_external/controller/ajaxcontroller.php @@ -0,0 +1,48 @@ +<?php +/** + * Copyright (c) 2015 University of Edinburgh <Ross.Nicoll@ed.ac.uk> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OCA\Files_External\Controller; + +use OCP\AppFramework\Controller; +use OCP\IRequest; +use OCP\AppFramework\Http\JSONResponse; + +class AjaxController extends Controller { + public function __construct($appName, IRequest $request) { + parent::__construct($appName, $request); + } + + private function generateSshKeys() { + $rsa = new \Crypt_RSA(); + $rsa->setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_OPENSSH); + $rsa->setPassword(\OC::$server->getConfig()->getSystemValue('secret', '')); + + $key = $rsa->createKey(); + // Replace the placeholder label with a more meaningful one + $key['publicKey'] = str_replace('phpseclib-generated-key', gethostname(), $key['publickey']); + + return $key; + } + + /** + * Generates an SSH public/private key pair. + * + * @NoAdminRequired + */ + public function getSshKeys() { + $key = $this->generateSshKeys(); + return new JSONResponse( + array('data' => array( + 'private_key' => $key['privatekey'], + 'public_key' => $key['publickey'] + ), + 'status' => 'success' + )); + } + +} diff --git a/apps/files_external/controller/globalstoragescontroller.php b/apps/files_external/controller/globalstoragescontroller.php new file mode 100644 index 00000000000..819cccdbde8 --- /dev/null +++ b/apps/files_external/controller/globalstoragescontroller.php @@ -0,0 +1,156 @@ +<?php +/** + * ownCloud - files_external + * + * This file is licensed under the Affero General Public License version 3 or + * later. See the COPYING file. + * + * @author Vincent Petry <pvince81@owncloud.com> + * @copyright Vincent Petry 2015 + */ + +namespace OCA\Files_External\Controller; + + +use \OCP\IConfig; +use \OCP\IUserSession; +use \OCP\IRequest; +use \OCP\IL10N; +use \OCP\AppFramework\Http\DataResponse; +use \OCP\AppFramework\Controller; +use \OCP\AppFramework\Http; +use \OCA\Files_external\Service\GlobalStoragesService; +use \OCA\Files_external\NotFoundException; +use \OCA\Files_external\Lib\StorageConfig; + +/** + * Global storages controller + */ +class GlobalStoragesController extends StoragesController { + /** + * Creates a new global storages controller. + * + * @param string $AppName application name + * @param IRequest $request request object + * @param IL10N $l10n l10n service + * @param GlobalStoragesService $globalStoragesService storage service + */ + public function __construct( + $AppName, + IRequest $request, + IL10N $l10n, + GlobalStoragesService $globalStoragesService + ) { + parent::__construct( + $AppName, + $request, + $l10n, + $globalStoragesService + ); + } + + /** + * Create an external storage entry. + * + * @param string $mountPoint storage mount point + * @param string $backendClass backend class name + * @param array $backendOptions backend-specific options + * @param array $mountOptions mount-specific options + * @param array $applicableUsers users for which to mount the storage + * @param array $applicableGroups groups for which to mount the storage + * @param int $priority priority + * + * @return DataResponse + */ + public function create( + $mountPoint, + $backendClass, + $backendOptions, + $mountOptions, + $applicableUsers, + $applicableGroups, + $priority + ) { + $newStorage = new StorageConfig(); + $newStorage->setMountPoint($mountPoint); + $newStorage->setBackendClass($backendClass); + $newStorage->setBackendOptions($backendOptions); + $newStorage->setMountOptions($mountOptions); + $newStorage->setApplicableUsers($applicableUsers); + $newStorage->setApplicableGroups($applicableGroups); + $newStorage->setPriority($priority); + + $response = $this->validate($newStorage); + if (!empty($response)) { + return $response; + } + + $newStorage = $this->service->addStorage($newStorage); + + $this->updateStorageStatus($newStorage); + + return new DataResponse( + $newStorage, + Http::STATUS_CREATED + ); + } + + /** + * Update an external storage entry. + * + * @param int $id storage id + * @param string $mountPoint storage mount point + * @param string $backendClass backend class name + * @param array $backendOptions backend-specific options + * @param array $mountOptions mount-specific options + * @param array $applicableUsers users for which to mount the storage + * @param array $applicableGroups groups for which to mount the storage + * @param int $priority priority + * + * @return DataResponse + */ + public function update( + $id, + $mountPoint, + $backendClass, + $backendOptions, + $mountOptions, + $applicableUsers, + $applicableGroups, + $priority + ) { + $storage = new StorageConfig($id); + $storage->setMountPoint($mountPoint); + $storage->setBackendClass($backendClass); + $storage->setBackendOptions($backendOptions); + $storage->setMountOptions($mountOptions); + $storage->setApplicableUsers($applicableUsers); + $storage->setApplicableGroups($applicableGroups); + $storage->setPriority($priority); + + $response = $this->validate($storage); + if (!empty($response)) { + return $response; + } + + try { + $storage = $this->service->updateStorage($storage); + } catch (NotFoundException $e) { + return new DataResponse( + [ + 'message' => (string)$this->l10n->t('Storage with id "%i" not found', array($id)) + ], + Http::STATUS_NOT_FOUND + ); + } + + $this->updateStorageStatus($storage); + + return new DataResponse( + $storage, + Http::STATUS_OK + ); + + } + +} diff --git a/apps/files_external/controller/storagescontroller.php b/apps/files_external/controller/storagescontroller.php new file mode 100644 index 00000000000..b454dff7027 --- /dev/null +++ b/apps/files_external/controller/storagescontroller.php @@ -0,0 +1,167 @@ +<?php +/** + * ownCloud - files_external + * + * This file is licensed under the Affero General Public License version 3 or + * later. See the COPYING file. + * + * @author Vincent Petry <pvince81@owncloud.com> + * @copyright Vincent Petry 2014 + */ + +namespace OCA\Files_External\Controller; + + +use \OCP\IConfig; +use \OCP\IUserSession; +use \OCP\IRequest; +use \OCP\IL10N; +use \OCP\AppFramework\Http\DataResponse; +use \OCP\AppFramework\Controller; +use \OCP\AppFramework\Http; +use \OCA\Files_external\Service\StoragesService; +use \OCA\Files_external\NotFoundException; +use \OCA\Files_external\Lib\StorageConfig; + +/** + * Base class for storages controllers + */ +abstract class StoragesController extends Controller { + + /** + * L10N service + * + * @var IL10N + */ + protected $l10n; + + /** + * Storages service + * + * @var StoragesService + */ + protected $service; + + /** + * Creates a new storages controller. + * + * @param string $AppName application name + * @param IRequest $request request object + * @param IL10N $l10n l10n service + * @param StoragesService $storagesService storage service + */ + public function __construct( + $AppName, + IRequest $request, + IL10N $l10n, + StoragesService $storagesService + ) { + parent::__construct($AppName, $request); + $this->l10n = $l10n; + $this->service = $storagesService; + } + + /** + * Validate storage config + * + * @param StorageConfig $storage storage config + * + * @return DataResponse|null returns response in case of validation error + */ + protected function validate(StorageConfig $storage) { + $mountPoint = $storage->getMountPoint(); + if ($mountPoint === '' || $mountPoint === '/') { + return new DataResponse( + array( + 'message' => (string)$this->l10n->t('Invalid mount point') + ), + Http::STATUS_UNPROCESSABLE_ENTITY + ); + } + + // TODO: validate that other attrs are set + + $backends = \OC_Mount_Config::getBackends(); + if (!isset($backends[$storage->getBackendClass()])) { + // invalid backend + return new DataResponse( + array( + 'message' => (string)$this->l10n->t('Invalid storage backend "%s"', array($storage->getBackendClass())) + ), + Http::STATUS_UNPROCESSABLE_ENTITY + ); + } + + return null; + } + + /** + * Check whether the given storage is available / valid. + * + * Note that this operation can be time consuming depending + * on whether the remote storage is available or not. + * + * @param StorageConfig $storage storage configuration + */ + protected function updateStorageStatus(StorageConfig &$storage) { + // update status (can be time-consuming) + $storage->setStatus( + \OC_Mount_Config::getBackendStatus( + $storage->getBackendClass(), + $storage->getBackendOptions(), + false + ) + ); + } + + /** + * Get an external storage entry. + * + * @param int $id storage id + * + * @return DataResponse + */ + public function show($id) { + try { + $storage = $this->service->getStorage($id); + + $this->updateStorageStatus($storage); + } catch (NotFoundException $e) { + return new DataResponse( + [ + 'message' => (string)$this->l10n->t('Storage with id "%i" not found', array($id)) + ], + Http::STATUS_NOT_FOUND + ); + } + + return new DataResponse( + $storage, + Http::STATUS_OK + ); + } + + /** + * Deletes the storage with the given id. + * + * @param int $id storage id + * + * @return DataResponse + */ + public function destroy($id) { + try { + $this->service->removeStorage($id); + } catch (NotFoundException $e) { + return new DataResponse( + [ + 'message' => (string)$this->l10n->t('Storage with id "%i" not found', array($id)) + ], + Http::STATUS_NOT_FOUND + ); + } + + return new DataResponse([], Http::STATUS_NO_CONTENT); + } + +} + diff --git a/apps/files_external/controller/userstoragescontroller.php b/apps/files_external/controller/userstoragescontroller.php new file mode 100644 index 00000000000..86557988ea3 --- /dev/null +++ b/apps/files_external/controller/userstoragescontroller.php @@ -0,0 +1,191 @@ +<?php +/** + * ownCloud - files_external + * + * This file is licensed under the Affero General Public License version 3 or + * later. See the COPYING file. + * + * @author Vincent Petry <pvince81@owncloud.com> + * @copyright Vincent Petry 2015 + */ + +namespace OCA\Files_External\Controller; + + +use \OCP\IConfig; +use \OCP\IUserSession; +use \OCP\IRequest; +use \OCP\IL10N; +use \OCP\AppFramework\Http\DataResponse; +use \OCP\AppFramework\Controller; +use \OCP\AppFramework\Http; +use \OCA\Files_external\Service\UserStoragesService; +use \OCA\Files_external\NotFoundException; +use \OCA\Files_external\Lib\StorageConfig; + +/** + * User storages controller + */ +class UserStoragesController extends StoragesController { + /** + * Creates a new user storages controller. + * + * @param string $AppName application name + * @param IRequest $request request object + * @param IL10N $l10n l10n service + * @param UserStoragesService $userStoragesService storage service + */ + public function __construct( + $AppName, + IRequest $request, + IL10N $l10n, + UserStoragesService $userStoragesService + ) { + parent::__construct( + $AppName, + $request, + $l10n, + $userStoragesService + ); + } + + /** + * Validate storage config + * + * @param StorageConfig $storage storage config + * + * @return DataResponse|null returns response in case of validation error + */ + protected function validate(StorageConfig $storage) { + $result = parent::validate($storage); + + if ($result != null) { + return $result; + } + + // Verify that the mount point applies for the current user + // Prevent non-admin users from mounting local storage and other disabled backends + $allowedBackends = \OC_Mount_Config::getPersonalBackends(); + if (!isset($allowedBackends[$storage->getBackendClass()])) { + return new DataResponse( + array( + 'message' => (string)$this->l10n->t('Invalid storage backend "%s"', array($storage->getBackendClass())) + ), + Http::STATUS_UNPROCESSABLE_ENTITY + ); + } + + return null; + } + + /** + * Return storage + * + * @NoAdminRequired + * + * {@inheritdoc} + */ + public function show($id) { + return parent::show($id); + } + + /** + * Create an external storage entry. + * + * @param string $mountPoint storage mount point + * @param string $backendClass backend class name + * @param array $backendOptions backend-specific options + * @param array $mountOptions backend-specific mount options + * + * @return DataResponse + * + * @NoAdminRequired + */ + public function create( + $mountPoint, + $backendClass, + $backendOptions, + $mountOptions + ) { + $newStorage = new StorageConfig(); + $newStorage->setMountPoint($mountPoint); + $newStorage->setBackendClass($backendClass); + $newStorage->setBackendOptions($backendOptions); + $newStorage->setMountOptions($mountOptions); + + $response = $this->validate($newStorage); + if (!empty($response)) { + return $response; + } + + $newStorage = $this->service->addStorage($newStorage); + $this->updateStorageStatus($newStorage); + + return new DataResponse( + $newStorage, + Http::STATUS_CREATED + ); + } + + /** + * Update an external storage entry. + * + * @param int $id storage id + * @param string $mountPoint storage mount point + * @param string $backendClass backend class name + * @param array $backendOptions backend-specific options + * @param array $mountOptions backend-specific mount options + * + * @return DataResponse + * + * @NoAdminRequired + */ + public function update( + $id, + $mountPoint, + $backendClass, + $backendOptions, + $mountOptions + ) { + $storage = new StorageConfig($id); + $storage->setMountPoint($mountPoint); + $storage->setBackendClass($backendClass); + $storage->setBackendOptions($backendOptions); + $storage->setMountOptions($mountOptions); + + $response = $this->validate($storage); + if (!empty($response)) { + return $response; + } + + try { + $storage = $this->service->updateStorage($storage); + } catch (NotFoundException $e) { + return new DataResponse( + [ + 'message' => (string)$this->l10n->t('Storage with id "%i" not found', array($id)) + ], + Http::STATUS_NOT_FOUND + ); + } + + $this->updateStorageStatus($storage); + + return new DataResponse( + $storage, + Http::STATUS_OK + ); + + } + + /** + * Delete storage + * + * @NoAdminRequired + * + * {@inheritdoc} + */ + public function destroy($id) { + return parent::destroy($id); + } +} diff --git a/apps/files_external/js/dropbox.js b/apps/files_external/js/dropbox.js index 6baaabe11b6..53b5d5d666f 100644 --- a/apps/files_external/js/dropbox.js +++ b/apps/files_external/js/dropbox.js @@ -23,7 +23,7 @@ $(document).ready(function() { $(token).val(result.access_token); $(token_secret).val(result.access_token_secret); $(configured).val('true'); - OC.MountConfig.saveStorage(tr, function(status) { + OCA.External.Settings.mountConfig.saveStorageConfig(tr, function(status) { if (status) { $(tr).find('.configuration input').attr('disabled', 'disabled'); $(tr).find('.configuration').append('<span id="access" style="padding-left:0.5em;">'+t('files_external', 'Access granted')+'</span>'); @@ -65,7 +65,10 @@ $(document).ready(function() { || $(tr).find('.chzn-select').val() != null)) { if ($(tr).find('.dropbox').length == 0) { - $(config).append('<a class="button dropbox">'+t('files_external', 'Grant access')+'</a>'); + $(config).append($(document.createElement('input')) + .addClass('button dropbox') + .attr('type', 'button') + .attr('value', t('files_external', 'Grant access'))); } else { $(tr).find('.dropbox').show(); } @@ -90,7 +93,7 @@ $(document).ready(function() { $(configured).val('false'); $(token).val(result.data.request_token); $(token_secret).val(result.data.request_token_secret); - OC.MountConfig.saveStorage(tr, function() { + OCA.External.Settings.mountConfig.saveStorageConfig(tr, function() { window.location = result.data.url; }); } else { diff --git a/apps/files_external/js/google.js b/apps/files_external/js/google.js index 068c2c13c66..648538f8028 100644 --- a/apps/files_external/js/google.js +++ b/apps/files_external/js/google.js @@ -32,7 +32,7 @@ $(document).ready(function() { if (result && result.status == 'success') { $(token).val(result.data.token); $(configured).val('true'); - OC.MountConfig.saveStorage(tr, function(status) { + OCA.External.Settings.mountConfig.saveStorageConfig(tr, function(status) { if (status) { $(tr).find('.configuration input').attr('disabled', 'disabled'); $(tr).find('.configuration').append($('<span/>') @@ -85,8 +85,9 @@ $(document).ready(function() { || $(tr).find('.chzn-select').val() != null)) { if ($(tr).find('.google').length == 0) { - $(config).append($('<a/>').addClass('button google') - .text(t('files_external', 'Grant access'))); + $(config).append($(document.createElement('input')).addClass('button google') + .attr('type', 'button') + .attr('value', t('files_external', 'Grant access'))); } else { $(tr).find('.google').show(); } @@ -114,7 +115,7 @@ $(document).ready(function() { if (result && result.status == 'success') { $(configured).val('false'); $(token).val('false'); - OC.MountConfig.saveStorage(tr, function(status) { + OCA.External.Settings.mountConfig.saveStorageConfig(tr, function(status) { window.location = result.data.url; }); } else { diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js index ee3d0b736da..9e4d026980f 100644 --- a/apps/files_external/js/settings.js +++ b/apps/files_external/js/settings.js @@ -1,20 +1,24 @@ +/* + * Copyright (c) 2014 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ (function(){ -function updateStatus(statusEl, result){ - statusEl.removeClass('success error loading-small'); - if (result && result.status === 'success' && result.data.message) { - statusEl.addClass('success'); - return true; - } else { - statusEl.addClass('error'); - return false; - } -} - +/** + * Returns the selection of applicable users in the given configuration row + * + * @param $row configuration row + * @return array array of user names + */ function getSelection($row) { var values = $row.find('.applicableUsers').select2('val'); if (!values || values.length === 0) { - values = ['all']; + values = []; } return values; } @@ -31,298 +35,515 @@ function highlightInput($input) { } } -OC.MountConfig={ - saveStorage:function($tr, callback) { - var mountPoint = $tr.find('.mountPoint input').val(); - var oldMountPoint = $tr.find('.mountPoint input').data('mountpoint'); - if (mountPoint === '') { - return false; - } - var statusSpan = $tr.find('.status span'); - var backendClass = $tr.find('.backend').data('class'); - var configuration = $tr.find('.configuration input'); - var addMountPoint = true; - if (configuration.length < 1) { - return false; - } - var classOptions = {}; - $.each(configuration, function(index, input) { - if ($(input).val() === '' && !$(input).hasClass('optional')) { - addMountPoint = false; - return false; - } - if ($(input).is(':checkbox')) { - if ($(input).is(':checked')) { - classOptions[$(input).data('parameter')] = true; +/** + * Initialize select2 plugin on the given elements + * + * @param {Array<Object>} array of jQuery elements + * @param {int} userListLimit page size for result list + */ +function addSelect2 ($elements, userListLimit) { + if (!$elements.length) { + return; + } + $elements.select2({ + placeholder: t('files_external', 'All users. Type to select user or group.'), + allowClear: true, + multiple: true, + //minimumInputLength: 1, + ajax: { + url: OC.generateUrl('apps/files_external/applicable'), + dataType: 'json', + quietMillis: 100, + data: function (term, page) { // page is the one-based page number tracked by Select2 + return { + pattern: term, //search term + limit: userListLimit, // page size + offset: userListLimit*(page-1) // page number starts with 0 + }; + }, + results: function (data) { + if (data.status === 'success') { + + var results = []; + var userCount = 0; // users is an object + + // add groups + $.each(data.groups, function(i, group) { + results.push({name:group+'(group)', displayname:group, type:'group' }); + }); + // add users + $.each(data.users, function(id, user) { + userCount++; + results.push({name:id, displayname:user, type:'user' }); + }); + + + var more = (userCount >= userListLimit) || (data.groups.length >= userListLimit); + return {results: results, more: more}; } else { - classOptions[$(input).data('parameter')] = false; + //FIXME add error handling } - } else { - classOptions[$(input).data('parameter')] = $(input).val(); } - }); - if ($('#externalStorage').data('admin') === true) { - var multiselect = getSelection($tr); - } - if (addMountPoint) { - var status = false; - if ($('#externalStorage').data('admin') === true) { - var isPersonal = false; - var oldGroups = $tr.find('.applicable').data('applicable-groups'); - var oldUsers = $tr.find('.applicable').data('applicable-users'); - var groups = []; - var users = []; - $.each(multiselect, function(index, value) { - var pos = value.indexOf('(group)'); - if (pos != -1) { - var mountType = 'group'; - var applicable = value.substr(0, pos); - if ($.inArray(applicable, oldGroups) != -1) { - oldGroups.splice($.inArray(applicable, oldGroups), 1); - } - groups.push(applicable); - } else { - var mountType = 'user'; - var applicable = value; - if ($.inArray(applicable, oldUsers) != -1) { - oldUsers.splice($.inArray(applicable, oldUsers), 1); - } - users.push(applicable); - } - statusSpan.addClass('loading-small').removeClass('error success'); - $.ajax({type: 'POST', - url: OC.filePath('files_external', 'ajax', 'addMountPoint.php'), - data: { - mountPoint: mountPoint, - 'class': backendClass, - classOptions: classOptions, - mountType: mountType, - applicable: applicable, - isPersonal: isPersonal, - oldMountPoint: oldMountPoint - }, - success: function(result) { - $tr.find('.mountPoint input').data('mountpoint', mountPoint); - status = updateStatus(statusSpan, result); - if (callback) { - callback(status); - } - }, - error: function(result){ - status = updateStatus(statusSpan, result); - if (callback) { - callback(status); - } - } - }); - }); - $tr.find('.applicable').data('applicable-groups', groups); - $tr.find('.applicable').data('applicable-users', users); - var mountType = 'group'; - $.each(oldGroups, function(index, applicable) { - $.ajax({type: 'POST', - url: OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), - data: { - mountPoint: mountPoint, - 'class': backendClass, - classOptions: classOptions, - mountType: mountType, - applicable: applicable, - isPersonal: isPersonal - } - }); - }); - var mountType = 'user'; - $.each(oldUsers, function(index, applicable) { - $.ajax({type: 'POST', - url: OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), - data: { - mountPoint: mountPoint, - 'class': backendClass, - classOptions: classOptions, - mountType: mountType, - applicable: applicable, - isPersonal: isPersonal + }, + initSelection: function(element, callback) { + var users = {}; + users['users'] = []; + var toSplit = element.val().split(","); + for (var i = 0; i < toSplit.length; i++) { + users['users'].push(toSplit[i]); + } + + $.ajax(OC.generateUrl('displaynames'), { + type: 'POST', + contentType: 'application/json', + data: JSON.stringify(users), + dataType: 'json' + }).done(function(data) { + var results = []; + if (data.status === 'success') { + $.each(data.users, function(user, displayname) { + if (displayname !== false) { + results.push({name:user, displayname:displayname, type:'user'}); } }); - }); + callback(results); + } else { + //FIXME add error handling + } + }); + }, + id: function(element) { + return element.name; + }, + formatResult: function (element) { + var $result = $('<span><div class="avatardiv"/><span>'+escapeHTML(element.displayname)+'</span></span>'); + var $div = $result.find('.avatardiv') + .attr('data-type', element.type) + .attr('data-name', element.name) + .attr('data-displayname', element.displayname); + if (element.type === 'group') { + var url = OC.imagePath('core','places/contacts-dark'); // TODO better group icon + $div.html('<img width="32" height="32" src="'+url+'">'); + } + return $result.get(0).outerHTML; + }, + formatSelection: function (element) { + if (element.type === 'group') { + return '<span title="'+escapeHTML(element.name)+'" class="group">'+escapeHTML(element.displayname+' '+t('files_external', '(group)'))+'</span>'; } else { - var isPersonal = true; - var mountType = 'user'; - var applicable = OC.currentUser; - statusSpan.addClass('loading-small').removeClass('error success'); - $.ajax({type: 'POST', - url: OC.filePath('files_external', 'ajax', 'addMountPoint.php'), - data: { - mountPoint: mountPoint, - 'class': backendClass, - classOptions: classOptions, - mountType: mountType, - applicable: applicable, - isPersonal: isPersonal, - oldMountPoint: oldMountPoint - }, - success: function(result) { - $tr.find('.mountPoint input').data('mountpoint', mountPoint); - status = updateStatus(statusSpan, result); - if (callback) { - callback(status); - } - }, - error: function(result){ - status = updateStatus(statusSpan, result); - if (callback) { - callback(status); - } - } - }); + return '<span title="'+escapeHTML(element.name)+'" class="user">'+escapeHTML(element.displayname)+'</span>'; } - return status; - } - } + }, + escapeMarkup: function (m) { return m; } // we escape the markup in formatResult and formatSelection + }).on('select2-loaded', function() { + $.each($('.avatardiv'), function(i, div) { + var $div = $(div); + if ($div.data('type') === 'user') { + $div.avatar($div.data('name'),32); + } + }); + }); +} + +/** + * @class OCA.External.Settings.StorageConfig + * + * @classdesc External storage config + */ +var StorageConfig = function(id) { + this.id = id; + this.backendOptions = {}; +}; +// Keep this in sync with \OC_Mount_Config::STATUS_* +StorageConfig.Status = { + IN_PROGRESS: -1, + SUCCESS: 0, + ERROR: 1 }; +/** + * @memberof OCA.External.Settings + */ +StorageConfig.prototype = { + _url: null, -$(document).ready(function() { - var $externalStorage = $('#externalStorage'); - - //initialize hidden input field with list of users and groups - $externalStorage.find('tr:not(#addMountPoint)').each(function(i,tr) { - var $tr = $(tr); - var $applicable = $tr.find('.applicable'); - if ($applicable.length > 0) { - var groups = $applicable.data('applicable-groups'); - var groupsId = []; - $.each(groups, function () { - groupsId.push(this + '(group)'); - }); - var users = $applicable.data('applicable-users'); - if (users.indexOf('all') > -1) { - $tr.find('.applicableUsers').val(''); - } else { - $tr.find('.applicableUsers').val(groupsId.concat(users).join(',')); + /** + * Storage id + * + * @type int + */ + id: null, + + /** + * Mount point + * + * @type string + */ + mountPoint: '', + + /** + * Backend class name + * + * @type string + */ + backendClass: null, + + /** + * Backend-specific configuration + * + * @type Object.<string,object> + */ + backendOptions: null, + + /** + * Mount-specific options + * + * @type Object.<string,object> + */ + mountOptions: null, + + /** + * Creates or saves the storage. + * + * @param {Function} [options.success] success callback, receives result as argument + * @param {Function} [options.error] error callback + */ + save: function(options) { + var self = this; + var url = OC.generateUrl(this._url); + var method = 'POST'; + if (_.isNumber(this.id)) { + method = 'PUT'; + url = OC.generateUrl(this._url + '/{id}', {id: this.id}); + } + + $.ajax({ + type: method, + url: url, + data: this.getData(), + success: function(result) { + self.id = result.id; + if (_.isFunction(options.success)) { + options.success(result); + } + }, + error: options.error + }); + }, + + /** + * Returns the data from this object + * + * @return {Array} JSON array of the data + */ + getData: function() { + var data = { + mountPoint: this.mountPoint, + backendClass: this.backendClass, + backendOptions: this.backendOptions + }; + if (this.id) { + data.id = this.id; + } + if (this.mountOptions) { + data.mountOptions = this.mountOptions; + } + return data; + }, + + /** + * Recheck the storage + * + * @param {Function} [options.success] success callback, receives result as argument + * @param {Function} [options.error] error callback + */ + recheck: function(options) { + if (!_.isNumber(this.id)) { + if (_.isFunction(options.error)) { + options.error(); } + return; } - }); + $.ajax({ + type: 'GET', + url: OC.generateUrl(this._url + '/{id}', {id: this.id}), + success: options.success, + error: options.error + }); + }, - var userListLimit = 30; - function addSelect2 ($elements) { - if ($elements.length > 0) { - $elements.select2({ - placeholder: t('files_external', 'All users. Type to select user or group.'), - allowClear: true, - multiple: true, - //minimumInputLength: 1, - ajax: { - url: OC.generateUrl('apps/files_external/applicable'), - dataType: 'json', - quietMillis: 100, - data: function (term, page) { // page is the one-based page number tracked by Select2 - return { - pattern: term, //search term - limit: userListLimit, // page size - offset: userListLimit*(page-1) // page number starts with 0 - }; - }, - results: function (data, page) { - if (data.status === 'success') { - - var results = []; - var userCount = 0; // users is an object - - // add groups - $.each(data.groups, function(i, group) { - results.push({name:group+'(group)', displayname:group, type:'group' }); - }); - // add users - $.each(data.users, function(id, user) { - userCount++; - results.push({name:id, displayname:user, type:'user' }); - }); - - - var more = (userCount >= userListLimit) || (data.groups.length >= userListLimit); - return {results: results, more: more}; - } else { - //FIXME add error handling - } - } - }, - initSelection: function(element, callback) { - var users = {}; - users['users'] = []; - var toSplit = element.val().split(","); - for (var i = 0; i < toSplit.length; i++) { - users['users'].push(toSplit[i]); - } + /** + * Deletes the storage + * + * @param {Function} [options.success] success callback + * @param {Function} [options.error] error callback + */ + destroy: function(options) { + if (!_.isNumber(this.id)) { + // the storage hasn't even been created => success + if (_.isFunction(options.success)) { + options.success(); + } + return; + } + var self = this; + $.ajax({ + type: 'DELETE', + url: OC.generateUrl(this._url + '/{id}', {id: this.id}), + success: options.success, + error: options.error + }); + }, - $.ajax(OC.generateUrl('displaynames'), { - type: 'POST', - contentType: 'application/json', - data: JSON.stringify(users), - dataType: 'json' - }).done(function(data) { - var results = []; - if (data.status === 'success') { - $.each(data.users, function(user, displayname) { - if (displayname !== false) { - results.push({name:user, displayname:displayname, type:'user'}); - } - }); - callback(results); - } else { - //FIXME add error handling - } - }); - }, - id: function(element) { - return element.name; - }, - formatResult: function (element) { - var $result = $('<span><div class="avatardiv"/><span>'+escapeHTML(element.displayname)+'</span></span>'); - var $div = $result.find('.avatardiv') - .attr('data-type', element.type) - .attr('data-name', element.name) - .attr('data-displayname', element.displayname); - if (element.type === 'group') { - var url = OC.imagePath('core','places/contacts-dark'); // TODO better group icon - $div.html('<img width="32" height="32" src="'+url+'">'); - } - return $result.get(0).outerHTML; - }, - formatSelection: function (element) { - if (element.type === 'group') { - return '<span title="'+escapeHTML(element.name)+'" class="group">'+escapeHTML(element.displayname+' '+t('files_external', '(group)'))+'</span>'; - } else { - return '<span title="'+escapeHTML(element.name)+'" class="user">'+escapeHTML(element.displayname)+'</span>'; - } - }, - escapeMarkup: function (m) { return m; } // we escape the markup in formatResult and formatSelection - }).on('select2-loaded', function() { - $.each($('.avatardiv'), function(i, div) { - var $div = $(div); - if ($div.data('type') === 'user') { - $div.avatar($div.data('name'),32); - } - }) - }); + /** + * Validate this model + * + * @return {boolean} false if errors exist, true otherwise + */ + validate: function() { + if (this.mountPoint === '') { + return false; } + if (this.errors) { + return false; + } + return true; } - addSelect2($('tr:not(#addMountPoint) .applicableUsers')); - - $externalStorage.on('change', '#selectBackend', function() { - var $tr = $(this).closest('tr'); - $externalStorage.find('tbody').append($tr.clone()); - $externalStorage.find('tbody tr').last().find('.mountPoint input').val(''); - var selected = $(this).find('option:selected').text(); - var backendClass = $(this).val(); +}; + +/** + * @class OCA.External.Settings.GlobalStorageConfig + * @augments OCA.External.Settings.StorageConfig + * + * @classdesc Global external storage config + */ +var GlobalStorageConfig = function(id) { + this.id = id; + this.applicableUsers = []; + this.applicableGroups = []; +}; +/** + * @memberOf OCA.External.Settings + */ +GlobalStorageConfig.prototype = _.extend({}, StorageConfig.prototype, + /** @lends OCA.External.Settings.GlobalStorageConfig.prototype */ { + _url: 'apps/files_external/globalstorages', + + /** + * Applicable users + * + * @type Array.<string> + */ + applicableUsers: null, + + /** + * Applicable groups + * + * @type Array.<string> + */ + applicableGroups: null, + + /** + * Storage priority + * + * @type int + */ + priority: null, + + /** + * Returns the data from this object + * + * @return {Array} JSON array of the data + */ + getData: function() { + var data = StorageConfig.prototype.getData.apply(this, arguments); + return _.extend(data, { + applicableUsers: this.applicableUsers, + applicableGroups: this.applicableGroups, + priority: this.priority, + }); + } +}); + +/** + * @class OCA.External.Settings.UserStorageConfig + * @augments OCA.External.Settings.StorageConfig + * + * @classdesc User external storage config + */ +var UserStorageConfig = function(id) { + this.id = id; +}; +UserStorageConfig.prototype = _.extend({}, StorageConfig.prototype, + /** @lends OCA.External.Settings.UserStorageConfig.prototype */ { + _url: 'apps/files_external/userstorages' +}); + +/** + * @class OCA.External.Settings.MountConfigListView + * + * @classdesc Mount configuration list view + * + * @param {Object} $el DOM object containing the list + * @param {Object} [options] + * @param {int} [options.userListLimit] page size in applicable users dropdown + */ +var MountConfigListView = function($el, options) { + this.initialize($el, options); +}; +/** + * @memberOf OCA.External.Settings + */ +MountConfigListView.prototype = { + + /** + * jQuery element containing the config list + * + * @type Object + */ + $el: null, + + /** + * Storage config class + * + * @type Class + */ + _storageConfigClass: null, + + /** + * Flag whether the list is about user storage configs (true) + * or global storage configs (false) + * + * @type bool + */ + _isPersonal: false, + + /** + * Page size in applicable users dropdown + * + * @type int + */ + _userListLimit: 30, + + /** + * List of supported backends + * + * @type Object.<string,Object> + */ + _allBackends: null, + + /** + * @param {Object} $el DOM object containing the list + * @param {Object} [options] + * @param {int} [options.userListLimit] page size in applicable users dropdown + */ + initialize: function($el, options) { + var self = this; + this.$el = $el; + this._isPersonal = ($el.data('admin') !== true); + if (this._isPersonal) { + this._storageConfigClass = OCA.External.Settings.UserStorageConfig; + } else { + this._storageConfigClass = OCA.External.Settings.GlobalStorageConfig; + } + + if (options && !_.isUndefined(options.userListLimit)) { + this._userListLimit = options.userListLimit; + } + + // read the backend config that was carefully crammed + // into the data-configurations attribute of the select + this._allBackends = this.$el.find('.selectBackend').data('configurations'); + + //initialize hidden input field with list of users and groups + this.$el.find('tr:not(#addMountPoint)').each(function(i,tr) { + var $tr = $(tr); + var $applicable = $tr.find('.applicable'); + if ($applicable.length > 0) { + var groups = $applicable.data('applicable-groups'); + var groupsId = []; + $.each(groups, function () { + groupsId.push(this + '(group)'); + }); + var users = $applicable.data('applicable-users'); + if (users.indexOf('all') > -1 || users === '') { + $tr.find('.applicableUsers').val(''); + } else { + $tr.find('.applicableUsers').val(groupsId.concat(users).join(',')); + } + } + }); + + addSelect2(this.$el.find('tr:not(#addMountPoint) .applicableUsers'), this._userListLimit); + + this.$el.find('tr:not(#addMountPoint)').each(function(i, tr) { + self.recheckStorageConfig($(tr)); + }); + + this._initEvents(); + }, + + /** + * Initialize DOM event handlers + */ + _initEvents: function() { + var self = this; + + this.$el.on('paste', 'td input', function() { + var $me = $(this); + var $tr = $me.closest('tr'); + setTimeout(function() { + highlightInput($me); + self.saveStorageConfig($tr); + }, 20); + }); + + var timer; + + this.$el.on('keyup', 'td input', function() { + clearTimeout(timer); + var $tr = $(this).closest('tr'); + highlightInput($(this)); + if ($(this).val) { + timer = setTimeout(function() { + self.saveStorageConfig($tr); + }, 2000); + } + }); + + this.$el.on('change', 'td input:checkbox', function() { + self.saveStorageConfig($(this).closest('tr')); + }); + + this.$el.on('change', '.applicable', function() { + self.saveStorageConfig($(this).closest('tr')); + }); + + this.$el.on('click', '.status>span', function() { + self.recheckStorageConfig($(this).closest('tr')); + }); + + this.$el.on('click', 'td.remove>img', function() { + self.deleteStorageConfig($(this).closest('tr')); + }); + + this.$el.on('change', '.selectBackend', _.bind(this._onSelectBackend, this)); + }, + + _onSelectBackend: function(event) { + var $target = $(event.target); + var $el = this.$el; + var $tr = $target.closest('tr'); + $el.find('tbody').append($tr.clone()); + $el.find('tbody tr').last().find('.mountPoint input').val(''); + var selected = $target.find('option:selected').text(); + var backendClass = $target.val(); $tr.find('.backend').text(selected); if ($tr.find('.mountPoint input').val() === '') { - $tr.find('.mountPoint input').val(suggestMountPoint(selected)); + $tr.find('.mountPoint input').val(this._suggestMountPoint(selected)); } $tr.addClass(backendClass); - $tr.find('.status').append('<span></span>'); $tr.find('.backend').data('class', backendClass); - var configurations = $(this).data('configurations'); + var configurations = this._allBackends; var $td = $tr.find('td.configuration'); $.each(configurations, function(backend, parameters) { if (backend === backendClass) { @@ -347,7 +568,9 @@ $(document).ready(function() { highlightInput(newElement); $td.append(newElement); }); - if (parameters['custom'] && $externalStorage.find('tbody tr.'+backendClass.replace(/\\/g, '\\\\')).length === 1) { + var priorityEl = $('<input type="hidden" class="priority" value="' + parameters['priority'] + '" />'); + $tr.append(priorityEl); + if (parameters['custom'] && $el.find('tbody tr.'+backendClass.replace(/\\/g, '\\\\')).length === 1) { OC.addScript('files_external', parameters['custom']); } $td.children().not('[type=hidden]').first().focus(); @@ -357,11 +580,197 @@ $(document).ready(function() { $tr.find('td').last().attr('class', 'remove'); $tr.find('td').last().removeAttr('style'); $tr.removeAttr('id'); - $(this).remove(); - addSelect2($tr.find('.applicableUsers')); - }); + $target.remove(); + addSelect2($tr.find('.applicableUsers'), this._userListLimit); + }, + + /** + * Gets the storage model from the given row + * + * @param $tr row element + * @return {OCA.External.StorageConfig} storage model instance + */ + getStorageConfig: function($tr) { + var storageId = parseInt($tr.attr('data-id'), 10); + if (!storageId) { + // new entry + storageId = null; + } + var storage = new this._storageConfigClass(storageId); + storage.mountPoint = $tr.find('.mountPoint input').val(); + storage.backendClass = $tr.find('.backend').data('class'); - function suggestMountPoint(defaultMountPoint) { + var classOptions = {}; + var configuration = $tr.find('.configuration input'); + var missingOptions = []; + $.each(configuration, function(index, input) { + var $input = $(input); + var parameter = $input.data('parameter'); + if ($input.attr('type') === 'button') { + return; + } + if ($input.val() === '' && !$input.hasClass('optional')) { + missingOptions.push(parameter); + return; + } + if ($(input).is(':checkbox')) { + if ($(input).is(':checked')) { + classOptions[parameter] = true; + } else { + classOptions[parameter] = false; + } + } else { + classOptions[parameter] = $(input).val(); + } + }); + + storage.backendOptions = classOptions; + if (missingOptions.length) { + storage.errors = { + backendOptions: missingOptions + }; + } + + // gather selected users and groups + if (!this._isPersonal) { + var groups = []; + var users = []; + var multiselect = getSelection($tr); + $.each(multiselect, function(index, value) { + var pos = value.indexOf('(group)'); + if (pos !== -1) { + groups.push(value.substr(0, pos)); + } else { + users.push(value); + } + }); + // FIXME: this should be done in the multiselect change event instead + $tr.find('.applicable') + .data('applicable-groups', groups) + .data('applicable-users', users); + + storage.applicableUsers = users; + storage.applicableGroups = groups; + + storage.priority = $tr.find('input.priority').val(); + } + + var mountOptions = $tr.find('input.mountOptions').val(); + if (mountOptions) { + storage.mountOptions = JSON.parse(mountOptions); + } + + return storage; + }, + + /** + * Deletes the storage from the given tr + * + * @param $tr storage row + * @param Function callback callback to call after save + */ + deleteStorageConfig: function($tr) { + var self = this; + var configId = $tr.data('id'); + if (!_.isNumber(configId)) { + // deleting unsaved storage + $tr.remove(); + return; + } + var storage = new this._storageConfigClass(configId); + this.updateStatus($tr, StorageConfig.Status.IN_PROGRESS); + + storage.destroy({ + success: function() { + $tr.remove(); + }, + error: function() { + self.updateStatus($tr, StorageConfig.Status.ERROR); + } + }); + }, + + /** + * Saves the storage from the given tr + * + * @param $tr storage row + * @param Function callback callback to call after save + */ + saveStorageConfig:function($tr, callback) { + var self = this; + var storage = this.getStorageConfig($tr); + if (!storage.validate()) { + return false; + } + + this.updateStatus($tr, StorageConfig.Status.IN_PROGRESS); + storage.save({ + success: function(result) { + self.updateStatus($tr, result.status); + $tr.attr('data-id', result.id); + + if (_.isFunction(callback)) { + callback(storage); + } + }, + error: function() { + self.updateStatus($tr, StorageConfig.Status.ERROR); + } + }); + }, + + /** + * Recheck storage availability + * + * @param {jQuery} $tr storage row + * @return {boolean} success + */ + recheckStorageConfig: function($tr) { + var self = this; + var storage = this.getStorageConfig($tr); + if (!storage.validate()) { + return false; + } + + this.updateStatus($tr, StorageConfig.Status.IN_PROGRESS); + storage.recheck({ + success: function(result) { + self.updateStatus($tr, result.status); + }, + error: function() { + self.updateStatus($tr, StorageConfig.Status.ERROR); + } + }); + }, + + /** + * Update status display + * + * @param {jQuery} $tr + * @param {int} status + */ + updateStatus: function($tr, status) { + var $statusSpan = $tr.find('.status span'); + $statusSpan.removeClass('success error loading-small'); + switch (status) { + case StorageConfig.Status.IN_PROGRESS: + $statusSpan.addClass('loading-small'); + break; + case StorageConfig.Status.SUCCESS: + $statusSpan.addClass('success'); + break; + default: + $statusSpan.addClass('error'); + } + }, + + /** + * Suggest mount point name that doesn't conflict with the existing names in the list + * + * @param {string} defaultMountPoint default name + */ + _suggestMountPoint: function(defaultMountPoint) { + var $el = this.$el; var pos = defaultMountPoint.indexOf('/'); if (pos !== -1) { defaultMountPoint = defaultMountPoint.substring(0, pos); @@ -372,7 +781,7 @@ $(document).ready(function() { var match = true; while (match && i < 20) { match = false; - $externalStorage.find('tbody td.mountPoint input').each(function(index, mountPoint) { + $el.find('tbody td.mountPoint input').each(function(index, mountPoint) { if ($(mountPoint).val() === defaultMountPoint+append) { match = true; return false; @@ -385,42 +794,12 @@ $(document).ready(function() { break; } } - return defaultMountPoint+append; + return defaultMountPoint + append; } +}; - $externalStorage.on('paste', 'td input', function() { - var $me = $(this); - var $tr = $me.closest('tr'); - setTimeout(function() { - highlightInput($me); - OC.MountConfig.saveStorage($tr); - }, 20); - }); - - var timer; - - $externalStorage.on('keyup', 'td input', function() { - clearTimeout(timer); - var $tr = $(this).closest('tr'); - highlightInput($(this)); - if ($(this).val) { - timer = setTimeout(function() { - OC.MountConfig.saveStorage($tr); - }, 2000); - } - }); - - $externalStorage.on('change', 'td input:checkbox', function() { - OC.MountConfig.saveStorage($(this).closest('tr')); - }); - - $externalStorage.on('change', '.applicable', function() { - OC.MountConfig.saveStorage($(this).closest('tr')); - }); - - $externalStorage.on('click', '.status>span', function() { - OC.MountConfig.saveStorage($(this).closest('tr')); - }); +$(document).ready(function() { + var mountConfigListView = new MountConfigListView($('#externalStorage')); $('#sslCertificate').on('click', 'td.remove>img', function() { var $tr = $(this).closest('tr'); @@ -429,33 +808,7 @@ $(document).ready(function() { return true; }); - $externalStorage.on('click', 'td.remove>img', function() { - var $tr = $(this).closest('tr'); - var mountPoint = $tr.find('.mountPoint input').val(); - - if ($externalStorage.data('admin') === true) { - var isPersonal = false; - var multiselect = getSelection($tr); - $.each(multiselect, function(index, value) { - var pos = value.indexOf('(group)'); - if (pos != -1) { - var mountType = 'group'; - var applicable = value.substr(0, pos); - } else { - var mountType = 'user'; - var applicable = value; - } - $.post(OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), { mountPoint: mountPoint, mountType: mountType, applicable: applicable, isPersonal: isPersonal }); - }); - } else { - var mountType = 'user'; - var applicable = OC.currentUser; - var isPersonal = true; - $.post(OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), { mountPoint: mountPoint, mountType: mountType, applicable: applicable, isPersonal: isPersonal }); - } - $tr.remove(); - }); - + // TODO: move this into its own View class var $allowUserMounting = $('#allowUserMounting'); $allowUserMounting.bind('change', function() { OC.msg.startSaving('#userMountingMsg'); @@ -484,6 +837,31 @@ $(document).ready(function() { } }); + + // global instance + OCA.External.Settings.mountConfig = mountConfigListView; + + /** + * Legacy + * + * @namespace + * @deprecated use OCA.External.Settings.mountConfig instead + */ + OC.MountConfig = { + saveStorage: _.bind(mountConfigListView.saveStorageConfig, mountConfigListView) + }; }); +// export + +OCA.External = OCA.External || {}; +/** + * @namespace + */ +OCA.External.Settings = OCA.External.Settings || {}; + +OCA.External.Settings.GlobalStorageConfig = GlobalStorageConfig; +OCA.External.Settings.UserStorageConfig = UserStorageConfig; +OCA.External.Settings.MountConfigListView = MountConfigListView; + })(); diff --git a/apps/files_external/js/sftp_key.js b/apps/files_external/js/sftp_key.js new file mode 100644 index 00000000000..55b11b1fac9 --- /dev/null +++ b/apps/files_external/js/sftp_key.js @@ -0,0 +1,53 @@ +$(document).ready(function() { + + $('#externalStorage tbody tr.\\\\OC\\\\Files\\\\Storage\\\\SFTP_Key').each(function() { + var tr = $(this); + var config = $(tr).find('.configuration'); + if ($(config).find('.sftp_key').length === 0) { + setupTableRow(tr, config); + } + }); + + // We can't catch the DOM elements being added, but we can pick up when + // they receive focus + $('#externalStorage').on('focus', 'tbody tr.\\\\OC\\\\Files\\\\Storage\\\\SFTP_Key', function() { + var tr = $(this); + var config = $(tr).find('.configuration'); + + if ($(config).find('.sftp_key').length === 0) { + setupTableRow(tr, config); + } + }); + + $('#externalStorage').on('click', '.sftp_key', function(event) { + event.preventDefault(); + var tr = $(this).parent().parent(); + generateKeys(tr); + }); + + function setupTableRow(tr, config) { + $(config).append($(document.createElement('input')).addClass('button sftp_key') + .attr('type', 'button') + .attr('value', t('files_external', 'Generate keys'))); + // If there's no private key, build one + if (0 === $(config).find('[data-parameter="private_key"]').val().length) { + generateKeys(tr); + } + } + + function generateKeys(tr) { + var config = $(tr).find('.configuration'); + + $.post(OC.filePath('files_external', 'ajax', 'sftp_key.php'), {}, function(result) { + if (result && result.status === 'success') { + $(config).find('[data-parameter="public_key"]').val(result.data.public_key); + $(config).find('[data-parameter="private_key"]').val(result.data.private_key); + OCA.External.mountConfig.saveStorageConfig(tr, function() { + // Nothing to do + }); + } else { + OC.dialogs.alert(result.data.message, t('files_external', 'Error generating key pair') ); + } + }); + } +}); diff --git a/apps/files_external/l10n/ast.js b/apps/files_external/l10n/ast.js index 63a6fe63cfc..3b3f06a712a 100644 --- a/apps/files_external/l10n/ast.js +++ b/apps/files_external/l10n/ast.js @@ -43,6 +43,7 @@ OC.L10N.register( "Username as share" : "Nome d'usuariu como Compartición", "URL" : "URL", "Secure https://" : "Secure https://", + "Public key" : "Clave pública", "Access granted" : "Accesu concedíu", "Error configuring Dropbox storage" : "Fallu configurando l'almacenamientu de Dropbox", "Grant access" : "Conceder accesu", diff --git a/apps/files_external/l10n/ast.json b/apps/files_external/l10n/ast.json index f3858591e09..c2a2d20575b 100644 --- a/apps/files_external/l10n/ast.json +++ b/apps/files_external/l10n/ast.json @@ -41,6 +41,7 @@ "Username as share" : "Nome d'usuariu como Compartición", "URL" : "URL", "Secure https://" : "Secure https://", + "Public key" : "Clave pública", "Access granted" : "Accesu concedíu", "Error configuring Dropbox storage" : "Fallu configurando l'almacenamientu de Dropbox", "Grant access" : "Conceder accesu", diff --git a/apps/files_external/l10n/az.js b/apps/files_external/l10n/az.js index 78cb4de59f4..0db76d96278 100644 --- a/apps/files_external/l10n/az.js +++ b/apps/files_external/l10n/az.js @@ -4,21 +4,74 @@ OC.L10N.register( "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Müraciət token-nin alınmasında səhv baş verdi. Əmin olun ki, sizin Dropbox proqraminin açarı və gizlisi düzgündür.", "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Müraciət token-nin alınmasında səhv baş verdi. Əmin olun ki, sizin Dropbox proqraminin açarı və gizlisi düzgündür.", "Please provide a valid Dropbox app key and secret." : "Xahiş olunur düzgün Dropbox proqram açarı və gizlisini təqdim edəsiniz.", + "Step 1 failed. Exception: %s" : "1-ci addım səhv oldu. İstisna: %s", "Step 2 failed. Exception: %s" : "2-ci addım. İstisna: %s", "External storage" : "Kənar informasıya daşıyıcısı", + "Local" : "Yerli", "Location" : "Yerləşdiyiniz ünvan", + "Amazon S3" : "Amazon S3", "Key" : "Açar", "Secret" : "Gizli", + "Bucket" : "Vedrə", + "Amazon S3 and compliant" : "Amazon S3 və uyğun", + "Access Key" : "Yetki açarı", + "Secret Key" : "Gizli açar", + "Hostname" : "Sahibadı", + "Port" : "Port", + "Region" : "Ərazi", "Enable SSL" : "SSL-i işə sal", + "Enable Path Style" : "Ünvan stilini işə sal", + "App key" : "Proqram açarı", + "App secret" : "Proqram sirri", "Host" : "Şəbəkədə ünvan", "Username" : "İstifadəçi adı", "Password" : "Şifrə", + "Remote subfolder" : "Uzaq altqovluğu", + "Secure ftps://" : "Təhlükəsiz ftps://", + "Client ID" : "Müştəri İD-s", + "Client secret" : "Müxtəri sirri", + "OpenStack Object Storage" : "OpenStack Obyekt Deposu", + "Region (optional for OpenStack Object Storage)" : "Ərazi(İstəkdən asılı olaraq OpenStack Obyekt Deposu üçündür)", + "API Key (required for Rackspace Cloud Files)" : "API açar (Rackspace Cloud Fayllar üçün tələb edilir)", + "Tenantname (required for OpenStack Object Storage)" : "Kirayəçiadı (OpenStack Obyekt Deposu üçün tələb edilir)", + "Password (required for OpenStack Object Storage)" : "Şifrə (OpenStack Obyekt Deposu üçün tələb edilir)", + "Service Name (required for OpenStack Object Storage)" : "Servis adi (OpenStack Obyekt Deposu üçün tələb edilir)", + "URL of identity endpoint (required for OpenStack Object Storage)" : "Şəxsiyyətin son nöqtəsi URL-i (OpenStack Obyekt Deposu üçün tələb edilir)", + "Timeout of HTTP requests in seconds" : "HTTP müraciətlər üçün saniyələrlə olan vaxtın bitməsi", "Share" : "Yayımla", + "SMB / CIFS using OC login" : "OC login istifadə edir SMB / CIFS", + "Username as share" : "Paylaşım üçün istifadəçi adı", "URL" : "URL", + "Secure https://" : "Təhlükəsiz https://", + "Public key" : "İctimai açar", + "Access granted" : "Yetki verildi", + "Error configuring Dropbox storage" : "Dropbox deposunun konfiqurasiyasında səhv baş verdi", + "Grant access" : "Yetkinin verilməsi", + "Error configuring Google Drive storage" : "Google Drive deposunun konfiqində səgv baş verdi", "Personal" : "Şəxsi", + "System" : "Sistem", + "All users. Type to select user or group." : "Sistem istifadəçiləri. Daxil edin ki, istifadəçi və ya qrupu seçəsiniz.", + "(group)" : "(qrup)", "Saved" : "Saxlanıldı", + "Generate keys" : "Açarları generasiya et", + "Error generating key pair" : "Açar cütlüyünün generasiyası səhvi", + "<b>Note:</b> " : "<b>Qeyd:</b> ", + "and" : "və", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Qeyd:</b> PHP-də cURL dəstəyi aktiv deyil və ya yüklənməyib. %s -in birləşdirilməsi mümkün deyil. Xahiş edilir onun yüklənilməsi barəsində inzibatşınıza məlumat verəsiniz.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Qeyd:</b> PHP-də FTP dəstəyi aktiv deyil və ya yüklənməyib. %s -in birləşdirilməsi mümkün deyil. Xahiş edilir onun yüklənilməsi barəsində inzibatşınıza məlumat verəsiniz.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Qeyd:</b> \"%s\" yüklənməyib. %s -in birləşdirilməsi mümkün deyil. Xahiş edilir onun yüklənilməsi barəsində inzibatşınıza məlumat verəsiniz.", + "No external storage configured" : "Kənar depo konfiq edilməyib", + "You can configure external storages in the personal settings" : "Siz kənar deponu şəxsi quraşdırmalarınızdan konfiq edə bilərsiniz", "Name" : "Ad", + "Storage type" : "Depo tipi", + "Scope" : "Həcm", + "External Storage" : "Kənar depo", "Folder name" : "Qovluq adı", - "Delete" : "Sil" + "Configuration" : "Konfiqurasiya", + "Available for" : "Üçün mövcuddur", + "Add storage" : "Deponu əlavə et", + "Delete" : "Sil", + "Enable User External Storage" : "İstifadəçi kənar deponu aktivləşdir", + "Allow users to mount the following external storage" : "Göstərilən kənar deponun bərkidilməsi üçün istifadəçilərə izin ver" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_external/l10n/az.json b/apps/files_external/l10n/az.json index e9d51e8fa92..267f30908a0 100644 --- a/apps/files_external/l10n/az.json +++ b/apps/files_external/l10n/az.json @@ -2,21 +2,74 @@ "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Müraciət token-nin alınmasında səhv baş verdi. Əmin olun ki, sizin Dropbox proqraminin açarı və gizlisi düzgündür.", "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Müraciət token-nin alınmasında səhv baş verdi. Əmin olun ki, sizin Dropbox proqraminin açarı və gizlisi düzgündür.", "Please provide a valid Dropbox app key and secret." : "Xahiş olunur düzgün Dropbox proqram açarı və gizlisini təqdim edəsiniz.", + "Step 1 failed. Exception: %s" : "1-ci addım səhv oldu. İstisna: %s", "Step 2 failed. Exception: %s" : "2-ci addım. İstisna: %s", "External storage" : "Kənar informasıya daşıyıcısı", + "Local" : "Yerli", "Location" : "Yerləşdiyiniz ünvan", + "Amazon S3" : "Amazon S3", "Key" : "Açar", "Secret" : "Gizli", + "Bucket" : "Vedrə", + "Amazon S3 and compliant" : "Amazon S3 və uyğun", + "Access Key" : "Yetki açarı", + "Secret Key" : "Gizli açar", + "Hostname" : "Sahibadı", + "Port" : "Port", + "Region" : "Ərazi", "Enable SSL" : "SSL-i işə sal", + "Enable Path Style" : "Ünvan stilini işə sal", + "App key" : "Proqram açarı", + "App secret" : "Proqram sirri", "Host" : "Şəbəkədə ünvan", "Username" : "İstifadəçi adı", "Password" : "Şifrə", + "Remote subfolder" : "Uzaq altqovluğu", + "Secure ftps://" : "Təhlükəsiz ftps://", + "Client ID" : "Müştəri İD-s", + "Client secret" : "Müxtəri sirri", + "OpenStack Object Storage" : "OpenStack Obyekt Deposu", + "Region (optional for OpenStack Object Storage)" : "Ərazi(İstəkdən asılı olaraq OpenStack Obyekt Deposu üçündür)", + "API Key (required for Rackspace Cloud Files)" : "API açar (Rackspace Cloud Fayllar üçün tələb edilir)", + "Tenantname (required for OpenStack Object Storage)" : "Kirayəçiadı (OpenStack Obyekt Deposu üçün tələb edilir)", + "Password (required for OpenStack Object Storage)" : "Şifrə (OpenStack Obyekt Deposu üçün tələb edilir)", + "Service Name (required for OpenStack Object Storage)" : "Servis adi (OpenStack Obyekt Deposu üçün tələb edilir)", + "URL of identity endpoint (required for OpenStack Object Storage)" : "Şəxsiyyətin son nöqtəsi URL-i (OpenStack Obyekt Deposu üçün tələb edilir)", + "Timeout of HTTP requests in seconds" : "HTTP müraciətlər üçün saniyələrlə olan vaxtın bitməsi", "Share" : "Yayımla", + "SMB / CIFS using OC login" : "OC login istifadə edir SMB / CIFS", + "Username as share" : "Paylaşım üçün istifadəçi adı", "URL" : "URL", + "Secure https://" : "Təhlükəsiz https://", + "Public key" : "İctimai açar", + "Access granted" : "Yetki verildi", + "Error configuring Dropbox storage" : "Dropbox deposunun konfiqurasiyasında səhv baş verdi", + "Grant access" : "Yetkinin verilməsi", + "Error configuring Google Drive storage" : "Google Drive deposunun konfiqində səgv baş verdi", "Personal" : "Şəxsi", + "System" : "Sistem", + "All users. Type to select user or group." : "Sistem istifadəçiləri. Daxil edin ki, istifadəçi və ya qrupu seçəsiniz.", + "(group)" : "(qrup)", "Saved" : "Saxlanıldı", + "Generate keys" : "Açarları generasiya et", + "Error generating key pair" : "Açar cütlüyünün generasiyası səhvi", + "<b>Note:</b> " : "<b>Qeyd:</b> ", + "and" : "və", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Qeyd:</b> PHP-də cURL dəstəyi aktiv deyil və ya yüklənməyib. %s -in birləşdirilməsi mümkün deyil. Xahiş edilir onun yüklənilməsi barəsində inzibatşınıza məlumat verəsiniz.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Qeyd:</b> PHP-də FTP dəstəyi aktiv deyil və ya yüklənməyib. %s -in birləşdirilməsi mümkün deyil. Xahiş edilir onun yüklənilməsi barəsində inzibatşınıza məlumat verəsiniz.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Qeyd:</b> \"%s\" yüklənməyib. %s -in birləşdirilməsi mümkün deyil. Xahiş edilir onun yüklənilməsi barəsində inzibatşınıza məlumat verəsiniz.", + "No external storage configured" : "Kənar depo konfiq edilməyib", + "You can configure external storages in the personal settings" : "Siz kənar deponu şəxsi quraşdırmalarınızdan konfiq edə bilərsiniz", "Name" : "Ad", + "Storage type" : "Depo tipi", + "Scope" : "Həcm", + "External Storage" : "Kənar depo", "Folder name" : "Qovluq adı", - "Delete" : "Sil" + "Configuration" : "Konfiqurasiya", + "Available for" : "Üçün mövcuddur", + "Add storage" : "Deponu əlavə et", + "Delete" : "Sil", + "Enable User External Storage" : "İstifadəçi kənar deponu aktivləşdir", + "Allow users to mount the following external storage" : "Göstərilən kənar deponun bərkidilməsi üçün istifadəçilərə izin ver" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/ca.js b/apps/files_external/l10n/ca.js index 78aa5ad5b8d..2786753444a 100644 --- a/apps/files_external/l10n/ca.js +++ b/apps/files_external/l10n/ca.js @@ -43,6 +43,7 @@ OC.L10N.register( "Username as share" : "Nom d'usuari per compartir", "URL" : "URL", "Secure https://" : "Protocol segur https://", + "Public key" : "Clau pública", "Access granted" : "S'ha concedit l'accés", "Error configuring Dropbox storage" : "Error en configurar l'emmagatzemament Dropbox", "Grant access" : "Concedeix accés", @@ -52,10 +53,15 @@ OC.L10N.register( "All users. Type to select user or group." : "Tots els usuaris. Escriu per seleccionar un usuari o grup.", "(group)" : "(grup)", "Saved" : "Desat", + "Generate keys" : "Generar claus", + "Error generating key pair" : "Error en generar el parell de claus", "<b>Note:</b> " : "<b>Nota:</b> ", + "and" : "i", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El suport cURL no està activat o instal·lat a PHP. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El suport FTP per PHP no està activat o no està instal·lat. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.", "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> %s no està instal·lat. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.", + "No external storage configured" : "Sense emmagatzematge extern configurat", + "You can configure external storages in the personal settings" : "Pot configurar emmagatzematges externs en els ajustos personals", "Name" : "Nom", "Storage type" : "Tipus d'emmagatzemament", "Scope" : "Abast", diff --git a/apps/files_external/l10n/ca.json b/apps/files_external/l10n/ca.json index 01f63676b59..a13a9d2335f 100644 --- a/apps/files_external/l10n/ca.json +++ b/apps/files_external/l10n/ca.json @@ -41,6 +41,7 @@ "Username as share" : "Nom d'usuari per compartir", "URL" : "URL", "Secure https://" : "Protocol segur https://", + "Public key" : "Clau pública", "Access granted" : "S'ha concedit l'accés", "Error configuring Dropbox storage" : "Error en configurar l'emmagatzemament Dropbox", "Grant access" : "Concedeix accés", @@ -50,10 +51,15 @@ "All users. Type to select user or group." : "Tots els usuaris. Escriu per seleccionar un usuari o grup.", "(group)" : "(grup)", "Saved" : "Desat", + "Generate keys" : "Generar claus", + "Error generating key pair" : "Error en generar el parell de claus", "<b>Note:</b> " : "<b>Nota:</b> ", + "and" : "i", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El suport cURL no està activat o instal·lat a PHP. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El suport FTP per PHP no està activat o no està instal·lat. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.", "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> %s no està instal·lat. No es pot muntar %s. Demaneu a l'administrador del sistema que l'instal·li.", + "No external storage configured" : "Sense emmagatzematge extern configurat", + "You can configure external storages in the personal settings" : "Pot configurar emmagatzematges externs en els ajustos personals", "Name" : "Nom", "Storage type" : "Tipus d'emmagatzemament", "Scope" : "Abast", diff --git a/apps/files_external/l10n/cs_CZ.js b/apps/files_external/l10n/cs_CZ.js index 561dbc3d29e..8b381f24434 100644 --- a/apps/files_external/l10n/cs_CZ.js +++ b/apps/files_external/l10n/cs_CZ.js @@ -43,6 +43,9 @@ OC.L10N.register( "Username as share" : "Uživatelské jméno jako sdílený adresář", "URL" : "URL", "Secure https://" : "Zabezpečené https://", + "Public key" : "Veřejný klíč", + "Storage with id \"%i\" not found" : "Úložiště s id \"%i\" nebylo nalezeno", + "Invalid mount point" : "Neplatný přípojný bod", "Access granted" : "Přístup povolen", "Error configuring Dropbox storage" : "Chyba při nastavení úložiště Dropbox", "Grant access" : "Povolit přístup", @@ -52,6 +55,8 @@ OC.L10N.register( "All users. Type to select user or group." : "Všichni uživatelé. Začněte psát pro výběr uživatelů a skupin.", "(group)" : "(skupina)", "Saved" : "Uloženo", + "Generate keys" : "Vytvořit klíče", + "Error generating key pair" : "Chyba při vytváření páru klíčů", "<b>Note:</b> " : "<b>Poznámka:</b>", "and" : "a", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> cURL podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.", diff --git a/apps/files_external/l10n/cs_CZ.json b/apps/files_external/l10n/cs_CZ.json index 1af24e3c410..9bb8602d254 100644 --- a/apps/files_external/l10n/cs_CZ.json +++ b/apps/files_external/l10n/cs_CZ.json @@ -41,6 +41,9 @@ "Username as share" : "Uživatelské jméno jako sdílený adresář", "URL" : "URL", "Secure https://" : "Zabezpečené https://", + "Public key" : "Veřejný klíč", + "Storage with id \"%i\" not found" : "Úložiště s id \"%i\" nebylo nalezeno", + "Invalid mount point" : "Neplatný přípojný bod", "Access granted" : "Přístup povolen", "Error configuring Dropbox storage" : "Chyba při nastavení úložiště Dropbox", "Grant access" : "Povolit přístup", @@ -50,6 +53,8 @@ "All users. Type to select user or group." : "Všichni uživatelé. Začněte psát pro výběr uživatelů a skupin.", "(group)" : "(skupina)", "Saved" : "Uloženo", + "Generate keys" : "Vytvořit klíče", + "Error generating key pair" : "Chyba při vytváření páru klíčů", "<b>Note:</b> " : "<b>Poznámka:</b>", "and" : "a", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> cURL podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.", diff --git a/apps/files_external/l10n/da.js b/apps/files_external/l10n/da.js index 00ccc703ffc..964fd4333c5 100644 --- a/apps/files_external/l10n/da.js +++ b/apps/files_external/l10n/da.js @@ -43,6 +43,7 @@ OC.L10N.register( "Username as share" : "Brugernavn som deling", "URL" : "URL", "Secure https://" : "Sikker https://", + "Public key" : "Offentlig nøgle", "Access granted" : "Adgang godkendt", "Error configuring Dropbox storage" : "Fejl ved konfiguration af Dropbox plads", "Grant access" : "Godkend adgang", @@ -52,6 +53,8 @@ OC.L10N.register( "All users. Type to select user or group." : "Alle brugere. Indtast for at vælge bruger eller gruppe.", "(group)" : "(gruppe)", "Saved" : "Gemt", + "Generate keys" : "Opret nøgler.", + "Error generating key pair" : "Fejl under oprettelse af nøglepar", "<b>Note:</b> " : "<b>Note:</b> ", "and" : "og", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> cURL-understøttelsen i PHP er enten ikke aktiveret eller installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.", diff --git a/apps/files_external/l10n/da.json b/apps/files_external/l10n/da.json index 60ca2a33c97..33c487caa3e 100644 --- a/apps/files_external/l10n/da.json +++ b/apps/files_external/l10n/da.json @@ -41,6 +41,7 @@ "Username as share" : "Brugernavn som deling", "URL" : "URL", "Secure https://" : "Sikker https://", + "Public key" : "Offentlig nøgle", "Access granted" : "Adgang godkendt", "Error configuring Dropbox storage" : "Fejl ved konfiguration af Dropbox plads", "Grant access" : "Godkend adgang", @@ -50,6 +51,8 @@ "All users. Type to select user or group." : "Alle brugere. Indtast for at vælge bruger eller gruppe.", "(group)" : "(gruppe)", "Saved" : "Gemt", + "Generate keys" : "Opret nøgler.", + "Error generating key pair" : "Fejl under oprettelse af nøglepar", "<b>Note:</b> " : "<b>Note:</b> ", "and" : "og", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> cURL-understøttelsen i PHP er enten ikke aktiveret eller installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.", diff --git a/apps/files_external/l10n/de.js b/apps/files_external/l10n/de.js index b5775a0b0ef..dee266bbf39 100644 --- a/apps/files_external/l10n/de.js +++ b/apps/files_external/l10n/de.js @@ -43,6 +43,10 @@ OC.L10N.register( "Username as share" : "Benutzername als Freigabe", "URL" : "URL", "Secure https://" : "Sicherer HTTPS://", + "Public key" : "Öffentlicher Schlüssel", + "Storage with id \"%i\" not found" : "Der Speicher mit der ID „%i“ wurde nicht gefunden", + "Invalid mount point" : "Ungültiger Einhängepunkt", + "Invalid storage backend \"%s\"" : "Ungültiges Speicher-Backend „%s“", "Access granted" : "Zugriff gestattet", "Error configuring Dropbox storage" : "Fehler beim Einrichten von Dropbox", "Grant access" : "Zugriff gestatten", @@ -52,6 +56,8 @@ OC.L10N.register( "All users. Type to select user or group." : "Alle Benutzer. Benutzer oder Gruppe zur Auswahl eingeben.", "(group)" : "(group)", "Saved" : "Gespeichert", + "Generate keys" : "Schlüssel erzeugen", + "Error generating key pair" : "Fehler beim Erzeugen des Schlüsselpaares", "<b>Note:</b> " : "<b>Hinweis:</b> ", "and" : "und", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich zur Installation an Deinen Systemadministrator.", diff --git a/apps/files_external/l10n/de.json b/apps/files_external/l10n/de.json index e6501b57a7d..fa7fe02aca0 100644 --- a/apps/files_external/l10n/de.json +++ b/apps/files_external/l10n/de.json @@ -41,6 +41,10 @@ "Username as share" : "Benutzername als Freigabe", "URL" : "URL", "Secure https://" : "Sicherer HTTPS://", + "Public key" : "Öffentlicher Schlüssel", + "Storage with id \"%i\" not found" : "Der Speicher mit der ID „%i“ wurde nicht gefunden", + "Invalid mount point" : "Ungültiger Einhängepunkt", + "Invalid storage backend \"%s\"" : "Ungültiges Speicher-Backend „%s“", "Access granted" : "Zugriff gestattet", "Error configuring Dropbox storage" : "Fehler beim Einrichten von Dropbox", "Grant access" : "Zugriff gestatten", @@ -50,6 +54,8 @@ "All users. Type to select user or group." : "Alle Benutzer. Benutzer oder Gruppe zur Auswahl eingeben.", "(group)" : "(group)", "Saved" : "Gespeichert", + "Generate keys" : "Schlüssel erzeugen", + "Error generating key pair" : "Fehler beim Erzeugen des Schlüsselpaares", "<b>Note:</b> " : "<b>Hinweis:</b> ", "and" : "und", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich zur Installation an Deinen Systemadministrator.", diff --git a/apps/files_external/l10n/de_DE.js b/apps/files_external/l10n/de_DE.js index 9122a8caa0a..af50a569790 100644 --- a/apps/files_external/l10n/de_DE.js +++ b/apps/files_external/l10n/de_DE.js @@ -43,6 +43,10 @@ OC.L10N.register( "Username as share" : "Benutzername als Freigabe", "URL" : "Adresse", "Secure https://" : "Sicheres https://", + "Public key" : "Öffentlicher Schlüssel", + "Storage with id \"%i\" not found" : "Der Speicher mit der ID „%i“ wurde nicht gefunden", + "Invalid mount point" : "Ungültiger Einhängepunkt", + "Invalid storage backend \"%s\"" : "Ungültiges Speicher-Backend „%s“", "Access granted" : "Zugriff gestattet", "Error configuring Dropbox storage" : "Fehler beim Einrichten von Dropbox", "Grant access" : "Zugriff gestatten", @@ -52,6 +56,8 @@ OC.L10N.register( "All users. Type to select user or group." : "Alle Benutzer. Benutzer oder Gruppe zur Auswahl eingeben.", "(group)" : "(group)", "Saved" : "Gespeichert", + "Generate keys" : "Schlüssel erzeugen", + "Error generating key pair" : "Fehler beim Erzeugen des Schlüsselpaares", "<b>Note:</b> " : "<b>Hinweis:</b> ", "and" : "und", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.", diff --git a/apps/files_external/l10n/de_DE.json b/apps/files_external/l10n/de_DE.json index 5c8ba8a89ee..ac5b4d87139 100644 --- a/apps/files_external/l10n/de_DE.json +++ b/apps/files_external/l10n/de_DE.json @@ -41,6 +41,10 @@ "Username as share" : "Benutzername als Freigabe", "URL" : "Adresse", "Secure https://" : "Sicheres https://", + "Public key" : "Öffentlicher Schlüssel", + "Storage with id \"%i\" not found" : "Der Speicher mit der ID „%i“ wurde nicht gefunden", + "Invalid mount point" : "Ungültiger Einhängepunkt", + "Invalid storage backend \"%s\"" : "Ungültiges Speicher-Backend „%s“", "Access granted" : "Zugriff gestattet", "Error configuring Dropbox storage" : "Fehler beim Einrichten von Dropbox", "Grant access" : "Zugriff gestatten", @@ -50,6 +54,8 @@ "All users. Type to select user or group." : "Alle Benutzer. Benutzer oder Gruppe zur Auswahl eingeben.", "(group)" : "(group)", "Saved" : "Gespeichert", + "Generate keys" : "Schlüssel erzeugen", + "Error generating key pair" : "Fehler beim Erzeugen des Schlüsselpaares", "<b>Note:</b> " : "<b>Hinweis:</b> ", "and" : "und", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.", diff --git a/apps/files_external/l10n/el.js b/apps/files_external/l10n/el.js index 1000a6d9303..95e60cd51c6 100644 --- a/apps/files_external/l10n/el.js +++ b/apps/files_external/l10n/el.js @@ -43,6 +43,7 @@ OC.L10N.register( "Username as share" : "Όνομα χρήστη ως διαμοιραζόμενος φάκελος", "URL" : "URL", "Secure https://" : "Ασφαλής σύνδεση https://", + "Public key" : "Δημόσιο κλειδί", "Access granted" : "Πρόσβαση παρασχέθηκε", "Error configuring Dropbox storage" : "Σφάλμα ρυθμίζωντας αποθήκευση Dropbox ", "Grant access" : "Παροχή πρόσβασης", @@ -52,6 +53,7 @@ OC.L10N.register( "All users. Type to select user or group." : "Όλοι οι χρήστες. Πληκτρολογήστε για να επιλέξετε χρήστη ή ομάδα.", "(group)" : "(ομάδα)", "Saved" : "Αποθηκεύτηκαν", + "Generate keys" : "Δημιουργία κλειδιών", "<b>Note:</b> " : "<b>Σημείωση:</b> ", "and" : "και", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η υποστήριξη cURL στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Η προσάρτηση του %s δεν είναι δυνατή. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.", diff --git a/apps/files_external/l10n/el.json b/apps/files_external/l10n/el.json index b38b81c86d2..421d1a6e4c9 100644 --- a/apps/files_external/l10n/el.json +++ b/apps/files_external/l10n/el.json @@ -41,6 +41,7 @@ "Username as share" : "Όνομα χρήστη ως διαμοιραζόμενος φάκελος", "URL" : "URL", "Secure https://" : "Ασφαλής σύνδεση https://", + "Public key" : "Δημόσιο κλειδί", "Access granted" : "Πρόσβαση παρασχέθηκε", "Error configuring Dropbox storage" : "Σφάλμα ρυθμίζωντας αποθήκευση Dropbox ", "Grant access" : "Παροχή πρόσβασης", @@ -50,6 +51,7 @@ "All users. Type to select user or group." : "Όλοι οι χρήστες. Πληκτρολογήστε για να επιλέξετε χρήστη ή ομάδα.", "(group)" : "(ομάδα)", "Saved" : "Αποθηκεύτηκαν", + "Generate keys" : "Δημιουργία κλειδιών", "<b>Note:</b> " : "<b>Σημείωση:</b> ", "and" : "και", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η υποστήριξη cURL στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Η προσάρτηση του %s δεν είναι δυνατή. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.", diff --git a/apps/files_external/l10n/en_GB.js b/apps/files_external/l10n/en_GB.js index a3772abdfd5..2ccf775f0be 100644 --- a/apps/files_external/l10n/en_GB.js +++ b/apps/files_external/l10n/en_GB.js @@ -43,6 +43,7 @@ OC.L10N.register( "Username as share" : "Username as share", "URL" : "URL", "Secure https://" : "Secure https://", + "Public key" : "Public key", "Access granted" : "Access granted", "Error configuring Dropbox storage" : "Error configuring Dropbox storage", "Grant access" : "Grant access", @@ -52,6 +53,8 @@ OC.L10N.register( "All users. Type to select user or group." : "All users. Type to select user or group.", "(group)" : "(group)", "Saved" : "Saved", + "Generate keys" : "Generate keys", + "Error generating key pair" : "Error generating key pair", "<b>Note:</b> " : "<b>Note:</b> ", "and" : "and", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.", diff --git a/apps/files_external/l10n/en_GB.json b/apps/files_external/l10n/en_GB.json index 21a5881c94e..7e4415dbf7f 100644 --- a/apps/files_external/l10n/en_GB.json +++ b/apps/files_external/l10n/en_GB.json @@ -41,6 +41,7 @@ "Username as share" : "Username as share", "URL" : "URL", "Secure https://" : "Secure https://", + "Public key" : "Public key", "Access granted" : "Access granted", "Error configuring Dropbox storage" : "Error configuring Dropbox storage", "Grant access" : "Grant access", @@ -50,6 +51,8 @@ "All users. Type to select user or group." : "All users. Type to select user or group.", "(group)" : "(group)", "Saved" : "Saved", + "Generate keys" : "Generate keys", + "Error generating key pair" : "Error generating key pair", "<b>Note:</b> " : "<b>Note:</b> ", "and" : "and", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.", diff --git a/apps/files_external/l10n/es.js b/apps/files_external/l10n/es.js index bb1631d7ead..1ffeacae63c 100644 --- a/apps/files_external/l10n/es.js +++ b/apps/files_external/l10n/es.js @@ -1,7 +1,7 @@ OC.L10N.register( "files_external", { - "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "La descarga de los tokens solicitados ha fallado. Verifique que la clave y el secreto de su app Dropbox es correcta.", + "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "La descarga de los tokens solicitados ha fallado. Verifique que la clave y el secreto de su app Dropbox sean correctos.", "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "La descarga de los tokens de acceso ha fallado. Verifique que la clave y el secreto de su app Dropbox es correcta.", "Please provide a valid Dropbox app key and secret." : "Por favor, proporcione un una clave válida de la app Dropbox y una clave secreta.", "Step 1 failed. Exception: %s" : "El paso 1 falló. Excepción: %s", @@ -30,7 +30,7 @@ OC.L10N.register( "Secure ftps://" : "—Seguro— ftps://", "Client ID" : "ID de Cliente", "Client secret" : "Cliente secreto", - "OpenStack Object Storage" : "OpenStack Object Storage", + "OpenStack Object Storage" : "Almacenamiento de objeto OpenStack", "Region (optional for OpenStack Object Storage)" : "Región (opcional para OpenStack Object Storage)", "API Key (required for Rackspace Cloud Files)" : "Clave API (requerida para Rackspace Cloud Files)", "Tenantname (required for OpenStack Object Storage)" : "Nombre de Inquilino (requerido para OpenStack Object Storage)", @@ -43,15 +43,18 @@ OC.L10N.register( "Username as share" : "Nombre de usuario como compartir", "URL" : "URL", "Secure https://" : "—Seguro— https://", + "Public key" : "Clave pública", "Access granted" : "Acceso concedido", - "Error configuring Dropbox storage" : "Error configurando el almacenamiento de Dropbox", + "Error configuring Dropbox storage" : "Error al configurar el almacenamiento de Dropbox", "Grant access" : "Conceder acceso", - "Error configuring Google Drive storage" : "Error configurando el almacenamiento de Google Drive", + "Error configuring Google Drive storage" : "Error al configurar el almacenamiento de Google Drive", "Personal" : "Personal", "System" : "Sistema", "All users. Type to select user or group." : "Todos los usuarios. Teclee para seleccionar un usuario o grupo.", "(group)" : "(grupo)", "Saved" : "Guardado", + "Generate keys" : "Generar claves", + "Error generating key pair" : "Error al generar el par de claves", "<b>Note:</b> " : "<b>Nota:</b> ", "and" : "y", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El soporte de cURL en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.", diff --git a/apps/files_external/l10n/es.json b/apps/files_external/l10n/es.json index 7c86b244c32..3ca4907c70f 100644 --- a/apps/files_external/l10n/es.json +++ b/apps/files_external/l10n/es.json @@ -1,5 +1,5 @@ { "translations": { - "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "La descarga de los tokens solicitados ha fallado. Verifique que la clave y el secreto de su app Dropbox es correcta.", + "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "La descarga de los tokens solicitados ha fallado. Verifique que la clave y el secreto de su app Dropbox sean correctos.", "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "La descarga de los tokens de acceso ha fallado. Verifique que la clave y el secreto de su app Dropbox es correcta.", "Please provide a valid Dropbox app key and secret." : "Por favor, proporcione un una clave válida de la app Dropbox y una clave secreta.", "Step 1 failed. Exception: %s" : "El paso 1 falló. Excepción: %s", @@ -28,7 +28,7 @@ "Secure ftps://" : "—Seguro— ftps://", "Client ID" : "ID de Cliente", "Client secret" : "Cliente secreto", - "OpenStack Object Storage" : "OpenStack Object Storage", + "OpenStack Object Storage" : "Almacenamiento de objeto OpenStack", "Region (optional for OpenStack Object Storage)" : "Región (opcional para OpenStack Object Storage)", "API Key (required for Rackspace Cloud Files)" : "Clave API (requerida para Rackspace Cloud Files)", "Tenantname (required for OpenStack Object Storage)" : "Nombre de Inquilino (requerido para OpenStack Object Storage)", @@ -41,15 +41,18 @@ "Username as share" : "Nombre de usuario como compartir", "URL" : "URL", "Secure https://" : "—Seguro— https://", + "Public key" : "Clave pública", "Access granted" : "Acceso concedido", - "Error configuring Dropbox storage" : "Error configurando el almacenamiento de Dropbox", + "Error configuring Dropbox storage" : "Error al configurar el almacenamiento de Dropbox", "Grant access" : "Conceder acceso", - "Error configuring Google Drive storage" : "Error configurando el almacenamiento de Google Drive", + "Error configuring Google Drive storage" : "Error al configurar el almacenamiento de Google Drive", "Personal" : "Personal", "System" : "Sistema", "All users. Type to select user or group." : "Todos los usuarios. Teclee para seleccionar un usuario o grupo.", "(group)" : "(grupo)", "Saved" : "Guardado", + "Generate keys" : "Generar claves", + "Error generating key pair" : "Error al generar el par de claves", "<b>Note:</b> " : "<b>Nota:</b> ", "and" : "y", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El soporte de cURL en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.", diff --git a/apps/files_external/l10n/eu.js b/apps/files_external/l10n/eu.js index 0127452f697..d3e664e7b82 100644 --- a/apps/files_external/l10n/eu.js +++ b/apps/files_external/l10n/eu.js @@ -42,6 +42,7 @@ OC.L10N.register( "Username as share" : "Erabiltzaile izena elkarbanaketa bezala", "URL" : "URL", "Secure https://" : "https:// segurua", + "Public key" : "Gako publikoa", "Access granted" : "Sarrera baimendua", "Error configuring Dropbox storage" : "Errore bat egon da Dropbox biltegiratzea konfiguratzean", "Grant access" : "Baimendu sarrera", diff --git a/apps/files_external/l10n/eu.json b/apps/files_external/l10n/eu.json index af7f8e4016b..3b817cebd97 100644 --- a/apps/files_external/l10n/eu.json +++ b/apps/files_external/l10n/eu.json @@ -40,6 +40,7 @@ "Username as share" : "Erabiltzaile izena elkarbanaketa bezala", "URL" : "URL", "Secure https://" : "https:// segurua", + "Public key" : "Gako publikoa", "Access granted" : "Sarrera baimendua", "Error configuring Dropbox storage" : "Errore bat egon da Dropbox biltegiratzea konfiguratzean", "Grant access" : "Baimendu sarrera", diff --git a/apps/files_external/l10n/fi_FI.js b/apps/files_external/l10n/fi_FI.js index c446c50b41c..af893902edb 100644 --- a/apps/files_external/l10n/fi_FI.js +++ b/apps/files_external/l10n/fi_FI.js @@ -37,6 +37,8 @@ OC.L10N.register( "Username as share" : "Käyttäjänimi jakona", "URL" : "Verkko-osoite", "Secure https://" : "Salattu https://", + "Public key" : "Julkinen avain", + "Invalid mount point" : "Virheellinen liitoskohta", "Access granted" : "Pääsy sallittu", "Error configuring Dropbox storage" : "Virhe Dropbox levyn asetuksia tehtäessä", "Grant access" : "Salli pääsy", @@ -46,6 +48,8 @@ OC.L10N.register( "All users. Type to select user or group." : "Kaikki käyttäjät. Kirjoita valitaksesi käyttäjän tai ryhmän.", "(group)" : "(ryhmä)", "Saved" : "Tallennettu", + "Generate keys" : "Luo avaimet", + "Error generating key pair" : "Virhe luotaessa avainparia", "<b>Note:</b> " : "<b>Huomio:</b> ", "and" : "ja", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n cURL-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan cURL-tuki käyttöön.", diff --git a/apps/files_external/l10n/fi_FI.json b/apps/files_external/l10n/fi_FI.json index c09b8bda1ba..a4b0068e087 100644 --- a/apps/files_external/l10n/fi_FI.json +++ b/apps/files_external/l10n/fi_FI.json @@ -35,6 +35,8 @@ "Username as share" : "Käyttäjänimi jakona", "URL" : "Verkko-osoite", "Secure https://" : "Salattu https://", + "Public key" : "Julkinen avain", + "Invalid mount point" : "Virheellinen liitoskohta", "Access granted" : "Pääsy sallittu", "Error configuring Dropbox storage" : "Virhe Dropbox levyn asetuksia tehtäessä", "Grant access" : "Salli pääsy", @@ -44,6 +46,8 @@ "All users. Type to select user or group." : "Kaikki käyttäjät. Kirjoita valitaksesi käyttäjän tai ryhmän.", "(group)" : "(ryhmä)", "Saved" : "Tallennettu", + "Generate keys" : "Luo avaimet", + "Error generating key pair" : "Virhe luotaessa avainparia", "<b>Note:</b> " : "<b>Huomio:</b> ", "and" : "ja", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n cURL-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan cURL-tuki käyttöön.", diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js index 23c31636fce..e2a3e831275 100644 --- a/apps/files_external/l10n/fr.js +++ b/apps/files_external/l10n/fr.js @@ -20,9 +20,9 @@ OC.L10N.register( "Port" : "Port", "Region" : "Région", "Enable SSL" : "Activer SSL", - "Enable Path Style" : "Activer le style de chemin", - "App key" : "Clé App", - "App secret" : "Secret de l'application", + "Enable Path Style" : "Accès par path", + "App key" : "App key", + "App secret" : "App secret", "Host" : "Hôte", "Username" : "Nom d'utilisateur", "Password" : "Mot de passe", @@ -43,6 +43,7 @@ OC.L10N.register( "Username as share" : "Nom d'utilisateur comme nom de partage", "URL" : "URL", "Secure https://" : "Sécurisation https://", + "Public key" : "Clef publique", "Access granted" : "Accès autorisé", "Error configuring Dropbox storage" : "Erreur lors de la configuration du support de stockage Dropbox", "Grant access" : "Autoriser l'accès", @@ -51,14 +52,16 @@ OC.L10N.register( "System" : "Système", "All users. Type to select user or group." : "Tous les utilisateurs. Cliquez ici pour restreindre.", "(group)" : "(groupe)", - "Saved" : "Sauvegarder", + "Saved" : "Sauvegardé", + "Generate keys" : "Générer des clés", + "Error generating key pair" : "Erreur lors de la génération des clés", "<b>Note:</b> " : "<b>Attention :</b>", "and" : " et ", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention :</b> La prise en charge de cURL par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> La prise en charge du FTP par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.", "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> \"%s\" n'est pas installé. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.", "No external storage configured" : "Aucun stockage externe configuré", - "You can configure external storages in the personal settings" : "Vous pouvez configurer vos stockages externes dans les paramètres personnels.", + "You can configure external storages in the personal settings" : "Vous pouvez configurer des stockages externes dans vos paramètres personnels", "Name" : "Nom", "Storage type" : "Type de support de stockage", "Scope" : "Portée", diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json index e29f032fc4e..f818a018408 100644 --- a/apps/files_external/l10n/fr.json +++ b/apps/files_external/l10n/fr.json @@ -18,9 +18,9 @@ "Port" : "Port", "Region" : "Région", "Enable SSL" : "Activer SSL", - "Enable Path Style" : "Activer le style de chemin", - "App key" : "Clé App", - "App secret" : "Secret de l'application", + "Enable Path Style" : "Accès par path", + "App key" : "App key", + "App secret" : "App secret", "Host" : "Hôte", "Username" : "Nom d'utilisateur", "Password" : "Mot de passe", @@ -41,6 +41,7 @@ "Username as share" : "Nom d'utilisateur comme nom de partage", "URL" : "URL", "Secure https://" : "Sécurisation https://", + "Public key" : "Clef publique", "Access granted" : "Accès autorisé", "Error configuring Dropbox storage" : "Erreur lors de la configuration du support de stockage Dropbox", "Grant access" : "Autoriser l'accès", @@ -49,14 +50,16 @@ "System" : "Système", "All users. Type to select user or group." : "Tous les utilisateurs. Cliquez ici pour restreindre.", "(group)" : "(groupe)", - "Saved" : "Sauvegarder", + "Saved" : "Sauvegardé", + "Generate keys" : "Générer des clés", + "Error generating key pair" : "Erreur lors de la génération des clés", "<b>Note:</b> " : "<b>Attention :</b>", "and" : " et ", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention :</b> La prise en charge de cURL par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> La prise en charge du FTP par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.", "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> \"%s\" n'est pas installé. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.", "No external storage configured" : "Aucun stockage externe configuré", - "You can configure external storages in the personal settings" : "Vous pouvez configurer vos stockages externes dans les paramètres personnels.", + "You can configure external storages in the personal settings" : "Vous pouvez configurer des stockages externes dans vos paramètres personnels", "Name" : "Nom", "Storage type" : "Type de support de stockage", "Scope" : "Portée", diff --git a/apps/files_external/l10n/gl.js b/apps/files_external/l10n/gl.js index 8cfb4c39da3..328c793ce85 100644 --- a/apps/files_external/l10n/gl.js +++ b/apps/files_external/l10n/gl.js @@ -3,7 +3,7 @@ OC.L10N.register( { "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Fallou a obtención de marcas de petición. Comprobe que a chave e o código secreto da súa aplicación Dropbox son correctas.", "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Fallou a obtención de marcas de acceso. Comprobe que a chave e o código secreto da súa aplicación Dropbox son correctas.", - "Please provide a valid Dropbox app key and secret." : "Forneza unha chave correcta e segreda do Dropbox.", + "Please provide a valid Dropbox app key and secret." : "Forneza unha chave correcta e secreta do Dropbox.", "Step 1 failed. Exception: %s" : "Fallou o paso 1. Excepción: %s", "Step 2 failed. Exception: %s" : "Fallou o paso 2. Excepción: %s", "External storage" : "Almacenamento externo", @@ -43,15 +43,21 @@ OC.L10N.register( "Username as share" : "Nome de usuario como compartición", "URL" : "URL", "Secure https://" : "https:// seguro", + "Public key" : "Chave pública", + "Storage with id \"%i\" not found" : "Non se atopa o almacenamento co ID «%i» ", + "Invalid mount point" : "Punto de montaxe incorrecto", + "Invalid storage backend \"%s\"" : "Infraestrutura de almacenamento «%s» incorrecta", "Access granted" : "Concedeuse acceso", "Error configuring Dropbox storage" : "Produciuse un erro ao configurar o almacenamento en Dropbox", "Grant access" : "Permitir o acceso", "Error configuring Google Drive storage" : "Produciuse un erro ao configurar o almacenamento en Google Drive", "Personal" : "Persoal", "System" : "Sistema", - "All users. Type to select user or group." : "Todos os usuarios. Escriba para selecionar usuario ou grupo.", + "All users. Type to select user or group." : "Todos os usuarios. Escriba para seleccionar usuario ou grupo.", "(group)" : "(grupo)", "Saved" : "Gardado", + "Generate keys" : "Xerar chaves", + "Error generating key pair" : "Produciuse un erro ao xerar o par de chaves", "<b>Note:</b> " : "<b>Nota:</b> ", "and" : "e", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> A compatibilidade de cURL en PHP non está activada, ou non está instalado. Non é posíbel a montaxe de %s. Consulte co administrador do sistema como instalalo.", diff --git a/apps/files_external/l10n/gl.json b/apps/files_external/l10n/gl.json index b58107282f9..6d54298e752 100644 --- a/apps/files_external/l10n/gl.json +++ b/apps/files_external/l10n/gl.json @@ -1,7 +1,7 @@ { "translations": { "Fetching request tokens failed. Verify that your Dropbox app key and secret are correct." : "Fallou a obtención de marcas de petición. Comprobe que a chave e o código secreto da súa aplicación Dropbox son correctas.", "Fetching access tokens failed. Verify that your Dropbox app key and secret are correct." : "Fallou a obtención de marcas de acceso. Comprobe que a chave e o código secreto da súa aplicación Dropbox son correctas.", - "Please provide a valid Dropbox app key and secret." : "Forneza unha chave correcta e segreda do Dropbox.", + "Please provide a valid Dropbox app key and secret." : "Forneza unha chave correcta e secreta do Dropbox.", "Step 1 failed. Exception: %s" : "Fallou o paso 1. Excepción: %s", "Step 2 failed. Exception: %s" : "Fallou o paso 2. Excepción: %s", "External storage" : "Almacenamento externo", @@ -41,15 +41,21 @@ "Username as share" : "Nome de usuario como compartición", "URL" : "URL", "Secure https://" : "https:// seguro", + "Public key" : "Chave pública", + "Storage with id \"%i\" not found" : "Non se atopa o almacenamento co ID «%i» ", + "Invalid mount point" : "Punto de montaxe incorrecto", + "Invalid storage backend \"%s\"" : "Infraestrutura de almacenamento «%s» incorrecta", "Access granted" : "Concedeuse acceso", "Error configuring Dropbox storage" : "Produciuse un erro ao configurar o almacenamento en Dropbox", "Grant access" : "Permitir o acceso", "Error configuring Google Drive storage" : "Produciuse un erro ao configurar o almacenamento en Google Drive", "Personal" : "Persoal", "System" : "Sistema", - "All users. Type to select user or group." : "Todos os usuarios. Escriba para selecionar usuario ou grupo.", + "All users. Type to select user or group." : "Todos os usuarios. Escriba para seleccionar usuario ou grupo.", "(group)" : "(grupo)", "Saved" : "Gardado", + "Generate keys" : "Xerar chaves", + "Error generating key pair" : "Produciuse un erro ao xerar o par de chaves", "<b>Note:</b> " : "<b>Nota:</b> ", "and" : "e", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> A compatibilidade de cURL en PHP non está activada, ou non está instalado. Non é posíbel a montaxe de %s. Consulte co administrador do sistema como instalalo.", diff --git a/apps/files_external/l10n/id.js b/apps/files_external/l10n/id.js index 590bc3b34d5..c4b262945ea 100644 --- a/apps/files_external/l10n/id.js +++ b/apps/files_external/l10n/id.js @@ -43,6 +43,7 @@ OC.L10N.register( "Username as share" : "Nama pengguna berbagi", "URL" : "URL", "Secure https://" : "Secure https://", + "Public key" : "Kunci Public", "Access granted" : "Akses diberikan", "Error configuring Dropbox storage" : "Kesalahan dalam mengonfigurasi penyimpanan Dropbox", "Grant access" : "Berikan hak akses", diff --git a/apps/files_external/l10n/id.json b/apps/files_external/l10n/id.json index f77d87cacb2..da9f676d772 100644 --- a/apps/files_external/l10n/id.json +++ b/apps/files_external/l10n/id.json @@ -41,6 +41,7 @@ "Username as share" : "Nama pengguna berbagi", "URL" : "URL", "Secure https://" : "Secure https://", + "Public key" : "Kunci Public", "Access granted" : "Akses diberikan", "Error configuring Dropbox storage" : "Kesalahan dalam mengonfigurasi penyimpanan Dropbox", "Grant access" : "Berikan hak akses", diff --git a/apps/files_external/l10n/it.js b/apps/files_external/l10n/it.js index af26cabed76..c679f644541 100644 --- a/apps/files_external/l10n/it.js +++ b/apps/files_external/l10n/it.js @@ -43,6 +43,10 @@ OC.L10N.register( "Username as share" : "Nome utente come condivisione", "URL" : "URL", "Secure https://" : "Sicuro https://", + "Public key" : "Chiave pubblica", + "Storage with id \"%i\" not found" : "Archiviazione con ID \"%i\" non trovata", + "Invalid mount point" : "Punto di mount non valido", + "Invalid storage backend \"%s\"" : "Motore di archiviazione \"%s\" non valido", "Access granted" : "Accesso consentito", "Error configuring Dropbox storage" : "Errore durante la configurazione dell'archivio Dropbox", "Grant access" : "Concedi l'accesso", @@ -52,6 +56,8 @@ OC.L10N.register( "All users. Type to select user or group." : "Tutti gli utenti. Digita per selezionare utente o gruppo.", "(group)" : "(gruppo)", "Saved" : "Salvato", + "Generate keys" : "Genera la chiavi", + "Error generating key pair" : "Errore durante la generazione della coppia di chiavi", "<b>Note:</b> " : "<b>Nota:</b>", "and" : "e", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a cURL di PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", diff --git a/apps/files_external/l10n/it.json b/apps/files_external/l10n/it.json index 678eb4c4b10..7e56ebf13fd 100644 --- a/apps/files_external/l10n/it.json +++ b/apps/files_external/l10n/it.json @@ -41,6 +41,10 @@ "Username as share" : "Nome utente come condivisione", "URL" : "URL", "Secure https://" : "Sicuro https://", + "Public key" : "Chiave pubblica", + "Storage with id \"%i\" not found" : "Archiviazione con ID \"%i\" non trovata", + "Invalid mount point" : "Punto di mount non valido", + "Invalid storage backend \"%s\"" : "Motore di archiviazione \"%s\" non valido", "Access granted" : "Accesso consentito", "Error configuring Dropbox storage" : "Errore durante la configurazione dell'archivio Dropbox", "Grant access" : "Concedi l'accesso", @@ -50,6 +54,8 @@ "All users. Type to select user or group." : "Tutti gli utenti. Digita per selezionare utente o gruppo.", "(group)" : "(gruppo)", "Saved" : "Salvato", + "Generate keys" : "Genera la chiavi", + "Error generating key pair" : "Errore durante la generazione della coppia di chiavi", "<b>Note:</b> " : "<b>Nota:</b>", "and" : "e", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a cURL di PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", diff --git a/apps/files_external/l10n/ja.js b/apps/files_external/l10n/ja.js index 4c343daf902..eabf0afb197 100644 --- a/apps/files_external/l10n/ja.js +++ b/apps/files_external/l10n/ja.js @@ -18,7 +18,7 @@ OC.L10N.register( "Secret Key" : "シークレットキー", "Hostname" : "ホスト名", "Port" : "ポート", - "Region" : "都道府県", + "Region" : "リージョン", "Enable SSL" : "SSLを有効", "Enable Path Style" : "パス形式を有効", "App key" : "アプリキー", @@ -31,11 +31,11 @@ OC.L10N.register( "Client ID" : "クライアントID", "Client secret" : "クライアント秘密キー", "OpenStack Object Storage" : "OpenStack ObjectStorage", - "Region (optional for OpenStack Object Storage)" : "リージョン (OpenStack ObjectStorage用)", - "API Key (required for Rackspace Cloud Files)" : "APIキー (Rackspace CloudFiles用)", - "Tenantname (required for OpenStack Object Storage)" : "テナント名 (OpenStack ObjectStorage用)", - "Password (required for OpenStack Object Storage)" : "パスワード (OpenStack ObjectStorage用)", - "Service Name (required for OpenStack Object Storage)" : "サービス名 (OpenStack ObjectStorage用)", + "Region (optional for OpenStack Object Storage)" : "リージョン (OpenStack ObjectStorage)", + "API Key (required for Rackspace Cloud Files)" : "APIキー (Rackspace CloudFiles)", + "Tenantname (required for OpenStack Object Storage)" : "テナント名 (OpenStack ObjectStorage)", + "Password (required for OpenStack Object Storage)" : "パスワード (OpenStack ObjectStorage)", + "Service Name (required for OpenStack Object Storage)" : "サービス名 (OpenStack ObjectStorage)", "URL of identity endpoint (required for OpenStack Object Storage)" : "識別用エンドポイントURL (OpenStack ObjectStorage)", "Timeout of HTTP requests in seconds" : "HTTP接続タイムアウト秒数", "Share" : "共有", @@ -43,6 +43,7 @@ OC.L10N.register( "Username as share" : "共有名", "URL" : "URL", "Secure https://" : "セキュア https://", + "Public key" : "公開鍵", "Access granted" : "アクセスは許可されました", "Error configuring Dropbox storage" : "Dropboxストレージの設定エラー", "Grant access" : "アクセスを許可", @@ -52,6 +53,8 @@ OC.L10N.register( "All users. Type to select user or group." : "すべてのユーザー。ユーザー、グループを追加", "(group)" : "(グループ)", "Saved" : "保存されました", + "Generate keys" : "キーを生成", + "Error generating key pair" : "キーペアの生成エラー", "<b>Note:</b> " : "<b>注意:</b> ", "and" : "と", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> PHPにcURLのエクステンションが入っていないか、有効ではありません。%s をマウントすることができません。このシステムの管理者にインストールをお願いしてください。", @@ -65,7 +68,7 @@ OC.L10N.register( "External Storage" : "外部ストレージ", "Folder name" : "フォルダー名", "Configuration" : "設定", - "Available for" : "以下が利用可能", + "Available for" : "利用可能", "Add storage" : "ストレージを追加", "Delete" : "削除", "Enable User External Storage" : "ユーザーの外部ストレージを有効にする", diff --git a/apps/files_external/l10n/ja.json b/apps/files_external/l10n/ja.json index 77aff58b9f7..4dc1e53475a 100644 --- a/apps/files_external/l10n/ja.json +++ b/apps/files_external/l10n/ja.json @@ -16,7 +16,7 @@ "Secret Key" : "シークレットキー", "Hostname" : "ホスト名", "Port" : "ポート", - "Region" : "都道府県", + "Region" : "リージョン", "Enable SSL" : "SSLを有効", "Enable Path Style" : "パス形式を有効", "App key" : "アプリキー", @@ -29,11 +29,11 @@ "Client ID" : "クライアントID", "Client secret" : "クライアント秘密キー", "OpenStack Object Storage" : "OpenStack ObjectStorage", - "Region (optional for OpenStack Object Storage)" : "リージョン (OpenStack ObjectStorage用)", - "API Key (required for Rackspace Cloud Files)" : "APIキー (Rackspace CloudFiles用)", - "Tenantname (required for OpenStack Object Storage)" : "テナント名 (OpenStack ObjectStorage用)", - "Password (required for OpenStack Object Storage)" : "パスワード (OpenStack ObjectStorage用)", - "Service Name (required for OpenStack Object Storage)" : "サービス名 (OpenStack ObjectStorage用)", + "Region (optional for OpenStack Object Storage)" : "リージョン (OpenStack ObjectStorage)", + "API Key (required for Rackspace Cloud Files)" : "APIキー (Rackspace CloudFiles)", + "Tenantname (required for OpenStack Object Storage)" : "テナント名 (OpenStack ObjectStorage)", + "Password (required for OpenStack Object Storage)" : "パスワード (OpenStack ObjectStorage)", + "Service Name (required for OpenStack Object Storage)" : "サービス名 (OpenStack ObjectStorage)", "URL of identity endpoint (required for OpenStack Object Storage)" : "識別用エンドポイントURL (OpenStack ObjectStorage)", "Timeout of HTTP requests in seconds" : "HTTP接続タイムアウト秒数", "Share" : "共有", @@ -41,6 +41,7 @@ "Username as share" : "共有名", "URL" : "URL", "Secure https://" : "セキュア https://", + "Public key" : "公開鍵", "Access granted" : "アクセスは許可されました", "Error configuring Dropbox storage" : "Dropboxストレージの設定エラー", "Grant access" : "アクセスを許可", @@ -50,6 +51,8 @@ "All users. Type to select user or group." : "すべてのユーザー。ユーザー、グループを追加", "(group)" : "(グループ)", "Saved" : "保存されました", + "Generate keys" : "キーを生成", + "Error generating key pair" : "キーペアの生成エラー", "<b>Note:</b> " : "<b>注意:</b> ", "and" : "と", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> PHPにcURLのエクステンションが入っていないか、有効ではありません。%s をマウントすることができません。このシステムの管理者にインストールをお願いしてください。", @@ -63,7 +66,7 @@ "External Storage" : "外部ストレージ", "Folder name" : "フォルダー名", "Configuration" : "設定", - "Available for" : "以下が利用可能", + "Available for" : "利用可能", "Add storage" : "ストレージを追加", "Delete" : "削除", "Enable User External Storage" : "ユーザーの外部ストレージを有効にする", diff --git a/apps/files_external/l10n/ko.js b/apps/files_external/l10n/ko.js index f51456a099c..52c6eae4d66 100644 --- a/apps/files_external/l10n/ko.js +++ b/apps/files_external/l10n/ko.js @@ -43,6 +43,7 @@ OC.L10N.register( "Username as share" : "사용자 이름으로 공유", "URL" : "URL", "Secure https://" : "보안 https://", + "Public key" : "공개 키", "Access granted" : "접근 허가됨", "Error configuring Dropbox storage" : "Dropbox 저장소 설정 오류", "Grant access" : "접근 권한 부여", diff --git a/apps/files_external/l10n/ko.json b/apps/files_external/l10n/ko.json index 7e1797cffc3..56192997590 100644 --- a/apps/files_external/l10n/ko.json +++ b/apps/files_external/l10n/ko.json @@ -41,6 +41,7 @@ "Username as share" : "사용자 이름으로 공유", "URL" : "URL", "Secure https://" : "보안 https://", + "Public key" : "공개 키", "Access granted" : "접근 허가됨", "Error configuring Dropbox storage" : "Dropbox 저장소 설정 오류", "Grant access" : "접근 권한 부여", diff --git a/apps/files_external/l10n/nb_NO.js b/apps/files_external/l10n/nb_NO.js index 19e0051e1e3..3981143b9c5 100644 --- a/apps/files_external/l10n/nb_NO.js +++ b/apps/files_external/l10n/nb_NO.js @@ -43,6 +43,7 @@ OC.L10N.register( "Username as share" : "Brukernavn som share", "URL" : "URL", "Secure https://" : "Sikker https://", + "Public key" : "Offentlig nøkkel", "Access granted" : "Tilgang innvilget", "Error configuring Dropbox storage" : "Feil ved konfigurering av Dropbox-lagring", "Grant access" : "Gi tilgang", @@ -52,11 +53,14 @@ OC.L10N.register( "All users. Type to select user or group." : "Alle brukere. Tast for å velge bruker eller gruppe.", "(group)" : "(gruppe)", "Saved" : "Lagret", + "Generate keys" : "Generer nøkler", + "Error generating key pair" : "Feil ved nøkkelgenerering", "<b>Note:</b> " : "<b>Merk:</b> ", "and" : "og", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> Støtte for cURL i PHP er ikke aktivert eller installert. Oppkobling av %s er ikke mulig. Be systemadministratoren om å installere det.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> FTP-støtte i PHP er ikke slått på eller installert. Kan ikke koble opp %s. Ta kontakt med systemadministratoren for å installere det.", "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> \"%s\" er ikke installert. Oppkobling av %s er ikke mulig. Spør systemadministratoren om å installere det.", + "No external storage configured" : "Eksternt lager er ikke konfigurert", "You can configure external storages in the personal settings" : "Du kan konfigurerer eksterne lagre i personlige innstillinger", "Name" : "Navn", "Storage type" : "Lagringstype", diff --git a/apps/files_external/l10n/nb_NO.json b/apps/files_external/l10n/nb_NO.json index 0b707decbea..63290524a82 100644 --- a/apps/files_external/l10n/nb_NO.json +++ b/apps/files_external/l10n/nb_NO.json @@ -41,6 +41,7 @@ "Username as share" : "Brukernavn som share", "URL" : "URL", "Secure https://" : "Sikker https://", + "Public key" : "Offentlig nøkkel", "Access granted" : "Tilgang innvilget", "Error configuring Dropbox storage" : "Feil ved konfigurering av Dropbox-lagring", "Grant access" : "Gi tilgang", @@ -50,11 +51,14 @@ "All users. Type to select user or group." : "Alle brukere. Tast for å velge bruker eller gruppe.", "(group)" : "(gruppe)", "Saved" : "Lagret", + "Generate keys" : "Generer nøkler", + "Error generating key pair" : "Feil ved nøkkelgenerering", "<b>Note:</b> " : "<b>Merk:</b> ", "and" : "og", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> Støtte for cURL i PHP er ikke aktivert eller installert. Oppkobling av %s er ikke mulig. Be systemadministratoren om å installere det.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> FTP-støtte i PHP er ikke slått på eller installert. Kan ikke koble opp %s. Ta kontakt med systemadministratoren for å installere det.", "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> \"%s\" er ikke installert. Oppkobling av %s er ikke mulig. Spør systemadministratoren om å installere det.", + "No external storage configured" : "Eksternt lager er ikke konfigurert", "You can configure external storages in the personal settings" : "Du kan konfigurerer eksterne lagre i personlige innstillinger", "Name" : "Navn", "Storage type" : "Lagringstype", diff --git a/apps/files_external/l10n/nl.js b/apps/files_external/l10n/nl.js index e50b5eb5a39..ce27e982abf 100644 --- a/apps/files_external/l10n/nl.js +++ b/apps/files_external/l10n/nl.js @@ -43,6 +43,10 @@ OC.L10N.register( "Username as share" : "Gebruikersnaam als share", "URL" : "URL", "Secure https://" : "Secure https://", + "Public key" : "Publieke sleutel", + "Storage with id \"%i\" not found" : "Opslag met id \"%i\" niet gevonden", + "Invalid mount point" : "Ongeldig aankoppelpunt", + "Invalid storage backend \"%s\"" : "Ongeldig opslagsysteem \"%s\"", "Access granted" : "Toegang toegestaan", "Error configuring Dropbox storage" : "Fout tijdens het configureren van Dropbox opslag", "Grant access" : "Sta toegang toe", @@ -52,6 +56,8 @@ OC.L10N.register( "All users. Type to select user or group." : "Alle gebruikers. Tikken om een gebruiker of groep te selecteren.", "(group)" : "(groep)", "Saved" : "Bewaard", + "Generate keys" : "Genereer sleutels", + "Error generating key pair" : "Fout bij genereren sleutelpaar", "<b>Note:</b> " : "<b>Let op:</b> ", "and" : "en", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> Curl ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw systeembeheerder dit te installeren.", diff --git a/apps/files_external/l10n/nl.json b/apps/files_external/l10n/nl.json index d6851215c59..cfe375fdd57 100644 --- a/apps/files_external/l10n/nl.json +++ b/apps/files_external/l10n/nl.json @@ -41,6 +41,10 @@ "Username as share" : "Gebruikersnaam als share", "URL" : "URL", "Secure https://" : "Secure https://", + "Public key" : "Publieke sleutel", + "Storage with id \"%i\" not found" : "Opslag met id \"%i\" niet gevonden", + "Invalid mount point" : "Ongeldig aankoppelpunt", + "Invalid storage backend \"%s\"" : "Ongeldig opslagsysteem \"%s\"", "Access granted" : "Toegang toegestaan", "Error configuring Dropbox storage" : "Fout tijdens het configureren van Dropbox opslag", "Grant access" : "Sta toegang toe", @@ -50,6 +54,8 @@ "All users. Type to select user or group." : "Alle gebruikers. Tikken om een gebruiker of groep te selecteren.", "(group)" : "(groep)", "Saved" : "Bewaard", + "Generate keys" : "Genereer sleutels", + "Error generating key pair" : "Fout bij genereren sleutelpaar", "<b>Note:</b> " : "<b>Let op:</b> ", "and" : "en", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> Curl ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw systeembeheerder dit te installeren.", diff --git a/apps/files_external/l10n/pl.js b/apps/files_external/l10n/pl.js index d1e330912cc..6aa5491fd8f 100644 --- a/apps/files_external/l10n/pl.js +++ b/apps/files_external/l10n/pl.js @@ -43,6 +43,7 @@ OC.L10N.register( "Username as share" : "Użytkownik jako zasób", "URL" : "URL", "Secure https://" : "Bezpieczny https://", + "Public key" : "Klucz publiczny", "Access granted" : "Dostęp do", "Error configuring Dropbox storage" : "Wystąpił błąd podczas konfigurowania zasobu Dropbox", "Grant access" : "Udziel dostępu", @@ -52,11 +53,14 @@ OC.L10N.register( "All users. Type to select user or group." : "Wszyscy użytkownicy. Zacznij pisać, aby wybrać użytkownika lub grupę.", "(group)" : "(grupa)", "Saved" : "Zapisano", + "Generate keys" : "Wygeneruj klucze", + "Error generating key pair" : "Błąd podczas generowania pary kluczy", "<b>Note:</b> " : "<b>Uwaga:</b> ", "and" : "i", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Uwaga:</b> Wsparcie dla cURL w PHP nie zostało włączone lub zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Uwaga:</b> Wsparcie dla FTP w PHP nie zostało włączone lub zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.", "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Uwaga:</b> \"%s\" nie jest zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.", + "No external storage configured" : "Nie skonfigurowano żadnego zewnętrznego nośnika", "You can configure external storages in the personal settings" : "Możesz skonfigurować zewnętrzne zasoby w ustawieniach personalnych", "Name" : "Nazwa", "Storage type" : "Typ magazynu", diff --git a/apps/files_external/l10n/pl.json b/apps/files_external/l10n/pl.json index 41800919db8..8d3c5502a63 100644 --- a/apps/files_external/l10n/pl.json +++ b/apps/files_external/l10n/pl.json @@ -41,6 +41,7 @@ "Username as share" : "Użytkownik jako zasób", "URL" : "URL", "Secure https://" : "Bezpieczny https://", + "Public key" : "Klucz publiczny", "Access granted" : "Dostęp do", "Error configuring Dropbox storage" : "Wystąpił błąd podczas konfigurowania zasobu Dropbox", "Grant access" : "Udziel dostępu", @@ -50,11 +51,14 @@ "All users. Type to select user or group." : "Wszyscy użytkownicy. Zacznij pisać, aby wybrać użytkownika lub grupę.", "(group)" : "(grupa)", "Saved" : "Zapisano", + "Generate keys" : "Wygeneruj klucze", + "Error generating key pair" : "Błąd podczas generowania pary kluczy", "<b>Note:</b> " : "<b>Uwaga:</b> ", "and" : "i", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Uwaga:</b> Wsparcie dla cURL w PHP nie zostało włączone lub zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Uwaga:</b> Wsparcie dla FTP w PHP nie zostało włączone lub zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.", "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Uwaga:</b> \"%s\" nie jest zainstalowane. Zamontowanie %s nie jest możliwe. Proszę poproś Twojego administratora o zainstalowanie go.", + "No external storage configured" : "Nie skonfigurowano żadnego zewnętrznego nośnika", "You can configure external storages in the personal settings" : "Możesz skonfigurować zewnętrzne zasoby w ustawieniach personalnych", "Name" : "Nazwa", "Storage type" : "Typ magazynu", diff --git a/apps/files_external/l10n/pt_BR.js b/apps/files_external/l10n/pt_BR.js index 6a46c8778d6..d4d7e582849 100644 --- a/apps/files_external/l10n/pt_BR.js +++ b/apps/files_external/l10n/pt_BR.js @@ -43,6 +43,7 @@ OC.L10N.register( "Username as share" : "Nome de usuário como compartilhado", "URL" : "URL", "Secure https://" : "https:// segura", + "Public key" : "Chave pública", "Access granted" : "Acesso concedido", "Error configuring Dropbox storage" : "Erro ao configurar armazenamento do Dropbox", "Grant access" : "Permitir acesso", @@ -52,6 +53,8 @@ OC.L10N.register( "All users. Type to select user or group." : "Todos os usuários. Digite para selecionar usuário ou grupo.", "(group)" : "(grupo)", "Saved" : "Salvo", + "Generate keys" : "Gerar chaves", + "Error generating key pair" : "Erro ao gerar um par de chaves", "<b>Note:</b> " : "<b>Nota:</b>", "and" : "e", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte cURL do PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.", diff --git a/apps/files_external/l10n/pt_BR.json b/apps/files_external/l10n/pt_BR.json index 52b1827e1e7..006314eb034 100644 --- a/apps/files_external/l10n/pt_BR.json +++ b/apps/files_external/l10n/pt_BR.json @@ -41,6 +41,7 @@ "Username as share" : "Nome de usuário como compartilhado", "URL" : "URL", "Secure https://" : "https:// segura", + "Public key" : "Chave pública", "Access granted" : "Acesso concedido", "Error configuring Dropbox storage" : "Erro ao configurar armazenamento do Dropbox", "Grant access" : "Permitir acesso", @@ -50,6 +51,8 @@ "All users. Type to select user or group." : "Todos os usuários. Digite para selecionar usuário ou grupo.", "(group)" : "(grupo)", "Saved" : "Salvo", + "Generate keys" : "Gerar chaves", + "Error generating key pair" : "Erro ao gerar um par de chaves", "<b>Note:</b> " : "<b>Nota:</b>", "and" : "e", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte cURL do PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.", diff --git a/apps/files_external/l10n/pt_PT.js b/apps/files_external/l10n/pt_PT.js index 05c41ad4c7e..ba0ce4f417f 100644 --- a/apps/files_external/l10n/pt_PT.js +++ b/apps/files_external/l10n/pt_PT.js @@ -43,6 +43,10 @@ OC.L10N.register( "Username as share" : "Utilizar nome de utilizador como partilha", "URL" : "URL", "Secure https://" : "https:// Seguro", + "Public key" : "Chave pública", + "Storage with id \"%i\" not found" : "Armazenamento com ID \"%i\" não encontrado", + "Invalid mount point" : "Ponto de montagem inválido", + "Invalid storage backend \"%s\"" : "Backend de armazenamento inválido \"%s\"", "Access granted" : "Acesso autorizado", "Error configuring Dropbox storage" : "Erro ao configurar o armazenamento do Dropbox", "Grant access" : "Conceder acesso", @@ -52,6 +56,8 @@ OC.L10N.register( "All users. Type to select user or group." : "Todos os utilizadores. Digite para selecionar o utilizador ou grupo.", "(group)" : "(grupo)", "Saved" : "Guardado", + "Generate keys" : "Gerar chaves", + "Error generating key pair" : "Erro ao gerar chave par", "<b>Note:</b> " : "<b>Nota:</b> ", "and" : "e", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte cURL no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.", diff --git a/apps/files_external/l10n/pt_PT.json b/apps/files_external/l10n/pt_PT.json index 12ea0ce4655..c4823dea4b6 100644 --- a/apps/files_external/l10n/pt_PT.json +++ b/apps/files_external/l10n/pt_PT.json @@ -41,6 +41,10 @@ "Username as share" : "Utilizar nome de utilizador como partilha", "URL" : "URL", "Secure https://" : "https:// Seguro", + "Public key" : "Chave pública", + "Storage with id \"%i\" not found" : "Armazenamento com ID \"%i\" não encontrado", + "Invalid mount point" : "Ponto de montagem inválido", + "Invalid storage backend \"%s\"" : "Backend de armazenamento inválido \"%s\"", "Access granted" : "Acesso autorizado", "Error configuring Dropbox storage" : "Erro ao configurar o armazenamento do Dropbox", "Grant access" : "Conceder acesso", @@ -50,6 +54,8 @@ "All users. Type to select user or group." : "Todos os utilizadores. Digite para selecionar o utilizador ou grupo.", "(group)" : "(grupo)", "Saved" : "Guardado", + "Generate keys" : "Gerar chaves", + "Error generating key pair" : "Erro ao gerar chave par", "<b>Note:</b> " : "<b>Nota:</b> ", "and" : "e", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte cURL no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.", diff --git a/apps/files_external/l10n/ru.js b/apps/files_external/l10n/ru.js index 0d35cb81dc7..483aa71e708 100644 --- a/apps/files_external/l10n/ru.js +++ b/apps/files_external/l10n/ru.js @@ -43,6 +43,7 @@ OC.L10N.register( "Username as share" : "Имя пользователя в качестве имени общего ресурса", "URL" : "Ссылка", "Secure https://" : "Безопасный https://", + "Public key" : "Открытый ключ", "Access granted" : "Доступ предоставлен", "Error configuring Dropbox storage" : "Ошибка при настройке хранилища Dropbox", "Grant access" : "Предоставить доступ", @@ -52,6 +53,8 @@ OC.L10N.register( "All users. Type to select user or group." : "Все пользователи. Введите имя пользователя или группы.", "(group)" : "(группа)", "Saved" : "Сохранено", + "Generate keys" : "Создать ключи", + "Error generating key pair" : "Ошибка создания ключевой пары", "<b>Note:</b> " : "<b>Примечание:</b> ", "and" : "и", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка cURL в PHP не включена или не установлена. Монтирование %s невозможно. Обратитесь к вашему системному администратору.", diff --git a/apps/files_external/l10n/ru.json b/apps/files_external/l10n/ru.json index 537a178853a..75705093a6e 100644 --- a/apps/files_external/l10n/ru.json +++ b/apps/files_external/l10n/ru.json @@ -41,6 +41,7 @@ "Username as share" : "Имя пользователя в качестве имени общего ресурса", "URL" : "Ссылка", "Secure https://" : "Безопасный https://", + "Public key" : "Открытый ключ", "Access granted" : "Доступ предоставлен", "Error configuring Dropbox storage" : "Ошибка при настройке хранилища Dropbox", "Grant access" : "Предоставить доступ", @@ -50,6 +51,8 @@ "All users. Type to select user or group." : "Все пользователи. Введите имя пользователя или группы.", "(group)" : "(группа)", "Saved" : "Сохранено", + "Generate keys" : "Создать ключи", + "Error generating key pair" : "Ошибка создания ключевой пары", "<b>Note:</b> " : "<b>Примечание:</b> ", "and" : "и", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка cURL в PHP не включена или не установлена. Монтирование %s невозможно. Обратитесь к вашему системному администратору.", diff --git a/apps/files_external/l10n/sk_SK.js b/apps/files_external/l10n/sk_SK.js index e48c31008b7..e87d5d2a01c 100644 --- a/apps/files_external/l10n/sk_SK.js +++ b/apps/files_external/l10n/sk_SK.js @@ -43,6 +43,7 @@ OC.L10N.register( "Username as share" : "Používateľské meno ako zdieľaný priečinok", "URL" : "URL", "Secure https://" : "Zabezpečené https://", + "Public key" : "Verejný kľúč", "Access granted" : "Prístup povolený", "Error configuring Dropbox storage" : "Chyba pri konfigurácii úložiska Dropbox", "Grant access" : "Povoliť prístup", @@ -52,6 +53,8 @@ OC.L10N.register( "All users. Type to select user or group." : "Všetci používatelia. Začnite písať pre výber používateľa alebo skupinu.", "(group)" : "(skupina)", "Saved" : "Uložené", + "Generate keys" : "Vytvoriť kľúče", + "Error generating key pair" : "Chyba pri vytváraní dvojice kľúčov", "<b>Note:</b> " : "<b>Poznámka:</b> ", "and" : "a", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> cURL podpora v PHP nie je zapnutá alebo nainštalovaná. Pripojenie %s nie je možné. Požiadajte správcu systému, aby ju nainštaloval.", diff --git a/apps/files_external/l10n/sk_SK.json b/apps/files_external/l10n/sk_SK.json index e0d6c41b066..dc562373323 100644 --- a/apps/files_external/l10n/sk_SK.json +++ b/apps/files_external/l10n/sk_SK.json @@ -41,6 +41,7 @@ "Username as share" : "Používateľské meno ako zdieľaný priečinok", "URL" : "URL", "Secure https://" : "Zabezpečené https://", + "Public key" : "Verejný kľúč", "Access granted" : "Prístup povolený", "Error configuring Dropbox storage" : "Chyba pri konfigurácii úložiska Dropbox", "Grant access" : "Povoliť prístup", @@ -50,6 +51,8 @@ "All users. Type to select user or group." : "Všetci používatelia. Začnite písať pre výber používateľa alebo skupinu.", "(group)" : "(skupina)", "Saved" : "Uložené", + "Generate keys" : "Vytvoriť kľúče", + "Error generating key pair" : "Chyba pri vytváraní dvojice kľúčov", "<b>Note:</b> " : "<b>Poznámka:</b> ", "and" : "a", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> cURL podpora v PHP nie je zapnutá alebo nainštalovaná. Pripojenie %s nie je možné. Požiadajte správcu systému, aby ju nainštaloval.", diff --git a/apps/files_external/l10n/sl.js b/apps/files_external/l10n/sl.js index 1d81b05460d..3e1cd7cb6b6 100644 --- a/apps/files_external/l10n/sl.js +++ b/apps/files_external/l10n/sl.js @@ -43,6 +43,7 @@ OC.L10N.register( "Username as share" : "Uporabniško ime za souporabo", "URL" : "Naslov URL", "Secure https://" : "Varni način https://", + "Public key" : "Javni ključ", "Access granted" : "Dostop je odobren", "Error configuring Dropbox storage" : "Napaka nastavljanja shrambe Dropbox", "Grant access" : "Odobri dostop", @@ -52,11 +53,14 @@ OC.L10N.register( "All users. Type to select user or group." : "Vsi uporabniki. Skupino ali uporabnika je mogoče tudi izbrati.", "(group)" : "(skupina)", "Saved" : "Shranjeno", + "Generate keys" : "Ustvari ključe", + "Error generating key pair" : "Prišlo je do napake med ustvarjanjem para ključev", "<b>Note:</b> " : "<b>Opomba:</b> ", "and" : "in", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za naslove cURL v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za protokol FTP v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.", "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Program \"%s\" ni nameščen. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.", + "No external storage configured" : "Ni določene zunanje shrambe", "You can configure external storages in the personal settings" : "Zunanjo shrambo je mogoče določiti med osebnimi nastavitvami", "Name" : "Ime", "Storage type" : "Vrsta shrambe", diff --git a/apps/files_external/l10n/sl.json b/apps/files_external/l10n/sl.json index fb5bfc12877..1f939a40019 100644 --- a/apps/files_external/l10n/sl.json +++ b/apps/files_external/l10n/sl.json @@ -41,6 +41,7 @@ "Username as share" : "Uporabniško ime za souporabo", "URL" : "Naslov URL", "Secure https://" : "Varni način https://", + "Public key" : "Javni ključ", "Access granted" : "Dostop je odobren", "Error configuring Dropbox storage" : "Napaka nastavljanja shrambe Dropbox", "Grant access" : "Odobri dostop", @@ -50,11 +51,14 @@ "All users. Type to select user or group." : "Vsi uporabniki. Skupino ali uporabnika je mogoče tudi izbrati.", "(group)" : "(skupina)", "Saved" : "Shranjeno", + "Generate keys" : "Ustvari ključe", + "Error generating key pair" : "Prišlo je do napake med ustvarjanjem para ključev", "<b>Note:</b> " : "<b>Opomba:</b> ", "and" : "in", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za naslove cURL v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za protokol FTP v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.", "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Program \"%s\" ni nameščen. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.", + "No external storage configured" : "Ni določene zunanje shrambe", "You can configure external storages in the personal settings" : "Zunanjo shrambo je mogoče določiti med osebnimi nastavitvami", "Name" : "Ime", "Storage type" : "Vrsta shrambe", diff --git a/apps/files_external/l10n/sr.js b/apps/files_external/l10n/sr.js index 790bd598d09..79a43a20cf6 100644 --- a/apps/files_external/l10n/sr.js +++ b/apps/files_external/l10n/sr.js @@ -1,15 +1,62 @@ OC.L10N.register( "files_external", { + "External storage" : "Спољашње складиште", + "Local" : "локална", "Location" : "Локација", + "Amazon S3" : "Амазон С3", + "Key" : "Кључ", + "Secret" : "Тајна", + "Amazon S3 and compliant" : "Амазон С3 и одговарајући", + "Access Key" : "Приступни кључ", + "Secret Key" : "Тајни кључ", + "Hostname" : "Име домаћина", "Port" : "Порт", "Region" : "Регија", + "Enable SSL" : "Омогући ССЛ", + "App key" : "Кључ апликације", + "App secret" : "Тајна апликације", "Host" : "Домаћин", "Username" : "Корисничко име", "Password" : "Лозинка", + "Remote subfolder" : "Удаљена потфасцикла", + "Secure ftps://" : "Сигурни ftps://", + "Client ID" : "ИД клијента", + "Client secret" : "Тајна клијента", + "Timeout of HTTP requests in seconds" : "Време истека ХТТП захтева у секундама", "Share" : "Дели", + "SMB / CIFS using OC login" : "СМБ/ЦИФС користећи Оунклауд пријаву", + "URL" : "УРЛ", + "Secure https://" : "Сигурни https://", + "Public key" : "Јавни кључ", + "Access granted" : "Приступ одобрен", + "Error configuring Dropbox storage" : "Грешка при подешавању Дропбокс складишта", + "Grant access" : "Одобри приступ", + "Error configuring Google Drive storage" : "Грешка при подешавању Гугл диск складишта", "Personal" : "Лично", - "Name" : "Име", - "Delete" : "Обриши" + "System" : "Систем", + "All users. Type to select user or group." : "Сви корисници. Куцајте за избор корисника или групе.", + "(group)" : "(група)", + "Saved" : "Сачувано", + "Generate keys" : "Генериши кључеве", + "Error generating key pair" : "Грешка при генерисању пара кључева", + "<b>Note:</b> " : "<b>Напомена:</b> ", + "and" : "и", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Напомена:</b> cURL подршка за ПХП није омогућена или инсталирана. Монтирање %s није могуће. Затражите од вашег администратора система да је инсталира.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Напомена:</b> ФТП подршка за ПХП није омогућена или инсталирана. Монтирање %s није могуће. Затражите од вашег администратора система да је инсталира.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Напомена:</b> „%s“ није инсталирана. Монтирање %s није могуће. Затражите од вашег администратора система да је инсталира.", + "No external storage configured" : "Нема подешеног спољашњег складишта", + "You can configure external storages in the personal settings" : "Спољашња складишта можете подесити у личним поставкама", + "Name" : "Назив", + "Storage type" : "Тип складишта", + "Scope" : "Распон", + "External Storage" : "Спољашње складиште", + "Folder name" : "Назив фасцикле", + "Configuration" : "Подешавање", + "Available for" : "Доступно за", + "Add storage" : "Додај складиште", + "Delete" : "Обриши", + "Enable User External Storage" : "Укључи корисничко спољашње складиште", + "Allow users to mount the following external storage" : "Дозволи корисницима да монтирају следећа спољашња складишта" }, "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_external/l10n/sr.json b/apps/files_external/l10n/sr.json index fac0889c3dc..1e44082a737 100644 --- a/apps/files_external/l10n/sr.json +++ b/apps/files_external/l10n/sr.json @@ -1,13 +1,60 @@ { "translations": { + "External storage" : "Спољашње складиште", + "Local" : "локална", "Location" : "Локација", + "Amazon S3" : "Амазон С3", + "Key" : "Кључ", + "Secret" : "Тајна", + "Amazon S3 and compliant" : "Амазон С3 и одговарајући", + "Access Key" : "Приступни кључ", + "Secret Key" : "Тајни кључ", + "Hostname" : "Име домаћина", "Port" : "Порт", "Region" : "Регија", + "Enable SSL" : "Омогући ССЛ", + "App key" : "Кључ апликације", + "App secret" : "Тајна апликације", "Host" : "Домаћин", "Username" : "Корисничко име", "Password" : "Лозинка", + "Remote subfolder" : "Удаљена потфасцикла", + "Secure ftps://" : "Сигурни ftps://", + "Client ID" : "ИД клијента", + "Client secret" : "Тајна клијента", + "Timeout of HTTP requests in seconds" : "Време истека ХТТП захтева у секундама", "Share" : "Дели", + "SMB / CIFS using OC login" : "СМБ/ЦИФС користећи Оунклауд пријаву", + "URL" : "УРЛ", + "Secure https://" : "Сигурни https://", + "Public key" : "Јавни кључ", + "Access granted" : "Приступ одобрен", + "Error configuring Dropbox storage" : "Грешка при подешавању Дропбокс складишта", + "Grant access" : "Одобри приступ", + "Error configuring Google Drive storage" : "Грешка при подешавању Гугл диск складишта", "Personal" : "Лично", - "Name" : "Име", - "Delete" : "Обриши" + "System" : "Систем", + "All users. Type to select user or group." : "Сви корисници. Куцајте за избор корисника или групе.", + "(group)" : "(група)", + "Saved" : "Сачувано", + "Generate keys" : "Генериши кључеве", + "Error generating key pair" : "Грешка при генерисању пара кључева", + "<b>Note:</b> " : "<b>Напомена:</b> ", + "and" : "и", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Напомена:</b> cURL подршка за ПХП није омогућена или инсталирана. Монтирање %s није могуће. Затражите од вашег администратора система да је инсталира.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Напомена:</b> ФТП подршка за ПХП није омогућена или инсталирана. Монтирање %s није могуће. Затражите од вашег администратора система да је инсталира.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Напомена:</b> „%s“ није инсталирана. Монтирање %s није могуће. Затражите од вашег администратора система да је инсталира.", + "No external storage configured" : "Нема подешеног спољашњег складишта", + "You can configure external storages in the personal settings" : "Спољашња складишта можете подесити у личним поставкама", + "Name" : "Назив", + "Storage type" : "Тип складишта", + "Scope" : "Распон", + "External Storage" : "Спољашње складиште", + "Folder name" : "Назив фасцикле", + "Configuration" : "Подешавање", + "Available for" : "Доступно за", + "Add storage" : "Додај складиште", + "Delete" : "Обриши", + "Enable User External Storage" : "Укључи корисничко спољашње складиште", + "Allow users to mount the following external storage" : "Дозволи корисницима да монтирају следећа спољашња складишта" },"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_external/l10n/sv.js b/apps/files_external/l10n/sv.js index a4cbdd5b7a0..ea1dfe20c78 100644 --- a/apps/files_external/l10n/sv.js +++ b/apps/files_external/l10n/sv.js @@ -43,6 +43,7 @@ OC.L10N.register( "Username as share" : "Användarnamn till utdelning", "URL" : "URL", "Secure https://" : "Säker https://", + "Public key" : "Publik nyckel", "Access granted" : "Åtkomst beviljad", "Error configuring Dropbox storage" : "Fel vid konfigurering av Dropbox", "Grant access" : "Bevilja åtkomst", diff --git a/apps/files_external/l10n/sv.json b/apps/files_external/l10n/sv.json index c2bc9e07305..42cd0251a3e 100644 --- a/apps/files_external/l10n/sv.json +++ b/apps/files_external/l10n/sv.json @@ -41,6 +41,7 @@ "Username as share" : "Användarnamn till utdelning", "URL" : "URL", "Secure https://" : "Säker https://", + "Public key" : "Publik nyckel", "Access granted" : "Åtkomst beviljad", "Error configuring Dropbox storage" : "Fel vid konfigurering av Dropbox", "Grant access" : "Bevilja åtkomst", diff --git a/apps/files_external/l10n/tr.js b/apps/files_external/l10n/tr.js index 012e0651f8a..d081cea91ee 100644 --- a/apps/files_external/l10n/tr.js +++ b/apps/files_external/l10n/tr.js @@ -43,6 +43,10 @@ OC.L10N.register( "Username as share" : "Paylaşım olarak kullanıcı adı", "URL" : "URL", "Secure https://" : "Güvenli https://", + "Public key" : "Ortak anahtar", + "Storage with id \"%i\" not found" : "\"%i\" kimliği ile bir depolama bulunamadı", + "Invalid mount point" : "Geçersiz bağlama noktası", + "Invalid storage backend \"%s\"" : "Geçersiz depolama arka ucu \"%s\"", "Access granted" : "Giriş kabul edildi", "Error configuring Dropbox storage" : "Dropbox depo yapılandırma hatası", "Grant access" : "Erişimi sağla", @@ -52,6 +56,8 @@ OC.L10N.register( "All users. Type to select user or group." : "Tüm kullanıcılar. Kullanıcı veya grup seçmek için yazın.", "(group)" : "(grup)", "Saved" : "Kaydedildi", + "Generate keys" : "Anahtarlar üret", + "Error generating key pair" : "Anahtar çifti üretirken hata", "<b>Note:</b> " : "<b>Not:</b> ", "and" : "ve", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de cURL desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.", diff --git a/apps/files_external/l10n/tr.json b/apps/files_external/l10n/tr.json index 68aed802f7e..1684c68c80c 100644 --- a/apps/files_external/l10n/tr.json +++ b/apps/files_external/l10n/tr.json @@ -41,6 +41,10 @@ "Username as share" : "Paylaşım olarak kullanıcı adı", "URL" : "URL", "Secure https://" : "Güvenli https://", + "Public key" : "Ortak anahtar", + "Storage with id \"%i\" not found" : "\"%i\" kimliği ile bir depolama bulunamadı", + "Invalid mount point" : "Geçersiz bağlama noktası", + "Invalid storage backend \"%s\"" : "Geçersiz depolama arka ucu \"%s\"", "Access granted" : "Giriş kabul edildi", "Error configuring Dropbox storage" : "Dropbox depo yapılandırma hatası", "Grant access" : "Erişimi sağla", @@ -50,6 +54,8 @@ "All users. Type to select user or group." : "Tüm kullanıcılar. Kullanıcı veya grup seçmek için yazın.", "(group)" : "(grup)", "Saved" : "Kaydedildi", + "Generate keys" : "Anahtarlar üret", + "Error generating key pair" : "Anahtar çifti üretirken hata", "<b>Note:</b> " : "<b>Not:</b> ", "and" : "ve", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de cURL desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.", diff --git a/apps/files_external/l10n/uk.js b/apps/files_external/l10n/uk.js index 2b1cf3e0ee3..bb42457452d 100644 --- a/apps/files_external/l10n/uk.js +++ b/apps/files_external/l10n/uk.js @@ -43,6 +43,10 @@ OC.L10N.register( "Username as share" : "Ім'я для відкритого доступу", "URL" : "URL", "Secure https://" : "Захищений https://", + "Public key" : "Відкритий ключ", + "Storage with id \"%i\" not found" : "Сховище з id \"%i\" не знайдено", + "Invalid mount point" : "Невірна точка монтування", + "Invalid storage backend \"%s\"" : "Невірне сховище \"%s\"", "Access granted" : "Доступ дозволено", "Error configuring Dropbox storage" : "Помилка при налаштуванні сховища Dropbox", "Grant access" : "Дозволити доступ", @@ -52,6 +56,8 @@ OC.L10N.register( "All users. Type to select user or group." : "Всі користувачі. Введіть ім'я користувача або групи.", "(group)" : "(група)", "Saved" : "Збереженно", + "Generate keys" : "Створити ключі", + "Error generating key pair" : "Помилка створення ключової пари", "<b>Note:</b> " : "<b>Примітка:</b>", "and" : "і", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примітка:</b> Підтримку cURL в PHP не ввімкнено чи не встановлена. Під'єднатися до %s неможливо. Зверніться до системного адміністратора.", diff --git a/apps/files_external/l10n/uk.json b/apps/files_external/l10n/uk.json index 55469685ac9..00c6b04088b 100644 --- a/apps/files_external/l10n/uk.json +++ b/apps/files_external/l10n/uk.json @@ -41,6 +41,10 @@ "Username as share" : "Ім'я для відкритого доступу", "URL" : "URL", "Secure https://" : "Захищений https://", + "Public key" : "Відкритий ключ", + "Storage with id \"%i\" not found" : "Сховище з id \"%i\" не знайдено", + "Invalid mount point" : "Невірна точка монтування", + "Invalid storage backend \"%s\"" : "Невірне сховище \"%s\"", "Access granted" : "Доступ дозволено", "Error configuring Dropbox storage" : "Помилка при налаштуванні сховища Dropbox", "Grant access" : "Дозволити доступ", @@ -50,6 +54,8 @@ "All users. Type to select user or group." : "Всі користувачі. Введіть ім'я користувача або групи.", "(group)" : "(група)", "Saved" : "Збереженно", + "Generate keys" : "Створити ключі", + "Error generating key pair" : "Помилка створення ключової пари", "<b>Note:</b> " : "<b>Примітка:</b>", "and" : "і", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примітка:</b> Підтримку cURL в PHP не ввімкнено чи не встановлена. Під'єднатися до %s неможливо. Зверніться до системного адміністратора.", diff --git a/apps/files_external/lib/amazons3.php b/apps/files_external/lib/amazons3.php index 4d94e3561f8..73345d30893 100644 --- a/apps/files_external/lib/amazons3.php +++ b/apps/files_external/lib/amazons3.php @@ -627,11 +627,7 @@ class AmazonS3 extends \OC\Files\Storage\Common { * check if curl is installed */ public static function checkDependencies() { - if (function_exists('curl_init')) { - return true; - } else { - return array('curl'); - } + return true; } } diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index ddfab439879..85a93a779ae 100644 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -32,6 +32,10 @@ class OC_Mount_Config { const MOUNT_TYPE_USER = 'user'; const MOUNT_TYPE_PERSONAL = 'personal'; + // getBackendStatus return types + const STATUS_SUCCESS = 0; + const STATUS_ERROR = 1; + // whether to skip backend test (for unit tests, as this static class is not mockable) public static $skipTest = false; @@ -143,15 +147,9 @@ class OC_Mount_Config { $mountPoints = array(); $datadir = \OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data"); - $mount_file = \OC_Config::getValue("mount_file", $datadir . "/mount.json"); $backends = self::getBackends(); - //move config file to it's new position - if (is_file(\OC::$SERVERROOT . '/config/mount.json')) { - rename(\OC::$SERVERROOT . '/config/mount.json', $mount_file); - } - // Load system mount points $mountConfig = self::readData(); @@ -354,9 +352,17 @@ class OC_Mount_Config { 'backend' => $backends[$mount['class']]['backend'], 'priority' => $mount['priority'], 'options' => $mount['options'], - 'applicable' => array('groups' => array($group), 'users' => array()), - 'status' => self::getBackendStatus($mount['class'], $mount['options'], false) + 'applicable' => array('groups' => array($group), 'users' => array()) ); + if (isset($mount['id'])) { + $config['id'] = (int)$mount['id']; + } + if (isset($mount['storage_id'])) { + $config['storage_id'] = (int)$mount['storage_id']; + } + if (isset($mount['mountOptions'])) { + $config['mountOptions'] = $mount['mountOptions']; + } $hash = self::makeConfigHash($config); // If an existing config exists (with same class, mountpoint and options) if (isset($system[$hash])) { @@ -388,9 +394,17 @@ class OC_Mount_Config { 'backend' => $backends[$mount['class']]['backend'], 'priority' => $mount['priority'], 'options' => $mount['options'], - 'applicable' => array('groups' => array(), 'users' => array($user)), - 'status' => self::getBackendStatus($mount['class'], $mount['options'], false) + 'applicable' => array('groups' => array(), 'users' => array($user)) ); + if (isset($mount['id'])) { + $config['id'] = (int)$mount['id']; + } + if (isset($mount['storage_id'])) { + $config['storage_id'] = (int)$mount['storage_id']; + } + if (isset($mount['mountOptions'])) { + $config['mountOptions'] = $mount['mountOptions']; + } $hash = self::makeConfigHash($config); // If an existing config exists (with same class, mountpoint and options) if (isset($system[$hash])) { @@ -424,14 +438,23 @@ class OC_Mount_Config { $mount['class'] = '\OC\Files\Storage\\' . substr($mount['class'], 15); } $mount['options'] = self::decryptPasswords($mount['options']); - $personal[] = array( + $config = array( 'class' => $mount['class'], // Remove '/uid/files/' from mount point 'mountpoint' => substr($mountPoint, strlen($uid) + 8), 'backend' => $backEnds[$mount['class']]['backend'], - 'options' => $mount['options'], - 'status' => self::getBackendStatus($mount['class'], $mount['options'], true) + 'options' => $mount['options'] ); + if (isset($mount['id'])) { + $config['id'] = (int)$mount['id']; + } + if (isset($mount['storage_id'])) { + $config['storage_id'] = (int)$mount['storage_id']; + } + if (isset($mount['mountOptions'])) { + $config['mountOptions'] = $mount['mountOptions']; + } + $personal[] = $config; } } return $personal; @@ -442,11 +465,11 @@ class OC_Mount_Config { * * @param string $class backend class name * @param array $options backend configuration options - * @return bool true if the connection succeeded, false otherwise + * @return int see self::STATUS_* */ - private static function getBackendStatus($class, $options, $isPersonal) { + public static function getBackendStatus($class, $options, $isPersonal) { if (self::$skipTest) { - return true; + return self::STATUS_SUCCESS; } foreach ($options as &$option) { $option = self::setUserVars(OCP\User::getUser(), $option); @@ -454,13 +477,14 @@ class OC_Mount_Config { if (class_exists($class)) { try { $storage = new $class($options); - return $storage->test($isPersonal); + if ($storage->test($isPersonal)) { + return self::STATUS_SUCCESS; + } } catch (Exception $exception) { \OCP\Util::logException('files_external', $exception); - return false; } } - return false; + return self::STATUS_ERROR; } /** @@ -474,6 +498,8 @@ class OC_Mount_Config { * @param bool $isPersonal Personal or system mount point i.e. is this being called from the personal or admin page * @param int|null $priority Mount point priority, null for default * @return boolean + * + * @deprecated use StoragesService#addStorage() instead */ public static function addMountPoint($mountPoint, $class, @@ -537,7 +563,7 @@ class OC_Mount_Config { self::writeData($isPersonal ? OCP\User::getUser() : null, $mountPoints); $result = self::getBackendStatus($class, $classOptions, $isPersonal); - if ($result && $isNew) { + if ($result === self::STATUS_SUCCESS && $isNew) { \OC_Hook::emit( \OC\Files\Filesystem::CLASSNAME, \OC\Files\Filesystem::signal_create_mount, @@ -558,6 +584,8 @@ class OC_Mount_Config { * @param string $applicable User or group to remove mount from * @param bool $isPersonal Personal or system mount point * @return bool + * + * @deprecated use StoragesService#removeStorage() instead */ public static function removeMountPoint($mountPoint, $mountType, $applicable, $isPersonal = false) { // Verify that the mount point applies for the current user @@ -622,13 +650,10 @@ class OC_Mount_Config { * @param string|null $user If not null, personal for $user, otherwise system * @return array */ - private static function readData($user = null) { - $parser = new \OC\ArrayParser(); + public static function readData($user = null) { if (isset($user)) { - $phpFile = OC_User::getHome($user) . '/mount.php'; $jsonFile = OC_User::getHome($user) . '/mount.json'; } else { - $phpFile = OC::$SERVERROOT . '/config/mount.php'; $datadir = \OC_Config::getValue('datadirectory', \OC::$SERVERROOT . '/data/'); $jsonFile = \OC_Config::getValue('mount_file', $datadir . '/mount.json'); } @@ -637,11 +662,6 @@ class OC_Mount_Config { if (is_array($mountPoints)) { return $mountPoints; } - } elseif (is_file($phpFile)) { - $mountPoints = $parser->parsePHP(file_get_contents($phpFile)); - if (is_array($mountPoints)) { - return $mountPoints; - } } return array(); } @@ -652,7 +672,7 @@ class OC_Mount_Config { * @param string|null $user If not null, personal for $user, otherwise system * @param array $data Mount points */ - private static function writeData($user, $data) { + public static function writeData($user, $data) { if (isset($user)) { $file = OC_User::getHome($user) . '/mount.json'; } else { @@ -769,7 +789,7 @@ class OC_Mount_Config { * @param array $options mount options * @return array updated options */ - private static function encryptPasswords($options) { + public static function encryptPasswords($options) { if (isset($options['password'])) { $options['password_encrypted'] = self::encryptPassword($options['password']); // do not unset the password, we want to keep the keys order @@ -785,7 +805,7 @@ class OC_Mount_Config { * @param array $options mount options * @return array updated options */ - private static function decryptPasswords($options) { + public static function decryptPasswords($options) { // note: legacy options might still have the unencrypted password in the "password" field if (isset($options['password_encrypted'])) { $options['password'] = self::decryptPassword($options['password_encrypted']); @@ -871,12 +891,14 @@ class OC_Mount_Config { * This is mostly used to find out whether configurations * are the same. */ - private static function makeConfigHash($config) { + public static function makeConfigHash($config) { $data = json_encode( array( 'c' => $config['class'], 'm' => $config['mountpoint'], - 'o' => $config['options'] + 'o' => $config['options'], + 'p' => isset($config['priority']) ? $config['priority'] : -1, + 'mo' => isset($config['mountOptions']) ? $config['mountOptions'] : [], ) ); return hash('md5', $data); diff --git a/apps/files_external/lib/dropbox.php b/apps/files_external/lib/dropbox.php index cc1e628f851..af0a81e58d5 100644 --- a/apps/files_external/lib/dropbox.php +++ b/apps/files_external/lib/dropbox.php @@ -100,7 +100,12 @@ class Dropbox extends \OC\Files\Storage\Common { return $contents; } else { try { - $response = $this->dropbox->getMetaData($path, 'false'); + $requestPath = $path; + if ($path === '.') { + $requestPath = ''; + } + + $response = $this->dropbox->getMetaData($requestPath, 'false'); if (!isset($response['is_deleted']) || !$response['is_deleted']) { $this->metaData[$path] = $response; return $response; @@ -316,11 +321,7 @@ class Dropbox extends \OC\Files\Storage\Common { * check if curl is installed */ public static function checkDependencies() { - if (function_exists('curl_init')) { - return true; - } else { - return array('curl'); - } + return true; } } diff --git a/apps/files_external/lib/google.php b/apps/files_external/lib/google.php index bd9bdce2a67..92351bc0886 100644 --- a/apps/files_external/lib/google.php +++ b/apps/files_external/lib/google.php @@ -617,11 +617,7 @@ class Google extends \OC\Files\Storage\Common { * check if curl is installed */ public static function checkDependencies() { - if (function_exists('curl_init')) { - return true; - } else { - return array('curl'); - } + return true; } } diff --git a/apps/files_external/lib/notfoundexception.php b/apps/files_external/lib/notfoundexception.php new file mode 100644 index 00000000000..d1d15309d5b --- /dev/null +++ b/apps/files_external/lib/notfoundexception.php @@ -0,0 +1,15 @@ +<?php +/** + * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OCA\Files_external; + +/** + * Storage is not found + */ +class NotFoundException extends \Exception { +} diff --git a/apps/files_external/lib/owncloud.php b/apps/files_external/lib/owncloud.php index 04a1e959eb0..7d452e8ff4d 100644 --- a/apps/files_external/lib/owncloud.php +++ b/apps/files_external/lib/owncloud.php @@ -37,13 +37,13 @@ class OwnCloud extends \OC\Files\Storage\DAV{ $host = substr($host, 0, $hostSlashPos); } - if (substr($contextPath , 1) !== '/'){ + if (substr($contextPath, -1) !== '/'){ $contextPath .= '/'; } if (isset($params['root'])){ $root = $params['root']; - if (substr($root, 1) !== '/'){ + if (substr($root, 0, 1) !== '/'){ $root = '/' . $root; } } diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index f6c56669734..72f4446c22a 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -16,33 +16,39 @@ class SFTP extends \OC\Files\Storage\Common { private $user; private $password; private $root; + private $port = 22; /** * @var \Net_SFTP */ - private $client; - - private static $tempFiles = array(); + protected $client; + /** + * {@inheritdoc} + */ public function __construct($params) { - // The sftp:// scheme has to be manually registered via inclusion of - // the 'Net/SFTP/Stream.php' file which registers the Net_SFTP_Stream - // stream wrapper as a side effect. - // A slightly better way to register the stream wrapper is available - // since phpseclib 0.3.7 in the form of a static call to - // Net_SFTP_Stream::register() which will trigger autoloading if - // necessary. - // TODO: Call Net_SFTP_Stream::register() instead when phpseclib is - // updated to 0.3.7 or higher. - require_once 'Net/SFTP/Stream.php'; + // Register sftp:// + \Net_SFTP_Stream::register(); $this->host = $params['host']; + + //deals with sftp://server example $proto = strpos($this->host, '://'); if ($proto != false) { $this->host = substr($this->host, $proto+3); } + + //deals with server:port + $hasPort = strpos($this->host,':'); + if($hasPort != false) { + $pieces = explode(":", $this->host); + $this->host = $pieces[0]; + $this->port = $pieces[1]; + } + $this->user = $params['user']; - $this->password = $params['password']; + $this->password + = isset($params['password']) ? $params['password'] : ''; $this->root = isset($params['root']) ? $this->cleanPath($params['root']) : '/'; @@ -67,7 +73,7 @@ class SFTP extends \OC\Files\Storage\Common { } $hostKeys = $this->readHostKeys(); - $this->client = new \Net_SFTP($this->host); + $this->client = new \Net_SFTP($this->host, $this->port); // The SSH Host Key MUST be verified before login(). $currentHostKey = $this->client->getServerPublicHostKey(); @@ -86,6 +92,9 @@ class SFTP extends \OC\Files\Storage\Common { return $this->client; } + /** + * {@inheritdoc} + */ public function test() { if ( !isset($this->host) @@ -97,17 +106,45 @@ class SFTP extends \OC\Files\Storage\Common { return $this->getConnection()->nlist() !== false; } + /** + * {@inheritdoc} + */ public function getId(){ - return 'sftp::' . $this->user . '@' . $this->host . '/' . $this->root; + return 'sftp::' . $this->user . '@' . $this->host . ':' . $this->port . '/' . $this->root; + } + + /** + * @return string + */ + public function getHost() { + return $this->host; + } + + /** + * @return string + */ + public function getRoot() { + return $this->root; + } + + /** + * @return mixed + */ + public function getUser() { + return $this->user; } /** * @param string $path + * @return string */ private function absPath($path) { return $this->root . $this->cleanPath($path); } + /** + * @return bool|string + */ private function hostKeysPath() { try { $storage_view = \OCP\Files::getStorage('files_external'); @@ -121,7 +158,11 @@ class SFTP extends \OC\Files\Storage\Common { return false; } - private function writeHostKeys($keys) { + /** + * @param $keys + * @return bool + */ + protected function writeHostKeys($keys) { try { $keyPath = $this->hostKeysPath(); if ($keyPath && file_exists($keyPath)) { @@ -137,7 +178,10 @@ class SFTP extends \OC\Files\Storage\Common { return false; } - private function readHostKeys() { + /** + * @return array + */ + protected function readHostKeys() { try { $keyPath = $this->hostKeysPath(); if (file_exists($keyPath)) { @@ -160,6 +204,9 @@ class SFTP extends \OC\Files\Storage\Common { return array(); } + /** + * {@inheritdoc} + */ public function mkdir($path) { try { return $this->getConnection()->mkdir($this->absPath($path)); @@ -168,6 +215,9 @@ class SFTP extends \OC\Files\Storage\Common { } } + /** + * {@inheritdoc} + */ public function rmdir($path) { try { return $this->getConnection()->delete($this->absPath($path), true); @@ -176,6 +226,9 @@ class SFTP extends \OC\Files\Storage\Common { } } + /** + * {@inheritdoc} + */ public function opendir($path) { try { $list = $this->getConnection()->nlist($this->absPath($path)); @@ -197,6 +250,9 @@ class SFTP extends \OC\Files\Storage\Common { } } + /** + * {@inheritdoc} + */ public function filetype($path) { try { $stat = $this->getConnection()->stat($this->absPath($path)); @@ -207,12 +263,15 @@ class SFTP extends \OC\Files\Storage\Common { if ($stat['type'] == NET_SFTP_TYPE_DIRECTORY) { return 'dir'; } - } catch (\Exeption $e) { + } catch (\Exception $e) { } return false; } + /** + * {@inheritdoc} + */ public function file_exists($path) { try { return $this->getConnection()->stat($this->absPath($path)) !== false; @@ -221,6 +280,9 @@ class SFTP extends \OC\Files\Storage\Common { } } + /** + * {@inheritdoc} + */ public function unlink($path) { try { return $this->getConnection()->delete($this->absPath($path), true); @@ -229,6 +291,9 @@ class SFTP extends \OC\Files\Storage\Common { } } + /** + * {@inheritdoc} + */ public function fopen($path, $mode) { try { $absPath = $this->absPath($path); @@ -258,6 +323,9 @@ class SFTP extends \OC\Files\Storage\Common { return false; } + /** + * {@inheritdoc} + */ public function touch($path, $mtime=null) { try { if (!is_null($mtime)) { @@ -274,14 +342,27 @@ class SFTP extends \OC\Files\Storage\Common { return true; } + /** + * @param string $path + * @param string $target + * @throws \Exception + */ public function getFile($path, $target) { $this->getConnection()->get($path, $target); } + /** + * @param string $path + * @param string $target + * @throws \Exception + */ public function uploadFile($path, $target) { $this->getConnection()->put($target, $path, NET_SFTP_LOCAL_FILE); } + /** + * {@inheritdoc} + */ public function rename($source, $target) { try { if (!$this->is_dir($target) && $this->file_exists($target)) { @@ -296,6 +377,9 @@ class SFTP extends \OC\Files\Storage\Common { } } + /** + * {@inheritdoc} + */ public function stat($path) { try { $stat = $this->getConnection()->stat($this->absPath($path)); @@ -311,12 +395,13 @@ class SFTP extends \OC\Files\Storage\Common { /** * @param string $path + * @return string */ public function constructUrl($path) { // Do not pass the password here. We want to use the Net_SFTP object // supplied via stream context or fail. We only supply username and // hostname because this might show up in logs (they are not used). - $url = 'sftp://'.$this->user.'@'.$this->host.$this->root.$path; + $url = 'sftp://'.$this->user.'@'.$this->host.':'.$this->port.$this->root.$path; return $url; } } diff --git a/apps/files_external/lib/sftp_key.php b/apps/files_external/lib/sftp_key.php new file mode 100644 index 00000000000..6113f88a8ff --- /dev/null +++ b/apps/files_external/lib/sftp_key.php @@ -0,0 +1,194 @@ +<?php +/** + * Copyright (c) 2014, 2015 University of Edinburgh <Ross.Nicoll@ed.ac.uk> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ +namespace OC\Files\Storage; + +/** +* Uses phpseclib's Net_SFTP class and the Net_SFTP_Stream stream wrapper to +* provide access to SFTP servers. +*/ +class SFTP_Key extends \OC\Files\Storage\SFTP { + private $publicKey; + private $privateKey; + + public function __construct($params) { + parent::__construct($params); + $this->publicKey = $params['public_key']; + $this->privateKey = $params['private_key']; + } + + /** + * Returns the connection. + * + * @return \Net_SFTP connected client instance + * @throws \Exception when the connection failed + */ + public function getConnection() { + if (!is_null($this->client)) { + return $this->client; + } + + $hostKeys = $this->readHostKeys(); + $this->client = new \Net_SFTP($this->getHost()); + + // The SSH Host Key MUST be verified before login(). + $currentHostKey = $this->client->getServerPublicHostKey(); + if (array_key_exists($this->getHost(), $hostKeys)) { + if ($hostKeys[$this->getHost()] !== $currentHostKey) { + throw new \Exception('Host public key does not match known key'); + } + } else { + $hostKeys[$this->getHost()] = $currentHostKey; + $this->writeHostKeys($hostKeys); + } + + $key = $this->getPrivateKey(); + if (is_null($key)) { + throw new \Exception('Secret key could not be loaded'); + } + if (!$this->client->login($this->getUser(), $key)) { + throw new \Exception('Login failed'); + } + return $this->client; + } + + /** + * Returns the private key to be used for authentication to the remote server. + * + * @return \Crypt_RSA instance or null in case of a failure to load the key. + */ + private function getPrivateKey() { + $key = new \Crypt_RSA(); + $key->setPassword(\OC::$server->getConfig()->getSystemValue('secret', '')); + if (!$key->loadKey($this->privateKey)) { + // Should this exception rather than return null? + return null; + } + return $key; + } + + /** + * Throws an exception if the provided host name/address is invalid (cannot be resolved + * and is not an IPv4 address). + * + * @return true; never returns in case of a problem, this return value is used just to + * make unit tests happy. + */ + public function assertHostAddressValid($hostname) { + // TODO: Should handle IPv6 addresses too + if (!preg_match('/^\d+\.\d+\.\d+\.\d+$/', $hostname) && gethostbyname($hostname) === $hostname) { + // Hostname is not an IPv4 address and cannot be resolved via DNS + throw new \InvalidArgumentException('Cannot resolve hostname.'); + } + return true; + } + + /** + * Throws an exception if the provided port number is invalid (cannot be resolved + * and is not an IPv4 address). + * + * @return true; never returns in case of a problem, this return value is used just to + * make unit tests happy. + */ + public function assertPortNumberValid($port) { + if (!preg_match('/^\d+$/', $port)) { + throw new \InvalidArgumentException('Port number must be a number.'); + } + if ($port < 0 || $port > 65535) { + throw new \InvalidArgumentException('Port number must be between 0 and 65535 inclusive.'); + } + return true; + } + + /** + * Replaces anything that's not an alphanumeric character or "." in a hostname + * with "_", to make it safe for use as part of a file name. + */ + protected function sanitizeHostName($name) { + return preg_replace('/[^\d\w\._]/', '_', $name); + } + + /** + * Replaces anything that's not an alphanumeric character or "_" in a username + * with "_", to make it safe for use as part of a file name. + */ + protected function sanitizeUserName($name) { + return preg_replace('/[^\d\w_]/', '_', $name); + } + + public function test() { + if (empty($this->getHost())) { + \OC::$server->getLogger()->warning('Hostname has not been specified'); + return false; + } + if (empty($this->getUser())) { + \OC::$server->getLogger()->warning('Username has not been specified'); + return false; + } + if (!isset($this->privateKey)) { + \OC::$server->getLogger()->warning('Private key was missing from the request'); + return false; + } + + // Sanity check the host + $hostParts = explode(':', $this->getHost()); + try { + if (count($hostParts) == 1) { + $hostname = $hostParts[0]; + $this->assertHostAddressValid($hostname); + } else if (count($hostParts) == 2) { + $hostname = $hostParts[0]; + $this->assertHostAddressValid($hostname); + $this->assertPortNumberValid($hostParts[1]); + } else { + throw new \Exception('Host connection string is invalid.'); + } + } catch(\Exception $e) { + \OC::$server->getLogger()->warning($e->getMessage()); + return false; + } + + // Validate the key + $key = $this->getPrivateKey(); + if (is_null($key)) { + \OC::$server->getLogger()->warning('Secret key could not be loaded'); + return false; + } + + try { + if ($this->getConnection()->nlist() === false) { + return false; + } + } catch(\Exception $e) { + // We should be throwing a more specific error, so we're not just catching + // Exception here + \OC::$server->getLogger()->warning($e->getMessage()); + return false; + } + + // Save the key somewhere it can easily be extracted later + if (\OC::$server->getUserSession()->getUser()) { + $view = new \OC\Files\View('/'.\OC::$server->getUserSession()->getUser()->getUId().'/files_external/sftp_keys'); + if (!$view->is_dir('')) { + if (!$view->mkdir('')) { + \OC::$server->getLogger()->warning('Could not create secret key directory.'); + return false; + } + } + $key_filename = $this->sanitizeUserName($this->getUser()).'@'.$this->sanitizeHostName($hostname).'.pub'; + $key_file = $view->fopen($key_filename, "w"); + if ($key_file) { + fwrite($key_file, $this->publicKey); + fclose($key_file); + } else { + \OC::$server->getLogger()->warning('Could not write secret key file.'); + } + } + + return true; + } +} diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php index 3f0b0f45bfb..c554eaf19ee 100644 --- a/apps/files_external/lib/smb.php +++ b/apps/files_external/lib/smb.php @@ -8,139 +8,273 @@ namespace OC\Files\Storage; -require_once __DIR__ . '/../3rdparty/smb4php/smb.php'; +use Icewind\SMB\Exception\Exception; +use Icewind\SMB\Exception\NotFoundException; +use Icewind\SMB\NativeServer; +use Icewind\SMB\Server; +use Icewind\Streams\CallbackWrapper; +use Icewind\Streams\IteratorDirectory; +use OC\Files\Filesystem; -class SMB extends \OC\Files\Storage\StreamWrapper{ - private $password; - private $user; - private $host; - private $root; - private $share; +class SMB extends Common { + /** + * @var \Icewind\SMB\Server + */ + protected $server; + + /** + * @var \Icewind\SMB\Share + */ + protected $share; + + /** + * @var \Icewind\SMB\FileInfo[] + */ + protected $statCache = array(); public function __construct($params) { if (isset($params['host']) && isset($params['user']) && isset($params['password']) && isset($params['share'])) { - $this->host=$params['host']; - $this->user=$params['user']; - $this->password=$params['password']; - $this->share=$params['share']; - $this->root=isset($params['root'])?$params['root']:'/'; - if ( ! $this->root || $this->root[0]!='/') { - $this->root='/'.$this->root; - } - if (substr($this->root, -1, 1)!='/') { - $this->root.='/'; + if (Server::NativeAvailable()) { + $this->server = new NativeServer($params['host'], $params['user'], $params['password']); + } else { + $this->server = new Server($params['host'], $params['user'], $params['password']); } - if ( ! $this->share || $this->share[0]!='/') { - $this->share='/'.$this->share; + $this->share = $this->server->getShare(trim($params['share'], '/')); + + $this->root = isset($params['root']) ? $params['root'] : '/'; + if (!$this->root || $this->root[0] != '/') { + $this->root = '/' . $this->root; } - if (substr($this->share, -1, 1)=='/') { - $this->share = substr($this->share, 0, -1); + if (substr($this->root, -1, 1) != '/') { + $this->root .= '/'; } } else { throw new \Exception('Invalid configuration'); } } - public function getId(){ - return 'smb::' . $this->user . '@' . $this->host . '/' . $this->share . '/' . $this->root; + /** + * @return string + */ + public function getId() { + return 'smb::' . $this->server->getUser() . '@' . $this->server->getHost() . '/' . $this->share->getName() . '/' . $this->root; } - public function constructUrl($path) { - if (substr($path, -1)=='/') { - $path = substr($path, 0, -1); - } - if (substr($path, 0, 1)=='/') { - $path = substr($path, 1); + /** + * @param string $path + * @return string + */ + protected function buildPath($path) { + return Filesystem::normalizePath($this->root . '/' . $path); + } + + /** + * @param string $path + * @return \Icewind\SMB\IFileInfo + */ + protected function getFileInfo($path) { + $path = $this->buildPath($path); + if (!isset($this->statCache[$path])) { + $this->statCache[$path] = $this->share->stat($path); } - // remove trailing dots which some versions of samba don't seem to like - $path = rtrim($path, '.'); - $path = urlencode($path); - $user = urlencode($this->user); - $pass = urlencode($this->password); - return 'smb://'.$user.':'.$pass.'@'.$this->host.$this->share.$this->root.$path; + return $this->statCache[$path]; } - public function stat($path) { - if ( ! $path and $this->root=='/') {//mtime doesn't work for shares - $stat=stat($this->constructUrl($path)); - if (empty($stat)) { - return false; - } - $mtime=$this->shareMTime(); - $stat['mtime']=$mtime; - return $stat; - } else { - $stat = stat($this->constructUrl($path)); + /** + * @param string $path + * @return \Icewind\SMB\IFileInfo[] + */ + protected function getFolderContents($path) { + $path = $this->buildPath($path); + $files = $this->share->dir($path); + foreach ($files as $file) { + $this->statCache[$path . '/' . $file->getName()] = $file; + } + return $files; + } - // smb4php can return an empty array if the connection could not be established - if (empty($stat)) { - return false; - } + /** + * @param \Icewind\SMB\IFileInfo $info + * @return array + */ + protected function formatInfo($info) { + return array( + 'size' => $info->getSize(), + 'mtime' => $info->getMTime() + ); + } - return $stat; - } + /** + * @param string $path + * @return array + */ + public function stat($path) { + return $this->formatInfo($this->getFileInfo($path)); } /** - * Unlinks file or directory * @param string $path + * @return bool */ public function unlink($path) { - if ($this->is_dir($path)) { - $this->rmdir($path); - } - else { - $url = $this->constructUrl($path); - unlink($url); - clearstatcache(false, $url); + try { + if ($this->is_dir($path)) { + return $this->rmdir($path); + } else { + $path = $this->buildPath($path); + unset($this->statCache[$path]); + $this->share->del($path); + return true; + } + } catch (NotFoundException $e) { + return false; } - // smb4php still returns false even on success so - // check here whether file was really deleted - return !file_exists($path); } /** * check if a file or folder has been updated since $time + * * @param string $path * @param int $time * @return bool */ - public function hasUpdated($path,$time) { - if(!$path and $this->root=='/') { + public function hasUpdated($path, $time) { + if (!$path and $this->root == '/') { // mtime doesn't work for shares, but giving the nature of the backend, // doing a full update is still just fast enough return true; } else { - $actualTime=$this->filemtime($path); - return $actualTime>$time; + $actualTime = $this->filemtime($path); + return $actualTime > $time; } } /** - * get the best guess for the modification time of the share + * @param string $path + * @param string $mode + * @return resource */ - private function shareMTime() { - $dh=$this->opendir(''); - $lastCtime=0; - if(is_resource($dh)) { - while (($file = readdir($dh)) !== false) { - if ($file!='.' and $file!='..') { - $ctime=$this->filemtime($file); - if ($ctime>$lastCtime) { - $lastCtime=$ctime; + public function fopen($path, $mode) { + $fullPath = $this->buildPath($path); + try { + switch ($mode) { + case 'r': + case 'rb': + if (!$this->file_exists($path)) { + return false; + } + return $this->share->read($fullPath); + case 'w': + case 'wb': + return $this->share->write($fullPath); + case 'a': + case 'ab': + case 'r+': + case 'w+': + case 'wb+': + case 'a+': + case 'x': + case 'x+': + case 'c': + case 'c+': + //emulate these + if (strrpos($path, '.') !== false) { + $ext = substr($path, strrpos($path, '.')); + } else { + $ext = ''; } + if ($this->file_exists($path)) { + if (!$this->isUpdatable($path)) { + return false; + } + $tmpFile = $this->getCachedFile($path); + } else { + if (!$this->isCreatable(dirname($path))) { + return false; + } + $tmpFile = \OCP\Files::tmpFile($ext); + } + $source = fopen($tmpFile, $mode); + $share = $this->share; + return CallBackWrapper::wrap($source, null, null, function () use ($tmpFile, $fullPath, $share) { + $share->put($tmpFile, $fullPath); + unlink($tmpFile); + }); + } + return false; + } catch (NotFoundException $e) { + return false; + } + } + + public function rmdir($path) { + try { + $this->statCache = array(); + $content = $this->share->dir($this->buildPath($path)); + foreach ($content as $file) { + if ($file->isDirectory()) { + $this->rmdir($path . '/' . $file->getName()); + } else { + $this->share->del($file->getPath()); } } + $this->share->rmdir($this->buildPath($path)); + return true; + } catch (NotFoundException $e) { + return false; + } + } + + public function touch($path, $time = null) { + if (!$this->file_exists($path)) { + $fh = $this->share->write($this->buildPath($path)); + fclose($fh); + return true; + } + return false; + } + + public function opendir($path) { + $files = $this->getFolderContents($path); + $names = array_map(function ($info) { + /** @var \Icewind\SMB\IFileInfo $info */ + return $info->getName(); + }, $files); + return IteratorDirectory::wrap($names); + } + + public function filetype($path) { + try { + return $this->getFileInfo($path)->isDirectory() ? 'dir' : 'file'; + } catch (NotFoundException $e) { + return false; + } + } + + public function mkdir($path) { + $path = $this->buildPath($path); + try { + $this->share->mkdir($path); + return true; + } catch (Exception $e) { + return false; + } + } + + public function file_exists($path) { + try { + $this->getFileInfo($path); + return true; + } catch (NotFoundException $e) { + return false; } - return $lastCtime; } /** * check if smbclient is installed */ public static function checkDependencies() { - $smbClientExists = (bool) \OC_Helper::findBinaryPath('smbclient'); + $smbClientExists = (bool)\OC_Helper::findBinaryPath('smbclient'); return $smbClientExists ? true : array('smbclient'); } - } diff --git a/apps/files_external/lib/smb_oc.php b/apps/files_external/lib/smb_oc.php index a7c93d97fd1..245d1ed79b3 100644 --- a/apps/files_external/lib/smb_oc.php +++ b/apps/files_external/lib/smb_oc.php @@ -8,9 +8,12 @@ namespace OC\Files\Storage; -require_once __DIR__ . '/../3rdparty/smb4php/smb.php'; -class SMB_OC extends \OC\Files\Storage\SMB { +use Icewind\SMB\Exception\AccessDeniedException; +use Icewind\SMB\Exception\Exception; +use Icewind\SMB\Server; + +class SMB_OC extends SMB { private $username_as_share; /** @@ -19,18 +22,18 @@ class SMB_OC extends \OC\Files\Storage\SMB { */ public function __construct($params) { if (isset($params['host']) && \OC::$server->getSession()->exists('smb-credentials')) { - $host=$params['host']; + $host = $params['host']; $this->username_as_share = ($params['username_as_share'] === 'true'); $params_auth = json_decode(\OC::$server->getCrypto()->decrypt(\OC::$server->getSession()->get('smb-credentials')), true); $user = \OC::$server->getSession()->get('loginname'); $password = $params_auth['password']; - $root=isset($params['root'])?$params['root']:'/'; + $root = isset($params['root']) ? $params['root'] : '/'; $share = ''; if ($this->username_as_share) { - $share = '/'.$user; + $share = '/' . $user; } elseif (isset($params['share'])) { $share = $params['share']; } else { @@ -84,33 +87,15 @@ class SMB_OC extends \OC\Files\Storage\SMB { } return false; } else { - $smb = new \smb(); - $pu = $smb->parse_url($this->constructUrl('')); - - // Attempt to connect anonymously - $pu['user'] = ''; - $pu['pass'] = ''; - - // Share cannot be checked if dynamic - if ($this->username_as_share) { - if ($smb->look($pu)) { - return true; - } else { - return false; - } - } - if (!$pu['share']) { - return false; - } - - // The following error messages are expected due to anonymous login - $regexp = array( - '(NT_STATUS_ACCESS_DENIED)' => 'skip' - ) + $smb->getRegexp(); + $server = new Server($this->server->getHost(), '', ''); - if ($smb->client("-d 0 " . escapeshellarg('//' . $pu['host'] . '/' . $pu['share']) . " -c exit", $pu, $regexp)) { + try { + $server->listShares(); return true; - } else { + } catch (AccessDeniedException $e) { + // expected due to anonymous login + return true; + } catch (Exception $e) { return false; } } diff --git a/apps/files_external/lib/storageconfig.php b/apps/files_external/lib/storageconfig.php new file mode 100644 index 00000000000..80d0152db8c --- /dev/null +++ b/apps/files_external/lib/storageconfig.php @@ -0,0 +1,292 @@ +<?php +/** + * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OCA\Files_external\Lib; + +/** + * External storage configuration + */ +class StorageConfig implements \JsonSerializable { + + /** + * Storage config id + * + * @var int + */ + private $id; + + /** + * Backend class name + * + * @var string + */ + private $backendClass; + + /** + * Backend options + * + * @var array + */ + private $backendOptions = []; + + /** + * Mount point path, relative to the user's "files" folder + * + * @var string + */ + private $mountPoint; + + /** + * Storage status + * + * @var int + */ + private $status; + + /** + * Priority + * + * @var int + */ + private $priority; + + /** + * List of users who have access to this storage + * + * @var array + */ + private $applicableUsers = []; + + /** + * List of groups that have access to this storage + * + * @var array + */ + private $applicableGroups = []; + + /** + * Mount-specific options + * + * @var array + */ + private $mountOptions = []; + + /** + * Creates a storage config + * + * @param int|null $id config id or null for a new config + */ + public function __construct($id = null) { + $this->id = $id; + } + + /** + * Returns the configuration id + * + * @return int + */ + public function getId() { + return $this->id; + } + + /** + * Sets the configuration id + * + * @param int $id configuration id + */ + public function setId($id) { + $this->id = $id; + } + + /** + * Returns mount point path relative to the user's + * "files" folder. + * + * @return string path + */ + public function getMountPoint() { + return $this->mountPoint; + } + + /** + * Sets mount point path relative to the user's + * "files" folder. + * The path will be normalized. + * + * @param string $mountPoint path + */ + public function setMountPoint($mountPoint) { + $this->mountPoint = \OC\Files\Filesystem::normalizePath($mountPoint); + } + + /** + * Returns the external storage backend class name + * + * @return string external storage backend class name + */ + public function getBackendClass() { + return $this->backendClass; + } + + /** + * Sets the external storage backend class name + * + * @param string external storage backend class name + */ + public function setBackendClass($backendClass) { + $this->backendClass = $backendClass; + } + + /** + * Returns the external storage backend-specific options + * + * @return array backend options + */ + public function getBackendOptions() { + return $this->backendOptions; + } + + /** + * Sets the external storage backend-specific options + * + * @param array $backendOptions backend options + */ + public function setBackendOptions($backendOptions) { + $this->backendOptions = $backendOptions; + } + + /** + * Returns the mount priority + * + * @return int priority + */ + public function getPriority() { + return $this->priority; + } + + /** + * Sets the mount priotity + * + * @param int $priority priority + */ + public function setPriority($priority) { + $this->priority = $priority; + } + + /** + * Returns the users for which to mount this storage + * + * @return array applicable users + */ + public function getApplicableUsers() { + return $this->applicableUsers; + } + + /** + * Sets the users for which to mount this storage + * + * @param array|null $applicableUsers applicable users + */ + public function setApplicableUsers($applicableUsers) { + if (is_null($applicableUsers)) { + $applicableUsers = []; + } + $this->applicableUsers = $applicableUsers; + } + + /** + * Returns the groups for which to mount this storage + * + * @return array applicable groups + */ + public function getApplicableGroups() { + return $this->applicableGroups; + } + + /** + * Sets the groups for which to mount this storage + * + * @param array|null $applicableGroups applicable groups + */ + public function setApplicableGroups($applicableGroups) { + if (is_null($applicableGroups)) { + $applicableGroups = []; + } + $this->applicableGroups = $applicableGroups; + } + + /** + * Returns the mount-specific options + * + * @return array mount specific options + */ + public function getMountOptions() { + return $this->mountOptions; + } + + /** + * Sets the mount-specific options + * + * @param array $mountOptions applicable groups + */ + public function setMountOptions($mountOptions) { + if (is_null($mountOptions)) { + $mountOptions = []; + } + $this->mountOptions = $mountOptions; + } + + /** + * Sets the storage status, whether the config worked last time + * + * @return int $status status + */ + public function getStatus() { + return $this->status; + } + + /** + * Sets the storage status, whether the config worked last time + * + * @param int $status status + */ + public function setStatus($status) { + $this->status = $status; + } + + /** + * Serialize config to JSON + * + * @return array + */ + public function jsonSerialize() { + $result = []; + if (!is_null($this->id)) { + $result['id'] = $this->id; + } + $result['mountPoint'] = $this->mountPoint; + $result['backendClass'] = $this->backendClass; + $result['backendOptions'] = $this->backendOptions; + if (!is_null($this->priority)) { + $result['priority'] = $this->priority; + } + if (!empty($this->applicableUsers)) { + $result['applicableUsers'] = $this->applicableUsers; + } + if (!empty($this->applicableGroups)) { + $result['applicableGroups'] = $this->applicableGroups; + } + if (!empty($this->mountOptions)) { + $result['mountOptions'] = $this->mountOptions; + } + if (!is_null($this->status)) { + $result['status'] = $this->status; + } + return $result; + } +} diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php index 79effc04874..37f81313701 100644 --- a/apps/files_external/lib/swift.php +++ b/apps/files_external/lib/swift.php @@ -567,11 +567,7 @@ class Swift extends \OC\Files\Storage\Common { * check if curl is installed */ public static function checkDependencies() { - if (function_exists('curl_init')) { - return true; - } else { - return array('curl'); - } + return true; } } diff --git a/apps/files_external/personal.php b/apps/files_external/personal.php index a279163ff70..8b435442259 100644 --- a/apps/files_external/personal.php +++ b/apps/files_external/personal.php @@ -24,9 +24,29 @@ OCP\Util::addScript('files_external', 'settings'); OCP\Util::addStyle('files_external', 'settings'); $backends = OC_Mount_Config::getPersonalBackends(); +$mounts = OC_Mount_Config::getPersonalMountPoints(); +$hasId = true; +foreach ($mounts as $mount) { + if (!isset($mount['id'])) { + // some mount points are missing ids + $hasId = false; + break; + } +} + +if (!$hasId) { + $service = new \OCA\Files_external\Service\UserStoragesService(\OC::$server->getUserSession()); + // this will trigger the new storage code which will automatically + // generate storage config ids + $service->getAllStorages(); + // re-read updated config + $mounts = OC_Mount_Config::getPersonalMountPoints(); + // TODO: use the new storage config format in the template +} + $tmpl = new OCP\Template('files_external', 'settings'); $tmpl->assign('isAdminPage', false); -$tmpl->assign('mounts', OC_Mount_Config::getPersonalMountPoints()); +$tmpl->assign('mounts', $mounts); $tmpl->assign('dependencies', OC_Mount_Config::checkDependencies()); $tmpl->assign('backends', $backends); return $tmpl->fetchPage(); diff --git a/apps/files_external/service/globalstoragesservice.php b/apps/files_external/service/globalstoragesservice.php new file mode 100644 index 00000000000..b024824c469 --- /dev/null +++ b/apps/files_external/service/globalstoragesservice.php @@ -0,0 +1,191 @@ +<?php +/** + * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OCA\Files_external\Service; + +use \OCP\IUserSession; +use \OC\Files\Filesystem; + +use \OCA\Files_external\Lib\StorageConfig; +use \OCA\Files_external\NotFoundException; + +/** + * Service class to manage global external storages + */ +class GlobalStoragesService extends StoragesService { + + /** + * Write the storages to the configuration. + * + * @param array $storages map of storage id to storage config + */ + public function writeConfig($storages) { + // let the horror begin + $mountPoints = []; + foreach ($storages as $storageConfig) { + $mountPoint = $storageConfig->getMountPoint(); + $oldBackendOptions = $storageConfig->getBackendOptions(); + $storageConfig->setBackendOptions( + \OC_Mount_Config::encryptPasswords( + $oldBackendOptions + ) + ); + + // system mount + $rootMountPoint = '/$user/files/' . ltrim($mountPoint, '/'); + + $applicableUsers = $storageConfig->getApplicableUsers(); + $applicableGroups = $storageConfig->getApplicableGroups(); + foreach ($applicableUsers as $applicable) { + $this->addMountPoint( + $mountPoints, + \OC_Mount_Config::MOUNT_TYPE_USER, + $applicable, + $rootMountPoint, + $storageConfig + ); + } + + foreach ($applicableGroups as $applicable) { + $this->addMountPoint( + $mountPoints, + \OC_Mount_Config::MOUNT_TYPE_GROUP, + $applicable, + $rootMountPoint, + $storageConfig + ); + } + + // if neither "applicableGroups" or "applicableUsers" were set, use "all" user + if (empty($applicableUsers) && empty($applicableGroups)) { + $this->addMountPoint( + $mountPoints, + \OC_Mount_Config::MOUNT_TYPE_USER, + 'all', + $rootMountPoint, + $storageConfig + ); + } + + // restore old backend options where the password was not encrypted, + // because we don't want to change the state of the original object + $storageConfig->setBackendOptions($oldBackendOptions); + } + + \OC_Mount_Config::writeData(null, $mountPoints); + } + + /** + * Triggers $signal for all applicable users of the given + * storage + * + * @param StorageConfig $storage storage data + * @param string $signal signal to trigger + */ + protected function triggerHooks(StorageConfig $storage, $signal) { + $applicableUsers = $storage->getApplicableUsers(); + $applicableGroups = $storage->getApplicableGroups(); + if (empty($applicableUsers) && empty($applicableGroups)) { + // raise for user "all" + $this->triggerApplicableHooks( + $signal, + $storage->getMountPoint(), + \OC_Mount_Config::MOUNT_TYPE_USER, + ['all'] + ); + return; + } + + $this->triggerApplicableHooks( + $signal, + $storage->getMountPoint(), + \OC_Mount_Config::MOUNT_TYPE_USER, + $applicableUsers + ); + $this->triggerApplicableHooks( + $signal, + $storage->getMountPoint(), + \OC_Mount_Config::MOUNT_TYPE_GROUP, + $applicableGroups + ); + } + + /** + * Triggers signal_create_mount or signal_delete_mount to + * accomodate for additions/deletions in applicableUsers + * and applicableGroups fields. + * + * @param StorageConfig $oldStorage old storage config + * @param StorageConfig $newStorage new storage config + */ + protected function triggerChangeHooks(StorageConfig $oldStorage, StorageConfig $newStorage) { + // if mount point changed, it's like a deletion + creation + if ($oldStorage->getMountPoint() !== $newStorage->getMountPoint()) { + $this->triggerHooks($oldStorage, Filesystem::signal_delete_mount); + $this->triggerHooks($newStorage, Filesystem::signal_create_mount); + return; + } + + $userAdditions = array_diff($newStorage->getApplicableUsers(), $oldStorage->getApplicableUsers()); + $userDeletions = array_diff($oldStorage->getApplicableUsers(), $newStorage->getApplicableUsers()); + $groupAdditions = array_diff($newStorage->getApplicableGroups(), $oldStorage->getApplicableGroups()); + $groupDeletions = array_diff($oldStorage->getApplicableGroups(), $newStorage->getApplicableGroups()); + + // if no applicable were set, raise a signal for "all" + if (empty($oldStorage->getApplicableUsers()) && empty($oldStorage->getApplicableGroups())) { + $this->triggerApplicableHooks( + Filesystem::signal_delete_mount, + $oldStorage->getMountPoint(), + \OC_Mount_Config::MOUNT_TYPE_USER, + ['all'] + ); + } + + // trigger delete for removed users + $this->triggerApplicableHooks( + Filesystem::signal_delete_mount, + $oldStorage->getMountPoint(), + \OC_Mount_Config::MOUNT_TYPE_USER, + $userDeletions + ); + + // trigger delete for removed groups + $this->triggerApplicableHooks( + Filesystem::signal_delete_mount, + $oldStorage->getMountPoint(), + \OC_Mount_Config::MOUNT_TYPE_GROUP, + $groupDeletions + ); + + // and now add the new users + $this->triggerApplicableHooks( + Filesystem::signal_create_mount, + $newStorage->getMountPoint(), + \OC_Mount_Config::MOUNT_TYPE_USER, + $userAdditions + ); + + // and now add the new groups + $this->triggerApplicableHooks( + Filesystem::signal_create_mount, + $newStorage->getMountPoint(), + \OC_Mount_Config::MOUNT_TYPE_GROUP, + $groupAdditions + ); + + // if no applicable, raise a signal for "all" + if (empty($newStorage->getApplicableUsers()) && empty($newStorage->getApplicableGroups())) { + $this->triggerApplicableHooks( + Filesystem::signal_create_mount, + $newStorage->getMountPoint(), + \OC_Mount_Config::MOUNT_TYPE_USER, + ['all'] + ); + } + } +} diff --git a/apps/files_external/service/storagesservice.php b/apps/files_external/service/storagesservice.php new file mode 100644 index 00000000000..6800474126f --- /dev/null +++ b/apps/files_external/service/storagesservice.php @@ -0,0 +1,389 @@ +<?php +/** + * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OCA\Files_external\Service; + +use \OCP\IUserSession; +use \OC\Files\Filesystem; + +use \OCA\Files_external\Lib\StorageConfig; +use \OCA\Files_external\NotFoundException; + +/** + * Service class to manage external storages + */ +abstract class StoragesService { + + /** + * Read legacy config data + * + * @return array list of mount configs + */ + protected function readLegacyConfig() { + // read global config + return \OC_Mount_Config::readData(); + } + + /** + * Copy legacy storage options into the given storage config object. + * + * @param StorageConfig $storageConfig storage config to populate + * @param string $mountType mount type + * @param string $applicable applicable user or group + * @param array $storageOptions legacy storage options + * + * @return StorageConfig populated storage config + */ + protected function populateStorageConfigWithLegacyOptions( + &$storageConfig, + $mountType, + $applicable, + $storageOptions + ) { + $storageConfig->setBackendClass($storageOptions['class']); + $storageConfig->setBackendOptions($storageOptions['options']); + if (isset($storageOptions['mountOptions'])) { + $storageConfig->setMountOptions($storageOptions['mountOptions']); + } + if (isset($storageOptions['priority'])) { + $storageConfig->setPriority($storageOptions['priority']); + } + + if ($mountType === \OC_Mount_Config::MOUNT_TYPE_USER) { + $applicableUsers = $storageConfig->getApplicableUsers(); + if ($applicable !== 'all') { + $applicableUsers[] = $applicable; + $storageConfig->setApplicableUsers($applicableUsers); + } + } else if ($mountType === \OC_Mount_Config::MOUNT_TYPE_GROUP) { + $applicableGroups = $storageConfig->getApplicableGroups(); + $applicableGroups[] = $applicable; + $storageConfig->setApplicableGroups($applicableGroups); + } + return $storageConfig; + } + + /** + * Read the external storages config + * + * @return array map of storage id to storage config + */ + protected function readConfig() { + $mountPoints = $this->readLegacyConfig(); + + /** + * Here is the how the horribly messy mount point array looks like + * from the mount.json file: + * + * $storageOptions = $mountPoints[$mountType][$applicable][$mountPath] + * + * - $mountType is either "user" or "group" + * - $applicable is the name of a user or group (or the current user for personal mounts) + * - $mountPath is the mount point path (where the storage must be mounted) + * - $storageOptions is a map of storage options: + * - "priority": storage priority + * - "backend": backend class name + * - "options": backend-specific options + * - "mountOptions": mount-specific options (ex: disable previews, scanner, etc) + */ + + // group by storage id + $storages = []; + + // for storages without id (legacy), group by config hash for + // later processing + $storagesWithConfigHash = []; + + foreach ($mountPoints as $mountType => $applicables) { + foreach ($applicables as $applicable => $mountPaths) { + foreach ($mountPaths as $rootMountPath => $storageOptions) { + $currentStorage = null; + + /** + * Flag whether the config that was read already has an id. + * If not, it will use a config hash instead and generate + * a proper id later + * + * @var boolean + */ + $hasId = false; + + // the root mount point is in the format "/$user/files/the/mount/point" + // we remove the "/$user/files" prefix + $parts = explode('/', trim($rootMountPath, '/'), 3); + if (count($parts) < 3) { + // something went wrong, skip + \OCP\Util::writeLog( + 'files_external', + 'Could not parse mount point "' . $rootMountPath . '"', + \OCP\Util::ERROR + ); + continue; + } + + $relativeMountPath = $parts[2]; + + // note: we cannot do this after the loop because the decrypted config + // options might be needed for the config hash + $storageOptions['options'] = \OC_Mount_Config::decryptPasswords($storageOptions['options']); + + if (isset($storageOptions['id'])) { + $configId = (int)$storageOptions['id']; + if (isset($storages[$configId])) { + $currentStorage = $storages[$configId]; + } + $hasId = true; + } else { + // missing id in legacy config, need to generate + // but at this point we don't know the max-id, so use + // first group it by config hash + $storageOptions['mountpoint'] = $rootMountPath; + $configId = \OC_Mount_Config::makeConfigHash($storageOptions); + if (isset($storagesWithConfigHash[$configId])) { + $currentStorage = $storagesWithConfigHash[$configId]; + } + } + + if (is_null($currentStorage)) { + // create new + $currentStorage = new StorageConfig($configId); + $currentStorage->setMountPoint($relativeMountPath); + } + + $this->populateStorageConfigWithLegacyOptions( + $currentStorage, + $mountType, + $applicable, + $storageOptions + ); + + if ($hasId) { + $storages[$configId] = $currentStorage; + } else { + $storagesWithConfigHash[$configId] = $currentStorage; + } + } + } + } + + // process storages with config hash, they must get a real id + if (!empty($storagesWithConfigHash)) { + $nextId = $this->generateNextId($storages); + foreach ($storagesWithConfigHash as $storage) { + $storage->setId($nextId); + $storages[$nextId] = $storage; + $nextId++; + } + + // re-save the config with the generated ids + $this->writeConfig($storages); + } + + return $storages; + } + + /** + * Add mount point into the messy mount point structure + * + * @param array $mountPoints messy array of mount points + * @param string $mountType mount type + * @param string $applicable single applicable user or group + * @param string $rootMountPoint root mount point to use + * @param array $storageConfig storage config to set to the mount point + */ + protected function addMountPoint(&$mountPoints, $mountType, $applicable, $rootMountPoint, $storageConfig) { + if (!isset($mountPoints[$mountType])) { + $mountPoints[$mountType] = []; + } + + if (!isset($mountPoints[$mountType][$applicable])) { + $mountPoints[$mountType][$applicable] = []; + } + + $options = [ + 'id' => $storageConfig->getId(), + 'class' => $storageConfig->getBackendClass(), + 'options' => $storageConfig->getBackendOptions(), + ]; + + if (!is_null($storageConfig->getPriority())) { + $options['priority'] = $storageConfig->getPriority(); + } + if (!empty($storageConfig->getMountOptions())) { + $options['mountOptions'] = $storageConfig->getMountOptions(); + } + + $mountPoints[$mountType][$applicable][$rootMountPoint] = $options; + } + + /** + * Write the storages to the configuration. + * + * @param array $storages map of storage id to storage config + */ + abstract protected function writeConfig($storages); + + /** + * Get a storage with status + * + * @param int $id storage id + * + * @return StorageConfig + * @throws NotFoundException if the storage with the given id was not found + */ + public function getStorage($id) { + $allStorages = $this->readConfig(); + + if (!isset($allStorages[$id])) { + throw new NotFoundException('Storage with id "' . $id . '" not found'); + } + + return $allStorages[$id]; + } + + /** + * Gets all storages + * + * @return array array of storage configs + */ + public function getAllStorages() { + return $this->readConfig(); + } + + /** + * Add new storage to the configuration + * + * @param array $newStorage storage attributes + * + * @return StorageConfig storage config, with added id + */ + public function addStorage(StorageConfig $newStorage) { + $allStorages = $this->readConfig(); + + $configId = $this->generateNextId($allStorages); + $newStorage->setId($configId); + + // add new storage + $allStorages[$configId] = $newStorage; + + $this->writeConfig($allStorages); + + $this->triggerHooks($newStorage, Filesystem::signal_create_mount); + + $newStorage->setStatus(\OC_Mount_Config::STATUS_SUCCESS); + return $newStorage; + } + + /** + * Triggers the given hook signal for all the applicables given + * + * @param string $signal signal + * @param string $mountPoint hook mount pount param + * @param string $mountType hook mount type param + * @param array $applicableArray array of applicable users/groups for which to trigger the hook + */ + protected function triggerApplicableHooks($signal, $mountPoint, $mountType, $applicableArray) { + foreach ($applicableArray as $applicable) { + \OC_Hook::emit( + Filesystem::CLASSNAME, + $signal, + [ + Filesystem::signal_param_path => $mountPoint, + Filesystem::signal_param_mount_type => $mountType, + Filesystem::signal_param_users => $applicable, + ] + ); + } + } + + /** + * Triggers $signal for all applicable users of the given + * storage + * + * @param StorageConfig $storage storage data + * @param string $signal signal to trigger + */ + abstract protected function triggerHooks(StorageConfig $storage, $signal); + + /** + * Triggers signal_create_mount or signal_delete_mount to + * accomodate for additions/deletions in applicableUsers + * and applicableGroups fields. + * + * @param StorageConfig $oldStorage old storage data + * @param StorageConfig $newStorage new storage data + */ + abstract protected function triggerChangeHooks(StorageConfig $oldStorage, StorageConfig $newStorage); + + /** + * Update storage to the configuration + * + * @param StorageConfig $updatedStorage storage attributes + * + * @return StorageConfig storage config + * @throws NotFoundException if the given storage does not exist in the config + */ + public function updateStorage(StorageConfig $updatedStorage) { + $allStorages = $this->readConfig(); + + $id = $updatedStorage->getId(); + if (!isset($allStorages[$id])) { + throw new NotFoundException('Storage with id "' . $id . '" not found'); + } + + $oldStorage = $allStorages[$id]; + $allStorages[$id] = $updatedStorage; + + $this->writeConfig($allStorages); + + $this->triggerChangeHooks($oldStorage, $updatedStorage); + + return $this->getStorage($id); + } + + /** + * Delete the storage with the given id. + * + * @param int $id storage id + * + * @throws NotFoundException if no storage was found with the given id + */ + public function removeStorage($id) { + $allStorages = $this->readConfig(); + + if (!isset($allStorages[$id])) { + throw new NotFoundException('Storage with id "' . $id . '" not found'); + } + + $deletedStorage = $allStorages[$id]; + unset($allStorages[$id]); + + $this->writeConfig($allStorages); + + $this->triggerHooks($deletedStorage, Filesystem::signal_delete_mount); + } + + /** + * Generates a configuration id to use for a new configuration entry. + * + * @param array $allStorages array of all storage configs + * + * @return int id + */ + protected function generateNextId($allStorages) { + if (empty($allStorages)) { + return 1; + } + // note: this will mess up with with concurrency, + // but so did the mount.json. This horribly hack + // will disappear once we move to DB tables to + // store the config + return (max(array_keys($allStorages)) + 1); + } + +} diff --git a/apps/files_external/service/userstoragesservice.php b/apps/files_external/service/userstoragesservice.php new file mode 100644 index 00000000000..df452a48126 --- /dev/null +++ b/apps/files_external/service/userstoragesservice.php @@ -0,0 +1,150 @@ +<?php +/** + * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OCA\Files_external\Service; + +use \OCP\IUserSession; +use \OC\Files\Filesystem; + +use \OCA\Files_external\Lib\StorageConfig; +use \OCA\Files_external\NotFoundException; + +/** + * Service class to manage user external storages + * (aka personal storages) + */ +class UserStoragesService extends StoragesService { + + /** + * User session + * + * @var IUserSession + */ + private $userSession; + + /** + * Create a user storages service + * + * @param IUserSession $userSession user session + */ + public function __construct( + IUserSession $userSession + ) { + $this->userSession = $userSession; + } + + /** + * Read legacy config data + * + * @return array list of storage configs + */ + protected function readLegacyConfig() { + // read user config + $user = $this->userSession->getUser()->getUID(); + return \OC_Mount_Config::readData($user); + } + + /** + * Read the external storages config + * + * @return array map of storage id to storage config + */ + protected function readConfig() { + $user = $this->userSession->getUser()->getUID(); + // TODO: in the future don't rely on the global config reading code + $storages = parent::readConfig(); + + $filteredStorages = []; + foreach ($storages as $configId => $storage) { + // filter out all bogus storages that aren't for the current user + if (!in_array($user, $storage->getApplicableUsers())) { + continue; + } + + // clear applicable users, should not be used + $storage->setApplicableUsers([]); + + // strip out unneeded applicableUser fields + $filteredStorages[$configId] = $storage; + } + + return $filteredStorages; + } + + /** + * Write the storages to the user's configuration. + * + * @param array $storages map of storage id to storage config + */ + public function writeConfig($storages) { + $user = $this->userSession->getUser()->getUID(); + + // let the horror begin + $mountPoints = []; + foreach ($storages as $storageConfig) { + $mountPoint = $storageConfig->getMountPoint(); + $oldBackendOptions = $storageConfig->getBackendOptions(); + $storageConfig->setBackendOptions( + \OC_Mount_Config::encryptPasswords( + $oldBackendOptions + ) + ); + + $rootMountPoint = '/' . $user . '/files/' . ltrim($mountPoint, '/'); + + $this->addMountPoint( + $mountPoints, + \OC_Mount_Config::MOUNT_TYPE_USER, + $user, + $rootMountPoint, + $storageConfig + ); + + // restore old backend options where the password was not encrypted, + // because we don't want to change the state of the original object + $storageConfig->setBackendOptions($oldBackendOptions); + } + + \OC_Mount_Config::writeData($user, $mountPoints); + } + + /** + * Triggers $signal for all applicable users of the given + * storage + * + * @param StorageConfig $storage storage data + * @param string $signal signal to trigger + */ + protected function triggerHooks(StorageConfig $storage, $signal) { + $user = $this->userSession->getUser()->getUID(); + + // trigger hook for the current user + $this->triggerApplicableHooks( + $signal, + $storage->getMountPoint(), + \OC_Mount_Config::MOUNT_TYPE_USER, + [$user] + ); + } + + /** + * Triggers signal_create_mount or signal_delete_mount to + * accomodate for additions/deletions in applicableUsers + * and applicableGroups fields. + * + * @param StorageConfig $oldStorage old storage data + * @param StorageConfig $newStorage new storage data + */ + protected function triggerChangeHooks(StorageConfig $oldStorage, StorageConfig $newStorage) { + // if mount point changed, it's like a deletion + creation + if ($oldStorage->getMountPoint() !== $newStorage->getMountPoint()) { + $this->triggerHooks($oldStorage, Filesystem::signal_delete_mount); + $this->triggerHooks($newStorage, Filesystem::signal_create_mount); + } + } +} diff --git a/apps/files_external/settings.php b/apps/files_external/settings.php index dec329e82a2..3144e1a2ab6 100644 --- a/apps/files_external/settings.php +++ b/apps/files_external/settings.php @@ -42,9 +42,29 @@ foreach ($backends as $class => $backend) } } +$mounts = OC_Mount_Config::getSystemMountPoints(); +$hasId = true; +foreach ($mounts as $mount) { + if (!isset($mount['id'])) { + // some mount points are missing ids + $hasId = false; + break; + } +} + +if (!$hasId) { + $service = new \OCA\Files_external\Service\GlobalStoragesService(); + // this will trigger the new storage code which will automatically + // generate storage config ids + $service->getAllStorages(); + // re-read updated config + $mounts = OC_Mount_Config::getSystemMountPoints(); + // TODO: use the new storage config format in the template +} + $tmpl = new OCP\Template('files_external', 'settings'); $tmpl->assign('isAdminPage', true); -$tmpl->assign('mounts', OC_Mount_Config::getSystemMountPoints()); +$tmpl->assign('mounts', $mounts); $tmpl->assign('backends', $backends); $tmpl->assign('personal_backends', $personal_backends); $tmpl->assign('dependencies', OC_Mount_Config::checkDependencies()); diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php index 79950f30385..4866d177634 100644 --- a/apps/files_external/templates/settings.php +++ b/apps/files_external/templates/settings.php @@ -13,13 +13,11 @@ </tr> </thead> <tbody> - <?php $_['mounts'] = array_merge($_['mounts'], array('' => array())); ?> + <?php $_['mounts'] = array_merge($_['mounts'], array('' => array('id' => ''))); ?> <?php foreach ($_['mounts'] as $mount): ?> - <tr <?php print_unescaped(isset($mount['mountpoint']) ? 'class="'.OC_Util::sanitizeHTML($mount['class']).'"' : 'id="addMountPoint"'); ?>> + <tr <?php print_unescaped(isset($mount['mountpoint']) ? 'class="'.OC_Util::sanitizeHTML($mount['class']).'"' : 'id="addMountPoint"'); ?> data-id="<?php p($mount['id']) ?>"> <td class="status"> - <?php if (isset($mount['status'])): ?> - <span class="<?php p(($mount['status']) ? 'success' : 'error'); ?>"></span> - <?php endif; ?> + <span></span> </td> <td class="mountPoint"><input type="text" name="mountPoint" value="<?php p(isset($mount['mountpoint']) ? $mount['mountpoint'] : ''); ?>" @@ -28,7 +26,7 @@ </td> <?php if (!isset($mount['mountpoint'])): ?> <td class="backend"> - <select id="selectBackend" data-configurations='<?php p(json_encode($_['backends'])); ?>'> + <select id="selectBackend" class="selectBackend" data-configurations='<?php p(json_encode($_['backends'])); ?>'> <option value="" disabled selected style="display:none;"><?php p($l->t('Add storage')); ?></option> <?php foreach ($_['backends'] as $class => $backend): ?> @@ -80,6 +78,14 @@ <?php OCP\Util::addScript('files_external', $_['backends'][$mount['class']]['custom']); ?> <?php endif; ?> <?php endif; ?> + <?php if (isset($mount['mountOptions'])): ?> + <input type="hidden" class="mountOptions" value="<?php p(json_encode($mount['mountOptions'])) ?>" /> + <?php endif; ?> + <?php if ($_['isAdminPage']): ?> + <?php if (isset($mount['priority'])): ?> + <input type="hidden" class="priority" value="<?php p($mount['priority']) ?>" /> + <?php endif; ?> + <?php endif; ?> </td> <?php if ($_['isAdminPage']): ?> <td class="applicable" diff --git a/apps/files_external/tests/README.md b/apps/files_external/tests/README.md new file mode 100644 index 00000000000..0b3c7fd004f --- /dev/null +++ b/apps/files_external/tests/README.md @@ -0,0 +1,63 @@ +# How to run the files external unit tests + +## Components + +The files_external relies - as the name already says - on external file system +providers. To test easily against such a provider we use some scripts to setup +a provider (and of course also cleanup that provider). Those scripts can be +found in the `tests/env` folder of the files_external app. + +### Naming Conventions + +The current implementation supports a script that starts with `start-` for the +setup step which is executed before the PHPUnit run and an optional script +starting with `stop-` (and have the same ending as the start script) to cleanup +the provider. For example: `start-webdav-ownCloud.sh` and +`stop-webdav-ownCloud.sh`. As a second requirement after this prefix there has +to be the name of the backend test suite. In the above example the test suite +`tests/backends/webdav.php` is used. The last part is a name that can be chosen +freely. + +## Hands-on way of unit test execution + +Run all files_external unit tests by invoking the following in the ownCloud +core root folder: + + ./autotest-external.sh + +This script supports to get passed a database as first argument: + + ./autotest-external.sh sqlite + +You can also pass the name of the external file system provider as a second +argument that should be executed. This is the name of the script without the +prefix `start-` (or `stop-`) and without the extension `.sh` from the above +mentioned components in `test/env`. So if you want to start the WebDAV backend +tests against an ownCloud instance you can run following: + + ./autotest-external.sh sqlite webdav-ownCloud + +This runs the script `start-webdav-ownCloud.sh` from the `tests/env` folder, +then runs the unit test suite from `backends/webdav.php` (because the middle part of +the name of the script is `webdav`) and finally tries to call +`stop-webdav-ownCloud.sh` for cleanup purposes. + +If `common-tests` is supplied as second argument it will skip the backend specific +part completely and just run the common files_external unit tests: + + ./autotest-external.sh sqlite common-tests + +## The more manual way of unit test execution + +If you want to debug your external storage provider, you maybe don't want to +fire it up, execute the unit tests and clean everything up for each debugging +step. In this case you can simply start the external storage provider instance +and run the unit test multiple times against the instance for debugging purposes. +To do this you just need to follow these steps (from within +`apps/files_external/tests`): + + 1. run the start step (`env/start-BACKEND-NAME.sh`) or start the environment by + hand (i.e. setting up an instance manually in a virtual box) + 2. run the unit tests with following command (you can repeat that step multiple times): + `phpunit --configuration ../../../tests/phpunit-autotest-external.xml backends/BACKEND.php` + 3. call the cleanup script (`env/stop-BACKEND-NAME.sh`) or cleanup by hand diff --git a/apps/files_external/tests/amazons3migration.php b/apps/files_external/tests/amazons3migration.php index 145213f5293..8c3ffbe521f 100644 --- a/apps/files_external/tests/amazons3migration.php +++ b/apps/files_external/tests/amazons3migration.php @@ -64,7 +64,7 @@ class AmazonS3Migration extends \Test\TestCase { $oldCache = new \OC\Files\Cache\Cache($this->oldId); // add file to old cache - $fileId = $oldCache->put('/', array('size' => 0, 'mtime' => time(), 'mimetype' => 'httpd/directory')); + $fileId = $oldCache->put('foobar', array('size' => 0, 'mtime' => time(), 'mimetype' => 'httpd/directory')); try { $this->instance = new \OC\Files\Storage\AmazonS3($this->params); @@ -80,7 +80,7 @@ class AmazonS3Migration extends \Test\TestCase { list($storageId, $path) = \OC\Files\Cache\Cache::getById($fileId); $this->assertSame($this->newId, $storageId); - $this->assertSame('/', $path); + $this->assertSame('foobar', $path); } public function testUpdateLegacyAndNewId () { @@ -127,4 +127,4 @@ class AmazonS3Migration extends \Test\TestCase { ); $stmt->execute(array($id)); } -}
\ No newline at end of file +} diff --git a/apps/files_external/tests/backends/ftp.php b/apps/files_external/tests/backends/ftp.php index 842b7f43fa8..d62759889b1 100644 --- a/apps/files_external/tests/backends/ftp.php +++ b/apps/files_external/tests/backends/ftp.php @@ -15,12 +15,12 @@ class FTP extends Storage { parent::setUp(); $id = $this->getUniqueID(); - $this->config = include('files_external/tests/config.php'); - if ( ! is_array($this->config) or ! isset($this->config['ftp']) or ! $this->config['ftp']['run']) { + $this->config = include('files_external/tests/config.ftp.php'); + if ( ! is_array($this->config) or ! $this->config['run']) { $this->markTestSkipped('FTP backend not configured'); } - $this->config['ftp']['root'] .= '/' . $id; //make sure we have an new empty folder to work in - $this->instance = new \OC\Files\Storage\FTP($this->config['ftp']); + $this->config['root'] .= '/' . $id; //make sure we have an new empty folder to work in + $this->instance = new \OC\Files\Storage\FTP($this->config); $this->instance->mkdir('/'); } diff --git a/apps/files_external/tests/backends/sftp.php b/apps/files_external/tests/backends/sftp.php index 703b37d93f1..1369580e916 100644 --- a/apps/files_external/tests/backends/sftp.php +++ b/apps/files_external/tests/backends/sftp.php @@ -29,12 +29,12 @@ class SFTP extends Storage { parent::setUp(); $id = $this->getUniqueID(); - $this->config = include('files_external/tests/config.php'); - if ( ! is_array($this->config) or ! isset($this->config['sftp']) or ! $this->config['sftp']['run']) { + $this->config = include('files_external/tests/config.sftp.php'); + if (!is_array($this->config) or !$this->config['run']) { $this->markTestSkipped('SFTP backend not configured'); } - $this->config['sftp']['root'] .= '/' . $id; //make sure we have an new empty folder to work in - $this->instance = new \OC\Files\Storage\SFTP($this->config['sftp']); + $this->config['root'] .= '/' . $id; //make sure we have an new empty folder to work in + $this->instance = new \OC\Files\Storage\SFTP($this->config); $this->instance->mkdir('/'); } diff --git a/apps/files_external/tests/backends/sftp_key.php b/apps/files_external/tests/backends/sftp_key.php new file mode 100644 index 00000000000..4e55cc37ca3 --- /dev/null +++ b/apps/files_external/tests/backends/sftp_key.php @@ -0,0 +1,85 @@ +<?php + +/** + * ownCloud + * + * @author Henrik Kjölhede + * @copyright 2013 Henrik Kjölhede hkjolhede@gmail.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/>. + */ + +namespace Test\Files\Storage; + +class SFTP_Key extends Storage { + private $config; + + protected function setUp() { + parent::setUp(); + + $id = $this->getUniqueID(); + $this->config = include('files_external/tests/config.php'); + if ( ! is_array($this->config) or ! isset($this->config['sftp_key']) or ! $this->config['sftp_key']['run']) { + $this->markTestSkipped('SFTP with key backend not configured'); + } + $this->config['sftp_key']['root'] .= '/' . $id; //make sure we have an new empty folder to work in + $this->instance = new \OC\Files\Storage\SFTP_Key($this->config['sftp_key']); + $this->instance->mkdir('/'); + } + + protected function tearDown() { + if ($this->instance) { + $this->instance->rmdir('/'); + } + + parent::tearDown(); + } + + /** + * @expectedException InvalidArgumentException + */ + public function testInvalidAddressShouldThrowException() { + # I'd use example.com for this, but someone decided to break the spec and make it resolve + $this->instance->assertHostAddressValid('notarealaddress...'); + } + + public function testValidAddressShouldPass() { + $this->assertTrue($this->instance->assertHostAddressValid('localhost')); + } + + /** + * @expectedException InvalidArgumentException + */ + public function testNegativePortNumberShouldThrowException() { + $this->instance->assertPortNumberValid('-1'); + } + + /** + * @expectedException InvalidArgumentException + */ + public function testNonNumericalPortNumberShouldThrowException() { + $this->instance->assertPortNumberValid('a'); + } + + /** + * @expectedException InvalidArgumentException + */ + public function testHighPortNumberShouldThrowException() { + $this->instance->assertPortNumberValid('65536'); + } + + public function testValidPortNumberShouldPass() { + $this->assertTrue($this->instance->assertPortNumberValid('22222')); + } +} diff --git a/apps/files_external/tests/backends/smb.php b/apps/files_external/tests/backends/smb.php index 9e5ab2b331f..4b1150c6a25 100644 --- a/apps/files_external/tests/backends/smb.php +++ b/apps/files_external/tests/backends/smb.php @@ -10,24 +10,25 @@ namespace Test\Files\Storage; class SMB extends Storage { - private $config; - protected function setUp() { parent::setUp(); $id = $this->getUniqueID(); - $this->config = include('files_external/tests/config.php'); - if (!is_array($this->config) or !isset($this->config['smb']) or !$this->config['smb']['run']) { + $config = include('files_external/tests/config.smb.php'); + if (!is_array($config) or !$config['run']) { $this->markTestSkipped('Samba backend not configured'); } - $this->config['smb']['root'] .= $id; //make sure we have an new empty folder to work in - $this->instance = new \OC\Files\Storage\SMB($this->config['smb']); + if (substr($config['root'], -1, 1) != '/') { + $config['root'] .= '/'; + } + $config['root'] .= $id; //make sure we have an new empty folder to work in + $this->instance = new \OC\Files\Storage\SMB($config); $this->instance->mkdir('/'); } protected function tearDown() { if ($this->instance) { - \OCP\Files::rmdirr($this->instance->constructUrl('')); + $this->instance->rmdir(''); } parent::tearDown(); diff --git a/apps/files_external/tests/backends/webdav.php b/apps/files_external/tests/backends/webdav.php index c390612810d..c454c8e4a9d 100644 --- a/apps/files_external/tests/backends/webdav.php +++ b/apps/files_external/tests/backends/webdav.php @@ -10,8 +10,6 @@ namespace Test\Files\Storage; class DAV extends Storage { - private $config; - protected function setUp() { parent::setUp(); diff --git a/apps/files_external/tests/config.php b/apps/files_external/tests/config.php index 62aff4d1bc1..cf9cdfeead8 100644 --- a/apps/files_external/tests/config.php +++ b/apps/files_external/tests/config.php @@ -88,5 +88,13 @@ return array( 'user'=>'test', 'password'=>'test', 'root'=>'/test' - ) + ), + 'sftp_key' => array ( + 'run'=>false, + 'host'=>'localhost', + 'user'=>'test', + 'public_key'=>'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDJPTvz3OLonF2KSGEKP/nd4CPmRYvemG2T4rIiNYjDj0U5y+2sKEWbjiUlQl2bsqYuVoJ+/UNJlGQbbZ08kQirFeo1GoWBzqioaTjUJfbLN6TzVVKXxR9YIVmH7Ajg2iEeGCndGgbmnPfj+kF9TR9IH8vMVvtubQwf7uEwB0ALhw== phpseclib-generated-key', + 'private_key'=>'test', + 'root'=>'/test' + ), ); diff --git a/apps/files_external/tests/controller/globalstoragescontrollertest.php b/apps/files_external/tests/controller/globalstoragescontrollertest.php new file mode 100644 index 00000000000..7ba4d16a7e9 --- /dev/null +++ b/apps/files_external/tests/controller/globalstoragescontrollertest.php @@ -0,0 +1,41 @@ +<?php +/** + * ownCloud + * + * @author Vincent Petry + * Copyright (c) 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/>. + * + */ +namespace OCA\Files_external\Tests\Controller; + +use \OCA\Files_external\Controller\GlobalStoragesController; +use \OCA\Files_external\Service\GlobalStoragesService; +use \OCP\AppFramework\Http; +use \OCA\Files_external\NotFoundException; + +class GlobalStoragesControllerTest extends StoragesControllerTest { + public function setUp() { + parent::setUp(); + $this->service = $this->getMock('\OCA\Files_external\Service\GlobalStoragesService'); + + $this->controller = new GlobalStoragesController( + 'files_external', + $this->getMock('\OCP\IRequest'), + $this->getMock('\OCP\IL10N'), + $this->service + ); + } +} diff --git a/apps/files_external/tests/controller/storagescontrollertest.php b/apps/files_external/tests/controller/storagescontrollertest.php new file mode 100644 index 00000000000..853b4a86f03 --- /dev/null +++ b/apps/files_external/tests/controller/storagescontrollertest.php @@ -0,0 +1,225 @@ +<?php +/** + * ownCloud + * + * @author Vincent Petry + * Copyright (c) 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/>. + * + */ +namespace OCA\Files_external\Tests\Controller; + +use \OCP\AppFramework\Http; + +use \OCA\Files_external\Controller\GlobalStoragesController; +use \OCA\Files_external\Service\GlobalStoragesService; +use \OCA\Files_external\Lib\StorageConfig; +use \OCA\Files_external\NotFoundException; + +abstract class StoragesControllerTest extends \Test\TestCase { + + /** + * @var GlobalStoragesController + */ + protected $controller; + + /** + * @var GlobalStoragesService + */ + protected $service; + + public function setUp() { + \OC_Mount_Config::$skipTest = true; + } + + public function tearDown() { + \OC_Mount_Config::$skipTest = false; + } + + public function testAddStorage() { + $storageConfig = new StorageConfig(1); + $storageConfig->setMountPoint('mount'); + + $this->service->expects($this->once()) + ->method('addStorage') + ->will($this->returnValue($storageConfig)); + + $response = $this->controller->create( + 'mount', + '\OC\Files\Storage\SMB', + array(), + [], + [], + [], + null + ); + + $data = $response->getData(); + $this->assertEquals($storageConfig, $data); + $this->assertEquals(Http::STATUS_CREATED, $response->getStatus()); + } + + public function testUpdateStorage() { + $storageConfig = new StorageConfig(1); + $storageConfig->setMountPoint('mount'); + + $this->service->expects($this->once()) + ->method('updateStorage') + ->will($this->returnValue($storageConfig)); + + $response = $this->controller->update( + 1, + 'mount', + '\OC\Files\Storage\SMB', + array(), + [], + [], + [], + null + ); + + $data = $response->getData(); + $this->assertEquals($storageConfig, $data); + $this->assertEquals(Http::STATUS_OK, $response->getStatus()); + } + + function mountPointNamesProvider() { + return array( + array(''), + array('/'), + array('//'), + ); + } + + /** + * @dataProvider mountPointNamesProvider + */ + public function testAddOrUpdateStorageInvalidMountPoint($mountPoint) { + $this->service->expects($this->never()) + ->method('addStorage'); + $this->service->expects($this->never()) + ->method('updateStorage'); + + $response = $this->controller->create( + $mountPoint, + '\OC\Files\Storage\SMB', + array(), + [], + [], + [], + null + ); + + $this->assertEquals(Http::STATUS_UNPROCESSABLE_ENTITY, $response->getStatus()); + + $response = $this->controller->update( + 1, + $mountPoint, + '\OC\Files\Storage\SMB', + array(), + [], + [], + [], + null + ); + + $this->assertEquals(Http::STATUS_UNPROCESSABLE_ENTITY, $response->getStatus()); + } + + public function testAddOrUpdateStorageInvalidBackend() { + $this->service->expects($this->never()) + ->method('addStorage'); + $this->service->expects($this->never()) + ->method('updateStorage'); + + $response = $this->controller->create( + 'mount', + '\OC\Files\Storage\InvalidStorage', + array(), + [], + [], + [], + null + ); + + $this->assertEquals(Http::STATUS_UNPROCESSABLE_ENTITY, $response->getStatus()); + + $response = $this->controller->update( + 1, + 'mount', + '\OC\Files\Storage\InvalidStorage', + array(), + [], + [], + [], + null + ); + + $this->assertEquals(Http::STATUS_UNPROCESSABLE_ENTITY, $response->getStatus()); + } + + public function testUpdateStorageNonExisting() { + $this->service->expects($this->once()) + ->method('updateStorage') + ->will($this->throwException(new NotFoundException())); + + $response = $this->controller->update( + 255, + 'mount', + '\OC\Files\Storage\SMB', + array(), + [], + [], + [], + null + ); + + $this->assertEquals(Http::STATUS_NOT_FOUND, $response->getStatus()); + } + + public function testDeleteStorage() { + $this->service->expects($this->once()) + ->method('removeStorage'); + + $response = $this->controller->destroy(1); + $this->assertEquals(Http::STATUS_NO_CONTENT, $response->getStatus()); + } + + public function testDeleteStorageNonExisting() { + $this->service->expects($this->once()) + ->method('removeStorage') + ->will($this->throwException(new NotFoundException())); + + $response = $this->controller->destroy(255); + $this->assertEquals(Http::STATUS_NOT_FOUND, $response->getStatus()); + } + + public function testGetStorage() { + $storageConfig = new StorageConfig(1); + $storageConfig->setMountPoint('test'); + $storageConfig->setBackendClass('\OC\Files\Storage\SMB'); + $storageConfig->setBackendOptions(['user' => 'test', 'password', 'password123']); + $storageConfig->setMountOptions(['priority' => false]); + + $this->service->expects($this->once()) + ->method('getStorage') + ->with(1) + ->will($this->returnValue($storageConfig)); + $response = $this->controller->show(1); + + $this->assertEquals(Http::STATUS_OK, $response->getStatus()); + $this->assertEquals($storageConfig, $response->getData()); + } +} diff --git a/apps/files_external/tests/controller/userstoragescontrollertest.php b/apps/files_external/tests/controller/userstoragescontrollertest.php new file mode 100644 index 00000000000..0ba413f6959 --- /dev/null +++ b/apps/files_external/tests/controller/userstoragescontrollertest.php @@ -0,0 +1,114 @@ +<?php +/** + * ownCloud + * + * @author Vincent Petry + * Copyright (c) 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/>. + * + */ +namespace OCA\Files_external\Tests\Controller; + +use \OCA\Files_external\Controller\UserStoragesController; +use \OCA\Files_external\Service\UserStoragesService; +use \OCP\AppFramework\Http; +use \OCA\Files_external\NotFoundException; + +class UserStoragesControllerTest extends StoragesControllerTest { + + /** + * @var array + */ + private $oldAllowedBackends; + + public function setUp() { + parent::setUp(); + $this->service = $this->getMockBuilder('\OCA\Files_external\Service\UserStoragesService') + ->disableOriginalConstructor() + ->getMock(); + + $this->controller = new UserStoragesController( + 'files_external', + $this->getMock('\OCP\IRequest'), + $this->getMock('\OCP\IL10N'), + $this->service + ); + + $config = \OC::$server->getConfig(); + + $this->oldAllowedBackends = $config->getAppValue( + 'files_external', + 'user_mounting_backends', + '' + ); + $config->setAppValue( + 'files_external', + 'user_mounting_backends', + '\OC\Files\Storage\SMB' + ); + } + + public function tearDown() { + $config = \OC::$server->getConfig(); + $config->setAppValue( + 'files_external', + 'user_mounting_backends', + $this->oldAllowedBackends + ); + parent::tearDown(); + } + + function disallowedBackendClassProvider() { + return array( + array('\OC\Files\Storage\Local'), + array('\OC\Files\Storage\FTP'), + ); + } + /** + * @dataProvider disallowedBackendClassProvider + */ + public function testAddOrUpdateStorageDisallowedBackend($backendClass) { + $this->service->expects($this->never()) + ->method('addStorage'); + $this->service->expects($this->never()) + ->method('updateStorage'); + + $response = $this->controller->create( + 'mount', + $backendClass, + array(), + [], + [], + [], + null + ); + + $this->assertEquals(Http::STATUS_UNPROCESSABLE_ENTITY, $response->getStatus()); + + $response = $this->controller->update( + 1, + 'mount', + $backendClass, + array(), + [], + [], + [], + null + ); + + $this->assertEquals(Http::STATUS_UNPROCESSABLE_ENTITY, $response->getStatus()); + } + +} diff --git a/apps/files_external/tests/env/start-ftp-morrisjobke.sh b/apps/files_external/tests/env/start-ftp-morrisjobke.sh new file mode 100755 index 00000000000..3831e788e5e --- /dev/null +++ b/apps/files_external/tests/env/start-ftp-morrisjobke.sh @@ -0,0 +1,65 @@ +#!/bin/bash +# +# ownCloud +# +# This script start a docker container to test the files_external tests +# against. It will also change the files_external config to use the docker +# container as testing environment. This is reverted in the stop step.W +# +# Set environment variable DEBUG to print config file +# +# @author Morris Jobke +# @copyright 2015 Morris Jobke <hey@morrisjobke.de> +# + +if ! command -v docker >/dev/null 2>&1; then + echo "No docker executable found - skipped docker setup" + exit 0; +fi + +echo "Docker executable found - setup docker" + +echo "Fetch recent morrisjobke/docker-proftpd docker image" +docker pull morrisjobke/docker-proftpd + +# retrieve current folder to place the config in the parent folder +thisFolder=`echo $0 | replace "env/start-ftp-morrisjobke.sh" ""` + +if [ -z "$thisFolder" ]; then + thisFolder="." +fi; + +user=test +password=12345 + +container=`docker run -d -e USERNAME=$user -e PASSWORD=$password morrisjobke/docker-proftpd` + +host=`docker inspect $container | grep IPAddress | cut -d '"' -f 4` + +cat > $thisFolder/config.ftp.php <<DELIM +<?php + +return array( + 'run'=>true, + 'host'=>'$host', + 'user'=>'$user', + 'password'=>'$password', + 'root'=>'', +); + +DELIM + +echo "ftp container: $container" + +# put container IDs into a file to drop them after the test run (keep in mind that multiple tests run in parallel on the same host) +echo $container >> $thisFolder/dockerContainerMorrisJobke.$EXECUTOR_NUMBER.ftp + +if [ -n "$DEBUG" ]; then + cat $thisFolder/config.ftp.php + cat $thisFolder/dockerContainerMorrisJobke.$EXECUTOR_NUMBER.ftp +fi + +# TODO find a way to determine the successful initialization inside the docker container +echo "Waiting 5 seconds for ftp initialization ... " +sleep 5 + diff --git a/apps/files_external/tests/env/start-sftp-atmoz.sh b/apps/files_external/tests/env/start-sftp-atmoz.sh new file mode 100755 index 00000000000..f77c7a3fddd --- /dev/null +++ b/apps/files_external/tests/env/start-sftp-atmoz.sh @@ -0,0 +1,68 @@ +#!/bin/bash +# +# ownCloud +# +# This script start a docker container to test the files_external tests +# against. It will also change the files_external config to use the docker +# container as testing environment. This is reverted in the stop step.W +# +# Set environment variable DEBUG to print config file +# +# @author Morris Jobke +# @copyright 2015 Morris Jobke <hey@morrisjobke.de> +# + +if ! command -v docker >/dev/null 2>&1; then + echo "No docker executable found - skipped docker setup" + exit 0; +fi + +echo "Docker executable found - setup docker" + +echo "Fetch recent atmoz/sftp docker image" +docker pull atmoz/sftp + +# retrieve current folder to place the config in the parent folder +thisFolder=`echo $0 | replace "env/start-sftp-atmoz.sh" ""` + +if [ -z "$thisFolder" ]; then + thisFolder="." +fi; + +user=test +password=12345 + +container=`docker run -d atmoz/sftp $user:$password:1001` + +host=`docker inspect $container | grep IPAddress | cut -d '"' -f 4` + +cat > $thisFolder/config.sftp.php <<DELIM +<?php + +return array( + 'run'=>true, + 'host'=>'$host', + 'user'=>'$user', + 'password'=>'$password', + 'root'=>'upload', +); + +DELIM + +echo "sftp container: $container" + +# put container IDs into a file to drop them after the test run (keep in mind that multiple tests run in parallel on the same host) +echo $container >> $thisFolder/dockerContainerAtmoz.$EXECUTOR_NUMBER.sftp + +if [ -n "$DEBUG" ]; then + cat $thisFolder/config.sftp.php + cat $thisFolder/dockerContainerAtmoz.$EXECUTOR_NUMBER.sftp +fi + +# TODO find a way to determine the successful initialization inside the docker container +echo "Waiting 5 seconds for sftp initialization ... " +sleep 5 + +# create folder "upload" with correct permissions +docker exec $container bash -c "mkdir /home/$user/upload && chown $user:users /home/$user/upload" + diff --git a/apps/files_external/tests/env/start-smb-silvershell.sh b/apps/files_external/tests/env/start-smb-silvershell.sh new file mode 100755 index 00000000000..f72ad3f9e23 --- /dev/null +++ b/apps/files_external/tests/env/start-smb-silvershell.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# +# ownCloud +# +# This script start a docker container to test the files_external tests +# against. It will also change the files_external config to use the docker +# container as testing environment. This is reverted in the stop step.W +# +# Set environment variable DEBUG to print config file +# +# @author Morris Jobke +# @copyright 2015 Morris Jobke <hey@morrisjobke.de> +# + +if ! command -v docker >/dev/null 2>&1; then + echo "No docker executable found - skipped docker setup" + exit 0; +fi + +echo "Docker executable found - setup docker" + +echo "Fetch recent silvershell/samba docker image" +docker pull silvershell/samba + +# retrieve current folder to place the config in the parent folder +thisFolder=`echo $0 | replace "env/start-smb-silvershell.sh" ""` + +if [ -z "$thisFolder" ]; then + thisFolder="." +fi; + +container=`docker run -d -e SMB_USER=test -e SMB_PWD=test silvershell/samba` + +host=`docker inspect $container | grep IPAddress | cut -d '"' -f 4` + +cat > $thisFolder/config.smb.php <<DELIM +<?php + +return array( + 'run'=>true, + 'host'=>'$host', + 'user'=>'test', + 'password'=>'test', + 'root'=>'', + 'share'=>'public', +); + +DELIM + +echo "samba container: $container" + +# put container IDs into a file to drop them after the test run (keep in mind that multiple tests run in parallel on the same host) +echo $container >> $thisFolder/dockerContainerSilvershell.$EXECUTOR_NUMBER.smb + +if [ -n "$DEBUG" ]; then + cat $thisFolder/config.smb.php + cat $thisFolder/dockerContainerSilvershell.$EXECUTOR_NUMBER.smb +fi + +# TODO find a way to determine the successful initialization inside the docker container +echo "Waiting 5 seconds for smbd initialization ... " +sleep 5 + diff --git a/apps/files_external/tests/env/start-smb-windows.sh b/apps/files_external/tests/env/start-smb-windows.sh new file mode 100755 index 00000000000..d56b0d4f0b5 --- /dev/null +++ b/apps/files_external/tests/env/start-smb-windows.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# +# ownCloud +# +# Set environment variable DEBUG to print config file +# +# @author Thomas Müller +# @copyright 2015 Thomas Müller <deepdiver@owncloud.com> +# + +# retrieve current folder to place the config in the parent folder +thisFolder=`echo $0 | replace "env/start-smb-windows.sh" ""` + +if [ -z "$thisFolder" ]; then + thisFolder="." +fi; + +user=smb-test +password=!owncloud123 +host=WIN-9GTFAS08C15 + +cat > $thisFolder/config.smb.php <<DELIM +<?php + +return array( + 'run'=>true, + 'host'=>'$host', + 'user'=>'$user', + 'password'=>'$password', + 'share'=>'oc-test', + 'root'=>'', +); + +DELIM diff --git a/apps/files_external/tests/env/start-webdav-ownCloud.sh b/apps/files_external/tests/env/start-webdav-ownCloud.sh index c7267cff341..58b87e8f05d 100755 --- a/apps/files_external/tests/env/start-webdav-ownCloud.sh +++ b/apps/files_external/tests/env/start-webdav-ownCloud.sh @@ -28,6 +28,10 @@ docker pull morrisjobke/owncloud # retrieve current folder to place the config in the parent folder thisFolder=`echo $0 | replace "env/start-webdav-ownCloud.sh" ""` +if [ -z "$thisFolder" ]; then + thisFolder="." +fi; + if [ -n "$RUN_DOCKER_MYSQL" ]; then echo "Fetch recent mysql docker image" docker pull mysql @@ -78,5 +82,6 @@ if [ -n "$databaseContainer" ]; then fi if [ -n "$DEBUG" ]; then - echo $thisFolder/config.webdav.php + cat $thisFolder/config.webdav.php + cat $thisFolder/dockerContainerOwnCloud.$EXECUTOR_NUMBER.webdav fi diff --git a/apps/files_external/tests/env/stop-ftp-morrisjobke.sh b/apps/files_external/tests/env/stop-ftp-morrisjobke.sh new file mode 100755 index 00000000000..d8c6cc4f307 --- /dev/null +++ b/apps/files_external/tests/env/stop-ftp-morrisjobke.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# +# ownCloud +# +# This script stops the docker container the files_external tests were run +# against. It will also revert the config changes done in start step. +# +# @author Morris Jobke +# @copyright 2015 Morris Jobke <hey@morrisjobke.de> +# + +if ! command -v docker >/dev/null 2>&1; then + echo "No docker executable found - skipped docker stop" + exit 0; +fi + +echo "Docker executable found - stop and remove docker containers" + +# retrieve current folder to remove the config from the parent folder +thisFolder=`echo $0 | replace "env/stop-ftp-morrisjobke.sh" ""` + +if [ -z "$thisFolder" ]; then + thisFolder="." +fi; + +# stopping and removing docker containers +for container in `cat $thisFolder/dockerContainerMorrisJobke.$EXECUTOR_NUMBER.ftp`; do + echo "Stopping and removing docker container $container" + # kills running container and removes it + docker rm -f $container +done; + +# cleanup +rm $thisFolder/config.ftp.php +rm $thisFolder/dockerContainerMorrisJobke.$EXECUTOR_NUMBER.ftp + diff --git a/apps/files_external/tests/env/stop-sftp-atmoz.sh b/apps/files_external/tests/env/stop-sftp-atmoz.sh new file mode 100755 index 00000000000..829855c807c --- /dev/null +++ b/apps/files_external/tests/env/stop-sftp-atmoz.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# +# ownCloud +# +# This script stops the docker container the files_external tests were run +# against. It will also revert the config changes done in start step. +# +# @author Morris Jobke +# @copyright 2015 Morris Jobke <hey@morrisjobke.de> +# + +if ! command -v docker >/dev/null 2>&1; then + echo "No docker executable found - skipped docker stop" + exit 0; +fi + +echo "Docker executable found - stop and remove docker containers" + +# retrieve current folder to remove the config from the parent folder +thisFolder=`echo $0 | replace "env/stop-sftp-atmoz.sh" ""` + +if [ -z "$thisFolder" ]; then + thisFolder="." +fi; + +# stopping and removing docker containers +for container in `cat $thisFolder/dockerContainerAtmoz.$EXECUTOR_NUMBER.sftp`; do + echo "Stopping and removing docker container $container" + # kills running container and removes it + docker rm -f $container +done; + +# cleanup +rm $thisFolder/config.sftp.php +rm $thisFolder/dockerContainerAtmoz.$EXECUTOR_NUMBER.sftp + diff --git a/apps/files_external/tests/env/stop-smb-silvershell.sh b/apps/files_external/tests/env/stop-smb-silvershell.sh new file mode 100755 index 00000000000..6ae28d15506 --- /dev/null +++ b/apps/files_external/tests/env/stop-smb-silvershell.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# +# ownCloud +# +# This script stops the docker container the files_external tests were run +# against. It will also revert the config changes done in start step. +# +# @author Morris Jobke +# @copyright 2015 Morris Jobke <hey@morrisjobke.de> +# + +if ! command -v docker >/dev/null 2>&1; then + echo "No docker executable found - skipped docker stop" + exit 0; +fi + +echo "Docker executable found - stop and remove docker containers" + +# retrieve current folder to remove the config from the parent folder +thisFolder=`echo $0 | replace "env/stop-smb-silvershell.sh" ""` + +if [ -z "$thisFolder" ]; then + thisFolder="." +fi; + +# stopping and removing docker containers +for container in `cat $thisFolder/dockerContainerSilvershell.$EXECUTOR_NUMBER.smb`; do + echo "Stopping and removing docker container $container" + # kills running container and removes it + docker rm -f $container +done; + +# cleanup +rm $thisFolder/config.smb.php +rm $thisFolder/dockerContainerSilvershell.$EXECUTOR_NUMBER.smb + diff --git a/apps/files_external/tests/env/stop-smb-windows.sh b/apps/files_external/tests/env/stop-smb-windows.sh new file mode 100755 index 00000000000..8e9c82b9569 --- /dev/null +++ b/apps/files_external/tests/env/stop-smb-windows.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# +# ownCloud +# +# @author Thomas Müller +# @copyright 2015 Thomas Müller <deepdiver@owncloud.com> +# + +# retrieve current folder to remove the config from the parent folder +thisFolder=`echo $0 | replace "env/stop-smb-windows.sh" ""` + +if [ -z "$thisFolder" ]; then + thisFolder="." +fi; + + +# cleanup +rm $thisFolder/config.smb.php diff --git a/apps/files_external/tests/env/stop-webdav-ownCloud.sh b/apps/files_external/tests/env/stop-webdav-ownCloud.sh index 2f06eadcf7c..9d75c2bbd03 100755 --- a/apps/files_external/tests/env/stop-webdav-ownCloud.sh +++ b/apps/files_external/tests/env/stop-webdav-ownCloud.sh @@ -19,14 +19,9 @@ echo "Docker executable found - stop and remove docker containers" # retrieve current folder to remove the config from the parent folder thisFolder=`echo $0 | replace "env/stop-webdav-ownCloud.sh" ""` -echo "DEBUG" - -netstat -tlpen - -echo "CONFIG:" - -cat $thisFolder/config.webdav.php -cat $thisFolder/dockerContainerOwnCloud.$EXECUTOR_NUMBER.webdav +if [ -z "$thisFolder" ]; then + thisFolder="." +fi; # stopping and removing docker containers for container in `cat $thisFolder/dockerContainerOwnCloud.$EXECUTOR_NUMBER.webdav`; do diff --git a/apps/files_external/tests/js/settingsSpec.js b/apps/files_external/tests/js/settingsSpec.js new file mode 100644 index 00000000000..5a3ee2cb5f1 --- /dev/null +++ b/apps/files_external/tests/js/settingsSpec.js @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com> + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +describe('OCA.External.Settings tests', function() { + var clock; + var select2Stub; + var select2ApplicableUsers; + + beforeEach(function() { + clock = sinon.useFakeTimers(); + select2Stub = sinon.stub($.fn, 'select2', function(args) { + if (args === 'val') { + return select2ApplicableUsers; + } + return { + on: function() {} + }; + }); + + // view still requires an existing DOM table + $('#testArea').append( + '<table id="externalStorage" data-admin="true">' + + '<thead></thead>' + + '<tbody>' + + '<tr id="addMountPoint" data-id="">' + + '<td class="status"></td>' + + '<td class="mountPoint"><input type="text" name="mountPoint"/></td>' + + '<td class="backend">' + + '<select class="selectBackend">' + + '<option disable selected>Add storage</option>' + + '<option value="\\OC\\TestBackend">Test Backend</option>' + + '<option value="\\OC\\AnotherTestBackend">Another Test Backend</option>' + + '</select>' + + '</td>' + + '<td class="configuration"></td>' + + '<td class="applicable">' + + '<input type="hidden" class="applicableUsers">' + + '</td>' + + '<td><img alt="Delete" title="Delete" class="svg action"/></td>' + + '</tr>' + + '</tbody>' + + '</table>' + ); + // these are usually appended into the data attribute + // within the DOM by the server template + $('#externalStorage .selectBackend:first').data('configurations', { + '\\OC\\TestBackend': { + 'backend': 'Test Backend Name', + 'configuration': { + 'field1': 'Display Name 1', + 'field2': '&Display Name 2' + }, + 'priority': 11 + }, + '\\OC\\AnotherTestBackend': { + 'backend': 'Another Test Backend Name', + 'configuration': { + 'field1': 'Display Name 1', + 'field2': '&Display Name 2' + }, + 'priority': 12 + } + } + ); + }); + afterEach(function() { + select2Stub.restore(); + clock.restore(); + }); + + describe('storage configuration', function() { + var view; + + function selectBackend(backendName) { + view.$el.find('.selectBackend:first').val('\\OC\\TestBackend').trigger('change'); + } + + beforeEach(function() { + var $el = $('#externalStorage'); + view = new OCA.External.Settings.MountConfigListView($el); + }); + afterEach(function() { + view = null; + }); + describe('selecting backend', function() { + it('populates the row and creates a new empty one', function() { + var $firstRow = view.$el.find('tr:first'); + selectBackend('\\OC\\TestBackend'); + expect($firstRow.find('.backend').text()).toEqual('Test Backend'); + expect($firstRow.find('.selectBackend').length).toEqual(0); + + // TODO: check "remove" button visibility + + // the suggested mount point name + expect($firstRow.find('[name=mountPoint]').val()).toEqual('TestBackend'); + + // TODO: check that the options have been created + + // TODO: check select2 call on the ".applicableUsers" element + + var $emptyRow = $firstRow.next('tr'); + expect($emptyRow.length).toEqual(1); + expect($emptyRow.find('.selectBackend').length).toEqual(1); + expect($emptyRow.find('.applicable select').length).toEqual(0); + + // TODO: check "remove" button visibility + }); + // TODO: test with personal mounts (no applicable fields) + // TODO: test suggested mount point logic + }); + describe('saving storages', function() { + it('saves storage after editing config', function() { + var $tr = view.$el.find('tr:first'); + selectBackend('\\OC\\TestBackend'); + + var $field1 = $tr.find('input[data-parameter=field1]'); + expect($field1.length).toEqual(1); + $field1.val('test'); + $field1.trigger(new $.Event('keyup', {keyCode: 97})); + + clock.tick(4000); + + expect(fakeServer.requests.length).toEqual(1); + var request = fakeServer.requests[0]; + expect(request.url).toEqual(OC.webroot + '/index.php/apps/files_external/globalstorages'); + expect(OC.parseQueryString(request.requestBody)).toEqual({ + backendClass: '\\OC\\TestBackend', + 'backendOptions[field1]': 'test', + 'backendOptions[field2]': '', + mountPoint: 'TestBackend', + priority: '11' + }); + + // TODO: respond and check data-id + }); + // TODO: tests with "applicableUsers" and "applicableGroups" + // TODO: test with non-optional config parameters + // TODO: test with missing mount point value + // TODO: test with personal mounts (no applicable fields) + // TODO: test save triggers: paste, keyup, checkbox + // TODO: test "custom" field with addScript + // TODO: status indicator + }); + describe('update storage', function() { + // TODO + }); + describe('delete storage', function() { + // TODO + }); + describe('recheck storages', function() { + // TODO + }); + }); + describe('applicable user list', function() { + // TODO: test select2 retrieval logic + }); + describe('allow user mounts section', function() { + // TODO: test allowUserMounting section + }); +}); diff --git a/apps/files_external/tests/mountconfig.php b/apps/files_external/tests/mountconfig.php index f288d02705c..645f0c64e11 100644 --- a/apps/files_external/tests/mountconfig.php +++ b/apps/files_external/tests/mountconfig.php @@ -3,6 +3,7 @@ * ownCloud * * @author Vincent Petry + * @author Robin McCorkell * Copyright (c) 2013 Vincent Petry <pvince81@owncloud.com> * * This library is free software; you can redistribute it and/or @@ -20,18 +21,61 @@ * */ -class Test_Mount_Config_Dummy_Storage { +class Test_Mount_Config_Dummy_Storage extends \OC\Files\Storage\Common { public function __construct($params) { if (isset($params['simulateFail']) && $params['simulateFail'] == true) { throw new \Exception('Simulated config validation fail'); } } + public function getId() { + return 'dummy_storage'; + } + + public function mkdir($path) { + return false; + } + + public function rmdir($path) { + return false; + } + + public function opendir($path) { + return false; + } + + public function filetype($path) { + return false; + } + + public function file_exists($path) { + return false; + } + + public function unlink($path) { + return false; + } + + public function fopen($path, $mode) { + return false; + } + + public function touch($path, $mtime = null) { + return false; + } + + public function stat($path) { + return false; + } + public function test() { return true; } } +class Test_Mount_Config_Storage_No_Personal extends Test_Mount_Config_Dummy_Storage { +} + class Test_Mount_Config_Hook_Test { static $signal; static $params; @@ -94,6 +138,12 @@ class Test_Mount_Config extends \Test\TestCase { 'configuration' => array() ) ); + OC_Mount_Config::registerBackend('Test_Mount_Config_Storage_No_Personal', array( + 'backend' => 'dummy no personal', + 'priority' => 150, + 'configuration' => array() + ) + ); \OC_User::createUser(self::TEST_USER1, self::TEST_USER1); \OC_User::createUser(self::TEST_USER2, self::TEST_USER2); @@ -120,11 +170,10 @@ class Test_Mount_Config extends \Test\TestCase { 'user_mounting_backends', '' ); - $this->allBackends = OC_Mount_Config::getBackends(); OCP\Config::setAppValue( 'files_external', 'user_mounting_backends', - implode(',', array_keys($this->allBackends)) + 'Test_Mount_Config_Dummy_Storage' ); OC_Mount_Config::$skipTest = true; @@ -203,7 +252,7 @@ class Test_Mount_Config extends \Test\TestCase { 'password' => '12345', ); - $this->assertEquals(true, OC_Mount_Config::addMountPoint('/ext', '\OC\Files\Storage\SFTP', $storageOptions, $mountType, $applicable, $isPersonal)); + $this->assertEquals(0, OC_Mount_Config::addMountPoint('/ext', 'Test_Mount_Config_Dummy_Storage', $storageOptions, $mountType, $applicable, $isPersonal)); $config = $this->readGlobalConfig(); $this->assertEquals(1, count($config)); @@ -211,7 +260,7 @@ class Test_Mount_Config extends \Test\TestCase { $this->assertTrue(isset($config[$mountType][$applicable])); $this->assertTrue(isset($config[$mountType][$applicable]['/$user/files/ext'])); $this->assertEquals( - '\OC\Files\Storage\SFTP', + 'Test_Mount_Config_Dummy_Storage', $config[$mountType][$applicable]['/$user/files/ext']['class'] ); } @@ -230,7 +279,7 @@ class Test_Mount_Config extends \Test\TestCase { 'password' => '12345', ); - $this->assertEquals(true, OC_Mount_Config::addMountPoint('/ext', '\OC\Files\Storage\SFTP', $storageOptions, $mountType, $applicable, $isPersonal)); + $this->assertEquals(0, OC_Mount_Config::addMountPoint('/ext', 'Test_Mount_Config_Dummy_Storage', $storageOptions, $mountType, $applicable, $isPersonal)); $config = $this->readUserConfig(); $this->assertEquals(1, count($config)); @@ -238,7 +287,7 @@ class Test_Mount_Config extends \Test\TestCase { $this->assertTrue(isset($config[$mountType][$applicable])); $this->assertTrue(isset($config[$mountType][$applicable]['/' . self::TEST_USER1 . '/files/ext'])); $this->assertEquals( - '\OC\Files\Storage\SFTP', + 'Test_Mount_Config_Dummy_Storage', $config[$mountType][$applicable]['/' . self::TEST_USER1 . '/files/ext']['class'] ); } @@ -252,14 +301,7 @@ class Test_Mount_Config extends \Test\TestCase { $isPersonal = true; // local - $this->assertFalse(OC_Mount_Config::addMountPoint('/ext', '\OC\Files\storage\local', array(), $mountType, $applicable, $isPersonal)); - - unset($this->allBackends['\OC\Files\Storage\SFTP']); - OCP\Config::setAppValue( - 'files_external', - 'user_mounting_backends', - implode(',', array_keys($this->allBackends)) - ); + $this->assertFalse(OC_Mount_Config::addMountPoint('/ext', '\OC\Files\Storage\Local', array(), $mountType, $applicable, $isPersonal)); $storageOptions = array( 'host' => 'localhost', @@ -268,7 +310,7 @@ class Test_Mount_Config extends \Test\TestCase { ); // non-local but forbidden - $this->assertFalse(OC_Mount_Config::addMountPoint('/ext', '\OC\Files\Storage\SFTP', $storageOptions, $mountType, $applicable, $isPersonal)); + $this->assertFalse(OC_Mount_Config::addMountPoint('/ext', 'Test_Mount_Config_Storage_No_Personal', $storageOptions, $mountType, $applicable, $isPersonal)); $this->assertFalse(file_exists($this->userHome . '/mount.json')); } @@ -340,10 +382,11 @@ class Test_Mount_Config extends \Test\TestCase { ); // write config - $this->assertTrue( + $this->assertEquals( + 0, OC_Mount_Config::addMountPoint( '/ext', - '\OC\Files\Storage\SMB', + 'Test_Mount_Config_Dummy_Storage', $options, $mountType, $applicable, @@ -354,7 +397,7 @@ class Test_Mount_Config extends \Test\TestCase { // re-read config $config = OC_Mount_Config::getSystemMountPoints(); $this->assertEquals(1, count($config)); - $this->assertEquals('\OC\Files\Storage\SMB', $config[0]['class']); + $this->assertEquals('Test_Mount_Config_Dummy_Storage', $config[0]['class']); $this->assertEquals('ext', $config[0]['mountpoint']); $this->assertEquals($expectApplicableArray, $config[0]['applicable']); $savedOptions = $config[0]['options']; @@ -380,10 +423,11 @@ class Test_Mount_Config extends \Test\TestCase { ); // write config - $this->assertTrue( + $this->assertEquals( + 0, OC_Mount_Config::addMountPoint( '/ext', - '\OC\Files\Storage\SMB', + 'Test_Mount_Config_Dummy_Storage', $options, $mountType, $applicable, @@ -394,7 +438,7 @@ class Test_Mount_Config extends \Test\TestCase { // re-read config $config = OC_Mount_Config::getPersonalMountPoints(); $this->assertEquals(1, count($config)); - $this->assertEquals('\OC\Files\Storage\SMB', $config[0]['class']); + $this->assertEquals('Test_Mount_Config_Dummy_Storage', $config[0]['class']); $this->assertEquals('ext', $config[0]['mountpoint']); $savedOptions = $config[0]['options']; $this->assertEquals($options, $savedOptions); @@ -417,10 +461,11 @@ class Test_Mount_Config extends \Test\TestCase { ); // write config - $this->assertTrue( + $this->assertEquals( + 0, OC_Mount_Config::addMountPoint( $mountPoint, - '\OC\Files\Storage\SMB', + 'Test_Mount_Config_Dummy_Storage', $mountConfig, $mountType, $applicable, @@ -450,10 +495,11 @@ class Test_Mount_Config extends \Test\TestCase { // edit $mountConfig['host'] = 'anothersmbhost'; - $this->assertTrue( + $this->assertEquals( + 0, OC_Mount_Config::addMountPoint( $mountPoint, - '\OC\Files\Storage\SMB', + 'Test_Mount_Config_Dummy_Storage', $mountConfig, $mountType, $applicable, @@ -515,10 +561,11 @@ class Test_Mount_Config extends \Test\TestCase { ); // write config - $this->assertTrue( + $this->assertEquals( + 0, OC_Mount_Config::addMountPoint( '/ext', - '\OC\Files\Storage\SMB', + 'Test_Mount_Config_Dummy_Storage', $mountConfig, $mountType, $applicable, @@ -556,10 +603,11 @@ class Test_Mount_Config extends \Test\TestCase { ); // write config - $this->assertTrue( + $this->assertEquals( + 0, OC_Mount_Config::addMountPoint( '/ext', - '\OC\Files\Storage\SMB', + 'Test_Mount_Config_Dummy_Storage', $mountConfig, $mountType, $applicable, @@ -665,10 +713,11 @@ class Test_Mount_Config extends \Test\TestCase { ); // add mount point as "test" user - $this->assertTrue( + $this->assertEquals( + 0, OC_Mount_Config::addMountPoint( '/ext', - '\OC\Files\Storage\SMB', + 'Test_Mount_Config_Dummy_Storage', $mountConfig, $mountType, $applicable, @@ -683,7 +732,7 @@ class Test_Mount_Config extends \Test\TestCase { if ($expectVisible) { $this->assertEquals(1, count($mountPoints)); $this->assertTrue(isset($mountPoints['/' . self::TEST_USER1 . '/files/ext'])); - $this->assertEquals('\OC\Files\Storage\SMB', $mountPoints['/' . self::TEST_USER1 . '/files/ext']['class']); + $this->assertEquals('Test_Mount_Config_Dummy_Storage', $mountPoints['/' . self::TEST_USER1 . '/files/ext']['class']); $this->assertEquals($mountConfig, $mountPoints['/' . self::TEST_USER1 . '/files/ext']['options']); } else { @@ -708,10 +757,11 @@ class Test_Mount_Config extends \Test\TestCase { ); // write config - $this->assertTrue( + $this->assertEquals( + 0, OC_Mount_Config::addMountPoint( '/ext', - '\OC\Files\Storage\SMB', + 'Test_Mount_Config_Dummy_Storage', $options, OC_Mount_Config::MOUNT_TYPE_USER, self::TEST_USER1, @@ -719,10 +769,11 @@ class Test_Mount_Config extends \Test\TestCase { ) ); - $this->assertTrue( + $this->assertEquals( + 0, OC_Mount_Config::addMountPoint( '/ext', - '\OC\Files\Storage\SMB', + 'Test_Mount_Config_Dummy_Storage', $options, OC_Mount_Config::MOUNT_TYPE_USER, self::TEST_USER2, @@ -730,10 +781,11 @@ class Test_Mount_Config extends \Test\TestCase { ) ); - $this->assertTrue( + $this->assertEquals( + 0, OC_Mount_Config::addMountPoint( '/ext', - '\OC\Files\Storage\SMB', + 'Test_Mount_Config_Dummy_Storage', $options, OC_Mount_Config::MOUNT_TYPE_GROUP, self::TEST_GROUP2, @@ -741,10 +793,11 @@ class Test_Mount_Config extends \Test\TestCase { ) ); - $this->assertTrue( + $this->assertEquals( + 0, OC_Mount_Config::addMountPoint( '/ext', - '\OC\Files\Storage\SMB', + 'Test_Mount_Config_Dummy_Storage', $options, OC_Mount_Config::MOUNT_TYPE_GROUP, self::TEST_GROUP1, @@ -755,7 +808,7 @@ class Test_Mount_Config extends \Test\TestCase { // re-read config $config = OC_Mount_Config::getSystemMountPoints(); $this->assertEquals(1, count($config)); - $this->assertEquals('\OC\Files\Storage\SMB', $config[0]['class']); + $this->assertEquals('Test_Mount_Config_Dummy_Storage', $config[0]['class']); $this->assertEquals('ext', $config[0]['mountpoint']); $this->assertEquals($options, $config[0]['options']); $this->assertEquals(array(self::TEST_USER1, self::TEST_USER2), $config[0]['applicable']['users']); @@ -779,10 +832,11 @@ class Test_Mount_Config extends \Test\TestCase { ); // write config - $this->assertTrue( + $this->assertEquals( + 0, OC_Mount_Config::addMountPoint( '/ext', - '\OC\Files\Storage\SMB', + 'Test_Mount_Config_Dummy_Storage', $options1, $mountType, self::TEST_USER1, @@ -797,10 +851,11 @@ class Test_Mount_Config extends \Test\TestCase { 'share' => 'anothersmbshare', 'root' => 'anothersmbroot' ); - $this->assertTrue( + $this->assertEquals( + 0, OC_Mount_Config::addMountPoint( '/ext', - '\OC\Files\Storage\SMB', + 'Test_Mount_Config_Dummy_Storage', $options2, $mountType, self::TEST_USER2, @@ -811,10 +866,10 @@ class Test_Mount_Config extends \Test\TestCase { // re-read config $config = OC_Mount_Config::getSystemMountPoints(); $this->assertEquals(2, count($config)); - $this->assertEquals('\OC\Files\Storage\SMB', $config[0]['class']); + $this->assertEquals('Test_Mount_Config_Dummy_Storage', $config[0]['class']); $this->assertEquals('ext', $config[0]['mountpoint']); $this->assertEquals($options1, $config[0]['options']); - $this->assertEquals('\OC\Files\Storage\SMB', $config[1]['class']); + $this->assertEquals('Test_Mount_Config_Dummy_Storage', $config[1]['class']); $this->assertEquals('ext', $config[1]['mountpoint']); $this->assertEquals($options2, $config[1]['options']); } @@ -910,10 +965,11 @@ class Test_Mount_Config extends \Test\TestCase { // Add mount points foreach($mounts as $i => $mount) { - $this->assertTrue( + $this->assertEquals( + 0, OC_Mount_Config::addMountPoint( '/ext', - '\OC\Files\Storage\SMB', + 'Test_Mount_Config_Dummy_Storage', $mountConfig + array('id' => $i), $mount['mountType'], $mount['applicable'], @@ -935,7 +991,7 @@ class Test_Mount_Config extends \Test\TestCase { */ public function testPriorityPersistence() { - $class = '\OC\Files\Storage\SMB'; + $class = 'Test_Mount_Config_Dummy_Storage'; $priority = 123; $mountConfig = array( 'host' => 'somehost', @@ -945,7 +1001,8 @@ class Test_Mount_Config extends \Test\TestCase { 'share' => '', ); - $this->assertTrue( + $this->assertEquals( + 0, OC_Mount_Config::addMountPoint( '/ext', $class, @@ -963,7 +1020,8 @@ class Test_Mount_Config extends \Test\TestCase { $mountPoints['/'.self::TEST_USER1.'/files/ext']['priority']); // Simulate changed mount options (without priority set) - $this->assertTrue( + $this->assertEquals( + 0, OC_Mount_Config::addMountPoint( '/ext', $class, @@ -993,10 +1051,11 @@ class Test_Mount_Config extends \Test\TestCase { ); // Create personal mount point - $this->assertTrue( + $this->assertEquals( + 0, OC_Mount_Config::addMountPoint( '/ext', - '\OC\Files\Storage\SMB', + 'Test_Mount_Config_Dummy_Storage', $mountConfig, OC_Mount_Config::MOUNT_TYPE_USER, self::TEST_USER1, @@ -1012,7 +1071,7 @@ class Test_Mount_Config extends \Test\TestCase { $this->assertEquals(0, count($mountPointsMe)); $this->assertEquals(1, count($mountPointsOther)); $this->assertTrue(isset($mountPointsOther['/'.self::TEST_USER1.'/files/ext'])); - $this->assertEquals('\OC\Files\Storage\SMB', + $this->assertEquals('Test_Mount_Config_Dummy_Storage', $mountPointsOther['/'.self::TEST_USER1.'/files/ext']['class']); $this->assertEquals($mountConfig, $mountPointsOther['/'.self::TEST_USER1.'/files/ext']['options']); @@ -1024,7 +1083,8 @@ class Test_Mount_Config extends \Test\TestCase { $applicable = 'all'; $isPersonal = false; - $this->assertTrue( + $this->assertEquals( + 0, OC_Mount_Config::addMountPoint( '/ext', $storageClass, diff --git a/apps/files_external/tests/owncloudfunctions.php b/apps/files_external/tests/owncloudfunctions.php index 8232f30a5e2..ca9a8b231f1 100644 --- a/apps/files_external/tests/owncloudfunctions.php +++ b/apps/files_external/tests/owncloudfunctions.php @@ -68,6 +68,14 @@ class OwnCloudFunctions extends \Test\TestCase { ), 'http://testhost/testroot/remote.php/webdav/subdir/', ), + array( + array( + 'host' => 'http://testhost/testroot/', + 'root' => '/subdir', + 'secure' => false + ), + 'http://testhost/testroot/remote.php/webdav/subdir/', + ), ); } diff --git a/apps/files_external/tests/service/globalstoragesservicetest.php b/apps/files_external/tests/service/globalstoragesservicetest.php new file mode 100644 index 00000000000..4c038bc489e --- /dev/null +++ b/apps/files_external/tests/service/globalstoragesservicetest.php @@ -0,0 +1,815 @@ +<?php +/** + * ownCloud + * + * @author Vincent Petry + * Copyright (c) 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/>. + * + */ +namespace OCA\Files_external\Tests\Service; + +use \OC\Files\Filesystem; + +use \OCA\Files_external\Service\GlobalStoragesService; +use \OCA\Files_external\NotFoundException; +use \OCA\Files_external\Lib\StorageConfig; + +class GlobalStoragesServiceTest extends StoragesServiceTest { + public function setUp() { + parent::setUp(); + $this->service = new GlobalStoragesService(); + } + + public function tearDown() { + @unlink($this->dataDir . '/mount.json'); + parent::tearDown(); + } + + protected function makeTestStorageData() { + return $this->makeStorageConfig([ + 'mountPoint' => 'mountpoint', + 'backendClass' => '\OC\Files\Storage\SMB', + 'backendOptions' => [ + 'option1' => 'value1', + 'option2' => 'value2', + 'password' => 'testPassword', + ], + 'applicableUsers' => [], + 'applicableGroups' => [], + 'priority' => 15, + 'mountOptions' => [ + 'preview' => false, + ] + ]); + } + + function storageDataProvider() { + return [ + // all users + [ + $this->makeStorageConfig([ + 'mountPoint' => 'mountpoint', + 'backendClass' => '\OC\Files\Storage\SMB', + 'backendOptions' => [ + 'option1' => 'value1', + 'option2' => 'value2', + 'password' => 'testPassword', + ], + 'applicableUsers' => [], + 'applicableGroups' => [], + 'priority' => 15, + ]), + ], + // some users + [ + $this->makeStorageConfig([ + 'mountPoint' => 'mountpoint', + 'backendClass' => '\OC\Files\Storage\SMB', + 'backendOptions' => [ + 'option1' => 'value1', + 'option2' => 'value2', + 'password' => 'testPassword', + ], + 'applicableUsers' => ['user1', 'user2'], + 'applicableGroups' => [], + 'priority' => 15, + ]), + ], + // some groups + [ + $this->makeStorageConfig([ + 'mountPoint' => 'mountpoint', + 'backendClass' => '\OC\Files\Storage\SMB', + 'backendOptions' => [ + 'option1' => 'value1', + 'option2' => 'value2', + 'password' => 'testPassword', + ], + 'applicableUsers' => [], + 'applicableGroups' => ['group1', 'group2'], + 'priority' => 15, + ]), + ], + // both users and groups + [ + $this->makeStorageConfig([ + 'mountPoint' => 'mountpoint', + 'backendClass' => '\OC\Files\Storage\SMB', + 'backendOptions' => [ + 'option1' => 'value1', + 'option2' => 'value2', + 'password' => 'testPassword', + ], + 'applicableUsers' => ['user1', 'user2'], + 'applicableGroups' => ['group1', 'group2'], + 'priority' => 15, + ]), + ], + ]; + } + + /** + * @dataProvider storageDataProvider + */ + public function testAddStorage($storage) { + $newStorage = $this->service->addStorage($storage); + + $this->assertEquals(1, $newStorage->getId()); + + + $newStorage = $this->service->getStorage(1); + + $this->assertEquals($storage->getMountPoint(), $newStorage->getMountPoint()); + $this->assertEquals($storage->getBackendClass(), $newStorage->getBackendClass()); + $this->assertEquals($storage->getBackendOptions(), $newStorage->getBackendOptions()); + $this->assertEquals($storage->getApplicableUsers(), $newStorage->getApplicableUsers()); + $this->assertEquals($storage->getApplicableGroups(), $newStorage->getApplicableGroups()); + $this->assertEquals($storage->getPriority(), $newStorage->getPriority()); + $this->assertEquals(1, $newStorage->getId()); + $this->assertEquals(0, $newStorage->getStatus()); + + // next one gets id 2 + $nextStorage = $this->service->addStorage($storage); + $this->assertEquals(2, $nextStorage->getId()); + } + + /** + * @dataProvider storageDataProvider + */ + public function testUpdateStorage($updatedStorage) { + $storage = $this->makeStorageConfig([ + 'mountPoint' => 'mountpoint', + 'backendClass' => '\OC\Files\Storage\SMB', + 'backendOptions' => [ + 'option1' => 'value1', + 'option2' => 'value2', + 'password' => 'testPassword', + ], + 'applicableUsers' => [], + 'applicableGroups' => [], + 'priority' => 15, + ]); + + $newStorage = $this->service->addStorage($storage); + $this->assertEquals(1, $newStorage->getId()); + + $updatedStorage->setId(1); + + $this->service->updateStorage($updatedStorage); + $newStorage = $this->service->getStorage(1); + + $this->assertEquals($updatedStorage->getMountPoint(), $newStorage->getMountPoint()); + $this->assertEquals($updatedStorage->getBackendOptions()['password'], $newStorage->getBackendOptions()['password']); + $this->assertEquals($updatedStorage->getApplicableUsers(), $newStorage->getApplicableUsers()); + $this->assertEquals($updatedStorage->getApplicableGroups(), $newStorage->getApplicableGroups()); + $this->assertEquals($updatedStorage->getPriority(), $newStorage->getPriority()); + $this->assertEquals(1, $newStorage->getId()); + $this->assertEquals(0, $newStorage->getStatus()); + } + + function hooksAddStorageDataProvider() { + return [ + // applicable all + [ + [], + [], + // expected hook calls + [ + [ + Filesystem::signal_create_mount, + \OC_Mount_Config::MOUNT_TYPE_USER, + 'all' + ], + ], + ], + // single user + [ + ['user1'], + [], + // expected hook calls + [ + [ + Filesystem::signal_create_mount, + \OC_Mount_Config::MOUNT_TYPE_USER, + 'user1', + ], + ], + ], + // single group + [ + [], + ['group1'], + // expected hook calls + [ + [ + Filesystem::signal_create_mount, + \OC_Mount_Config::MOUNT_TYPE_GROUP, + 'group1', + ], + ], + ], + // multiple users + [ + ['user1', 'user2'], + [], + [ + [ + Filesystem::signal_create_mount, + \OC_Mount_Config::MOUNT_TYPE_USER, + 'user1', + ], + [ + Filesystem::signal_create_mount, + \OC_Mount_Config::MOUNT_TYPE_USER, + 'user2', + ], + ], + ], + // multiple groups + [ + [], + ['group1', 'group2'], + // expected hook calls + [ + [ + Filesystem::signal_create_mount, + \OC_Mount_Config::MOUNT_TYPE_GROUP, + 'group1' + ], + [ + Filesystem::signal_create_mount, + \OC_Mount_Config::MOUNT_TYPE_GROUP, + 'group2' + ], + ], + ], + // mixed groups and users + [ + ['user1', 'user2'], + ['group1', 'group2'], + // expected hook calls + [ + [ + Filesystem::signal_create_mount, + \OC_Mount_Config::MOUNT_TYPE_USER, + 'user1', + ], + [ + Filesystem::signal_create_mount, + \OC_Mount_Config::MOUNT_TYPE_USER, + 'user2', + ], + [ + Filesystem::signal_create_mount, + \OC_Mount_Config::MOUNT_TYPE_GROUP, + 'group1' + ], + [ + Filesystem::signal_create_mount, + \OC_Mount_Config::MOUNT_TYPE_GROUP, + 'group2' + ], + ], + ], + ]; + } + + /** + * @dataProvider hooksAddStorageDataProvider + */ + public function testHooksAddStorage($applicableUsers, $applicableGroups, $expectedCalls) { + $storage = $this->makeTestStorageData(); + $storage->setApplicableUsers($applicableUsers); + $storage->setApplicableGroups($applicableGroups); + $this->service->addStorage($storage); + + $this->assertCount(count($expectedCalls), self::$hookCalls); + + foreach ($expectedCalls as $index => $call) { + $this->assertHookCall( + self::$hookCalls[$index], + $call[0], + $storage->getMountPoint(), + $call[1], + $call[2] + ); + } + } + + function hooksUpdateStorageDataProvider() { + return [ + [ + // nothing to multiple users and groups + [], + [], + ['user1', 'user2'], + ['group1', 'group2'], + // expected hook calls + [ + // delete the "all entry" + [ + Filesystem::signal_delete_mount, + \OC_Mount_Config::MOUNT_TYPE_USER, + 'all', + ], + [ + Filesystem::signal_create_mount, + \OC_Mount_Config::MOUNT_TYPE_USER, + 'user1', + ], + [ + Filesystem::signal_create_mount, + \OC_Mount_Config::MOUNT_TYPE_USER, + 'user2', + ], + [ + Filesystem::signal_create_mount, + \OC_Mount_Config::MOUNT_TYPE_GROUP, + 'group1' + ], + [ + Filesystem::signal_create_mount, + \OC_Mount_Config::MOUNT_TYPE_GROUP, + 'group2' + ], + ], + ], + [ + // adding a user and a group + ['user1'], + ['group1'], + ['user1', 'user2'], + ['group1', 'group2'], + // expected hook calls + [ + [ + Filesystem::signal_create_mount, + \OC_Mount_Config::MOUNT_TYPE_USER, + 'user2', + ], + [ + Filesystem::signal_create_mount, + \OC_Mount_Config::MOUNT_TYPE_GROUP, + 'group2' + ], + ], + ], + [ + // removing a user and a group + ['user1', 'user2'], + ['group1', 'group2'], + ['user1'], + ['group1'], + // expected hook calls + [ + [ + Filesystem::signal_delete_mount, + \OC_Mount_Config::MOUNT_TYPE_USER, + 'user2', + ], + [ + Filesystem::signal_delete_mount, + \OC_Mount_Config::MOUNT_TYPE_GROUP, + 'group2' + ], + ], + ], + [ + // removing all + ['user1'], + ['group1'], + [], + [], + // expected hook calls + [ + [ + Filesystem::signal_delete_mount, + \OC_Mount_Config::MOUNT_TYPE_USER, + 'user1', + ], + [ + Filesystem::signal_delete_mount, + \OC_Mount_Config::MOUNT_TYPE_GROUP, + 'group1' + ], + // create the "all" entry + [ + Filesystem::signal_create_mount, + \OC_Mount_Config::MOUNT_TYPE_USER, + 'all' + ], + ], + ], + [ + // no changes + ['user1'], + ['group1'], + ['user1'], + ['group1'], + // no hook calls + [] + ] + ]; + } + + /** + * @dataProvider hooksUpdateStorageDataProvider + */ + public function testHooksUpdateStorage( + $sourceApplicableUsers, + $sourceApplicableGroups, + $updatedApplicableUsers, + $updatedApplicableGroups, + $expectedCalls) { + + $storage = $this->makeTestStorageData(); + $storage->setApplicableUsers($sourceApplicableUsers); + $storage->setApplicableGroups($sourceApplicableGroups); + $storage = $this->service->addStorage($storage); + + $storage->setapplicableUsers($updatedApplicableUsers); + $storage->setapplicableGroups($updatedApplicableGroups); + + // reset calls + self::$hookCalls = []; + + $this->service->updateStorage($storage); + + $this->assertCount(count($expectedCalls), self::$hookCalls); + + foreach ($expectedCalls as $index => $call) { + $this->assertHookCall( + self::$hookCalls[$index], + $call[0], + '/mountpoint', + $call[1], + $call[2] + ); + } + } + + /** + */ + public function testHooksRenameMountPoint() { + $storage = $this->makeTestStorageData(); + $storage->setApplicableUsers(['user1', 'user2']); + $storage->setApplicableGroups(['group1', 'group2']); + $storage = $this->service->addStorage($storage); + + $storage->setMountPoint('renamedMountpoint'); + + // reset calls + self::$hookCalls = []; + + $this->service->updateStorage($storage); + + $expectedCalls = [ + // deletes old mount + [ + Filesystem::signal_delete_mount, + '/mountpoint', + \OC_Mount_Config::MOUNT_TYPE_USER, + 'user1', + ], + [ + Filesystem::signal_delete_mount, + '/mountpoint', + \OC_Mount_Config::MOUNT_TYPE_USER, + 'user2', + ], + [ + Filesystem::signal_delete_mount, + '/mountpoint', + \OC_Mount_Config::MOUNT_TYPE_GROUP, + 'group1', + ], + [ + Filesystem::signal_delete_mount, + '/mountpoint', + \OC_Mount_Config::MOUNT_TYPE_GROUP, + 'group2', + ], + // creates new one + [ + Filesystem::signal_create_mount, + '/renamedMountpoint', + \OC_Mount_Config::MOUNT_TYPE_USER, + 'user1', + ], + [ + Filesystem::signal_create_mount, + '/renamedMountpoint', + \OC_Mount_Config::MOUNT_TYPE_USER, + 'user2', + ], + [ + Filesystem::signal_create_mount, + '/renamedMountpoint', + \OC_Mount_Config::MOUNT_TYPE_GROUP, + 'group1', + ], + [ + Filesystem::signal_create_mount, + '/renamedMountpoint', + \OC_Mount_Config::MOUNT_TYPE_GROUP, + 'group2', + ], + ]; + + $this->assertCount(count($expectedCalls), self::$hookCalls); + + foreach ($expectedCalls as $index => $call) { + $this->assertHookCall( + self::$hookCalls[$index], + $call[0], + $call[1], + $call[2], + $call[3] + ); + } + } + + function hooksDeleteStorageDataProvider() { + return [ + [ + ['user1', 'user2'], + ['group1', 'group2'], + // expected hook calls + [ + [ + Filesystem::signal_delete_mount, + \OC_Mount_Config::MOUNT_TYPE_USER, + 'user1', + ], + [ + Filesystem::signal_delete_mount, + \OC_Mount_Config::MOUNT_TYPE_USER, + 'user2', + ], + [ + Filesystem::signal_delete_mount, + \OC_Mount_Config::MOUNT_TYPE_GROUP, + 'group1' + ], + [ + Filesystem::signal_delete_mount, + \OC_Mount_Config::MOUNT_TYPE_GROUP, + 'group2' + ], + ], + ], + [ + // deleting "all" entry + [], + [], + [ + [ + Filesystem::signal_delete_mount, + \OC_Mount_Config::MOUNT_TYPE_USER, + 'all', + ], + ], + ], + ]; + } + + /** + * @dataProvider hooksDeleteStorageDataProvider + */ + public function testHooksDeleteStorage( + $sourceApplicableUsers, + $sourceApplicableGroups, + $expectedCalls) { + + $storage = $this->makeTestStorageData(); + $storage->setApplicableUsers($sourceApplicableUsers); + $storage->setApplicableGroups($sourceApplicableGroups); + $storage = $this->service->addStorage($storage); + + // reset calls + self::$hookCalls = []; + + $this->service->removeStorage($storage->getId()); + + $this->assertCount(count($expectedCalls), self::$hookCalls); + + foreach ($expectedCalls as $index => $call) { + $this->assertHookCall( + self::$hookCalls[$index], + $call[0], + '/mountpoint', + $call[1], + $call[2] + ); + } + } + + /** + * Make sure it uses the correct format when reading/writing + * the legacy config + */ + public function testLegacyConfigConversionApplicableAll() { + $configFile = $this->dataDir . '/mount.json'; + + $storage = $this->makeTestStorageData(); + $storage = $this->service->addStorage($storage); + + $json = json_decode(file_get_contents($configFile), true); + + $this->assertCount(1, $json); + + $this->assertEquals([\OC_Mount_Config::MOUNT_TYPE_USER], array_keys($json)); + $this->assertEquals(['all'], array_keys($json[\OC_Mount_config::MOUNT_TYPE_USER])); + + $mountPointData = $json[\OC_Mount_config::MOUNT_TYPE_USER]['all']; + $this->assertEquals(['/$user/files/mountpoint'], array_keys($mountPointData)); + + $mountPointOptions = current($mountPointData); + $this->assertEquals(1, $mountPointOptions['id']); + $this->assertEquals('\OC\Files\Storage\SMB', $mountPointOptions['class']); + $this->assertEquals(15, $mountPointOptions['priority']); + $this->assertEquals(false, $mountPointOptions['mountOptions']['preview']); + + $backendOptions = $mountPointOptions['options']; + $this->assertEquals('value1', $backendOptions['option1']); + $this->assertEquals('value2', $backendOptions['option2']); + $this->assertEquals('', $backendOptions['password']); + $this->assertNotEmpty($backendOptions['password_encrypted']); + } + + /** + * Make sure it uses the correct format when reading/writing + * the legacy config + */ + public function testLegacyConfigConversionApplicableUserAndGroup() { + $configFile = $this->dataDir . '/mount.json'; + + $storage = $this->makeTestStorageData(); + $storage->setApplicableUsers(['user1', 'user2']); + $storage->setApplicableGroups(['group1', 'group2']); + + $storage = $this->service->addStorage($storage); + + $json = json_decode(file_get_contents($configFile), true); + + $this->assertCount(2, $json); + + $this->assertTrue(isset($json[\OC_Mount_Config::MOUNT_TYPE_USER])); + $this->assertTrue(isset($json[\OC_Mount_Config::MOUNT_TYPE_GROUP])); + $this->assertEquals(['user1', 'user2'], array_keys($json[\OC_Mount_config::MOUNT_TYPE_USER])); + $this->assertEquals(['group1', 'group2'], array_keys($json[\OC_Mount_config::MOUNT_TYPE_GROUP])); + + // check that all options are the same for both users and both groups + foreach ($json[\OC_Mount_Config::MOUNT_TYPE_USER] as $mountPointData) { + $this->assertEquals(['/$user/files/mountpoint'], array_keys($mountPointData)); + + $mountPointOptions = current($mountPointData); + + $this->assertEquals(1, $mountPointOptions['id']); + $this->assertEquals('\OC\Files\Storage\SMB', $mountPointOptions['class']); + $this->assertEquals(15, $mountPointOptions['priority']); + $this->assertEquals(false, $mountPointOptions['mountOptions']['preview']); + + $backendOptions = $mountPointOptions['options']; + $this->assertEquals('value1', $backendOptions['option1']); + $this->assertEquals('value2', $backendOptions['option2']); + $this->assertEquals('', $backendOptions['password']); + $this->assertNotEmpty($backendOptions['password_encrypted']); + } + + foreach ($json[\OC_Mount_Config::MOUNT_TYPE_GROUP] as $mountPointData) { + $this->assertEquals(['/$user/files/mountpoint'], array_keys($mountPointData)); + + $mountPointOptions = current($mountPointData); + + $this->assertEquals(1, $mountPointOptions['id']); + $this->assertEquals('\OC\Files\Storage\SMB', $mountPointOptions['class']); + $this->assertEquals(15, $mountPointOptions['priority']); + $this->assertEquals(false, $mountPointOptions['mountOptions']['preview']); + + $backendOptions = $mountPointOptions['options']; + $this->assertEquals('value1', $backendOptions['option1']); + $this->assertEquals('value2', $backendOptions['option2']); + $this->assertEquals('', $backendOptions['password']); + $this->assertNotEmpty($backendOptions['password_encrypted']); + } + } + + /** + * Test reading in a legacy config and generating config ids. + */ + public function testReadLegacyConfigAndGenerateConfigId() { + $configFile = $this->dataDir . '/mount.json'; + + $legacyBackendOptions = [ + 'user' => 'someuser', + 'password' => 'somepassword', + ]; + $legacyBackendOptions = \OC_Mount_Config::encryptPasswords($legacyBackendOptions); + + $legacyConfig = [ + 'class' => '\OC\Files\Storage\SMB', + 'options' => $legacyBackendOptions, + 'mountOptions' => ['preview' => false], + ]; + // different mount options + $legacyConfig2 = [ + 'class' => '\OC\Files\Storage\SMB', + 'options' => $legacyBackendOptions, + 'mountOptions' => ['preview' => true], + ]; + + $legacyBackendOptions2 = $legacyBackendOptions; + $legacyBackendOptions2 = ['user' => 'someuser2', 'password' => 'somepassword2']; + $legacyBackendOptions2 = \OC_Mount_Config::encryptPasswords($legacyBackendOptions2); + + // different config + $legacyConfig3 = [ + 'class' => '\OC\Files\Storage\SMB', + 'options' => $legacyBackendOptions2, + 'mountOptions' => ['preview' => true], + ]; + + $json = [ + 'user' => [ + 'user1' => [ + '/$user/files/somemount' => $legacyConfig, + ], + // same config + 'user2' => [ + '/$user/files/somemount' => $legacyConfig, + ], + // different mountOptions + 'user3' => [ + '/$user/files/somemount' => $legacyConfig2, + ], + // different mount point + 'user4' => [ + '/$user/files/anothermount' => $legacyConfig, + ], + // different storage config + 'user5' => [ + '/$user/files/somemount' => $legacyConfig3, + ], + ], + 'group' => [ + 'group1' => [ + // will get grouped with user configs + '/$user/files/somemount' => $legacyConfig, + ], + ], + ]; + + file_put_contents($configFile, json_encode($json)); + + $allStorages = $this->service->getAllStorages(); + + $this->assertCount(4, $allStorages); + + $storage1 = $allStorages[1]; + $storage2 = $allStorages[2]; + $storage3 = $allStorages[3]; + $storage4 = $allStorages[4]; + + $this->assertEquals('/somemount', $storage1->getMountPoint()); + $this->assertEquals('someuser', $storage1->getBackendOptions()['user']); + $this->assertEquals('somepassword', $storage1->getBackendOptions()['password']); + $this->assertEquals(['user1', 'user2'], $storage1->getApplicableUsers()); + $this->assertEquals(['group1'], $storage1->getApplicableGroups()); + $this->assertEquals(['preview' => false], $storage1->getMountOptions()); + + $this->assertEquals('/somemount', $storage2->getMountPoint()); + $this->assertEquals('someuser', $storage2->getBackendOptions()['user']); + $this->assertEquals('somepassword', $storage2->getBackendOptions()['password']); + $this->assertEquals(['user3'], $storage2->getApplicableUsers()); + $this->assertEquals([], $storage2->getApplicableGroups()); + $this->assertEquals(['preview' => true], $storage2->getMountOptions()); + + $this->assertEquals('/anothermount', $storage3->getMountPoint()); + $this->assertEquals('someuser', $storage3->getBackendOptions()['user']); + $this->assertEquals('somepassword', $storage3->getBackendOptions()['password']); + $this->assertEquals(['user4'], $storage3->getApplicableUsers()); + $this->assertEquals([], $storage3->getApplicableGroups()); + $this->assertEquals(['preview' => false], $storage3->getMountOptions()); + + $this->assertEquals('/somemount', $storage4->getMountPoint()); + $this->assertEquals('someuser2', $storage4->getBackendOptions()['user']); + $this->assertEquals('somepassword2', $storage4->getBackendOptions()['password']); + $this->assertEquals(['user5'], $storage4->getApplicableUsers()); + $this->assertEquals([], $storage4->getApplicableGroups()); + $this->assertEquals(['preview' => true], $storage4->getMountOptions()); + } +} diff --git a/apps/files_external/tests/service/storagesservicetest.php b/apps/files_external/tests/service/storagesservicetest.php new file mode 100644 index 00000000000..445e86d4117 --- /dev/null +++ b/apps/files_external/tests/service/storagesservicetest.php @@ -0,0 +1,183 @@ +<?php +/** + * ownCloud + * + * @author Vincent Petry + * Copyright (c) 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/>. + * + */ +namespace OCA\Files_external\Tests\Service; + +use \OC\Files\Filesystem; + +use \OCA\Files_external\NotFoundException; +use \OCA\Files_external\Lib\StorageConfig; + +abstract class StoragesServiceTest extends \Test\TestCase { + + /** + * @var StoragesService + */ + protected $service; + + /** + * Data directory + * + * @var string + */ + protected $dataDir; + + /** + * Hook calls + * + * @var array + */ + protected static $hookCalls; + + public function setUp() { + self::$hookCalls = array(); + $config = \OC::$server->getConfig(); + $this->dataDir = $config->getSystemValue( + 'datadirectory', + \OC::$SERVERROOT . '/data/' + ); + \OC_Mount_Config::$skipTest = true; + + \OCP\Util::connectHook( + Filesystem::CLASSNAME, + Filesystem::signal_create_mount, + get_class($this), 'createHookCallback'); + \OCP\Util::connectHook( + Filesystem::CLASSNAME, + Filesystem::signal_delete_mount, + get_class($this), 'deleteHookCallback'); + + } + + public function tearDown() { + \OC_Mount_Config::$skipTest = false; + self::$hookCalls = array(); + } + + /** + * Creates a StorageConfig instance based on array data + * + * @param array data + * + * @return StorageConfig storage config instance + */ + protected function makeStorageConfig($data) { + $storage = new StorageConfig(); + if (isset($data['id'])) { + $storage->setId($data['id']); + } + $storage->setMountPoint($data['mountPoint']); + $storage->setBackendClass($data['backendClass']); + $storage->setBackendOptions($data['backendOptions']); + if (isset($data['applicableUsers'])) { + $storage->setApplicableUsers($data['applicableUsers']); + } + if (isset($data['applicableGroups'])) { + $storage->setApplicableGroups($data['applicableGroups']); + } + if (isset($data['priority'])) { + $storage->setPriority($data['priority']); + } + if (isset($data['mountOptions'])) { + $storage->setMountOptions($data['mountOptions']); + } + return $storage; + } + + + /** + * @expectedException \OCA\Files_external\NotFoundException + */ + public function testNonExistingStorage() { + $storage = new StorageConfig(255); + $storage->setMountPoint('mountpoint'); + $storage->setBackendClass('\OC\Files\Storage\SMB'); + $this->service->updateStorage($storage); + } + + public function testDeleteStorage() { + $storage = new StorageConfig(255); + $storage->setMountPoint('mountpoint'); + $storage->setBackendClass('\OC\Files\Storage\SMB'); + $storage->setBackendOptions(['password' => 'testPassword']); + + $newStorage = $this->service->addStorage($storage); + $this->assertEquals(1, $newStorage->getId()); + + $newStorage = $this->service->removeStorage(1); + + $caught = false; + try { + $this->service->getStorage(1); + } catch (NotFoundException $e) { + $caught = true; + } + + $this->assertTrue($caught); + } + + /** + * @expectedException \OCA\Files_external\NotFoundException + */ + public function testDeleteUnexistingStorage() { + $this->service->removeStorage(255); + } + + public static function createHookCallback($params) { + self::$hookCalls[] = array( + 'signal' => Filesystem::signal_create_mount, + 'params' => $params + ); + } + + public static function deleteHookCallback($params) { + self::$hookCalls[] = array( + 'signal' => Filesystem::signal_delete_mount, + 'params' => $params + ); + } + + /** + * Asserts hook call + * + * @param array $callData hook call data to check + * @param string $signal signal name + * @param string $mountPath mount path + * @param string $mountType mount type + * @param string $applicable applicable users + */ + protected function assertHookCall($callData, $signal, $mountPath, $mountType, $applicable) { + $this->assertEquals($signal, $callData['signal']); + $params = $callData['params']; + $this->assertEquals( + $mountPath, + $params[Filesystem::signal_param_path] + ); + $this->assertEquals( + $mountType, + $params[Filesystem::signal_param_mount_type] + ); + $this->assertEquals( + $applicable, + $params[Filesystem::signal_param_users] + ); + } +} diff --git a/apps/files_external/tests/service/userstoragesservicetest.php b/apps/files_external/tests/service/userstoragesservicetest.php new file mode 100644 index 00000000000..dd3f9e1b92c --- /dev/null +++ b/apps/files_external/tests/service/userstoragesservicetest.php @@ -0,0 +1,254 @@ +<?php +/** + * ownCloud + * + * @author Vincent Petry + * Copyright (c) 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/>. + * + */ +namespace OCA\Files_external\Tests\Service; + +use \OC\Files\Filesystem; + +use \OCA\Files_external\Service\UserStoragesService; +use \OCA\Files_external\NotFoundException; +use \OCA\Files_external\Lib\StorageConfig; + +class UserStoragesServiceTest extends StoragesServiceTest { + + public function setUp() { + parent::setUp(); + + $this->userId = $this->getUniqueID('user_'); + + $this->user = new \OC\User\User($this->userId, null); + $userSession = $this->getMock('\OCP\IUserSession'); + $userSession + ->expects($this->any()) + ->method('getUser') + ->will($this->returnValue($this->user)); + + $this->service = new UserStoragesService($userSession); + + // create home folder + mkdir($this->dataDir . '/' . $this->userId . '/'); + } + + public function tearDown() { + @unlink($this->dataDir . '/' . $this->userId . '/mount.json'); + parent::tearDown(); + } + + private function makeTestStorageData() { + return $this->makeStorageConfig([ + 'mountPoint' => 'mountpoint', + 'backendClass' => '\OC\Files\Storage\SMB', + 'backendOptions' => [ + 'option1' => 'value1', + 'option2' => 'value2', + 'password' => 'testPassword', + ], + 'mountOptions' => [ + 'preview' => false, + ] + ]); + } + + public function testAddStorage() { + $storage = $this->makeTestStorageData(); + + $newStorage = $this->service->addStorage($storage); + + $this->assertEquals(1, $newStorage->getId()); + + $newStorage = $this->service->getStorage(1); + + $this->assertEquals($storage->getMountPoint(), $newStorage->getMountPoint()); + $this->assertEquals($storage->getBackendClass(), $newStorage->getBackendClass()); + $this->assertEquals($storage->getBackendOptions(), $newStorage->getBackendOptions()); + $this->assertEquals(1, $newStorage->getId()); + $this->assertEquals(0, $newStorage->getStatus()); + + // hook called once for user + $this->assertHookCall( + current(self::$hookCalls), + Filesystem::signal_create_mount, + $storage->getMountPoint(), + \OC_Mount_Config::MOUNT_TYPE_USER, + $this->userId + ); + + // next one gets id 2 + $nextStorage = $this->service->addStorage($storage); + $this->assertEquals(2, $nextStorage->getId()); + } + + public function testUpdateStorage() { + $storage = $this->makeStorageConfig([ + 'mountPoint' => 'mountpoint', + 'backendClass' => '\OC\Files\Storage\SMB', + 'backendOptions' => [ + 'option1' => 'value1', + 'option2' => 'value2', + 'password' => 'testPassword', + ], + ]); + + $newStorage = $this->service->addStorage($storage); + $this->assertEquals(1, $newStorage->getId()); + + $backendOptions = $newStorage->getBackendOptions(); + $backendOptions['password'] = 'anotherPassword'; + $newStorage->setBackendOptions($backendOptions); + + self::$hookCalls = []; + + $newStorage = $this->service->updateStorage($newStorage); + + $this->assertEquals('anotherPassword', $newStorage->getBackendOptions()['password']); + // these attributes are unused for user storages + $this->assertEmpty($newStorage->getApplicableUsers()); + $this->assertEmpty($newStorage->getApplicableGroups()); + $this->assertEquals(1, $newStorage->getId()); + $this->assertEquals(0, $newStorage->getStatus()); + + // no hook calls + $this->assertEmpty(self::$hookCalls); + } + + public function testDeleteStorage() { + parent::testDeleteStorage(); + + // hook called once for user (first one was during test creation) + $this->assertHookCall( + self::$hookCalls[1], + Filesystem::signal_delete_mount, + '/mountpoint', + \OC_Mount_Config::MOUNT_TYPE_USER, + $this->userId + ); + } + + public function testHooksRenameMountPoint() { + $storage = $this->makeTestStorageData(); + $storage = $this->service->addStorage($storage); + + $storage->setMountPoint('renamedMountpoint'); + + // reset calls + self::$hookCalls = []; + + $this->service->updateStorage($storage); + + // hook called twice + $this->assertHookCall( + self::$hookCalls[0], + Filesystem::signal_delete_mount, + '/mountpoint', + \OC_Mount_Config::MOUNT_TYPE_USER, + $this->userId + ); + $this->assertHookCall( + self::$hookCalls[1], + Filesystem::signal_create_mount, + '/renamedMountpoint', + \OC_Mount_Config::MOUNT_TYPE_USER, + $this->userId + ); + } + + /** + * Make sure it uses the correct format when reading/writing + * the legacy config + */ + public function testLegacyConfigConversion() { + $configFile = $this->dataDir . '/' . $this->userId . '/mount.json'; + + $storage = $this->makeTestStorageData(); + $storage = $this->service->addStorage($storage); + + $json = json_decode(file_get_contents($configFile), true); + + $this->assertCount(1, $json); + + $this->assertEquals([\OC_Mount_Config::MOUNT_TYPE_USER], array_keys($json)); + $this->assertEquals([$this->userId], array_keys($json[\OC_Mount_config::MOUNT_TYPE_USER])); + + $mountPointData = $json[\OC_Mount_config::MOUNT_TYPE_USER][$this->userId]; + $this->assertEquals(['/' . $this->userId . '/files/mountpoint'], array_keys($mountPointData)); + + $mountPointOptions = current($mountPointData); + $this->assertEquals(1, $mountPointOptions['id']); + $this->assertEquals('\OC\Files\Storage\SMB', $mountPointOptions['class']); + $this->assertEquals(false, $mountPointOptions['mountOptions']['preview']); + + $backendOptions = $mountPointOptions['options']; + $this->assertEquals('value1', $backendOptions['option1']); + $this->assertEquals('value2', $backendOptions['option2']); + $this->assertEquals('', $backendOptions['password']); + $this->assertNotEmpty($backendOptions['password_encrypted']); + } + + /** + * Test reading in a legacy config and generating config ids. + */ + public function testReadLegacyConfigAndGenerateConfigId() { + $configFile = $this->dataDir . '/' . $this->userId . '/mount.json'; + + $legacyBackendOptions = [ + 'user' => 'someuser', + 'password' => 'somepassword', + ]; + $legacyBackendOptions = \OC_Mount_Config::encryptPasswords($legacyBackendOptions); + + $legacyConfig = [ + 'class' => '\OC\Files\Storage\SMB', + 'options' => $legacyBackendOptions, + 'mountOptions' => ['preview' => false], + ]; + // different mount options + $legacyConfig2 = [ + 'class' => '\OC\Files\Storage\SMB', + 'options' => $legacyBackendOptions, + 'mountOptions' => ['preview' => true], + ]; + + $json = ['user' => []]; + $json['user'][$this->userId] = [ + '/$user/files/somemount' => $legacyConfig, + '/$user/files/anothermount' => $legacyConfig2, + ]; + + file_put_contents($configFile, json_encode($json)); + + $allStorages = $this->service->getAllStorages(); + + $this->assertCount(2, $allStorages); + + $storage1 = $allStorages[1]; + $storage2 = $allStorages[2]; + + $this->assertEquals('/somemount', $storage1->getMountPoint()); + $this->assertEquals('someuser', $storage1->getBackendOptions()['user']); + $this->assertEquals('somepassword', $storage1->getBackendOptions()['password']); + $this->assertEquals(['preview' => false], $storage1->getMountOptions()); + + $this->assertEquals('/anothermount', $storage2->getMountPoint()); + $this->assertEquals('someuser', $storage2->getBackendOptions()['user']); + $this->assertEquals('somepassword', $storage2->getBackendOptions()['password']); + $this->assertEquals(['preview' => true], $storage2->getMountOptions()); + } +} diff --git a/apps/files_external/tests/smbfunctions.php b/apps/files_external/tests/smbfunctions.php deleted file mode 100644 index cf9f7cb20fe..00000000000 --- a/apps/files_external/tests/smbfunctions.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php -/** - * Copyright (c) 2013 Vincent Petry <pvince81@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. - */ - -namespace Test\Files\Storage; - -class SMBFunctions extends \Test\TestCase { - - protected function setUp() { - parent::setUp(); - - // dummy config - $this->config = array( - 'run'=>false, - 'user'=>'test', - 'password'=>'testpassword', - 'host'=>'smbhost', - 'share'=>'/sharename', - 'root'=>'/rootdir/', - ); - - $this->instance = new \OC\Files\Storage\SMB($this->config); - } - - public function testGetId() { - $this->assertEquals('smb::test@smbhost//sharename//rootdir/', $this->instance->getId()); - } - - public function testConstructUrl() { - $this->assertEquals("smb://test:testpassword@smbhost/sharename/rootdir/abc", $this->instance->constructUrl('/abc')); - $this->assertEquals("smb://test:testpassword@smbhost/sharename/rootdir/abc", $this->instance->constructUrl('/abc/')); - $this->assertEquals("smb://test:testpassword@smbhost/sharename/rootdir/abc%2F", $this->instance->constructUrl('/abc/.')); - $this->assertEquals("smb://test:testpassword@smbhost/sharename/rootdir/abc%2Fdef", $this->instance->constructUrl('/abc/def')); - } -} diff --git a/apps/files_external/tests/storageconfigtest.php b/apps/files_external/tests/storageconfigtest.php new file mode 100644 index 00000000000..ec79b1bf306 --- /dev/null +++ b/apps/files_external/tests/storageconfigtest.php @@ -0,0 +1,52 @@ +<?php +/** + * ownCloud + * + * @author Vincent Petry + * Copyright (c) 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/>. + * + */ + +namespace OCA\Files_external\Tests; + +use \OCA\Files_external\Lib\StorageConfig; + +class StorageConfigTest extends \Test\TestCase { + + public function testJsonSerialization() { + $storageConfig = new StorageConfig(1); + $storageConfig->setMountPoint('test'); + $storageConfig->setBackendClass('\OC\Files\Storage\SMB'); + $storageConfig->setBackendOptions(['user' => 'test', 'password' => 'password123']); + $storageConfig->setPriority(128); + $storageConfig->setApplicableUsers(['user1', 'user2']); + $storageConfig->setApplicableGroups(['group1', 'group2']); + $storageConfig->setMountOptions(['preview' => false]); + + $json = $storageConfig->jsonSerialize(); + + $this->assertEquals(1, $json['id']); + $this->assertEquals('/test', $json['mountPoint']); + $this->assertEquals('\OC\Files\Storage\SMB', $json['backendClass']); + $this->assertEquals('test', $json['backendOptions']['user']); + $this->assertEquals('password123', $json['backendOptions']['password']); + $this->assertEquals(128, $json['priority']); + $this->assertEquals(['user1', 'user2'], $json['applicableUsers']); + $this->assertEquals(['group1', 'group2'], $json['applicableGroups']); + $this->assertEquals(['preview' => false], $json['mountOptions']); + } + +} diff --git a/apps/files_sharing/ajax/publicpreview.php b/apps/files_sharing/ajax/publicpreview.php index f5343a7ef26..3fedd1b933f 100644 --- a/apps/files_sharing/ajax/publicpreview.php +++ b/apps/files_sharing/ajax/publicpreview.php @@ -53,7 +53,7 @@ if($linkedItem['item_type'] === 'folder') { $isValid = \OC\Files\Filesystem::isValidPath($file); if(!$isValid) { \OC_Response::setStatus(\OC_Response::STATUS_BAD_REQUEST); - \OC_Log::write('core-preview', 'Passed filename is not valid, might be malicious (file:"' . $file . '";ip:"' . $_SERVER['REMOTE_ADDR'] . '")', \OC_Log::WARN); + \OC_Log::write('core-preview', 'Passed filename is not valid, might be malicious (file:"' . $file . '";ip:"' . \OC::$server->getRequest()->getRemoteAddress() . '")', \OC_Log::WARN); exit; } $sharedFile = \OC\Files\Filesystem::normalizePath($file); diff --git a/apps/files_sharing/api/local.php b/apps/files_sharing/api/local.php index d9291c29f61..87a8fbbb21f 100644 --- a/apps/files_sharing/api/local.php +++ b/apps/files_sharing/api/local.php @@ -276,6 +276,10 @@ class Local { return new \OC_OCS_Result(null, 400, "unknown share type"); } + if (($permissions & \OCP\Constants::PERMISSION_READ) === 0) { + return new \OC_OCS_Result(null, 400, 'invalid permissions'); + } + try { $token = \OCP\Share::shareItem( $itemType, @@ -347,7 +351,6 @@ class Local { } return new \OC_OCS_Result(null, 400, "Wrong or no update parameter given"); - } /** @@ -376,6 +379,10 @@ class Local { } } + if (($permissions & \OCP\Constants::PERMISSION_READ) === 0) { + return new \OC_OCS_Result(null, 400, 'invalid permissions'); + } + try { $return = \OCP\Share::setPermissions( $itemType, diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php index 837ceacbab3..8989f8cef2a 100644 --- a/apps/files_sharing/appinfo/app.php +++ b/apps/files_sharing/appinfo/app.php @@ -28,7 +28,10 @@ OCP\Util::addScript('files_sharing', 'external'); OC_FileProxy::register(new OCA\Files\Share\Proxy()); \OC::$server->getActivityManager()->registerExtension(function() { - return new \OCA\Files_Sharing\Activity(); + return new \OCA\Files_Sharing\Activity( + \OC::$server->query('L10NFactory'), + \OC::$server->getURLGenerator() + ); }); $config = \OC::$server->getConfig(); diff --git a/apps/files_sharing/appinfo/database.xml b/apps/files_sharing/appinfo/database.xml index 38718ab0773..a70be408da4 100644 --- a/apps/files_sharing/appinfo/database.xml +++ b/apps/files_sharing/appinfo/database.xml @@ -25,6 +25,7 @@ <field> <name>remote_id</name> <type>integer</type> + <default>-1</default> <notnull>true</notnull> <length>4</length> </field> diff --git a/apps/files_sharing/appinfo/version b/apps/files_sharing/appinfo/version index a918a2aa18d..ee6cdce3c29 100644 --- a/apps/files_sharing/appinfo/version +++ b/apps/files_sharing/appinfo/version @@ -1 +1 @@ -0.6.0 +0.6.1 diff --git a/apps/files_sharing/l10n/ar.js b/apps/files_sharing/l10n/ar.js index 88b13872ef0..b507d91a2ba 100644 --- a/apps/files_sharing/l10n/ar.js +++ b/apps/files_sharing/l10n/ar.js @@ -4,6 +4,12 @@ OC.L10N.register( "Cancel" : "إلغاء", "Share" : "شارك", "Shared by" : "تم مشاركتها بواسطة", + "A file or folder has been <strong>shared</strong>" : "ملف أو مجلد تم </strong>مشاركته<strong> ", + "You shared %1$s with %2$s" : "شاركت %1$s مع %2$s", + "You shared %1$s with group %2$s" : "أنت شاركت %1$s مع مجموعة %2$s", + "%2$s shared %1$s with you" : "%2$s شارك %1$s معك", + "You shared %1$s via link" : "لقد قمت بمشاركة %1$s عبر الرابط", + "Shares" : "المشاركات", "This share is password-protected" : "هذه المشاركة محمية بكلمة مرور", "The password is wrong. Try again." : "كلمة المرور خاطئة. حاول مرة أخرى", "Password" : "كلمة المرور", diff --git a/apps/files_sharing/l10n/ar.json b/apps/files_sharing/l10n/ar.json index bfcd3376317..046413c3fb2 100644 --- a/apps/files_sharing/l10n/ar.json +++ b/apps/files_sharing/l10n/ar.json @@ -2,6 +2,12 @@ "Cancel" : "إلغاء", "Share" : "شارك", "Shared by" : "تم مشاركتها بواسطة", + "A file or folder has been <strong>shared</strong>" : "ملف أو مجلد تم </strong>مشاركته<strong> ", + "You shared %1$s with %2$s" : "شاركت %1$s مع %2$s", + "You shared %1$s with group %2$s" : "أنت شاركت %1$s مع مجموعة %2$s", + "%2$s shared %1$s with you" : "%2$s شارك %1$s معك", + "You shared %1$s via link" : "لقد قمت بمشاركة %1$s عبر الرابط", + "Shares" : "المشاركات", "This share is password-protected" : "هذه المشاركة محمية بكلمة مرور", "The password is wrong. Try again." : "كلمة المرور خاطئة. حاول مرة أخرى", "Password" : "كلمة المرور", diff --git a/apps/files_sharing/l10n/ast.js b/apps/files_sharing/l10n/ast.js index 95349a45349..bded7e785d9 100644 --- a/apps/files_sharing/l10n/ast.js +++ b/apps/files_sharing/l10n/ast.js @@ -16,6 +16,12 @@ OC.L10N.register( "Invalid ownCloud url" : "Url ownCloud inválida", "Share" : "Compartir", "Shared by" : "Compartíos por", + "A file or folder has been <strong>shared</strong>" : "<strong>Compartióse</strong> un ficheru o direutoriu", + "You shared %1$s with %2$s" : "Compartisti %1$s con %2$s", + "You shared %1$s with group %2$s" : "Compartisti %1$s col grupu %2$s", + "%2$s shared %1$s with you" : "%2$s compartió %1$s contigo", + "You shared %1$s via link" : "Compartisti %1$s per enllaz", + "Shares" : "Comparticiones", "This share is password-protected" : "Esta compartición tien contraseña protexida", "The password is wrong. Try again." : "La contraseña ye incorreuta. Inténtalo otra vegada.", "Password" : "Contraseña", diff --git a/apps/files_sharing/l10n/ast.json b/apps/files_sharing/l10n/ast.json index e5fe0ee0c5d..af8f98cf2b4 100644 --- a/apps/files_sharing/l10n/ast.json +++ b/apps/files_sharing/l10n/ast.json @@ -14,6 +14,12 @@ "Invalid ownCloud url" : "Url ownCloud inválida", "Share" : "Compartir", "Shared by" : "Compartíos por", + "A file or folder has been <strong>shared</strong>" : "<strong>Compartióse</strong> un ficheru o direutoriu", + "You shared %1$s with %2$s" : "Compartisti %1$s con %2$s", + "You shared %1$s with group %2$s" : "Compartisti %1$s col grupu %2$s", + "%2$s shared %1$s with you" : "%2$s compartió %1$s contigo", + "You shared %1$s via link" : "Compartisti %1$s per enllaz", + "Shares" : "Comparticiones", "This share is password-protected" : "Esta compartición tien contraseña protexida", "The password is wrong. Try again." : "La contraseña ye incorreuta. Inténtalo otra vegada.", "Password" : "Contraseña", diff --git a/apps/files_sharing/l10n/az.js b/apps/files_sharing/l10n/az.js index aa4ec130ae7..957ab4a7306 100644 --- a/apps/files_sharing/l10n/az.js +++ b/apps/files_sharing/l10n/az.js @@ -2,19 +2,61 @@ OC.L10N.register( "files_sharing", { "Server to server sharing is not enabled on this server" : "Bu serverdə, serverlərarası yayımlanma aktiv deyil", + "The mountpoint name contains invalid characters." : "Bərkidilmə nöqtəsinin adında yalnış simvollar mövcuddur. ", "Invalid or untrusted SSL certificate" : "Yalnış yada inam listindən kənar SSL sertifikatı", + "Could not authenticate to remote share, password might be wrong" : "Uzaqda olan paylaşımın əslliyini yoxlamaq olmur və ola bilər ki, şifrə yalnışdır. ", + "Storage not valid" : "Depo etibarlı deyil", "Couldn't add remote share" : "Uzaqda olan yayımlanmanı əlavə etmək mümkün olmadı", "Shared with you" : "Sizinlə yayımlanan", "Shared with others" : "Hər kəsə yayımlanmış", + "Shared by link" : "Link tərəfindən paylaşılıb", + "Nothing shared with you yet" : "Hələki sizinlə heç bir şey paylaşılmayıb", + "Files and folders others share with you will show up here" : "Digərlərinin sizinlə paylaşdığı fayllar və qovluqlar burda göstəriləcək", + "Nothing shared yet" : "Paylaşılan heçnə yoxdur", + "Files and folders you share will show up here" : "Sizin tərəfinizdən paylaşılmış fayllar və qovluqlar burda göstəriləcək", + "No shared links" : "Paylaşılmış linklər yoxdur ", + "Files and folders you share by link will show up here" : "Link vasitəsilə sizin tərəfinizdən paylaşılmış fayllar və qovluqlar burda göstəriləcək", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Siz uzaq paylaşımı əlavə etmək istəyirsinizmi {name} dan {owner}@{remote}?", "Remote share" : "Uzaq yayımlanma", "Remote share password" : "Uzaq yayımlanma şifrəsi", "Cancel" : "Dayandır", "Add remote share" : "Uzaq yayımlanmanı əlavə et", + "No ownCloud installation (7 or higher) found at {remote}" : "Yüklənmiş (7 yada yuxarı) ownCloud {uzaq} unvanında tapılmadı ", "Invalid ownCloud url" : "Yalnış ownCloud url-i", "Share" : "Yayımla", "Shared by" : "Tərəfindən yayımlanıb", + "A file or folder has been <strong>shared</strong>" : "Fayl və ya direktoriya <strong>yayımlandı</strong>", + "A file or folder was shared from <strong>another server</strong>" : "Fayl yada qovluq ünvanından yayımlandı <strong>digər serverə</strong>", + "A public shared file or folder was <strong>downloaded</strong>" : "Ümumi paylaşılmış fayl yada qovluq <strong>endirilmişdir</strong>", + "You received a new remote share from %s" : "Siz %s ünvanından yeni uzaq paylaşım aldınız", + "%1$s accepted remote share %2$s" : "%1$s qəbul etdi uzaq paylaşım %2$s", + "%1$s declined remote share %2$s" : "%1$s təkzib etdi uzaq paylaşımı %2$s", + "%1$s unshared %2$s from you" : "%1$s paylaşımı dayandırıldı %2$s sizin tərəfinizdən", + "Public shared folder %1$s was downloaded" : "Ümumi paylaşılmış qovluq %1$s endirilmişdir", + "Public shared file %1$s was downloaded" : "Ümumi paylaşılmış fayl %1$s endirilmişdir", + "You shared %1$s with %2$s" : "Siz yayımladınız %1$s - i %2$s ilə", + "You shared %1$s with group %2$s" : "Siz yayımladınız %1$s qrupu ilə %2$s", + "%2$s shared %1$s with you" : "%2$s yayımlanıb %1$s sizinlə", + "You shared %1$s via link" : "Siz yayımladınız %1$s link ilə", + "Shares" : "Yayımlanmalar", + "This share is password-protected" : "Bu paylaşım şifrə ilə müdafiəlidir", + "The password is wrong. Try again." : "Şifrə yalnışdır. Yenidən cəhd edin.", "Password" : "Şifrə", + "No entries found in this folder" : "Bu qovluqda heç bir verilən tapılmadı", "Name" : "Ad", - "Download" : "Yüklə" + "Share time" : "Paylaşım vaxtı", + "Sorry, this link doesn’t seem to work anymore." : "Üzr istəyirik, bu link artıq işlək deyil.", + "Reasons might be:" : "Səbəblər ola bilər:", + "the item was removed" : "bölüm silinmişdir", + "the link expired" : "linkin vaxtı bitmişdir", + "sharing is disabled" : "paylaşım dayandırılmışdır", + "For more info, please ask the person who sent this link." : "Ətraflı məlumat üçün, xahiş olunur linkin kim tərəfindən göndərilməsini soruşun.", + "Add to your ownCloud" : "Öz ownCloud-nuza əlavə edin", + "Download" : "Yüklə", + "Download %s" : "Endir %s", + "Direct link" : "Birbaşa link", + "Federated Cloud Sharing" : "Federal Cloud Paylaşım", + "Allow users on this server to send shares to other servers" : "Bu serverdən digər serverlərə istifadəçilər tərəfindən paylaşımın göndərilməsinə izin vermək", + "Allow users on this server to receive shares from other servers" : "Digər serverlərdən bu serverə istifadəçilər tərəfindən paylaşımın ötürülməsinə izin vermək" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/az.json b/apps/files_sharing/l10n/az.json index c27f6426525..6d8bc7fb8dd 100644 --- a/apps/files_sharing/l10n/az.json +++ b/apps/files_sharing/l10n/az.json @@ -1,18 +1,60 @@ { "translations": { "Server to server sharing is not enabled on this server" : "Bu serverdə, serverlərarası yayımlanma aktiv deyil", + "The mountpoint name contains invalid characters." : "Bərkidilmə nöqtəsinin adında yalnış simvollar mövcuddur. ", "Invalid or untrusted SSL certificate" : "Yalnış yada inam listindən kənar SSL sertifikatı", + "Could not authenticate to remote share, password might be wrong" : "Uzaqda olan paylaşımın əslliyini yoxlamaq olmur və ola bilər ki, şifrə yalnışdır. ", + "Storage not valid" : "Depo etibarlı deyil", "Couldn't add remote share" : "Uzaqda olan yayımlanmanı əlavə etmək mümkün olmadı", "Shared with you" : "Sizinlə yayımlanan", "Shared with others" : "Hər kəsə yayımlanmış", + "Shared by link" : "Link tərəfindən paylaşılıb", + "Nothing shared with you yet" : "Hələki sizinlə heç bir şey paylaşılmayıb", + "Files and folders others share with you will show up here" : "Digərlərinin sizinlə paylaşdığı fayllar və qovluqlar burda göstəriləcək", + "Nothing shared yet" : "Paylaşılan heçnə yoxdur", + "Files and folders you share will show up here" : "Sizin tərəfinizdən paylaşılmış fayllar və qovluqlar burda göstəriləcək", + "No shared links" : "Paylaşılmış linklər yoxdur ", + "Files and folders you share by link will show up here" : "Link vasitəsilə sizin tərəfinizdən paylaşılmış fayllar və qovluqlar burda göstəriləcək", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Siz uzaq paylaşımı əlavə etmək istəyirsinizmi {name} dan {owner}@{remote}?", "Remote share" : "Uzaq yayımlanma", "Remote share password" : "Uzaq yayımlanma şifrəsi", "Cancel" : "Dayandır", "Add remote share" : "Uzaq yayımlanmanı əlavə et", + "No ownCloud installation (7 or higher) found at {remote}" : "Yüklənmiş (7 yada yuxarı) ownCloud {uzaq} unvanında tapılmadı ", "Invalid ownCloud url" : "Yalnış ownCloud url-i", "Share" : "Yayımla", "Shared by" : "Tərəfindən yayımlanıb", + "A file or folder has been <strong>shared</strong>" : "Fayl və ya direktoriya <strong>yayımlandı</strong>", + "A file or folder was shared from <strong>another server</strong>" : "Fayl yada qovluq ünvanından yayımlandı <strong>digər serverə</strong>", + "A public shared file or folder was <strong>downloaded</strong>" : "Ümumi paylaşılmış fayl yada qovluq <strong>endirilmişdir</strong>", + "You received a new remote share from %s" : "Siz %s ünvanından yeni uzaq paylaşım aldınız", + "%1$s accepted remote share %2$s" : "%1$s qəbul etdi uzaq paylaşım %2$s", + "%1$s declined remote share %2$s" : "%1$s təkzib etdi uzaq paylaşımı %2$s", + "%1$s unshared %2$s from you" : "%1$s paylaşımı dayandırıldı %2$s sizin tərəfinizdən", + "Public shared folder %1$s was downloaded" : "Ümumi paylaşılmış qovluq %1$s endirilmişdir", + "Public shared file %1$s was downloaded" : "Ümumi paylaşılmış fayl %1$s endirilmişdir", + "You shared %1$s with %2$s" : "Siz yayımladınız %1$s - i %2$s ilə", + "You shared %1$s with group %2$s" : "Siz yayımladınız %1$s qrupu ilə %2$s", + "%2$s shared %1$s with you" : "%2$s yayımlanıb %1$s sizinlə", + "You shared %1$s via link" : "Siz yayımladınız %1$s link ilə", + "Shares" : "Yayımlanmalar", + "This share is password-protected" : "Bu paylaşım şifrə ilə müdafiəlidir", + "The password is wrong. Try again." : "Şifrə yalnışdır. Yenidən cəhd edin.", "Password" : "Şifrə", + "No entries found in this folder" : "Bu qovluqda heç bir verilən tapılmadı", "Name" : "Ad", - "Download" : "Yüklə" + "Share time" : "Paylaşım vaxtı", + "Sorry, this link doesn’t seem to work anymore." : "Üzr istəyirik, bu link artıq işlək deyil.", + "Reasons might be:" : "Səbəblər ola bilər:", + "the item was removed" : "bölüm silinmişdir", + "the link expired" : "linkin vaxtı bitmişdir", + "sharing is disabled" : "paylaşım dayandırılmışdır", + "For more info, please ask the person who sent this link." : "Ətraflı məlumat üçün, xahiş olunur linkin kim tərəfindən göndərilməsini soruşun.", + "Add to your ownCloud" : "Öz ownCloud-nuza əlavə edin", + "Download" : "Yüklə", + "Download %s" : "Endir %s", + "Direct link" : "Birbaşa link", + "Federated Cloud Sharing" : "Federal Cloud Paylaşım", + "Allow users on this server to send shares to other servers" : "Bu serverdən digər serverlərə istifadəçilər tərəfindən paylaşımın göndərilməsinə izin vermək", + "Allow users on this server to receive shares from other servers" : "Digər serverlərdən bu serverə istifadəçilər tərəfindən paylaşımın ötürülməsinə izin vermək" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/bg_BG.js b/apps/files_sharing/l10n/bg_BG.js index 7a637db3a40..2f8cfed5a90 100644 --- a/apps/files_sharing/l10n/bg_BG.js +++ b/apps/files_sharing/l10n/bg_BG.js @@ -25,11 +25,17 @@ OC.L10N.register( "Invalid ownCloud url" : "Невалиден ownCloud интернет адрес.", "Share" : "Сподели", "Shared by" : "Споделено от", + "A file or folder has been <strong>shared</strong>" : "Файл или папка беше <strong>споделен/а</strong>", "A file or folder was shared from <strong>another server</strong>" : "Файл или папка е споделен от <strong>друг сървър</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Публично споделен файл или папка е <strong>изтеглен</strong>", "%1$s unshared %2$s from you" : "%1$s спря споделянето на %2$s с теб", "Public shared folder %1$s was downloaded" : "Публично споделената папка %1$s бе изтеглена", "Public shared file %1$s was downloaded" : "Публично споделения файл %1$s бе изтеглен", + "You shared %1$s with %2$s" : "Вие споделихте %1$s с %2$s.", + "You shared %1$s with group %2$s" : "Вие споделихте %1$s с групата %2$s.", + "%2$s shared %1$s with you" : "%2$s сподели %1$s с Вас.", + "You shared %1$s via link" : "Вие споделихте %1$s посредством връзка.", + "Shares" : "Споделени Папки", "This share is password-protected" : "Тази зона е защитена с парола.", "The password is wrong. Try again." : "Грешна парола. Опитай отново.", "Password" : "Парола", diff --git a/apps/files_sharing/l10n/bg_BG.json b/apps/files_sharing/l10n/bg_BG.json index c4180087200..ec8a686ca0e 100644 --- a/apps/files_sharing/l10n/bg_BG.json +++ b/apps/files_sharing/l10n/bg_BG.json @@ -23,11 +23,17 @@ "Invalid ownCloud url" : "Невалиден ownCloud интернет адрес.", "Share" : "Сподели", "Shared by" : "Споделено от", + "A file or folder has been <strong>shared</strong>" : "Файл или папка беше <strong>споделен/а</strong>", "A file or folder was shared from <strong>another server</strong>" : "Файл или папка е споделен от <strong>друг сървър</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Публично споделен файл или папка е <strong>изтеглен</strong>", "%1$s unshared %2$s from you" : "%1$s спря споделянето на %2$s с теб", "Public shared folder %1$s was downloaded" : "Публично споделената папка %1$s бе изтеглена", "Public shared file %1$s was downloaded" : "Публично споделения файл %1$s бе изтеглен", + "You shared %1$s with %2$s" : "Вие споделихте %1$s с %2$s.", + "You shared %1$s with group %2$s" : "Вие споделихте %1$s с групата %2$s.", + "%2$s shared %1$s with you" : "%2$s сподели %1$s с Вас.", + "You shared %1$s via link" : "Вие споделихте %1$s посредством връзка.", + "Shares" : "Споделени Папки", "This share is password-protected" : "Тази зона е защитена с парола.", "The password is wrong. Try again." : "Грешна парола. Опитай отново.", "Password" : "Парола", diff --git a/apps/files_sharing/l10n/bn_BD.js b/apps/files_sharing/l10n/bn_BD.js index 64d27cb8857..310e67347f2 100644 --- a/apps/files_sharing/l10n/bn_BD.js +++ b/apps/files_sharing/l10n/bn_BD.js @@ -11,6 +11,12 @@ OC.L10N.register( "Invalid ownCloud url" : "অবৈধ ওউনক্লাউড url", "Share" : "ভাগাভাগি কর", "Shared by" : "যাদের মাঝে ভাগাভাগি করা হয়েছে", + "A file or folder has been <strong>shared</strong>" : "একটি ফাইল বা ফোলডার <strong>ভাগাভাগি</strong> করা হয়েছে", + "You shared %1$s with %2$s" : "আপনি %1$sকে %2$sএর সাথে ভাগাভাগি করেছেন", + "You shared %1$s with group %2$s" : "আপনি %1$s কে %2$s দলের সাথে ভাগাভাগি করেছেন", + "%2$s shared %1$s with you" : "%2$s আপনার সাথে %1$s ভাগাভাগি করেছেন", + "You shared %1$s via link" : "আপনি %1$s লিংকের মাধধমে ভাগাভাগি করেছেন", + "Shares" : "ভাগাভাগি", "This share is password-protected" : "এই শেয়ারটি কূটশব্দদ্বারা সুরক্ষিত", "The password is wrong. Try again." : "কুটশব্দটি ভুল। আবার চেষ্টা করুন।", "Password" : "কূটশব্দ", diff --git a/apps/files_sharing/l10n/bn_BD.json b/apps/files_sharing/l10n/bn_BD.json index f1d67cfd881..d1186dff989 100644 --- a/apps/files_sharing/l10n/bn_BD.json +++ b/apps/files_sharing/l10n/bn_BD.json @@ -9,6 +9,12 @@ "Invalid ownCloud url" : "অবৈধ ওউনক্লাউড url", "Share" : "ভাগাভাগি কর", "Shared by" : "যাদের মাঝে ভাগাভাগি করা হয়েছে", + "A file or folder has been <strong>shared</strong>" : "একটি ফাইল বা ফোলডার <strong>ভাগাভাগি</strong> করা হয়েছে", + "You shared %1$s with %2$s" : "আপনি %1$sকে %2$sএর সাথে ভাগাভাগি করেছেন", + "You shared %1$s with group %2$s" : "আপনি %1$s কে %2$s দলের সাথে ভাগাভাগি করেছেন", + "%2$s shared %1$s with you" : "%2$s আপনার সাথে %1$s ভাগাভাগি করেছেন", + "You shared %1$s via link" : "আপনি %1$s লিংকের মাধধমে ভাগাভাগি করেছেন", + "Shares" : "ভাগাভাগি", "This share is password-protected" : "এই শেয়ারটি কূটশব্দদ্বারা সুরক্ষিত", "The password is wrong. Try again." : "কুটশব্দটি ভুল। আবার চেষ্টা করুন।", "Password" : "কূটশব্দ", diff --git a/apps/files_sharing/l10n/bn_IN.js b/apps/files_sharing/l10n/bn_IN.js index 34d657b12eb..f6d8367d9aa 100644 --- a/apps/files_sharing/l10n/bn_IN.js +++ b/apps/files_sharing/l10n/bn_IN.js @@ -3,6 +3,12 @@ OC.L10N.register( { "Cancel" : "বাতিল করা", "Share" : "শেয়ার", + "A file or folder has been <strong>shared</strong>" : "ফাইল অথবা ফোল্ডার <strong>শেয়ার করা হয়েছে</strong>", + "You shared %1$s with %2$s" : "আপনি %1$s শেয়ার করছেন %2$s এর সাথে", + "You shared %1$s with group %2$s" : "আপনি %1$s কে %2$s গ্রুপের সাথে শেয়ার করেছেন", + "%2$s shared %1$s with you" : "%2$s শেয়ার করেছে %1$s কে আপনার সাথে ", + "You shared %1$s via link" : "আপনি লিঙ্ক দ্বারা %1$s শেয়ার করুন ", + "Shares" : "শেয়ারস", "Name" : "নাম", "Download" : "ডাউনলোড করুন" }, diff --git a/apps/files_sharing/l10n/bn_IN.json b/apps/files_sharing/l10n/bn_IN.json index 8879de61c23..bffa2a243a9 100644 --- a/apps/files_sharing/l10n/bn_IN.json +++ b/apps/files_sharing/l10n/bn_IN.json @@ -1,6 +1,12 @@ { "translations": { "Cancel" : "বাতিল করা", "Share" : "শেয়ার", + "A file or folder has been <strong>shared</strong>" : "ফাইল অথবা ফোল্ডার <strong>শেয়ার করা হয়েছে</strong>", + "You shared %1$s with %2$s" : "আপনি %1$s শেয়ার করছেন %2$s এর সাথে", + "You shared %1$s with group %2$s" : "আপনি %1$s কে %2$s গ্রুপের সাথে শেয়ার করেছেন", + "%2$s shared %1$s with you" : "%2$s শেয়ার করেছে %1$s কে আপনার সাথে ", + "You shared %1$s via link" : "আপনি লিঙ্ক দ্বারা %1$s শেয়ার করুন ", + "Shares" : "শেয়ারস", "Name" : "নাম", "Download" : "ডাউনলোড করুন" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/ca.js b/apps/files_sharing/l10n/ca.js index 08affe3a280..c722183f4ea 100644 --- a/apps/files_sharing/l10n/ca.js +++ b/apps/files_sharing/l10n/ca.js @@ -15,6 +15,12 @@ OC.L10N.register( "Invalid ownCloud url" : "La url d'ownCloud no és vàlida", "Share" : "Comparteix", "Shared by" : "Compartit per", + "A file or folder has been <strong>shared</strong>" : "S'ha <strong>compartit</strong> un fitxer o una carpeta", + "You shared %1$s with %2$s" : "Has compartit %1$s amb %2$s", + "You shared %1$s with group %2$s" : "has compartit %1$s amb el grup %2$s", + "%2$s shared %1$s with you" : "%2$s ha compartit %1$s amb tu", + "You shared %1$s via link" : "Heu compartit %1$s via enllaç", + "Shares" : "Compartits", "This share is password-protected" : "Aquest compartit està protegit amb contrasenya", "The password is wrong. Try again." : "la contrasenya és incorrecta. Intenteu-ho de nou.", "Password" : "Contrasenya", diff --git a/apps/files_sharing/l10n/ca.json b/apps/files_sharing/l10n/ca.json index feed7ab13b2..33a1d77c090 100644 --- a/apps/files_sharing/l10n/ca.json +++ b/apps/files_sharing/l10n/ca.json @@ -13,6 +13,12 @@ "Invalid ownCloud url" : "La url d'ownCloud no és vàlida", "Share" : "Comparteix", "Shared by" : "Compartit per", + "A file or folder has been <strong>shared</strong>" : "S'ha <strong>compartit</strong> un fitxer o una carpeta", + "You shared %1$s with %2$s" : "Has compartit %1$s amb %2$s", + "You shared %1$s with group %2$s" : "has compartit %1$s amb el grup %2$s", + "%2$s shared %1$s with you" : "%2$s ha compartit %1$s amb tu", + "You shared %1$s via link" : "Heu compartit %1$s via enllaç", + "Shares" : "Compartits", "This share is password-protected" : "Aquest compartit està protegit amb contrasenya", "The password is wrong. Try again." : "la contrasenya és incorrecta. Intenteu-ho de nou.", "Password" : "Contrasenya", diff --git a/apps/files_sharing/l10n/cs_CZ.js b/apps/files_sharing/l10n/cs_CZ.js index 14d9ffe4a1d..f9df11e4c53 100644 --- a/apps/files_sharing/l10n/cs_CZ.js +++ b/apps/files_sharing/l10n/cs_CZ.js @@ -25,6 +25,7 @@ OC.L10N.register( "Invalid ownCloud url" : "Neplatná ownCloud url", "Share" : "Sdílet", "Shared by" : "Sdílí", + "A file or folder has been <strong>shared</strong>" : "Soubor nebo složka byla <strong>nasdílena</strong>", "A file or folder was shared from <strong>another server</strong>" : "Soubor nebo složka byla nasdílena z <strong>jiného serveru</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Byl <strong>stažen</strong> veřejně sdílený soubor nebo adresář", "You received a new remote share from %s" : "Obdrželi jste nové vzdálené sdílení z %s", @@ -33,6 +34,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s již více nesdílí %2$s", "Public shared folder %1$s was downloaded" : "Byl stažen veřejně sdílený adresář %1$s ", "Public shared file %1$s was downloaded" : "Byl stažen veřejně sdílený soubor %1$s ", + "You shared %1$s with %2$s" : "Sdílíte %1$s s %2$s", + "You shared %1$s with group %2$s" : "Sdílíte %1$s se skupinou %2$s", + "%2$s shared %1$s with you" : "%2$s s vámi sdílí %1$s", + "You shared %1$s via link" : "Sdílíte %1$s přes odkaz", + "Shares" : "Sdílení", "This share is password-protected" : "Toto sdílení je chráněno heslem", "The password is wrong. Try again." : "Heslo není správné. Zkuste to znovu.", "Password" : "Heslo", diff --git a/apps/files_sharing/l10n/cs_CZ.json b/apps/files_sharing/l10n/cs_CZ.json index d0679be3227..23228d94bb9 100644 --- a/apps/files_sharing/l10n/cs_CZ.json +++ b/apps/files_sharing/l10n/cs_CZ.json @@ -23,6 +23,7 @@ "Invalid ownCloud url" : "Neplatná ownCloud url", "Share" : "Sdílet", "Shared by" : "Sdílí", + "A file or folder has been <strong>shared</strong>" : "Soubor nebo složka byla <strong>nasdílena</strong>", "A file or folder was shared from <strong>another server</strong>" : "Soubor nebo složka byla nasdílena z <strong>jiného serveru</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Byl <strong>stažen</strong> veřejně sdílený soubor nebo adresář", "You received a new remote share from %s" : "Obdrželi jste nové vzdálené sdílení z %s", @@ -31,6 +32,11 @@ "%1$s unshared %2$s from you" : "%1$s již více nesdílí %2$s", "Public shared folder %1$s was downloaded" : "Byl stažen veřejně sdílený adresář %1$s ", "Public shared file %1$s was downloaded" : "Byl stažen veřejně sdílený soubor %1$s ", + "You shared %1$s with %2$s" : "Sdílíte %1$s s %2$s", + "You shared %1$s with group %2$s" : "Sdílíte %1$s se skupinou %2$s", + "%2$s shared %1$s with you" : "%2$s s vámi sdílí %1$s", + "You shared %1$s via link" : "Sdílíte %1$s přes odkaz", + "Shares" : "Sdílení", "This share is password-protected" : "Toto sdílení je chráněno heslem", "The password is wrong. Try again." : "Heslo není správné. Zkuste to znovu.", "Password" : "Heslo", diff --git a/apps/files_sharing/l10n/da.js b/apps/files_sharing/l10n/da.js index 2c5fe6b82f5..cfedb6eae54 100644 --- a/apps/files_sharing/l10n/da.js +++ b/apps/files_sharing/l10n/da.js @@ -25,6 +25,7 @@ OC.L10N.register( "Invalid ownCloud url" : "Ugyldig ownCloud-URL", "Share" : "Del", "Shared by" : "Delt af", + "A file or folder has been <strong>shared</strong>" : "En fil eller mappe er blevet <strong>delt</strong>", "A file or folder was shared from <strong>another server</strong>" : "En fil eller mappe blev delt fra <strong>en anden server</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "En offentligt delt fil eller mappe blev <strong>hentet</strong>", "You received a new remote share from %s" : "Du modtog en ny ekstern deling fra %s", @@ -33,6 +34,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s stoppede med at dele %2$s med dig", "Public shared folder %1$s was downloaded" : "Den offentligt delte mappe %1$s blev downloadet", "Public shared file %1$s was downloaded" : "Den offentligt delte fil %1$s blev downloadet", + "You shared %1$s with %2$s" : "Du delte %1$s med %2$s", + "You shared %1$s with group %2$s" : "Du delte %1$s med gruppen %2$s", + "%2$s shared %1$s with you" : "%2$s delt %1$s med dig", + "You shared %1$s via link" : "Du delte %1$s via link", + "Shares" : "Delt", "This share is password-protected" : "Delingen er beskyttet af kodeord", "The password is wrong. Try again." : "Kodeordet er forkert. Prøv igen.", "Password" : "Kodeord", diff --git a/apps/files_sharing/l10n/da.json b/apps/files_sharing/l10n/da.json index 51443a5d003..88151116fdc 100644 --- a/apps/files_sharing/l10n/da.json +++ b/apps/files_sharing/l10n/da.json @@ -23,6 +23,7 @@ "Invalid ownCloud url" : "Ugyldig ownCloud-URL", "Share" : "Del", "Shared by" : "Delt af", + "A file or folder has been <strong>shared</strong>" : "En fil eller mappe er blevet <strong>delt</strong>", "A file or folder was shared from <strong>another server</strong>" : "En fil eller mappe blev delt fra <strong>en anden server</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "En offentligt delt fil eller mappe blev <strong>hentet</strong>", "You received a new remote share from %s" : "Du modtog en ny ekstern deling fra %s", @@ -31,6 +32,11 @@ "%1$s unshared %2$s from you" : "%1$s stoppede med at dele %2$s med dig", "Public shared folder %1$s was downloaded" : "Den offentligt delte mappe %1$s blev downloadet", "Public shared file %1$s was downloaded" : "Den offentligt delte fil %1$s blev downloadet", + "You shared %1$s with %2$s" : "Du delte %1$s med %2$s", + "You shared %1$s with group %2$s" : "Du delte %1$s med gruppen %2$s", + "%2$s shared %1$s with you" : "%2$s delt %1$s med dig", + "You shared %1$s via link" : "Du delte %1$s via link", + "Shares" : "Delt", "This share is password-protected" : "Delingen er beskyttet af kodeord", "The password is wrong. Try again." : "Kodeordet er forkert. Prøv igen.", "Password" : "Kodeord", diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js index d53e43e83a4..3d07c149b93 100644 --- a/apps/files_sharing/l10n/de.js +++ b/apps/files_sharing/l10n/de.js @@ -1,7 +1,7 @@ OC.L10N.register( "files_sharing", { - "Server to server sharing is not enabled on this server" : "Der Server für die Serverfreigabe ist auf diesem Server nicht aktiviert", + "Server to server sharing is not enabled on this server" : "Das Server-zu-Server-Teilen ist auf diesem Server nicht aktiviert", "The mountpoint name contains invalid characters." : "Der Name des Einhängepunktes enthält ungültige Zeichen.", "Invalid or untrusted SSL certificate" : "Ungültiges oder nicht vertrauenswürdiges SSL-Zertifikat", "Could not authenticate to remote share, password might be wrong" : "Die Authentifizierung an der entfernten Freigabe konnte nicht erfolgen, das Passwort könnte falsch sein", @@ -23,8 +23,9 @@ OC.L10N.register( "Add remote share" : "Entfernte Freigabe hinzufügen", "No ownCloud installation (7 or higher) found at {remote}" : "Keine OwnCloud-Installation (7 oder höher) auf {remote} gefunden", "Invalid ownCloud url" : "Ungültige OwnCloud-URL", - "Share" : "Share", + "Share" : "Teilen", "Shared by" : "Geteilt von ", + "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>", "A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt", "A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentliche geteilte Datei oder ein öffentlicher geteilter Ordner wurde <strong>heruntergeladen</strong>", "You received a new remote share from %s" : "Du hast eine neue Remotefreigabe von %s erhalten", @@ -33,6 +34,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s hat die Freigabe von %2$s für Dich entfernt", "Public shared folder %1$s was downloaded" : "Der öffentliche geteilte Ordner %1$s wurde heruntergeladen", "Public shared file %1$s was downloaded" : "Die öffentliche geteilte Datei %1$s wurde heruntergeladen", + "You shared %1$s with %2$s" : "Du hast %1$s mit %2$s geteilt", + "You shared %1$s with group %2$s" : "Du hast %1$s mit der Gruppe %2$s geteilt", + "%2$s shared %1$s with you" : "%2$s hat %1$s mit Dir geteilt", + "You shared %1$s via link" : "Du hast %1$s über einen Link freigegeben", + "Shares" : "Freigaben", "This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt", "The password is wrong. Try again." : "Bitte überprüfe Dein Passwort und versuche es erneut.", "Password" : "Passwort", @@ -44,13 +50,13 @@ OC.L10N.register( "the item was removed" : "Das Element wurde entfernt", "the link expired" : "Der Link ist abgelaufen", "sharing is disabled" : "Teilen ist deaktiviert", - "For more info, please ask the person who sent this link." : "Für mehr Informationen, frage bitte die Person, die Dir diesen Link geschickt hat.", + "For more info, please ask the person who sent this link." : "Um nähere Informationen zu erhalten, wende Dich bitte an die Person, die Dir diesen Link geschickt hat.", "Add to your ownCloud" : "Zu Deiner ownCloud hinzufügen", "Download" : "Herunterladen", "Download %s" : "Download %s", "Direct link" : "Direkter Link", "Federated Cloud Sharing" : "Federated-Cloud-Sharing", - "Allow users on this server to send shares to other servers" : "Nutzern auf diesem Server das Senden von Freigaben an andere Server erlauben", - "Allow users on this server to receive shares from other servers" : "Nutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben" + "Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben", + "Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json index 78ccece1bf1..9dd6fe31d9b 100644 --- a/apps/files_sharing/l10n/de.json +++ b/apps/files_sharing/l10n/de.json @@ -1,5 +1,5 @@ { "translations": { - "Server to server sharing is not enabled on this server" : "Der Server für die Serverfreigabe ist auf diesem Server nicht aktiviert", + "Server to server sharing is not enabled on this server" : "Das Server-zu-Server-Teilen ist auf diesem Server nicht aktiviert", "The mountpoint name contains invalid characters." : "Der Name des Einhängepunktes enthält ungültige Zeichen.", "Invalid or untrusted SSL certificate" : "Ungültiges oder nicht vertrauenswürdiges SSL-Zertifikat", "Could not authenticate to remote share, password might be wrong" : "Die Authentifizierung an der entfernten Freigabe konnte nicht erfolgen, das Passwort könnte falsch sein", @@ -21,8 +21,9 @@ "Add remote share" : "Entfernte Freigabe hinzufügen", "No ownCloud installation (7 or higher) found at {remote}" : "Keine OwnCloud-Installation (7 oder höher) auf {remote} gefunden", "Invalid ownCloud url" : "Ungültige OwnCloud-URL", - "Share" : "Share", + "Share" : "Teilen", "Shared by" : "Geteilt von ", + "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>", "A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt", "A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentliche geteilte Datei oder ein öffentlicher geteilter Ordner wurde <strong>heruntergeladen</strong>", "You received a new remote share from %s" : "Du hast eine neue Remotefreigabe von %s erhalten", @@ -31,6 +32,11 @@ "%1$s unshared %2$s from you" : "%1$s hat die Freigabe von %2$s für Dich entfernt", "Public shared folder %1$s was downloaded" : "Der öffentliche geteilte Ordner %1$s wurde heruntergeladen", "Public shared file %1$s was downloaded" : "Die öffentliche geteilte Datei %1$s wurde heruntergeladen", + "You shared %1$s with %2$s" : "Du hast %1$s mit %2$s geteilt", + "You shared %1$s with group %2$s" : "Du hast %1$s mit der Gruppe %2$s geteilt", + "%2$s shared %1$s with you" : "%2$s hat %1$s mit Dir geteilt", + "You shared %1$s via link" : "Du hast %1$s über einen Link freigegeben", + "Shares" : "Freigaben", "This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt", "The password is wrong. Try again." : "Bitte überprüfe Dein Passwort und versuche es erneut.", "Password" : "Passwort", @@ -42,13 +48,13 @@ "the item was removed" : "Das Element wurde entfernt", "the link expired" : "Der Link ist abgelaufen", "sharing is disabled" : "Teilen ist deaktiviert", - "For more info, please ask the person who sent this link." : "Für mehr Informationen, frage bitte die Person, die Dir diesen Link geschickt hat.", + "For more info, please ask the person who sent this link." : "Um nähere Informationen zu erhalten, wende Dich bitte an die Person, die Dir diesen Link geschickt hat.", "Add to your ownCloud" : "Zu Deiner ownCloud hinzufügen", "Download" : "Herunterladen", "Download %s" : "Download %s", "Direct link" : "Direkter Link", "Federated Cloud Sharing" : "Federated-Cloud-Sharing", - "Allow users on this server to send shares to other servers" : "Nutzern auf diesem Server das Senden von Freigaben an andere Server erlauben", - "Allow users on this server to receive shares from other servers" : "Nutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben" + "Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben", + "Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/de_AT.js b/apps/files_sharing/l10n/de_AT.js index dbef4e1e56a..cf1e3f9b320 100644 --- a/apps/files_sharing/l10n/de_AT.js +++ b/apps/files_sharing/l10n/de_AT.js @@ -3,6 +3,12 @@ OC.L10N.register( { "Cancel" : "Abbrechen", "Share" : "Freigeben", + "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>", + "You shared %1$s with %2$s" : "du teilst %1$s mit %2$s", + "You shared %1$s with group %2$s" : "Du teilst %1$s mit der Gruppe %2$s", + "%2$s shared %1$s with you" : "%2$s hat %1$s mit dir geteilt", + "You shared %1$s via link" : "Du hast %1$s mithilfe eines Link geteilt", + "Shares" : "teilt", "Password" : "Passwort", "Download" : "Herunterladen" }, diff --git a/apps/files_sharing/l10n/de_AT.json b/apps/files_sharing/l10n/de_AT.json index ccb46020bb5..fda07e557a8 100644 --- a/apps/files_sharing/l10n/de_AT.json +++ b/apps/files_sharing/l10n/de_AT.json @@ -1,6 +1,12 @@ { "translations": { "Cancel" : "Abbrechen", "Share" : "Freigeben", + "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>", + "You shared %1$s with %2$s" : "du teilst %1$s mit %2$s", + "You shared %1$s with group %2$s" : "Du teilst %1$s mit der Gruppe %2$s", + "%2$s shared %1$s with you" : "%2$s hat %1$s mit dir geteilt", + "You shared %1$s via link" : "Du hast %1$s mithilfe eines Link geteilt", + "Shares" : "teilt", "Password" : "Passwort", "Download" : "Herunterladen" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js index d44e97e6056..7079a70f4b5 100644 --- a/apps/files_sharing/l10n/de_DE.js +++ b/apps/files_sharing/l10n/de_DE.js @@ -1,8 +1,8 @@ OC.L10N.register( "files_sharing", { - "Server to server sharing is not enabled on this server" : "Der Server für die Serverfreigabe ist auf diesem Server nicht aktiviert", - "The mountpoint name contains invalid characters." : "Der Name des Einhängepunktes enthält nicht gültige Zeichen.", + "Server to server sharing is not enabled on this server" : "Das Server-zu-Server-Teilen ist auf diesem Server nicht aktiviert", + "The mountpoint name contains invalid characters." : "Der Name des Einhängepunktes enthält ungültige Zeichen.", "Invalid or untrusted SSL certificate" : "Ungültiges oder nicht vertrauenswürdiges SSL-Zertifikat", "Could not authenticate to remote share, password might be wrong" : "Die Authentifizierung an der entfernten Freigabe konnte nicht erfolgen, das Passwort könnte falsch sein", "Storage not valid" : "Speicher ungültig", @@ -25,6 +25,7 @@ OC.L10N.register( "Invalid ownCloud url" : "Ungültige OwnCloud-Adresse", "Share" : "Teilen", "Shared by" : "Geteilt von", + "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>", "A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt", "A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentliche geteilte Datei oder ein öffentlicher geteilter Ordner wurde <strong>heruntergeladen</strong>", "You received a new remote share from %s" : "Sie haben eine neue Remotefreigabe von %s erhalten", @@ -33,6 +34,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s hat die Freigabe von %2$s für Sie entfernt", "Public shared folder %1$s was downloaded" : "Der öffentliche geteilte Ordner %1$s wurde heruntergeladen", "Public shared file %1$s was downloaded" : "Die öffentliche geteilte Datei %1$s wurde heruntergeladen", + "You shared %1$s with %2$s" : "Sie haben %1$s mit %2$s geteilt", + "You shared %1$s with group %2$s" : "Sie haben %1$s mit der Gruppe %2$s geteilt", + "%2$s shared %1$s with you" : "%2$s hat %1$s mit Ihnen geteilt", + "You shared %1$s via link" : "Sie haben %1$s über einen Link geteilt", + "Shares" : "Geteiltes", "This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt", "The password is wrong. Try again." : "Das Passwort ist falsch. Bitte versuchen Sie es erneut.", "Password" : "Passwort", @@ -44,7 +50,7 @@ OC.L10N.register( "the item was removed" : "Das Element wurde entfernt", "the link expired" : "Der Link ist abgelaufen", "sharing is disabled" : "Teilen ist deaktiviert", - "For more info, please ask the person who sent this link." : "Um weitere Informationen zu erhalten, fragen Sie bitte die Person, die Ihnen diesen Link geschickt hat.", + "For more info, please ask the person who sent this link." : "Um nähere Informationen zu erhalten, wenden Sie sich bitte an die Person, die Ihnen diesen Link geschickt hat.", "Add to your ownCloud" : "Zu Ihrer ownCloud hinzufügen", "Download" : "Herunterladen", "Download %s" : "Download %s", diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json index 8571d4fdd83..35ab01aac7f 100644 --- a/apps/files_sharing/l10n/de_DE.json +++ b/apps/files_sharing/l10n/de_DE.json @@ -1,6 +1,6 @@ { "translations": { - "Server to server sharing is not enabled on this server" : "Der Server für die Serverfreigabe ist auf diesem Server nicht aktiviert", - "The mountpoint name contains invalid characters." : "Der Name des Einhängepunktes enthält nicht gültige Zeichen.", + "Server to server sharing is not enabled on this server" : "Das Server-zu-Server-Teilen ist auf diesem Server nicht aktiviert", + "The mountpoint name contains invalid characters." : "Der Name des Einhängepunktes enthält ungültige Zeichen.", "Invalid or untrusted SSL certificate" : "Ungültiges oder nicht vertrauenswürdiges SSL-Zertifikat", "Could not authenticate to remote share, password might be wrong" : "Die Authentifizierung an der entfernten Freigabe konnte nicht erfolgen, das Passwort könnte falsch sein", "Storage not valid" : "Speicher ungültig", @@ -23,6 +23,7 @@ "Invalid ownCloud url" : "Ungültige OwnCloud-Adresse", "Share" : "Teilen", "Shared by" : "Geteilt von", + "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>", "A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt", "A public shared file or folder was <strong>downloaded</strong>" : "Eine öffentliche geteilte Datei oder ein öffentlicher geteilter Ordner wurde <strong>heruntergeladen</strong>", "You received a new remote share from %s" : "Sie haben eine neue Remotefreigabe von %s erhalten", @@ -31,6 +32,11 @@ "%1$s unshared %2$s from you" : "%1$s hat die Freigabe von %2$s für Sie entfernt", "Public shared folder %1$s was downloaded" : "Der öffentliche geteilte Ordner %1$s wurde heruntergeladen", "Public shared file %1$s was downloaded" : "Die öffentliche geteilte Datei %1$s wurde heruntergeladen", + "You shared %1$s with %2$s" : "Sie haben %1$s mit %2$s geteilt", + "You shared %1$s with group %2$s" : "Sie haben %1$s mit der Gruppe %2$s geteilt", + "%2$s shared %1$s with you" : "%2$s hat %1$s mit Ihnen geteilt", + "You shared %1$s via link" : "Sie haben %1$s über einen Link geteilt", + "Shares" : "Geteiltes", "This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt", "The password is wrong. Try again." : "Das Passwort ist falsch. Bitte versuchen Sie es erneut.", "Password" : "Passwort", @@ -42,7 +48,7 @@ "the item was removed" : "Das Element wurde entfernt", "the link expired" : "Der Link ist abgelaufen", "sharing is disabled" : "Teilen ist deaktiviert", - "For more info, please ask the person who sent this link." : "Um weitere Informationen zu erhalten, fragen Sie bitte die Person, die Ihnen diesen Link geschickt hat.", + "For more info, please ask the person who sent this link." : "Um nähere Informationen zu erhalten, wenden Sie sich bitte an die Person, die Ihnen diesen Link geschickt hat.", "Add to your ownCloud" : "Zu Ihrer ownCloud hinzufügen", "Download" : "Herunterladen", "Download %s" : "Download %s", diff --git a/apps/files_sharing/l10n/el.js b/apps/files_sharing/l10n/el.js index 69619567ba9..ac31b4d6d35 100644 --- a/apps/files_sharing/l10n/el.js +++ b/apps/files_sharing/l10n/el.js @@ -25,6 +25,7 @@ OC.L10N.register( "Invalid ownCloud url" : "Άκυρη url ownCloud ", "Share" : "Διαμοιράστε", "Shared by" : "Διαμοιράστηκε από", + "A file or folder has been <strong>shared</strong>" : "Ένα αρχείο ή φάκελος <strong>διαμοιράστηκε</strong>", "A file or folder was shared from <strong>another server</strong>" : "Ένα αρχείο ή φάκελος διαμοιράστηκε από <strong>έναν άλλο διακομιστή</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Ένα δημόσια διαμοιρασμένο αρχείο ή φάκελος <strong>ελήφθη</strong>", "You received a new remote share from %s" : "Λάβατε ένα νέο απομακρυσμένο κοινόχρηστο φάκελο από %s", @@ -33,6 +34,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "Ο %1$s απέσυρε το διαμοιρασμό του %2$s με εσάς", "Public shared folder %1$s was downloaded" : "Ο κοινόχρηστος διαμοιρασμένος φάκελος %1$s ελήφθη", "Public shared file %1$s was downloaded" : "Το κοινόχρηστο διαμοιρασμένο αρχείο %1$s ελήφθη", + "You shared %1$s with %2$s" : "Διαμοιραστήκατε το %1$s με %2$s", + "You shared %1$s with group %2$s" : "Διαμοιραστήκατε %1$s με την ομάδα %2$s", + "%2$s shared %1$s with you" : "Ο %2$s διαμοιράστηκε το %1$s με εσάς", + "You shared %1$s via link" : "Μοιραστήκατε το %1$s μέσω συνδέσμου", + "Shares" : "Κοινόχρηστοι φάκελοι", "This share is password-protected" : "Αυτός ο κοινόχρηστος φάκελος προστατεύεται με κωδικό", "The password is wrong. Try again." : "Εσφαλμένος κωδικός πρόσβασης. Προσπαθήστε ξανά.", "Password" : "Κωδικός πρόσβασης", diff --git a/apps/files_sharing/l10n/el.json b/apps/files_sharing/l10n/el.json index 3d124359f43..02248344dfc 100644 --- a/apps/files_sharing/l10n/el.json +++ b/apps/files_sharing/l10n/el.json @@ -23,6 +23,7 @@ "Invalid ownCloud url" : "Άκυρη url ownCloud ", "Share" : "Διαμοιράστε", "Shared by" : "Διαμοιράστηκε από", + "A file or folder has been <strong>shared</strong>" : "Ένα αρχείο ή φάκελος <strong>διαμοιράστηκε</strong>", "A file or folder was shared from <strong>another server</strong>" : "Ένα αρχείο ή φάκελος διαμοιράστηκε από <strong>έναν άλλο διακομιστή</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Ένα δημόσια διαμοιρασμένο αρχείο ή φάκελος <strong>ελήφθη</strong>", "You received a new remote share from %s" : "Λάβατε ένα νέο απομακρυσμένο κοινόχρηστο φάκελο από %s", @@ -31,6 +32,11 @@ "%1$s unshared %2$s from you" : "Ο %1$s απέσυρε το διαμοιρασμό του %2$s με εσάς", "Public shared folder %1$s was downloaded" : "Ο κοινόχρηστος διαμοιρασμένος φάκελος %1$s ελήφθη", "Public shared file %1$s was downloaded" : "Το κοινόχρηστο διαμοιρασμένο αρχείο %1$s ελήφθη", + "You shared %1$s with %2$s" : "Διαμοιραστήκατε το %1$s με %2$s", + "You shared %1$s with group %2$s" : "Διαμοιραστήκατε %1$s με την ομάδα %2$s", + "%2$s shared %1$s with you" : "Ο %2$s διαμοιράστηκε το %1$s με εσάς", + "You shared %1$s via link" : "Μοιραστήκατε το %1$s μέσω συνδέσμου", + "Shares" : "Κοινόχρηστοι φάκελοι", "This share is password-protected" : "Αυτός ο κοινόχρηστος φάκελος προστατεύεται με κωδικό", "The password is wrong. Try again." : "Εσφαλμένος κωδικός πρόσβασης. Προσπαθήστε ξανά.", "Password" : "Κωδικός πρόσβασης", diff --git a/apps/files_sharing/l10n/en_GB.js b/apps/files_sharing/l10n/en_GB.js index f7372023a21..6ba75c4fc30 100644 --- a/apps/files_sharing/l10n/en_GB.js +++ b/apps/files_sharing/l10n/en_GB.js @@ -25,6 +25,7 @@ OC.L10N.register( "Invalid ownCloud url" : "Invalid ownCloud URL", "Share" : "Share", "Shared by" : "Shared by", + "A file or folder has been <strong>shared</strong>" : "A file or folder has been <strong>shared</strong>", "A file or folder was shared from <strong>another server</strong>" : "A file or folder was shared from <strong>another server</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "A public shared file or folder was <strong>downloaded</strong>", "You received a new remote share from %s" : "You received a new remote share from %s", @@ -33,6 +34,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s unshared %2$s from you", "Public shared folder %1$s was downloaded" : "Public shared folder %1$s was downloaded", "Public shared file %1$s was downloaded" : "Public shared file %1$s was downloaded", + "You shared %1$s with %2$s" : "You shared %1$s with %2$s", + "You shared %1$s with group %2$s" : "You shared %1$s with group %2$s", + "%2$s shared %1$s with you" : "%2$s shared %1$s with you", + "You shared %1$s via link" : "You shared %1$s via link", + "Shares" : "Shares", "This share is password-protected" : "This share is password-protected", "The password is wrong. Try again." : "The password is wrong. Try again.", "Password" : "Password", diff --git a/apps/files_sharing/l10n/en_GB.json b/apps/files_sharing/l10n/en_GB.json index 0d89d67a73d..94bb78cfb66 100644 --- a/apps/files_sharing/l10n/en_GB.json +++ b/apps/files_sharing/l10n/en_GB.json @@ -23,6 +23,7 @@ "Invalid ownCloud url" : "Invalid ownCloud URL", "Share" : "Share", "Shared by" : "Shared by", + "A file or folder has been <strong>shared</strong>" : "A file or folder has been <strong>shared</strong>", "A file or folder was shared from <strong>another server</strong>" : "A file or folder was shared from <strong>another server</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "A public shared file or folder was <strong>downloaded</strong>", "You received a new remote share from %s" : "You received a new remote share from %s", @@ -31,6 +32,11 @@ "%1$s unshared %2$s from you" : "%1$s unshared %2$s from you", "Public shared folder %1$s was downloaded" : "Public shared folder %1$s was downloaded", "Public shared file %1$s was downloaded" : "Public shared file %1$s was downloaded", + "You shared %1$s with %2$s" : "You shared %1$s with %2$s", + "You shared %1$s with group %2$s" : "You shared %1$s with group %2$s", + "%2$s shared %1$s with you" : "%2$s shared %1$s with you", + "You shared %1$s via link" : "You shared %1$s via link", + "Shares" : "Shares", "This share is password-protected" : "This share is password-protected", "The password is wrong. Try again." : "The password is wrong. Try again.", "Password" : "Password", diff --git a/apps/files_sharing/l10n/eo.js b/apps/files_sharing/l10n/eo.js index 3f5d36b4003..1db25a1c780 100644 --- a/apps/files_sharing/l10n/eo.js +++ b/apps/files_sharing/l10n/eo.js @@ -9,6 +9,10 @@ OC.L10N.register( "Invalid ownCloud url" : "Nevalidas URL de ownCloud", "Share" : "Kunhavigi", "Shared by" : "Kunhavigita de", + "A file or folder has been <strong>shared</strong>" : "Dosiero aŭ dosierujo <strong>kunhaviĝis</strong>", + "You shared %1$s with %2$s" : "Vi kunhavigis %1$s kun %2$s", + "You shared %1$s with group %2$s" : "Vi kunhavigis %1$s kun la grupo %2$s", + "%2$s shared %1$s with you" : "%2$s kunhavigis %1$s kun vi", "This share is password-protected" : "Ĉi tiu kunhavigo estas protektata per pasvorto", "The password is wrong. Try again." : "La pasvorto malĝustas. Provu denove.", "Password" : "Pasvorto", diff --git a/apps/files_sharing/l10n/eo.json b/apps/files_sharing/l10n/eo.json index 18c68b4d8c8..d1ea7f2d0ea 100644 --- a/apps/files_sharing/l10n/eo.json +++ b/apps/files_sharing/l10n/eo.json @@ -7,6 +7,10 @@ "Invalid ownCloud url" : "Nevalidas URL de ownCloud", "Share" : "Kunhavigi", "Shared by" : "Kunhavigita de", + "A file or folder has been <strong>shared</strong>" : "Dosiero aŭ dosierujo <strong>kunhaviĝis</strong>", + "You shared %1$s with %2$s" : "Vi kunhavigis %1$s kun %2$s", + "You shared %1$s with group %2$s" : "Vi kunhavigis %1$s kun la grupo %2$s", + "%2$s shared %1$s with you" : "%2$s kunhavigis %1$s kun vi", "This share is password-protected" : "Ĉi tiu kunhavigo estas protektata per pasvorto", "The password is wrong. Try again." : "La pasvorto malĝustas. Provu denove.", "Password" : "Pasvorto", diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js index b107bc7f3e1..771bcdd25db 100644 --- a/apps/files_sharing/l10n/es.js +++ b/apps/files_sharing/l10n/es.js @@ -22,9 +22,10 @@ OC.L10N.register( "Cancel" : "Cancelar", "Add remote share" : "Añadir recurso compartido remoto", "No ownCloud installation (7 or higher) found at {remote}" : "No se encontró una instalación de ownCloud (7 o mayor) en {remote}", - "Invalid ownCloud url" : "URL de ownCloud inválido", + "Invalid ownCloud url" : "URL de ownCloud inválida", "Share" : "Compartir", "Shared by" : "Compartido por", + "A file or folder has been <strong>shared</strong>" : "Se ha <strong>compartido</strong> un archivo o carpeta", "A file or folder was shared from <strong>another server</strong>" : "Se ha compartido un archivo o carpeta desde <strong>otro servidor</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Ha sido <strong>descargado</strong> un archivo (o carpeta) compartido públicamente", "You received a new remote share from %s" : "Ha recibido un nuevo recurso compartido remoto de %s", @@ -33,7 +34,12 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s dejó de compartirse %2$s por ti", "Public shared folder %1$s was downloaded" : "Se descargó la carpeta pública compartida %1$s", "Public shared file %1$s was downloaded" : "Se descargó el archivo público compartido %1$s", - "This share is password-protected" : "Este elemento compartido esta protegido por contraseña", + "You shared %1$s with %2$s" : "Usted compartió %1$s con %2$s", + "You shared %1$s with group %2$s" : "Usted ha compartido %1$s con el grupo %2$s", + "%2$s shared %1$s with you" : "%2$s ha compartido %1$s con usted", + "You shared %1$s via link" : "Ha compartido %1$s vía enlace", + "Shares" : "Compartidos", + "This share is password-protected" : "Este elemento compartido está protegido por contraseña", "The password is wrong. Try again." : "La contraseña introducida es errónea. Inténtelo de nuevo.", "Password" : "Contraseña", "No entries found in this folder" : "No hay entradas en esta carpeta", diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json index 02f7e2ab24a..8b811d82e42 100644 --- a/apps/files_sharing/l10n/es.json +++ b/apps/files_sharing/l10n/es.json @@ -20,9 +20,10 @@ "Cancel" : "Cancelar", "Add remote share" : "Añadir recurso compartido remoto", "No ownCloud installation (7 or higher) found at {remote}" : "No se encontró una instalación de ownCloud (7 o mayor) en {remote}", - "Invalid ownCloud url" : "URL de ownCloud inválido", + "Invalid ownCloud url" : "URL de ownCloud inválida", "Share" : "Compartir", "Shared by" : "Compartido por", + "A file or folder has been <strong>shared</strong>" : "Se ha <strong>compartido</strong> un archivo o carpeta", "A file or folder was shared from <strong>another server</strong>" : "Se ha compartido un archivo o carpeta desde <strong>otro servidor</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Ha sido <strong>descargado</strong> un archivo (o carpeta) compartido públicamente", "You received a new remote share from %s" : "Ha recibido un nuevo recurso compartido remoto de %s", @@ -31,7 +32,12 @@ "%1$s unshared %2$s from you" : "%1$s dejó de compartirse %2$s por ti", "Public shared folder %1$s was downloaded" : "Se descargó la carpeta pública compartida %1$s", "Public shared file %1$s was downloaded" : "Se descargó el archivo público compartido %1$s", - "This share is password-protected" : "Este elemento compartido esta protegido por contraseña", + "You shared %1$s with %2$s" : "Usted compartió %1$s con %2$s", + "You shared %1$s with group %2$s" : "Usted ha compartido %1$s con el grupo %2$s", + "%2$s shared %1$s with you" : "%2$s ha compartido %1$s con usted", + "You shared %1$s via link" : "Ha compartido %1$s vía enlace", + "Shares" : "Compartidos", + "This share is password-protected" : "Este elemento compartido está protegido por contraseña", "The password is wrong. Try again." : "La contraseña introducida es errónea. Inténtelo de nuevo.", "Password" : "Contraseña", "No entries found in this folder" : "No hay entradas en esta carpeta", diff --git a/apps/files_sharing/l10n/es_AR.js b/apps/files_sharing/l10n/es_AR.js index 61fc3f6e774..ef591d93ab5 100644 --- a/apps/files_sharing/l10n/es_AR.js +++ b/apps/files_sharing/l10n/es_AR.js @@ -4,6 +4,12 @@ OC.L10N.register( "Cancel" : "Cancelar", "Share" : "Compartir", "Shared by" : "Compartido por", + "A file or folder has been <strong>shared</strong>" : "Un archivo o carpeta ha sido <strong>compartido</strong>", + "You shared %1$s with %2$s" : "Has compartido %1$s con %2$s", + "You shared %1$s with group %2$s" : "Has compartido %1$s en el grupo %2$s", + "%2$s shared %1$s with you" : "%2$s compartió %1$s contigo", + "You shared %1$s via link" : "Has compartido %1$s a través del enlace", + "Shares" : "Compartidos", "This share is password-protected" : "Esto está protegido por contraseña", "The password is wrong. Try again." : "La contraseña no es correcta. Probá de nuevo.", "Password" : "Contraseña", diff --git a/apps/files_sharing/l10n/es_AR.json b/apps/files_sharing/l10n/es_AR.json index 10c553ea58b..3940b3b1fe5 100644 --- a/apps/files_sharing/l10n/es_AR.json +++ b/apps/files_sharing/l10n/es_AR.json @@ -2,6 +2,12 @@ "Cancel" : "Cancelar", "Share" : "Compartir", "Shared by" : "Compartido por", + "A file or folder has been <strong>shared</strong>" : "Un archivo o carpeta ha sido <strong>compartido</strong>", + "You shared %1$s with %2$s" : "Has compartido %1$s con %2$s", + "You shared %1$s with group %2$s" : "Has compartido %1$s en el grupo %2$s", + "%2$s shared %1$s with you" : "%2$s compartió %1$s contigo", + "You shared %1$s via link" : "Has compartido %1$s a través del enlace", + "Shares" : "Compartidos", "This share is password-protected" : "Esto está protegido por contraseña", "The password is wrong. Try again." : "La contraseña no es correcta. Probá de nuevo.", "Password" : "Contraseña", diff --git a/apps/files_sharing/l10n/es_CL.js b/apps/files_sharing/l10n/es_CL.js index 567895ba184..1078f8d164b 100644 --- a/apps/files_sharing/l10n/es_CL.js +++ b/apps/files_sharing/l10n/es_CL.js @@ -3,6 +3,12 @@ OC.L10N.register( { "Cancel" : "Cancelar", "Share" : "Compartir", + "A file or folder has been <strong>shared</strong>" : "Un archivo o carpeta ha sido <strong>compartido</strong>", + "You shared %1$s with %2$s" : "Ha compartido %1$s con %2$s", + "You shared %1$s with group %2$s" : "Has compartido %1$s con el grupo %2$s", + "%2$s shared %1$s with you" : "%2$s compartió %1$s con usted", + "You shared %1$s via link" : "Ha compartido %1$s vía enlace", + "Shares" : "Compartidos", "Password" : "Clave", "Download" : "Descargar" }, diff --git a/apps/files_sharing/l10n/es_CL.json b/apps/files_sharing/l10n/es_CL.json index 42b0bb82700..66e917b8960 100644 --- a/apps/files_sharing/l10n/es_CL.json +++ b/apps/files_sharing/l10n/es_CL.json @@ -1,6 +1,12 @@ { "translations": { "Cancel" : "Cancelar", "Share" : "Compartir", + "A file or folder has been <strong>shared</strong>" : "Un archivo o carpeta ha sido <strong>compartido</strong>", + "You shared %1$s with %2$s" : "Ha compartido %1$s con %2$s", + "You shared %1$s with group %2$s" : "Has compartido %1$s con el grupo %2$s", + "%2$s shared %1$s with you" : "%2$s compartió %1$s con usted", + "You shared %1$s via link" : "Ha compartido %1$s vía enlace", + "Shares" : "Compartidos", "Password" : "Clave", "Download" : "Descargar" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/es_CR.js b/apps/files_sharing/l10n/es_CR.js new file mode 100644 index 00000000000..38387ee8608 --- /dev/null +++ b/apps/files_sharing/l10n/es_CR.js @@ -0,0 +1,11 @@ +OC.L10N.register( + "files_sharing", + { + "A file or folder has been <strong>shared</strong>" : "Un archivo o carpeta has sido <strong>compartido</strong>", + "You shared %1$s with %2$s" : "Usted compartió %1$s con %2$s", + "You shared %1$s with group %2$s" : "Usted compartió %1$s con el grupo %2$s", + "%2$s shared %1$s with you" : "%2$s compartió %1$s con usted", + "You shared %1$s via link" : "Usted compartió %1$s con un vínculo", + "Shares" : "Compartidos" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/es_CR.json b/apps/files_sharing/l10n/es_CR.json new file mode 100644 index 00000000000..6a92ddc55b4 --- /dev/null +++ b/apps/files_sharing/l10n/es_CR.json @@ -0,0 +1,9 @@ +{ "translations": { + "A file or folder has been <strong>shared</strong>" : "Un archivo o carpeta has sido <strong>compartido</strong>", + "You shared %1$s with %2$s" : "Usted compartió %1$s con %2$s", + "You shared %1$s with group %2$s" : "Usted compartió %1$s con el grupo %2$s", + "%2$s shared %1$s with you" : "%2$s compartió %1$s con usted", + "You shared %1$s via link" : "Usted compartió %1$s con un vínculo", + "Shares" : "Compartidos" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/files_sharing/l10n/es_PY.js b/apps/files_sharing/l10n/es_PY.js new file mode 100644 index 00000000000..ca83052f991 --- /dev/null +++ b/apps/files_sharing/l10n/es_PY.js @@ -0,0 +1,11 @@ +OC.L10N.register( + "files_sharing", + { + "A file or folder has been <strong>shared</strong>" : "Se ha <strong>compartido</strong> un archivo o carpeta", + "You shared %1$s with %2$s" : "Ha compartido %1$s con %2$s", + "You shared %1$s with group %2$s" : "Ha compartido %1$s con el grupo %2$s", + "%2$s shared %1$s with you" : "%2$s ha compartido %1$s con tigo", + "You shared %1$s via link" : "Ha compartido %1$s via enlace", + "Shares" : "Compartidos" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/es_PY.json b/apps/files_sharing/l10n/es_PY.json new file mode 100644 index 00000000000..ca21de5caaf --- /dev/null +++ b/apps/files_sharing/l10n/es_PY.json @@ -0,0 +1,9 @@ +{ "translations": { + "A file or folder has been <strong>shared</strong>" : "Se ha <strong>compartido</strong> un archivo o carpeta", + "You shared %1$s with %2$s" : "Ha compartido %1$s con %2$s", + "You shared %1$s with group %2$s" : "Ha compartido %1$s con el grupo %2$s", + "%2$s shared %1$s with you" : "%2$s ha compartido %1$s con tigo", + "You shared %1$s via link" : "Ha compartido %1$s via enlace", + "Shares" : "Compartidos" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/files_sharing/l10n/et_EE.js b/apps/files_sharing/l10n/et_EE.js index f1ebfe40c9a..889811627f6 100644 --- a/apps/files_sharing/l10n/et_EE.js +++ b/apps/files_sharing/l10n/et_EE.js @@ -16,6 +16,12 @@ OC.L10N.register( "Invalid ownCloud url" : "Vigane ownCloud url", "Share" : "Jaga", "Shared by" : "Jagas", + "A file or folder has been <strong>shared</strong>" : "Fail või kataloog on <strong>jagatud</strong>", + "You shared %1$s with %2$s" : "Jagasid %1$s %2$s kasutajaga", + "You shared %1$s with group %2$s" : "Jagasid %1$s %2$s grupiga", + "%2$s shared %1$s with you" : "%2$s jagas sinuga %1$s", + "You shared %1$s via link" : "Jagasid %1$s lingiga", + "Shares" : "Jagamised", "This share is password-protected" : "See jagamine on parooliga kaitstud", "The password is wrong. Try again." : "Parool on vale. Proovi uuesti.", "Password" : "Parool", diff --git a/apps/files_sharing/l10n/et_EE.json b/apps/files_sharing/l10n/et_EE.json index fe49003fc5d..63859ca4f90 100644 --- a/apps/files_sharing/l10n/et_EE.json +++ b/apps/files_sharing/l10n/et_EE.json @@ -14,6 +14,12 @@ "Invalid ownCloud url" : "Vigane ownCloud url", "Share" : "Jaga", "Shared by" : "Jagas", + "A file or folder has been <strong>shared</strong>" : "Fail või kataloog on <strong>jagatud</strong>", + "You shared %1$s with %2$s" : "Jagasid %1$s %2$s kasutajaga", + "You shared %1$s with group %2$s" : "Jagasid %1$s %2$s grupiga", + "%2$s shared %1$s with you" : "%2$s jagas sinuga %1$s", + "You shared %1$s via link" : "Jagasid %1$s lingiga", + "Shares" : "Jagamised", "This share is password-protected" : "See jagamine on parooliga kaitstud", "The password is wrong. Try again." : "Parool on vale. Proovi uuesti.", "Password" : "Parool", diff --git a/apps/files_sharing/l10n/eu.js b/apps/files_sharing/l10n/eu.js index 047a96a73f1..12a8b3d5346 100644 --- a/apps/files_sharing/l10n/eu.js +++ b/apps/files_sharing/l10n/eu.js @@ -24,10 +24,16 @@ OC.L10N.register( "Invalid ownCloud url" : "ownCloud url baliogabea", "Share" : "Partekatu", "Shared by" : "Honek elkarbanatuta", + "A file or folder has been <strong>shared</strong>" : "Fitxategia edo karpeta <strong>konpartitu</strong> da", "A file or folder was shared from <strong>another server</strong>" : "Fitxategia edo karpeta konpartitu da <strong>beste zerbitzari batetatik</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Publikoki partekatutako fitxategi edo karpeta bat <strong>deskargatu da</strong>", "Public shared folder %1$s was downloaded" : "Publikoki partekatutako %1$s karpeta deskargatu da", "Public shared file %1$s was downloaded" : "Publikoki partekatutako %1$s fitxategia deskargatu da", + "You shared %1$s with %2$s" : "Zuk %1$s elkarbanatu duzu %2$srekin", + "You shared %1$s with group %2$s" : "Zuk %1$s elkarbanatu duzu %2$s taldearekin", + "%2$s shared %1$s with you" : "%2$sk zurekin %1$s elkarbanatu du", + "You shared %1$s via link" : "Konpartitu duzu %1$s esteka baten bidez", + "Shares" : "Partekatuak", "This share is password-protected" : "Elkarbanatutako hau pasahitzarekin babestuta dago", "The password is wrong. Try again." : "Pasahitza ez da egokia. Saiatu berriro.", "Password" : "Pasahitza", diff --git a/apps/files_sharing/l10n/eu.json b/apps/files_sharing/l10n/eu.json index 58e5225abf9..533828717d5 100644 --- a/apps/files_sharing/l10n/eu.json +++ b/apps/files_sharing/l10n/eu.json @@ -22,10 +22,16 @@ "Invalid ownCloud url" : "ownCloud url baliogabea", "Share" : "Partekatu", "Shared by" : "Honek elkarbanatuta", + "A file or folder has been <strong>shared</strong>" : "Fitxategia edo karpeta <strong>konpartitu</strong> da", "A file or folder was shared from <strong>another server</strong>" : "Fitxategia edo karpeta konpartitu da <strong>beste zerbitzari batetatik</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Publikoki partekatutako fitxategi edo karpeta bat <strong>deskargatu da</strong>", "Public shared folder %1$s was downloaded" : "Publikoki partekatutako %1$s karpeta deskargatu da", "Public shared file %1$s was downloaded" : "Publikoki partekatutako %1$s fitxategia deskargatu da", + "You shared %1$s with %2$s" : "Zuk %1$s elkarbanatu duzu %2$srekin", + "You shared %1$s with group %2$s" : "Zuk %1$s elkarbanatu duzu %2$s taldearekin", + "%2$s shared %1$s with you" : "%2$sk zurekin %1$s elkarbanatu du", + "You shared %1$s via link" : "Konpartitu duzu %1$s esteka baten bidez", + "Shares" : "Partekatuak", "This share is password-protected" : "Elkarbanatutako hau pasahitzarekin babestuta dago", "The password is wrong. Try again." : "Pasahitza ez da egokia. Saiatu berriro.", "Password" : "Pasahitza", diff --git a/apps/files_sharing/l10n/fa.js b/apps/files_sharing/l10n/fa.js index 91232ffd638..72171ac1d67 100644 --- a/apps/files_sharing/l10n/fa.js +++ b/apps/files_sharing/l10n/fa.js @@ -15,6 +15,12 @@ OC.L10N.register( "Invalid ownCloud url" : "آدرس نمونه ownCloud غیر معتبر است", "Share" : "اشتراکگذاری", "Shared by" : "اشتراک گذاشته شده به وسیله", + "A file or folder has been <strong>shared</strong>" : "فایل یا پوشه ای به <strong>اشتراک</strong> گذاشته شد", + "You shared %1$s with %2$s" : "شما %1$s را با %2$s به اشتراک گذاشتید", + "You shared %1$s with group %2$s" : "شما %1$s را با گروه %2$s به اشتراک گذاشتید", + "%2$s shared %1$s with you" : "%2$s مورد %1$s را با شما به اشتراک گذاشت", + "You shared %1$s via link" : "شما %1$s را توسط پیوند به اشتراک گذاشتید", + "Shares" : "موارد به اشتراک گذاشته", "This share is password-protected" : "این اشتراک توسط رمز عبور محافظت می شود", "The password is wrong. Try again." : "رمزعبور اشتباه می باشد. دوباره امتحان کنید.", "Password" : "گذرواژه", diff --git a/apps/files_sharing/l10n/fa.json b/apps/files_sharing/l10n/fa.json index e63d08c2edb..6537bb2225e 100644 --- a/apps/files_sharing/l10n/fa.json +++ b/apps/files_sharing/l10n/fa.json @@ -13,6 +13,12 @@ "Invalid ownCloud url" : "آدرس نمونه ownCloud غیر معتبر است", "Share" : "اشتراکگذاری", "Shared by" : "اشتراک گذاشته شده به وسیله", + "A file or folder has been <strong>shared</strong>" : "فایل یا پوشه ای به <strong>اشتراک</strong> گذاشته شد", + "You shared %1$s with %2$s" : "شما %1$s را با %2$s به اشتراک گذاشتید", + "You shared %1$s with group %2$s" : "شما %1$s را با گروه %2$s به اشتراک گذاشتید", + "%2$s shared %1$s with you" : "%2$s مورد %1$s را با شما به اشتراک گذاشت", + "You shared %1$s via link" : "شما %1$s را توسط پیوند به اشتراک گذاشتید", + "Shares" : "موارد به اشتراک گذاشته", "This share is password-protected" : "این اشتراک توسط رمز عبور محافظت می شود", "The password is wrong. Try again." : "رمزعبور اشتباه می باشد. دوباره امتحان کنید.", "Password" : "گذرواژه", diff --git a/apps/files_sharing/l10n/fi_FI.js b/apps/files_sharing/l10n/fi_FI.js index f8803a05dca..de390cb48e4 100644 --- a/apps/files_sharing/l10n/fi_FI.js +++ b/apps/files_sharing/l10n/fi_FI.js @@ -25,6 +25,7 @@ OC.L10N.register( "Invalid ownCloud url" : "Virheellinen ownCloud-osoite", "Share" : "Jaa", "Shared by" : "Jakanut", + "A file or folder has been <strong>shared</strong>" : "Tiedosto tai kansio on <strong>jaettu</strong>", "A file or folder was shared from <strong>another server</strong>" : "Tiedosto tai kansio jaettiin <strong>toiselta palvelimelta</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Julkisesti jaettu tiedosto tai kansio <strong>ladattiin</strong>", "You received a new remote share from %s" : "Vastaanotit uuden etäjaon käyttäjältä %s", @@ -33,6 +34,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s lopetti kohteen %2$s jakamisen kanssasi", "Public shared folder %1$s was downloaded" : "Julkisesti jaettu kansio %1$s ladattiin", "Public shared file %1$s was downloaded" : "Julkisesti jaettu tiedosto %1$s ladattiin", + "You shared %1$s with %2$s" : "Jaoit kohteen %1$s käyttäjän %2$s kanssa", + "You shared %1$s with group %2$s" : "Jaoit kohteen %1$s ryhmän %2$s kanssa", + "%2$s shared %1$s with you" : "%2$s jakoi kohteen %1$s kanssasi", + "You shared %1$s via link" : "Jaoit kohteen %1$s linkin kautta", + "Shares" : "Jaot", "This share is password-protected" : "Tämä jako on suojattu salasanalla", "The password is wrong. Try again." : "Väärä salasana. Yritä uudelleen.", "Password" : "Salasana", diff --git a/apps/files_sharing/l10n/fi_FI.json b/apps/files_sharing/l10n/fi_FI.json index 29f7d5ba14d..7cf98b9ae6a 100644 --- a/apps/files_sharing/l10n/fi_FI.json +++ b/apps/files_sharing/l10n/fi_FI.json @@ -23,6 +23,7 @@ "Invalid ownCloud url" : "Virheellinen ownCloud-osoite", "Share" : "Jaa", "Shared by" : "Jakanut", + "A file or folder has been <strong>shared</strong>" : "Tiedosto tai kansio on <strong>jaettu</strong>", "A file or folder was shared from <strong>another server</strong>" : "Tiedosto tai kansio jaettiin <strong>toiselta palvelimelta</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Julkisesti jaettu tiedosto tai kansio <strong>ladattiin</strong>", "You received a new remote share from %s" : "Vastaanotit uuden etäjaon käyttäjältä %s", @@ -31,6 +32,11 @@ "%1$s unshared %2$s from you" : "%1$s lopetti kohteen %2$s jakamisen kanssasi", "Public shared folder %1$s was downloaded" : "Julkisesti jaettu kansio %1$s ladattiin", "Public shared file %1$s was downloaded" : "Julkisesti jaettu tiedosto %1$s ladattiin", + "You shared %1$s with %2$s" : "Jaoit kohteen %1$s käyttäjän %2$s kanssa", + "You shared %1$s with group %2$s" : "Jaoit kohteen %1$s ryhmän %2$s kanssa", + "%2$s shared %1$s with you" : "%2$s jakoi kohteen %1$s kanssasi", + "You shared %1$s via link" : "Jaoit kohteen %1$s linkin kautta", + "Shares" : "Jaot", "This share is password-protected" : "Tämä jako on suojattu salasanalla", "The password is wrong. Try again." : "Väärä salasana. Yritä uudelleen.", "Password" : "Salasana", diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js index 96ccb0b2c8c..54d1f88ef0e 100644 --- a/apps/files_sharing/l10n/fr.js +++ b/apps/files_sharing/l10n/fr.js @@ -14,7 +14,7 @@ OC.L10N.register( "Files and folders others share with you will show up here" : "Les fichiers et dossiers partagés avec vous apparaîtront ici", "Nothing shared yet" : "Rien n'est partagé pour l'instant", "Files and folders you share will show up here" : "Les fichiers et dossiers que vous partagerez apparaîtront ici", - "No shared links" : "Aucun lien partagé", + "No shared links" : "Aucun partage par lien", "Files and folders you share by link will show up here" : "Les fichiers et dossiers que vous partagerez par lien apparaîtront ici", "Do you want to add the remote share {name} from {owner}@{remote}?" : "Voulez-vous ajouter le partage distant {name} de {owner}@{remote} ?", "Remote share" : "Partage distant", @@ -25,6 +25,7 @@ OC.L10N.register( "Invalid ownCloud url" : "URL ownCloud non valide", "Share" : "Partager", "Shared by" : "Partagé par", + "A file or folder has been <strong>shared</strong>" : "Un fichier ou un répertoire a été <strong>partagé</strong>", "A file or folder was shared from <strong>another server</strong>" : "Un fichier ou un répertoire a été partagé depuis <strong>un autre serveur</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Un fichier ou un répertoire partagé a été <strong>téléchargé</strong>", "You received a new remote share from %s" : "Vous avez reçu un partage distant de %s", @@ -33,6 +34,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s a cessé de partager %2$s avec vous", "Public shared folder %1$s was downloaded" : "Le dossier public %1$s a été téléchargé", "Public shared file %1$s was downloaded" : "Le fichier public %1$s a été téléchargé", + "You shared %1$s with %2$s" : "Vous avez partagé %1$s avec %2$s", + "You shared %1$s with group %2$s" : "Vous avez partagé %1$s avec le groupe %2$s", + "%2$s shared %1$s with you" : "%2$s a partagé %1$s avec vous", + "You shared %1$s via link" : "Vous avez partagé %1$s par lien public", + "Shares" : "Partages", "This share is password-protected" : "Ce partage est protégé par un mot de passe", "The password is wrong. Try again." : "Le mot de passe est incorrect. Veuillez réessayer.", "Password" : "Mot de passe", @@ -49,7 +55,7 @@ OC.L10N.register( "Download" : "Télécharger", "Download %s" : "Télécharger %s", "Direct link" : "Lien direct", - "Federated Cloud Sharing" : "Partage fédéré dans le cloud", + "Federated Cloud Sharing" : "Federated Cloud Sharing", "Allow users on this server to send shares to other servers" : "Autoriser les utilisateurs de ce serveur à envoyer des partages vers d'autres serveurs", "Allow users on this server to receive shares from other servers" : "Autoriser les utilisateurs de ce serveur à recevoir des partages d'autres serveurs" }, diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json index c148f654f63..370ca5e3c49 100644 --- a/apps/files_sharing/l10n/fr.json +++ b/apps/files_sharing/l10n/fr.json @@ -12,7 +12,7 @@ "Files and folders others share with you will show up here" : "Les fichiers et dossiers partagés avec vous apparaîtront ici", "Nothing shared yet" : "Rien n'est partagé pour l'instant", "Files and folders you share will show up here" : "Les fichiers et dossiers que vous partagerez apparaîtront ici", - "No shared links" : "Aucun lien partagé", + "No shared links" : "Aucun partage par lien", "Files and folders you share by link will show up here" : "Les fichiers et dossiers que vous partagerez par lien apparaîtront ici", "Do you want to add the remote share {name} from {owner}@{remote}?" : "Voulez-vous ajouter le partage distant {name} de {owner}@{remote} ?", "Remote share" : "Partage distant", @@ -23,6 +23,7 @@ "Invalid ownCloud url" : "URL ownCloud non valide", "Share" : "Partager", "Shared by" : "Partagé par", + "A file or folder has been <strong>shared</strong>" : "Un fichier ou un répertoire a été <strong>partagé</strong>", "A file or folder was shared from <strong>another server</strong>" : "Un fichier ou un répertoire a été partagé depuis <strong>un autre serveur</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Un fichier ou un répertoire partagé a été <strong>téléchargé</strong>", "You received a new remote share from %s" : "Vous avez reçu un partage distant de %s", @@ -31,6 +32,11 @@ "%1$s unshared %2$s from you" : "%1$s a cessé de partager %2$s avec vous", "Public shared folder %1$s was downloaded" : "Le dossier public %1$s a été téléchargé", "Public shared file %1$s was downloaded" : "Le fichier public %1$s a été téléchargé", + "You shared %1$s with %2$s" : "Vous avez partagé %1$s avec %2$s", + "You shared %1$s with group %2$s" : "Vous avez partagé %1$s avec le groupe %2$s", + "%2$s shared %1$s with you" : "%2$s a partagé %1$s avec vous", + "You shared %1$s via link" : "Vous avez partagé %1$s par lien public", + "Shares" : "Partages", "This share is password-protected" : "Ce partage est protégé par un mot de passe", "The password is wrong. Try again." : "Le mot de passe est incorrect. Veuillez réessayer.", "Password" : "Mot de passe", @@ -47,7 +53,7 @@ "Download" : "Télécharger", "Download %s" : "Télécharger %s", "Direct link" : "Lien direct", - "Federated Cloud Sharing" : "Partage fédéré dans le cloud", + "Federated Cloud Sharing" : "Federated Cloud Sharing", "Allow users on this server to send shares to other servers" : "Autoriser les utilisateurs de ce serveur à envoyer des partages vers d'autres serveurs", "Allow users on this server to receive shares from other servers" : "Autoriser les utilisateurs de ce serveur à recevoir des partages d'autres serveurs" },"pluralForm" :"nplurals=2; plural=(n > 1);" diff --git a/apps/files_sharing/l10n/gl.js b/apps/files_sharing/l10n/gl.js index 4f93701ff97..8609377e8d7 100644 --- a/apps/files_sharing/l10n/gl.js +++ b/apps/files_sharing/l10n/gl.js @@ -2,10 +2,10 @@ OC.L10N.register( "files_sharing", { "Server to server sharing is not enabled on this server" : "Neste servidor non está activada a compartición de servidor a servidor", - "The mountpoint name contains invalid characters." : "O nome do punto de montaxe contén caracteres inválidos.", + "The mountpoint name contains invalid characters." : "O nome do punto de montaxe contén caracteres incorrectos", "Invalid or untrusted SSL certificate" : "Certificado SSL incorrecto ou non fiábel", - "Could not authenticate to remote share, password might be wrong" : "Non se puido autenticar na compartición remota, o contrasinal podería ser erróneo", - "Storage not valid" : "Almacenamento non válido", + "Could not authenticate to remote share, password might be wrong" : "Non foi pisíbel autenticar na compartición remota, o contrasinal podería ser erróneo", + "Storage not valid" : "Almacenamento incorrecto", "Couldn't add remote share" : "Non foi posíbel engadir a compartición remota", "Shared with you" : "Compartido con vostede", "Shared with others" : "Compartido con outros", @@ -22,9 +22,10 @@ OC.L10N.register( "Cancel" : "Cancelar", "Add remote share" : "Engadir unha compartición remota", "No ownCloud installation (7 or higher) found at {remote}" : "Non se atopa unha instalación de ownCloud (7 ou superior) en {remote}", - "Invalid ownCloud url" : "URL incorrecta do ownCloud", + "Invalid ownCloud url" : "URL incorrecto do ownCloud", "Share" : "Compartir", "Shared by" : "Compartido por", + "A file or folder has been <strong>shared</strong>" : "<strong>Compartiuse</strong> un ficheiro ou cartafol", "A file or folder was shared from <strong>another server</strong>" : "Compartiuse un ficheiro ou cartafol desde <strong>outro servidor</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Foi <strong>descargado</strong> un ficheiro ou cartafol público", "You received a new remote share from %s" : "Recibiu unha compartición remota de %s", @@ -33,6 +34,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s deixou de compartir %2$s con vostede", "Public shared folder %1$s was downloaded" : "Foi descargado o cartafol público %1$s", "Public shared file %1$s was downloaded" : "Foi descargado o ficheiro público %1$s", + "You shared %1$s with %2$s" : "Compartiu %1$s con %2$s", + "You shared %1$s with group %2$s" : "Compartiu %1$s co grupo %2$s", + "%2$s shared %1$s with you" : "%2$s compartiu %1$s con vostede", + "You shared %1$s via link" : "Vostede compartiu %1$s mediante ligazón", + "Shares" : "Comparticións", "This share is password-protected" : "Esta compartición está protexida con contrasinal", "The password is wrong. Try again." : "O contrasinal é incorrecto. Ténteo de novo.", "Password" : "Contrasinal", @@ -49,7 +55,8 @@ OC.L10N.register( "Download" : "Descargar", "Download %s" : "Descargar %s", "Direct link" : "Ligazón directa", - "Allow users on this server to send shares to other servers" : "Permitir aos ususarios de este servidor enviar comparticións a outros servidores", - "Allow users on this server to receive shares from other servers" : "Permitir aos usuarios de este servidor recibir comparticións de outros servidores" + "Federated Cloud Sharing" : "Compartición de nube federada", + "Allow users on this server to send shares to other servers" : "Permitir aos usuarios deste servidor enviar comparticións a outros servidores", + "Allow users on this server to receive shares from other servers" : "Permitir aos usuarios deste servidor recibir comparticións de outros servidores" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/gl.json b/apps/files_sharing/l10n/gl.json index 5ef32596268..70fafc24346 100644 --- a/apps/files_sharing/l10n/gl.json +++ b/apps/files_sharing/l10n/gl.json @@ -1,9 +1,9 @@ { "translations": { "Server to server sharing is not enabled on this server" : "Neste servidor non está activada a compartición de servidor a servidor", - "The mountpoint name contains invalid characters." : "O nome do punto de montaxe contén caracteres inválidos.", + "The mountpoint name contains invalid characters." : "O nome do punto de montaxe contén caracteres incorrectos", "Invalid or untrusted SSL certificate" : "Certificado SSL incorrecto ou non fiábel", - "Could not authenticate to remote share, password might be wrong" : "Non se puido autenticar na compartición remota, o contrasinal podería ser erróneo", - "Storage not valid" : "Almacenamento non válido", + "Could not authenticate to remote share, password might be wrong" : "Non foi pisíbel autenticar na compartición remota, o contrasinal podería ser erróneo", + "Storage not valid" : "Almacenamento incorrecto", "Couldn't add remote share" : "Non foi posíbel engadir a compartición remota", "Shared with you" : "Compartido con vostede", "Shared with others" : "Compartido con outros", @@ -20,9 +20,10 @@ "Cancel" : "Cancelar", "Add remote share" : "Engadir unha compartición remota", "No ownCloud installation (7 or higher) found at {remote}" : "Non se atopa unha instalación de ownCloud (7 ou superior) en {remote}", - "Invalid ownCloud url" : "URL incorrecta do ownCloud", + "Invalid ownCloud url" : "URL incorrecto do ownCloud", "Share" : "Compartir", "Shared by" : "Compartido por", + "A file or folder has been <strong>shared</strong>" : "<strong>Compartiuse</strong> un ficheiro ou cartafol", "A file or folder was shared from <strong>another server</strong>" : "Compartiuse un ficheiro ou cartafol desde <strong>outro servidor</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Foi <strong>descargado</strong> un ficheiro ou cartafol público", "You received a new remote share from %s" : "Recibiu unha compartición remota de %s", @@ -31,6 +32,11 @@ "%1$s unshared %2$s from you" : "%1$s deixou de compartir %2$s con vostede", "Public shared folder %1$s was downloaded" : "Foi descargado o cartafol público %1$s", "Public shared file %1$s was downloaded" : "Foi descargado o ficheiro público %1$s", + "You shared %1$s with %2$s" : "Compartiu %1$s con %2$s", + "You shared %1$s with group %2$s" : "Compartiu %1$s co grupo %2$s", + "%2$s shared %1$s with you" : "%2$s compartiu %1$s con vostede", + "You shared %1$s via link" : "Vostede compartiu %1$s mediante ligazón", + "Shares" : "Comparticións", "This share is password-protected" : "Esta compartición está protexida con contrasinal", "The password is wrong. Try again." : "O contrasinal é incorrecto. Ténteo de novo.", "Password" : "Contrasinal", @@ -47,7 +53,8 @@ "Download" : "Descargar", "Download %s" : "Descargar %s", "Direct link" : "Ligazón directa", - "Allow users on this server to send shares to other servers" : "Permitir aos ususarios de este servidor enviar comparticións a outros servidores", - "Allow users on this server to receive shares from other servers" : "Permitir aos usuarios de este servidor recibir comparticións de outros servidores" + "Federated Cloud Sharing" : "Compartición de nube federada", + "Allow users on this server to send shares to other servers" : "Permitir aos usuarios deste servidor enviar comparticións a outros servidores", + "Allow users on this server to receive shares from other servers" : "Permitir aos usuarios deste servidor recibir comparticións de outros servidores" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/he.js b/apps/files_sharing/l10n/he.js index 06562c4d967..82184a46295 100644 --- a/apps/files_sharing/l10n/he.js +++ b/apps/files_sharing/l10n/he.js @@ -4,6 +4,12 @@ OC.L10N.register( "Cancel" : "ביטול", "Share" : "שיתוף", "Shared by" : "שותף על־ידי", + "A file or folder has been <strong>shared</strong>" : "קובץ או תיקייה <strong>שותפו<strong/>", + "You shared %1$s with %2$s" : "שיתפת %1$s עם %2$s", + "You shared %1$s with group %2$s" : "שיתפת %1$s עם קבוצת %2$s", + "%2$s shared %1$s with you" : "%2$s שיתפו %1$s אתך", + "You shared %1$s via link" : "שיתפת %1$s על בסיס קישור", + "Shares" : "שיתופים", "Password" : "סיסמא", "Name" : "שם", "Download" : "הורדה" diff --git a/apps/files_sharing/l10n/he.json b/apps/files_sharing/l10n/he.json index 4a7c6097dd5..3b35f84f2e0 100644 --- a/apps/files_sharing/l10n/he.json +++ b/apps/files_sharing/l10n/he.json @@ -2,6 +2,12 @@ "Cancel" : "ביטול", "Share" : "שיתוף", "Shared by" : "שותף על־ידי", + "A file or folder has been <strong>shared</strong>" : "קובץ או תיקייה <strong>שותפו<strong/>", + "You shared %1$s with %2$s" : "שיתפת %1$s עם %2$s", + "You shared %1$s with group %2$s" : "שיתפת %1$s עם קבוצת %2$s", + "%2$s shared %1$s with you" : "%2$s שיתפו %1$s אתך", + "You shared %1$s via link" : "שיתפת %1$s על בסיס קישור", + "Shares" : "שיתופים", "Password" : "סיסמא", "Name" : "שם", "Download" : "הורדה" diff --git a/apps/files_sharing/l10n/hr.js b/apps/files_sharing/l10n/hr.js index c200e1ca826..f367ba070f6 100644 --- a/apps/files_sharing/l10n/hr.js +++ b/apps/files_sharing/l10n/hr.js @@ -15,6 +15,12 @@ OC.L10N.register( "Invalid ownCloud url" : "Neispravan ownCloud URL", "Share" : "Podijelite resurs", "Shared by" : "Podijeljeno od strane", + "A file or folder has been <strong>shared</strong>" : "Datoteka ili mapa su <strong>podijeljeni</strong>", + "You shared %1$s with %2$s" : "Podijelili ste %1$s s %2$s", + "You shared %1$s with group %2$s" : "Podijelili ste %1$s s grupom %2$s", + "%2$s shared %1$s with you" : "%2$s je %1$s podijelio s vama", + "You shared %1$s via link" : "Podijelili ste %1$s putem veze", + "Shares" : "Dijeljeni resursi", "This share is password-protected" : "Ovaj zajednički resurs je zaštićen lozinkom", "The password is wrong. Try again." : "Pogrešna lozinka. Pokušajte ponovno.", "Password" : "Lozinka", diff --git a/apps/files_sharing/l10n/hr.json b/apps/files_sharing/l10n/hr.json index 764710ea84a..a04d285f028 100644 --- a/apps/files_sharing/l10n/hr.json +++ b/apps/files_sharing/l10n/hr.json @@ -13,6 +13,12 @@ "Invalid ownCloud url" : "Neispravan ownCloud URL", "Share" : "Podijelite resurs", "Shared by" : "Podijeljeno od strane", + "A file or folder has been <strong>shared</strong>" : "Datoteka ili mapa su <strong>podijeljeni</strong>", + "You shared %1$s with %2$s" : "Podijelili ste %1$s s %2$s", + "You shared %1$s with group %2$s" : "Podijelili ste %1$s s grupom %2$s", + "%2$s shared %1$s with you" : "%2$s je %1$s podijelio s vama", + "You shared %1$s via link" : "Podijelili ste %1$s putem veze", + "Shares" : "Dijeljeni resursi", "This share is password-protected" : "Ovaj zajednički resurs je zaštićen lozinkom", "The password is wrong. Try again." : "Pogrešna lozinka. Pokušajte ponovno.", "Password" : "Lozinka", diff --git a/apps/files_sharing/l10n/hu_HU.js b/apps/files_sharing/l10n/hu_HU.js index 277273c8783..5bd977f9819 100644 --- a/apps/files_sharing/l10n/hu_HU.js +++ b/apps/files_sharing/l10n/hu_HU.js @@ -16,6 +16,12 @@ OC.L10N.register( "Invalid ownCloud url" : "Érvénytelen ownCloud webcím", "Share" : "Megosztás", "Shared by" : "Megosztotta Önnel", + "A file or folder has been <strong>shared</strong>" : "Fájl vagy könyvtár <strong>megosztása</strong>", + "You shared %1$s with %2$s" : "%1$s-t megosztottam ővele: %2$s", + "You shared %1$s with group %2$s" : "%1$s-t megosztottam ezzel a csoporttal: %2$s", + "%2$s shared %1$s with you" : "%2$s megosztotta velem ezt: %1$s", + "You shared %1$s via link" : "Megosztottam link segítségével: %1$s", + "Shares" : "Megosztások", "This share is password-protected" : "Ez egy jelszóval védett megosztás", "The password is wrong. Try again." : "A megadott jelszó nem megfelelő. Próbálja újra!", "Password" : "Jelszó", diff --git a/apps/files_sharing/l10n/hu_HU.json b/apps/files_sharing/l10n/hu_HU.json index 543ee1596fc..5261ba438e7 100644 --- a/apps/files_sharing/l10n/hu_HU.json +++ b/apps/files_sharing/l10n/hu_HU.json @@ -14,6 +14,12 @@ "Invalid ownCloud url" : "Érvénytelen ownCloud webcím", "Share" : "Megosztás", "Shared by" : "Megosztotta Önnel", + "A file or folder has been <strong>shared</strong>" : "Fájl vagy könyvtár <strong>megosztása</strong>", + "You shared %1$s with %2$s" : "%1$s-t megosztottam ővele: %2$s", + "You shared %1$s with group %2$s" : "%1$s-t megosztottam ezzel a csoporttal: %2$s", + "%2$s shared %1$s with you" : "%2$s megosztotta velem ezt: %1$s", + "You shared %1$s via link" : "Megosztottam link segítségével: %1$s", + "Shares" : "Megosztások", "This share is password-protected" : "Ez egy jelszóval védett megosztás", "The password is wrong. Try again." : "A megadott jelszó nem megfelelő. Próbálja újra!", "Password" : "Jelszó", diff --git a/apps/files_sharing/l10n/ia.js b/apps/files_sharing/l10n/ia.js index 0d471561316..e85ad89efa6 100644 --- a/apps/files_sharing/l10n/ia.js +++ b/apps/files_sharing/l10n/ia.js @@ -3,6 +3,12 @@ OC.L10N.register( { "Cancel" : "Cancellar", "Share" : "Compartir", + "A file or folder has been <strong>shared</strong>" : "Un file o un dossier ha essite <strong>compartite</strong>", + "You shared %1$s with %2$s" : "Tu compartiva %1$s con %2$s", + "You shared %1$s with group %2$s" : "Tu compartiva %1$s con gruppo %2$s", + "%2$s shared %1$s with you" : "%2$s compartiva %1$s con te", + "You shared %1$s via link" : "Tu compartiva %1$s via ligamine", + "Shares" : "Comparti", "Password" : "Contrasigno", "Name" : "Nomine", "Download" : "Discargar" diff --git a/apps/files_sharing/l10n/ia.json b/apps/files_sharing/l10n/ia.json index 5908b2a4d4d..659d35e56cc 100644 --- a/apps/files_sharing/l10n/ia.json +++ b/apps/files_sharing/l10n/ia.json @@ -1,6 +1,12 @@ { "translations": { "Cancel" : "Cancellar", "Share" : "Compartir", + "A file or folder has been <strong>shared</strong>" : "Un file o un dossier ha essite <strong>compartite</strong>", + "You shared %1$s with %2$s" : "Tu compartiva %1$s con %2$s", + "You shared %1$s with group %2$s" : "Tu compartiva %1$s con gruppo %2$s", + "%2$s shared %1$s with you" : "%2$s compartiva %1$s con te", + "You shared %1$s via link" : "Tu compartiva %1$s via ligamine", + "Shares" : "Comparti", "Password" : "Contrasigno", "Name" : "Nomine", "Download" : "Discargar" diff --git a/apps/files_sharing/l10n/id.js b/apps/files_sharing/l10n/id.js index 74c0af2695b..7ffd5fdd4cf 100644 --- a/apps/files_sharing/l10n/id.js +++ b/apps/files_sharing/l10n/id.js @@ -25,6 +25,7 @@ OC.L10N.register( "Invalid ownCloud url" : "URL ownCloud tidak sah", "Share" : "Bagikan", "Shared by" : "Dibagikan oleh", + "A file or folder has been <strong>shared</strong>" : "Sebuah berkas atau folder telah <strong>dibagikan</strong>", "A file or folder was shared from <strong>another server</strong>" : "Sebuah berkas atau folder telah dibagikan dari <strong>server lainnya</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Sebuah berkas atau folder berbagi publik telah <strong>diunduh</strong>", "You received a new remote share from %s" : "Anda menerima berbagi remote baru dari %s", @@ -33,6 +34,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s menghapus berbagi %2$s dari Anda", "Public shared folder %1$s was downloaded" : "Folder berbagi publik %1$s telah diunduh", "Public shared file %1$s was downloaded" : "Berkas berbagi publik %1$s telah diunduh", + "You shared %1$s with %2$s" : "Anda membagikan %1$s dengan %2$s", + "You shared %1$s with group %2$s" : "Anda membagikan %1$s dengan grup %2$s", + "%2$s shared %1$s with you" : "%2$s membagikan %1$s dengan Anda", + "You shared %1$s via link" : "Anda membagikan %1$s via tautan", + "Shares" : "Dibagikan", "This share is password-protected" : "Berbagi ini dilindungi sandi", "The password is wrong. Try again." : "Sandi salah. Coba lagi", "Password" : "Sandi", diff --git a/apps/files_sharing/l10n/id.json b/apps/files_sharing/l10n/id.json index 0c53df206a0..724f86139bc 100644 --- a/apps/files_sharing/l10n/id.json +++ b/apps/files_sharing/l10n/id.json @@ -23,6 +23,7 @@ "Invalid ownCloud url" : "URL ownCloud tidak sah", "Share" : "Bagikan", "Shared by" : "Dibagikan oleh", + "A file or folder has been <strong>shared</strong>" : "Sebuah berkas atau folder telah <strong>dibagikan</strong>", "A file or folder was shared from <strong>another server</strong>" : "Sebuah berkas atau folder telah dibagikan dari <strong>server lainnya</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Sebuah berkas atau folder berbagi publik telah <strong>diunduh</strong>", "You received a new remote share from %s" : "Anda menerima berbagi remote baru dari %s", @@ -31,6 +32,11 @@ "%1$s unshared %2$s from you" : "%1$s menghapus berbagi %2$s dari Anda", "Public shared folder %1$s was downloaded" : "Folder berbagi publik %1$s telah diunduh", "Public shared file %1$s was downloaded" : "Berkas berbagi publik %1$s telah diunduh", + "You shared %1$s with %2$s" : "Anda membagikan %1$s dengan %2$s", + "You shared %1$s with group %2$s" : "Anda membagikan %1$s dengan grup %2$s", + "%2$s shared %1$s with you" : "%2$s membagikan %1$s dengan Anda", + "You shared %1$s via link" : "Anda membagikan %1$s via tautan", + "Shares" : "Dibagikan", "This share is password-protected" : "Berbagi ini dilindungi sandi", "The password is wrong. Try again." : "Sandi salah. Coba lagi", "Password" : "Sandi", diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js index e8c87b65d32..e8775f3fcb0 100644 --- a/apps/files_sharing/l10n/it.js +++ b/apps/files_sharing/l10n/it.js @@ -25,6 +25,7 @@ OC.L10N.register( "Invalid ownCloud url" : "URL di ownCloud non valido", "Share" : "Condividi", "Shared by" : "Condiviso da", + "A file or folder has been <strong>shared</strong>" : "Un file o una cartella è stato <strong>condiviso</strong>", "A file or folder was shared from <strong>another server</strong>" : "Un file o una cartella è stato condiviso da <strong>un altro server</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Un file condiviso pubblicamente o una cartella è stato <strong>scaricato</strong>", "You received a new remote share from %s" : "Hai ricevuto una nuova condivisione remota da %s", @@ -33,6 +34,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s ha rimosso la condivisione %2$s con te", "Public shared folder %1$s was downloaded" : "La cartella condivisa pubblicamente %1$s è stata scaricata", "Public shared file %1$s was downloaded" : "Il file condiviso pubblicamente %1$s è stato scaricato", + "You shared %1$s with %2$s" : "Hai condiviso %1$s con %2$s", + "You shared %1$s with group %2$s" : "Hai condiviso %1$s con il gruppo %2$s", + "%2$s shared %1$s with you" : "%2$s ha condiviso %1$s con te", + "You shared %1$s via link" : "Hai condiviso %1$s tramite collegamento", + "Shares" : "Condivisioni", "This share is password-protected" : "Questa condivione è protetta da password", "The password is wrong. Try again." : "La password è errata. Prova ancora.", "Password" : "Password", diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json index 46f9f24030b..e9dc74a379f 100644 --- a/apps/files_sharing/l10n/it.json +++ b/apps/files_sharing/l10n/it.json @@ -23,6 +23,7 @@ "Invalid ownCloud url" : "URL di ownCloud non valido", "Share" : "Condividi", "Shared by" : "Condiviso da", + "A file or folder has been <strong>shared</strong>" : "Un file o una cartella è stato <strong>condiviso</strong>", "A file or folder was shared from <strong>another server</strong>" : "Un file o una cartella è stato condiviso da <strong>un altro server</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Un file condiviso pubblicamente o una cartella è stato <strong>scaricato</strong>", "You received a new remote share from %s" : "Hai ricevuto una nuova condivisione remota da %s", @@ -31,6 +32,11 @@ "%1$s unshared %2$s from you" : "%1$s ha rimosso la condivisione %2$s con te", "Public shared folder %1$s was downloaded" : "La cartella condivisa pubblicamente %1$s è stata scaricata", "Public shared file %1$s was downloaded" : "Il file condiviso pubblicamente %1$s è stato scaricato", + "You shared %1$s with %2$s" : "Hai condiviso %1$s con %2$s", + "You shared %1$s with group %2$s" : "Hai condiviso %1$s con il gruppo %2$s", + "%2$s shared %1$s with you" : "%2$s ha condiviso %1$s con te", + "You shared %1$s via link" : "Hai condiviso %1$s tramite collegamento", + "Shares" : "Condivisioni", "This share is password-protected" : "Questa condivione è protetta da password", "The password is wrong. Try again." : "La password è errata. Prova ancora.", "Password" : "Password", diff --git a/apps/files_sharing/l10n/ja.js b/apps/files_sharing/l10n/ja.js index 8be8a7159d4..37799f5a86d 100644 --- a/apps/files_sharing/l10n/ja.js +++ b/apps/files_sharing/l10n/ja.js @@ -4,6 +4,7 @@ OC.L10N.register( "Server to server sharing is not enabled on this server" : "このサーバーでは、サーバー間の共有が有効ではありません", "The mountpoint name contains invalid characters." : "マウントポイント名 に不正な文字列が含まれています。", "Invalid or untrusted SSL certificate" : "無効または信頼できないSSL証明書", + "Could not authenticate to remote share, password might be wrong" : "リモート共有が認証できませんでした,パスワードが間違っているかもしれません", "Storage not valid" : "ストレージが無効です", "Couldn't add remote share" : "リモート共有を追加できませんでした", "Shared with you" : "他ユーザーがあなたと共有中", @@ -24,17 +25,27 @@ OC.L10N.register( "Invalid ownCloud url" : "無効なownCloud URL です", "Share" : "共有", "Shared by" : "共有者:", - "A file or folder was shared from <strong>another server</strong>" : "ファイルまたはフォルダーは <strong>他のサーバー</strong>から共有されました", + "A file or folder has been <strong>shared</strong>" : "ファイルまたはフォルダーを<strong>共有</strong>したとき", + "A file or folder was shared from <strong>another server</strong>" : "ファイルまたはフォルダーが<strong>他のサーバー</strong>から共有されたとき", + "A public shared file or folder was <strong>downloaded</strong>" : "公開共有ファイルまたはフォルダーが<strong>ダウンロードされた</strong>とき", "You received a new remote share from %s" : "%sからリモート共有のリクエストは\n届きました。", + "%1$s accepted remote share %2$s" : "%1$s は %2$s のリモート共有を承認しました。", + "%1$s declined remote share %2$s" : "%1$s は %2$s のリモート共有を拒否しました。", + "%1$s unshared %2$s from you" : "%1$s は あなたと%2$s の共有を止めました。", "Public shared folder %1$s was downloaded" : "公開共有フォルダ %1$s がダウンロードされました", "Public shared file %1$s was downloaded" : "公開共有ファイル %1$s がダウンロードされました", + "You shared %1$s with %2$s" : "あなたは %1$s を %2$s と共有しました", + "You shared %1$s with group %2$s" : "あなたは %1$s をグループ %2$s と共有しました", + "%2$s shared %1$s with you" : "%2$s は %1$s をあなたと共有しました", + "You shared %1$s via link" : "リンク経由で %1$s を共有しています", + "Shares" : "共有", "This share is password-protected" : "この共有はパスワードで保護されています", "The password is wrong. Try again." : "パスワードが間違っています。再試行してください。", "Password" : "パスワード", "No entries found in this folder" : "このフォルダーにはエントリーがありません", "Name" : "名前", "Share time" : "共有時間", - "Sorry, this link doesn’t seem to work anymore." : "申し訳ございません。このリンクはもう利用できません。", + "Sorry, this link doesn’t seem to work anymore." : "すみません。このリンクはもう利用できません。", "Reasons might be:" : "理由は以下の通りと考えられます:", "the item was removed" : "アイテムが削除されました", "the link expired" : "リンクの期限が切れています", @@ -44,6 +55,7 @@ OC.L10N.register( "Download" : "ダウンロード", "Download %s" : "%s をダウンロード", "Direct link" : "リンク", + "Federated Cloud Sharing" : "統合されたクラウド共有", "Allow users on this server to send shares to other servers" : "ユーザーがこのサーバーから他のサーバーに共有することを許可する", "Allow users on this server to receive shares from other servers" : "ユーザーが他のサーバーからこのサーバーに共有することを許可する" }, diff --git a/apps/files_sharing/l10n/ja.json b/apps/files_sharing/l10n/ja.json index 18c4ea01726..de42c09bbcd 100644 --- a/apps/files_sharing/l10n/ja.json +++ b/apps/files_sharing/l10n/ja.json @@ -2,6 +2,7 @@ "Server to server sharing is not enabled on this server" : "このサーバーでは、サーバー間の共有が有効ではありません", "The mountpoint name contains invalid characters." : "マウントポイント名 に不正な文字列が含まれています。", "Invalid or untrusted SSL certificate" : "無効または信頼できないSSL証明書", + "Could not authenticate to remote share, password might be wrong" : "リモート共有が認証できませんでした,パスワードが間違っているかもしれません", "Storage not valid" : "ストレージが無効です", "Couldn't add remote share" : "リモート共有を追加できませんでした", "Shared with you" : "他ユーザーがあなたと共有中", @@ -22,17 +23,27 @@ "Invalid ownCloud url" : "無効なownCloud URL です", "Share" : "共有", "Shared by" : "共有者:", - "A file or folder was shared from <strong>another server</strong>" : "ファイルまたはフォルダーは <strong>他のサーバー</strong>から共有されました", + "A file or folder has been <strong>shared</strong>" : "ファイルまたはフォルダーを<strong>共有</strong>したとき", + "A file or folder was shared from <strong>another server</strong>" : "ファイルまたはフォルダーが<strong>他のサーバー</strong>から共有されたとき", + "A public shared file or folder was <strong>downloaded</strong>" : "公開共有ファイルまたはフォルダーが<strong>ダウンロードされた</strong>とき", "You received a new remote share from %s" : "%sからリモート共有のリクエストは\n届きました。", + "%1$s accepted remote share %2$s" : "%1$s は %2$s のリモート共有を承認しました。", + "%1$s declined remote share %2$s" : "%1$s は %2$s のリモート共有を拒否しました。", + "%1$s unshared %2$s from you" : "%1$s は あなたと%2$s の共有を止めました。", "Public shared folder %1$s was downloaded" : "公開共有フォルダ %1$s がダウンロードされました", "Public shared file %1$s was downloaded" : "公開共有ファイル %1$s がダウンロードされました", + "You shared %1$s with %2$s" : "あなたは %1$s を %2$s と共有しました", + "You shared %1$s with group %2$s" : "あなたは %1$s をグループ %2$s と共有しました", + "%2$s shared %1$s with you" : "%2$s は %1$s をあなたと共有しました", + "You shared %1$s via link" : "リンク経由で %1$s を共有しています", + "Shares" : "共有", "This share is password-protected" : "この共有はパスワードで保護されています", "The password is wrong. Try again." : "パスワードが間違っています。再試行してください。", "Password" : "パスワード", "No entries found in this folder" : "このフォルダーにはエントリーがありません", "Name" : "名前", "Share time" : "共有時間", - "Sorry, this link doesn’t seem to work anymore." : "申し訳ございません。このリンクはもう利用できません。", + "Sorry, this link doesn’t seem to work anymore." : "すみません。このリンクはもう利用できません。", "Reasons might be:" : "理由は以下の通りと考えられます:", "the item was removed" : "アイテムが削除されました", "the link expired" : "リンクの期限が切れています", @@ -42,6 +53,7 @@ "Download" : "ダウンロード", "Download %s" : "%s をダウンロード", "Direct link" : "リンク", + "Federated Cloud Sharing" : "統合されたクラウド共有", "Allow users on this server to send shares to other servers" : "ユーザーがこのサーバーから他のサーバーに共有することを許可する", "Allow users on this server to receive shares from other servers" : "ユーザーが他のサーバーからこのサーバーに共有することを許可する" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/files_sharing/l10n/km.js b/apps/files_sharing/l10n/km.js index 2b730ae146b..215905c6d50 100644 --- a/apps/files_sharing/l10n/km.js +++ b/apps/files_sharing/l10n/km.js @@ -4,6 +4,12 @@ OC.L10N.register( "Cancel" : "បោះបង់", "Share" : "ចែករំលែក", "Shared by" : "បានចែករំលែកដោយ", + "A file or folder has been <strong>shared</strong>" : "<strong>បានចែករំលែក</strong> ឯកសារឬថត", + "You shared %1$s with %2$s" : "អ្នកបានចែករំលែក %1$s ជាមួយ %2$s", + "You shared %1$s with group %2$s" : "អ្នកបានចែករំលែក %1$s ជាមួយក្រុម %2$s", + "%2$s shared %1$s with you" : "%2$s បានចែករំលែក %1$s ជាមួយអ្នក", + "You shared %1$s via link" : "អ្នកបានចែករំលែក %1$s តាមរយៈតំណរភ្ជាប់", + "Shares" : "ចែករំលែក", "This share is password-protected" : "ការចែករំលែកនេះត្រូវបានការពារដោយពាក្យសម្ងាត់", "The password is wrong. Try again." : "ពាក្យសម្ងាត់ខុសហើយ។ ព្យាយាមម្ដងទៀត។", "Password" : "ពាក្យសម្ងាត់", diff --git a/apps/files_sharing/l10n/km.json b/apps/files_sharing/l10n/km.json index 646f417f6d8..e1a6acbf121 100644 --- a/apps/files_sharing/l10n/km.json +++ b/apps/files_sharing/l10n/km.json @@ -2,6 +2,12 @@ "Cancel" : "បោះបង់", "Share" : "ចែករំលែក", "Shared by" : "បានចែករំលែកដោយ", + "A file or folder has been <strong>shared</strong>" : "<strong>បានចែករំលែក</strong> ឯកសារឬថត", + "You shared %1$s with %2$s" : "អ្នកបានចែករំលែក %1$s ជាមួយ %2$s", + "You shared %1$s with group %2$s" : "អ្នកបានចែករំលែក %1$s ជាមួយក្រុម %2$s", + "%2$s shared %1$s with you" : "%2$s បានចែករំលែក %1$s ជាមួយអ្នក", + "You shared %1$s via link" : "អ្នកបានចែករំលែក %1$s តាមរយៈតំណរភ្ជាប់", + "Shares" : "ចែករំលែក", "This share is password-protected" : "ការចែករំលែកនេះត្រូវបានការពារដោយពាក្យសម្ងាត់", "The password is wrong. Try again." : "ពាក្យសម្ងាត់ខុសហើយ។ ព្យាយាមម្ដងទៀត។", "Password" : "ពាក្យសម្ងាត់", diff --git a/apps/files_sharing/l10n/ko.js b/apps/files_sharing/l10n/ko.js index cc5489232c4..cfabc03d48d 100644 --- a/apps/files_sharing/l10n/ko.js +++ b/apps/files_sharing/l10n/ko.js @@ -25,6 +25,7 @@ OC.L10N.register( "Invalid ownCloud url" : "잘못된 ownCloud URL", "Share" : "공유", "Shared by" : "공유한 사용자:", + "A file or folder has been <strong>shared</strong>" : "파일이나 폴더가 <strong>공유됨</strong>", "A file or folder was shared from <strong>another server</strong>" : "<strong>다른 서버</strong>에서 파일이나 폴더를 공유함", "A public shared file or folder was <strong>downloaded</strong>" : "공개 공유된 파일이나 폴더가 <strong>다운로드됨</strong>", "You received a new remote share from %s" : "%s에서 원격 공유 요청을 받았습니다", @@ -33,6 +34,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s 님이 %2$s의 공유를 중단함", "Public shared folder %1$s was downloaded" : "공개 공유 폴더 %1$s이(가) 다운로드됨", "Public shared file %1$s was downloaded" : "공개 공유 파일 %1$s이(가) 다운로드됨", + "You shared %1$s with %2$s" : "내가 %2$s 님과 %1$s을(를) 공유함", + "You shared %1$s with group %2$s" : "내가 %2$s 그룹과 %1$s을(를) 공유함", + "%2$s shared %1$s with you" : "%2$s 님이 내게 %1$s을(를) 공유함", + "You shared %1$s via link" : "내가 %1$s을(를) 링크로 공유함", + "Shares" : "공유", "This share is password-protected" : "이 공유는 암호로 보호되어 있습니다", "The password is wrong. Try again." : "암호가 잘못되었습니다. 다시 입력해 주십시오.", "Password" : "암호", diff --git a/apps/files_sharing/l10n/ko.json b/apps/files_sharing/l10n/ko.json index b97d68d147d..4c88707e124 100644 --- a/apps/files_sharing/l10n/ko.json +++ b/apps/files_sharing/l10n/ko.json @@ -23,6 +23,7 @@ "Invalid ownCloud url" : "잘못된 ownCloud URL", "Share" : "공유", "Shared by" : "공유한 사용자:", + "A file or folder has been <strong>shared</strong>" : "파일이나 폴더가 <strong>공유됨</strong>", "A file or folder was shared from <strong>another server</strong>" : "<strong>다른 서버</strong>에서 파일이나 폴더를 공유함", "A public shared file or folder was <strong>downloaded</strong>" : "공개 공유된 파일이나 폴더가 <strong>다운로드됨</strong>", "You received a new remote share from %s" : "%s에서 원격 공유 요청을 받았습니다", @@ -31,6 +32,11 @@ "%1$s unshared %2$s from you" : "%1$s 님이 %2$s의 공유를 중단함", "Public shared folder %1$s was downloaded" : "공개 공유 폴더 %1$s이(가) 다운로드됨", "Public shared file %1$s was downloaded" : "공개 공유 파일 %1$s이(가) 다운로드됨", + "You shared %1$s with %2$s" : "내가 %2$s 님과 %1$s을(를) 공유함", + "You shared %1$s with group %2$s" : "내가 %2$s 그룹과 %1$s을(를) 공유함", + "%2$s shared %1$s with you" : "%2$s 님이 내게 %1$s을(를) 공유함", + "You shared %1$s via link" : "내가 %1$s을(를) 링크로 공유함", + "Shares" : "공유", "This share is password-protected" : "이 공유는 암호로 보호되어 있습니다", "The password is wrong. Try again." : "암호가 잘못되었습니다. 다시 입력해 주십시오.", "Password" : "암호", diff --git a/apps/files_sharing/l10n/lt_LT.js b/apps/files_sharing/l10n/lt_LT.js index a2763933434..3f9926144ad 100644 --- a/apps/files_sharing/l10n/lt_LT.js +++ b/apps/files_sharing/l10n/lt_LT.js @@ -4,6 +4,12 @@ OC.L10N.register( "Cancel" : "Atšaukti", "Share" : "Dalintis", "Shared by" : "Dalinasi", + "A file or folder has been <strong>shared</strong>" : "Failas ar aplankas buvo <strong>pasidalintas</strong>", + "You shared %1$s with %2$s" : "Jūs pasidalinote %1$s su %2$s", + "You shared %1$s with group %2$s" : "Jūs pasidalinote %1$s su grupe %2$s", + "%2$s shared %1$s with you" : "%2$s pasidalino %1$s su jumis", + "You shared %1$s via link" : "Pasidalinote %1$s per nuorodą", + "Shares" : "Dalijimaisi", "This share is password-protected" : "Turinys apsaugotas slaptažodžiu", "The password is wrong. Try again." : "Netinka slaptažodis: Bandykite dar kartą.", "Password" : "Slaptažodis", diff --git a/apps/files_sharing/l10n/lt_LT.json b/apps/files_sharing/l10n/lt_LT.json index 9057bb27204..c6d3b846ea4 100644 --- a/apps/files_sharing/l10n/lt_LT.json +++ b/apps/files_sharing/l10n/lt_LT.json @@ -2,6 +2,12 @@ "Cancel" : "Atšaukti", "Share" : "Dalintis", "Shared by" : "Dalinasi", + "A file or folder has been <strong>shared</strong>" : "Failas ar aplankas buvo <strong>pasidalintas</strong>", + "You shared %1$s with %2$s" : "Jūs pasidalinote %1$s su %2$s", + "You shared %1$s with group %2$s" : "Jūs pasidalinote %1$s su grupe %2$s", + "%2$s shared %1$s with you" : "%2$s pasidalino %1$s su jumis", + "You shared %1$s via link" : "Pasidalinote %1$s per nuorodą", + "Shares" : "Dalijimaisi", "This share is password-protected" : "Turinys apsaugotas slaptažodžiu", "The password is wrong. Try again." : "Netinka slaptažodis: Bandykite dar kartą.", "Password" : "Slaptažodis", diff --git a/apps/files_sharing/l10n/lv.js b/apps/files_sharing/l10n/lv.js index 001afd0f11d..b2a1334fc3b 100644 --- a/apps/files_sharing/l10n/lv.js +++ b/apps/files_sharing/l10n/lv.js @@ -1,12 +1,62 @@ OC.L10N.register( "files_sharing", { + "Server to server sharing is not enabled on this server" : "Šajā serverī koplietošana starp serveriem nav ieslēgta", + "The mountpoint name contains invalid characters." : "Montēšanas punkta nosaukums satur nederīgus simbolus.", + "Invalid or untrusted SSL certificate" : "Nepareizs vai neuzticams SSL sertifikāts", + "Could not authenticate to remote share, password might be wrong" : "Nesanāca autentificēties pie attālinātās koplietotnes, parole varētu būt nepareiza", + "Storage not valid" : "Glabātuve nav derīga", + "Couldn't add remote share" : "Nevarēja pievienot attālināto koplietotni", + "Shared with you" : "Koplietots ar tevi", + "Shared with others" : "Koplietots ar citiem", + "Shared by link" : "Koplietots ar saiti", + "Nothing shared with you yet" : "Nekas vēl nav koplietots", + "Files and folders others share with you will show up here" : "Faili un mapes, ko citi koplietos ar tevi, tiks rādīti šeit", + "Nothing shared yet" : "Nekas vēl nav koplietots", + "Files and folders you share will show up here" : "Faili un mapes, ko koplietosi ar citiem, tiks rādīti šeit", + "No shared links" : "Nav koplietotu saišu", + "Files and folders you share by link will show up here" : "Faili un mapes, ko koplietosit ar saitēm, tiks rādīti šeit", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Vai vēlaties pievienot attālināto koplietotni {name} no {owner}@{remote}?", + "Remote share" : "Attālinātā koplietotne", + "Remote share password" : "Attālinātās koplietotnes parole", "Cancel" : "Atcelt", + "Add remote share" : "Pievienot attālināto koplietotni", + "No ownCloud installation (7 or higher) found at {remote}" : "Nav atrasta neviena ownCloud (7. vai augstāka) instalācija {remote}", + "Invalid ownCloud url" : "Nederīga ownCloud saite", "Share" : "Dalīties", "Shared by" : "Dalījās", + "A file or folder has been <strong>shared</strong>" : "<strong>Koplietota</strong> fails vai mape", + "A file or folder was shared from <strong>another server</strong>" : "Fails vai mape tika koplietota no <strong>cita servera</strong>", + "A public shared file or folder was <strong>downloaded</strong>" : "Publiski koplietots fails vai mape tika <strong>lejupielādēts</strong>", + "You received a new remote share from %s" : "Saņēmāt jaunu attālinātu koplietotni no %s", + "%1$s accepted remote share %2$s" : "%1$s apstiprināja attālināto koplietotni %2$s", + "%1$s declined remote share %2$s" : "%1$s noraidīja attālināto koplietotni %2$s", + "%1$s unshared %2$s from you" : "%1$s atslēdza koplietošanu %2$s ar tevi", + "Public shared folder %1$s was downloaded" : "Publiski koplietota mape %1$s tika lejupielādēta", + "Public shared file %1$s was downloaded" : "Publiski koplietots fails %1$s tika lejupielādēts", + "You shared %1$s with %2$s" : "Tu koplietoji %1$s ar %2$s", + "You shared %1$s with group %2$s" : "Tu koplietoji %1$s ar grupu %2$s", + "%2$s shared %1$s with you" : "%2$s koplietoja %1$s ar tevi", + "You shared %1$s via link" : "Tu koplietoji %1$s , izmantojot saiti", + "Shares" : "Koplietotie", + "This share is password-protected" : "Šī koplietotne ir aizsargāta ar paroli", + "The password is wrong. Try again." : "Nepareiza parole. Mēģiniet vēlreiz.", "Password" : "Parole", "No entries found in this folder" : "Šajā mapē nekas nav atrasts", "Name" : "Nosaukums", - "Download" : "Lejupielādēt" + "Share time" : "Koplietošanas laiks", + "Sorry, this link doesn’t seem to work anymore." : "Izskatās, ka šī saite vairs nedarbojas", + "Reasons might be:" : "Iespējamie iemesli:", + "the item was removed" : "vienums tika dzēsts", + "the link expired" : "saitei beidzies termiņš", + "sharing is disabled" : "koplietošana nav ieslēgta", + "For more info, please ask the person who sent this link." : "Vairāk informācijas vaicā personai, kas nosūtīja šo saiti.", + "Add to your ownCloud" : "Pievienot savam ownCloud", + "Download" : "Lejupielādēt", + "Download %s" : "Lejupielādēt %s", + "Direct link" : "Tiešā saite", + "Federated Cloud Sharing" : "Federatīva mākoņkoplietošana", + "Allow users on this server to send shares to other servers" : "Atļaut šī servera lietotājiem sūtīt koplietotnes uz citiem serveriem", + "Allow users on this server to receive shares from other servers" : "Atļaut šī servera lietotājiem saņem koplietotnes no citiem serveriem" }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); diff --git a/apps/files_sharing/l10n/lv.json b/apps/files_sharing/l10n/lv.json index 00b7d17ba5f..7337d841718 100644 --- a/apps/files_sharing/l10n/lv.json +++ b/apps/files_sharing/l10n/lv.json @@ -1,10 +1,60 @@ { "translations": { + "Server to server sharing is not enabled on this server" : "Šajā serverī koplietošana starp serveriem nav ieslēgta", + "The mountpoint name contains invalid characters." : "Montēšanas punkta nosaukums satur nederīgus simbolus.", + "Invalid or untrusted SSL certificate" : "Nepareizs vai neuzticams SSL sertifikāts", + "Could not authenticate to remote share, password might be wrong" : "Nesanāca autentificēties pie attālinātās koplietotnes, parole varētu būt nepareiza", + "Storage not valid" : "Glabātuve nav derīga", + "Couldn't add remote share" : "Nevarēja pievienot attālināto koplietotni", + "Shared with you" : "Koplietots ar tevi", + "Shared with others" : "Koplietots ar citiem", + "Shared by link" : "Koplietots ar saiti", + "Nothing shared with you yet" : "Nekas vēl nav koplietots", + "Files and folders others share with you will show up here" : "Faili un mapes, ko citi koplietos ar tevi, tiks rādīti šeit", + "Nothing shared yet" : "Nekas vēl nav koplietots", + "Files and folders you share will show up here" : "Faili un mapes, ko koplietosi ar citiem, tiks rādīti šeit", + "No shared links" : "Nav koplietotu saišu", + "Files and folders you share by link will show up here" : "Faili un mapes, ko koplietosit ar saitēm, tiks rādīti šeit", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Vai vēlaties pievienot attālināto koplietotni {name} no {owner}@{remote}?", + "Remote share" : "Attālinātā koplietotne", + "Remote share password" : "Attālinātās koplietotnes parole", "Cancel" : "Atcelt", + "Add remote share" : "Pievienot attālināto koplietotni", + "No ownCloud installation (7 or higher) found at {remote}" : "Nav atrasta neviena ownCloud (7. vai augstāka) instalācija {remote}", + "Invalid ownCloud url" : "Nederīga ownCloud saite", "Share" : "Dalīties", "Shared by" : "Dalījās", + "A file or folder has been <strong>shared</strong>" : "<strong>Koplietota</strong> fails vai mape", + "A file or folder was shared from <strong>another server</strong>" : "Fails vai mape tika koplietota no <strong>cita servera</strong>", + "A public shared file or folder was <strong>downloaded</strong>" : "Publiski koplietots fails vai mape tika <strong>lejupielādēts</strong>", + "You received a new remote share from %s" : "Saņēmāt jaunu attālinātu koplietotni no %s", + "%1$s accepted remote share %2$s" : "%1$s apstiprināja attālināto koplietotni %2$s", + "%1$s declined remote share %2$s" : "%1$s noraidīja attālināto koplietotni %2$s", + "%1$s unshared %2$s from you" : "%1$s atslēdza koplietošanu %2$s ar tevi", + "Public shared folder %1$s was downloaded" : "Publiski koplietota mape %1$s tika lejupielādēta", + "Public shared file %1$s was downloaded" : "Publiski koplietots fails %1$s tika lejupielādēts", + "You shared %1$s with %2$s" : "Tu koplietoji %1$s ar %2$s", + "You shared %1$s with group %2$s" : "Tu koplietoji %1$s ar grupu %2$s", + "%2$s shared %1$s with you" : "%2$s koplietoja %1$s ar tevi", + "You shared %1$s via link" : "Tu koplietoji %1$s , izmantojot saiti", + "Shares" : "Koplietotie", + "This share is password-protected" : "Šī koplietotne ir aizsargāta ar paroli", + "The password is wrong. Try again." : "Nepareiza parole. Mēģiniet vēlreiz.", "Password" : "Parole", "No entries found in this folder" : "Šajā mapē nekas nav atrasts", "Name" : "Nosaukums", - "Download" : "Lejupielādēt" + "Share time" : "Koplietošanas laiks", + "Sorry, this link doesn’t seem to work anymore." : "Izskatās, ka šī saite vairs nedarbojas", + "Reasons might be:" : "Iespējamie iemesli:", + "the item was removed" : "vienums tika dzēsts", + "the link expired" : "saitei beidzies termiņš", + "sharing is disabled" : "koplietošana nav ieslēgta", + "For more info, please ask the person who sent this link." : "Vairāk informācijas vaicā personai, kas nosūtīja šo saiti.", + "Add to your ownCloud" : "Pievienot savam ownCloud", + "Download" : "Lejupielādēt", + "Download %s" : "Lejupielādēt %s", + "Direct link" : "Tiešā saite", + "Federated Cloud Sharing" : "Federatīva mākoņkoplietošana", + "Allow users on this server to send shares to other servers" : "Atļaut šī servera lietotājiem sūtīt koplietotnes uz citiem serveriem", + "Allow users on this server to receive shares from other servers" : "Atļaut šī servera lietotājiem saņem koplietotnes no citiem serveriem" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/mk.js b/apps/files_sharing/l10n/mk.js index b47fa211329..a66bcbdd79a 100644 --- a/apps/files_sharing/l10n/mk.js +++ b/apps/files_sharing/l10n/mk.js @@ -7,6 +7,11 @@ OC.L10N.register( "Cancel" : "Откажи", "Share" : "Сподели", "Shared by" : "Споделено од", + "A file or folder has been <strong>shared</strong>" : "Датотека или фолдер беше <strong>споделен</strong>", + "You shared %1$s with %2$s" : "Вие споделивте %1$s со %2$s", + "You shared %1$s with group %2$s" : "Вие споделивте %1$s со групата %2$s", + "%2$s shared %1$s with you" : "%2$s споделено %1$s со вас", + "Shares" : "Споделувања", "This share is password-protected" : "Ова споделување е заштитено со лозинка", "The password is wrong. Try again." : "Лозинката е грешна. Обиди се повторно.", "Password" : "Лозинка", diff --git a/apps/files_sharing/l10n/mk.json b/apps/files_sharing/l10n/mk.json index c399da0089f..2aa50a16624 100644 --- a/apps/files_sharing/l10n/mk.json +++ b/apps/files_sharing/l10n/mk.json @@ -5,6 +5,11 @@ "Cancel" : "Откажи", "Share" : "Сподели", "Shared by" : "Споделено од", + "A file or folder has been <strong>shared</strong>" : "Датотека или фолдер беше <strong>споделен</strong>", + "You shared %1$s with %2$s" : "Вие споделивте %1$s со %2$s", + "You shared %1$s with group %2$s" : "Вие споделивте %1$s со групата %2$s", + "%2$s shared %1$s with you" : "%2$s споделено %1$s со вас", + "Shares" : "Споделувања", "This share is password-protected" : "Ова споделување е заштитено со лозинка", "The password is wrong. Try again." : "Лозинката е грешна. Обиди се повторно.", "Password" : "Лозинка", diff --git a/apps/files_sharing/l10n/ml_IN.js b/apps/files_sharing/l10n/ml_IN.js new file mode 100644 index 00000000000..56904b38ec2 --- /dev/null +++ b/apps/files_sharing/l10n/ml_IN.js @@ -0,0 +1,11 @@ +OC.L10N.register( + "files_sharing", + { + "A file or folder has been <strong>shared</strong>" : "ഒരു ഫയലോ അറയോ <strong>പങ്കിട്ടിരിക്കുന്നു</strong>", + "You shared %1$s with %2$s" : "നിങ്ങൾ %1$s %2$sനു പങ്കുവെച്ചു", + "You shared %1$s with group %2$s" : "നിങ്ങൾ %1$s %2$s കൂട്ടത്തിന് പങ്കുവെച്ചു", + "%2$s shared %1$s with you" : "%2$s %1$s നിങ്ങൾക്ക് പങ്കുവെച്ചു", + "You shared %1$s via link" : "താങ്കൾ %1$s ലിങ്കിലൂടെ പങ്കുവെച്ചിരിക്കുന്നു", + "Shares" : "പങ്കിടലുകൾ" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/ml_IN.json b/apps/files_sharing/l10n/ml_IN.json new file mode 100644 index 00000000000..05ff39a1479 --- /dev/null +++ b/apps/files_sharing/l10n/ml_IN.json @@ -0,0 +1,9 @@ +{ "translations": { + "A file or folder has been <strong>shared</strong>" : "ഒരു ഫയലോ അറയോ <strong>പങ്കിട്ടിരിക്കുന്നു</strong>", + "You shared %1$s with %2$s" : "നിങ്ങൾ %1$s %2$sനു പങ്കുവെച്ചു", + "You shared %1$s with group %2$s" : "നിങ്ങൾ %1$s %2$s കൂട്ടത്തിന് പങ്കുവെച്ചു", + "%2$s shared %1$s with you" : "%2$s %1$s നിങ്ങൾക്ക് പങ്കുവെച്ചു", + "You shared %1$s via link" : "താങ്കൾ %1$s ലിങ്കിലൂടെ പങ്കുവെച്ചിരിക്കുന്നു", + "Shares" : "പങ്കിടലുകൾ" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/files_sharing/l10n/mn.js b/apps/files_sharing/l10n/mn.js index c99ff7a5a02..09d6902e57d 100644 --- a/apps/files_sharing/l10n/mn.js +++ b/apps/files_sharing/l10n/mn.js @@ -2,6 +2,12 @@ OC.L10N.register( "files_sharing", { "Share" : "Түгээх", + "A file or folder has been <strong>shared</strong>" : "Файл эсвэл хавтас амжилттай <strong>түгээгдлээ</strong>", + "You shared %1$s with %2$s" : "Та %1$s-ийг %2$s руу түгээлээ", + "You shared %1$s with group %2$s" : "Та %1$s-ийг %2$s групп руу түгээлээ", + "%2$s shared %1$s with you" : "%2$s %1$s-ийг тань руу түгээлээ", + "You shared %1$s via link" : "Та %1$s-ийг холбоосоор түгээлээ", + "Shares" : "Түгээлтүүд", "Password" : "Нууц үг" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/mn.json b/apps/files_sharing/l10n/mn.json index 3e4112cc4e5..1d7a83d2f91 100644 --- a/apps/files_sharing/l10n/mn.json +++ b/apps/files_sharing/l10n/mn.json @@ -1,5 +1,11 @@ { "translations": { "Share" : "Түгээх", + "A file or folder has been <strong>shared</strong>" : "Файл эсвэл хавтас амжилттай <strong>түгээгдлээ</strong>", + "You shared %1$s with %2$s" : "Та %1$s-ийг %2$s руу түгээлээ", + "You shared %1$s with group %2$s" : "Та %1$s-ийг %2$s групп руу түгээлээ", + "%2$s shared %1$s with you" : "%2$s %1$s-ийг тань руу түгээлээ", + "You shared %1$s via link" : "Та %1$s-ийг холбоосоор түгээлээ", + "Shares" : "Түгээлтүүд", "Password" : "Нууц үг" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/ms_MY.js b/apps/files_sharing/l10n/ms_MY.js index 2a9f8adc6b6..d970549d4aa 100644 --- a/apps/files_sharing/l10n/ms_MY.js +++ b/apps/files_sharing/l10n/ms_MY.js @@ -4,6 +4,9 @@ OC.L10N.register( "Cancel" : "Batal", "Share" : "Kongsi", "Shared by" : "Dikongsi dengan", + "%2$s shared %1$s with you" : "%2$s berkongsi %1$s dengan anda", + "You shared %1$s via link" : "Anda kongsikan %1$s melalui sambungan", + "Shares" : "Kongsi", "Password" : "Kata laluan", "Name" : "Nama", "Download" : "Muat turun" diff --git a/apps/files_sharing/l10n/ms_MY.json b/apps/files_sharing/l10n/ms_MY.json index 2ac71a4f483..55901127059 100644 --- a/apps/files_sharing/l10n/ms_MY.json +++ b/apps/files_sharing/l10n/ms_MY.json @@ -2,6 +2,9 @@ "Cancel" : "Batal", "Share" : "Kongsi", "Shared by" : "Dikongsi dengan", + "%2$s shared %1$s with you" : "%2$s berkongsi %1$s dengan anda", + "You shared %1$s via link" : "Anda kongsikan %1$s melalui sambungan", + "Shares" : "Kongsi", "Password" : "Kata laluan", "Name" : "Nama", "Download" : "Muat turun" diff --git a/apps/files_sharing/l10n/nb_NO.js b/apps/files_sharing/l10n/nb_NO.js index a1b5db31252..6a63a856069 100644 --- a/apps/files_sharing/l10n/nb_NO.js +++ b/apps/files_sharing/l10n/nb_NO.js @@ -4,6 +4,8 @@ OC.L10N.register( "Server to server sharing is not enabled on this server" : "Server til server-deling er ikke aktivert på denne serveren", "The mountpoint name contains invalid characters." : "Navnet på oppkoblingspunktet inneholder ugyldige tegn.", "Invalid or untrusted SSL certificate" : "Ugyldig eller ikke tiltrodd SSL-sertifikat", + "Could not authenticate to remote share, password might be wrong" : "Klarte ikke å autentisere mot ekstern deling. Passordet kan være feil", + "Storage not valid" : "Lagerplass ikke gyldig", "Couldn't add remote share" : "Klarte ikke å legge til ekstern deling", "Shared with you" : "Delt med deg", "Shared with others" : "Delt med andre", @@ -23,6 +25,7 @@ OC.L10N.register( "Invalid ownCloud url" : "Ugyldig ownCloud-url", "Share" : "Del", "Shared by" : "Delt av", + "A file or folder has been <strong>shared</strong>" : "En fil eller mappe ble <strong>delt</strong>", "A file or folder was shared from <strong>another server</strong>" : "En fil eller mappe ble delt fra <strong>en annen server</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "En offentlig delt fil eller mappe ble <strong>lastet ned</strong>", "You received a new remote share from %s" : "Du mottok en ny ekstern deling fra %s", @@ -31,6 +34,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s fjernet deling %2$s fra deg", "Public shared folder %1$s was downloaded" : "Offentlig delt mappe %1$s ble lastet ned", "Public shared file %1$s was downloaded" : "Offentlig delt fil %1$s ble lastet ned", + "You shared %1$s with %2$s" : "Du delte %1$s med %2$s", + "You shared %1$s with group %2$s" : "Du delte %1$s med gruppe %2$s", + "%2$s shared %1$s with you" : "%2$s delte %1$s med deg", + "You shared %1$s via link" : "Du delte %1$s via lenke", + "Shares" : "Delinger", "This share is password-protected" : "Denne delingen er passordbeskyttet", "The password is wrong. Try again." : "Passordet er feil. Prøv på nytt.", "Password" : "Passord", @@ -47,6 +55,7 @@ OC.L10N.register( "Download" : "Last ned", "Download %s" : "Last ned %s", "Direct link" : "Direkte lenke", + "Federated Cloud Sharing" : "Sammenknyttet sky-deling", "Allow users on this server to send shares to other servers" : "Tillat at brukere på denne serveren sender delinger til andre servere", "Allow users on this server to receive shares from other servers" : "Tillat at brukere på denne serveren mottar delinger fra andre servere" }, diff --git a/apps/files_sharing/l10n/nb_NO.json b/apps/files_sharing/l10n/nb_NO.json index 30db000aa00..0710062ba49 100644 --- a/apps/files_sharing/l10n/nb_NO.json +++ b/apps/files_sharing/l10n/nb_NO.json @@ -2,6 +2,8 @@ "Server to server sharing is not enabled on this server" : "Server til server-deling er ikke aktivert på denne serveren", "The mountpoint name contains invalid characters." : "Navnet på oppkoblingspunktet inneholder ugyldige tegn.", "Invalid or untrusted SSL certificate" : "Ugyldig eller ikke tiltrodd SSL-sertifikat", + "Could not authenticate to remote share, password might be wrong" : "Klarte ikke å autentisere mot ekstern deling. Passordet kan være feil", + "Storage not valid" : "Lagerplass ikke gyldig", "Couldn't add remote share" : "Klarte ikke å legge til ekstern deling", "Shared with you" : "Delt med deg", "Shared with others" : "Delt med andre", @@ -21,6 +23,7 @@ "Invalid ownCloud url" : "Ugyldig ownCloud-url", "Share" : "Del", "Shared by" : "Delt av", + "A file or folder has been <strong>shared</strong>" : "En fil eller mappe ble <strong>delt</strong>", "A file or folder was shared from <strong>another server</strong>" : "En fil eller mappe ble delt fra <strong>en annen server</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "En offentlig delt fil eller mappe ble <strong>lastet ned</strong>", "You received a new remote share from %s" : "Du mottok en ny ekstern deling fra %s", @@ -29,6 +32,11 @@ "%1$s unshared %2$s from you" : "%1$s fjernet deling %2$s fra deg", "Public shared folder %1$s was downloaded" : "Offentlig delt mappe %1$s ble lastet ned", "Public shared file %1$s was downloaded" : "Offentlig delt fil %1$s ble lastet ned", + "You shared %1$s with %2$s" : "Du delte %1$s med %2$s", + "You shared %1$s with group %2$s" : "Du delte %1$s med gruppe %2$s", + "%2$s shared %1$s with you" : "%2$s delte %1$s med deg", + "You shared %1$s via link" : "Du delte %1$s via lenke", + "Shares" : "Delinger", "This share is password-protected" : "Denne delingen er passordbeskyttet", "The password is wrong. Try again." : "Passordet er feil. Prøv på nytt.", "Password" : "Passord", @@ -45,6 +53,7 @@ "Download" : "Last ned", "Download %s" : "Last ned %s", "Direct link" : "Direkte lenke", + "Federated Cloud Sharing" : "Sammenknyttet sky-deling", "Allow users on this server to send shares to other servers" : "Tillat at brukere på denne serveren sender delinger til andre servere", "Allow users on this server to receive shares from other servers" : "Tillat at brukere på denne serveren mottar delinger fra andre servere" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/nl.js b/apps/files_sharing/l10n/nl.js index 36619f9d399..b50c5c94180 100644 --- a/apps/files_sharing/l10n/nl.js +++ b/apps/files_sharing/l10n/nl.js @@ -25,6 +25,7 @@ OC.L10N.register( "Invalid ownCloud url" : "Ongeldige ownCloud url", "Share" : "Deel", "Shared by" : "Gedeeld door", + "A file or folder has been <strong>shared</strong>" : "Een bestand of map is <strong>gedeeld</strong>", "A file or folder was shared from <strong>another server</strong>" : "Een bestand of map werd gedeeld vanaf <strong>een andere server</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Een openbaar gedeeld bestand of map werd <strong>gedownloaded</strong>", "You received a new remote share from %s" : "U ontving een nieuwe externe share van %s", @@ -33,6 +34,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s stopte met delen van %2$s met je", "Public shared folder %1$s was downloaded" : "Openbaar gedeelde map %1$s werd gedownloaded", "Public shared file %1$s was downloaded" : "Openbaar gedeeld bestand %1$s werd gedownloaded", + "You shared %1$s with %2$s" : "U deelde %1$s met %2$s", + "You shared %1$s with group %2$s" : "U deelde %1$s met groep %2$s", + "%2$s shared %1$s with you" : "%2$s deelde %1$s met u", + "You shared %1$s via link" : "U deelde %1$s via link", + "Shares" : "Gedeeld", "This share is password-protected" : "Deze share is met een wachtwoord beveiligd", "The password is wrong. Try again." : "Wachtwoord ongeldig. Probeer het nogmaals.", "Password" : "Wachtwoord", diff --git a/apps/files_sharing/l10n/nl.json b/apps/files_sharing/l10n/nl.json index 01371413f41..d35a97146e3 100644 --- a/apps/files_sharing/l10n/nl.json +++ b/apps/files_sharing/l10n/nl.json @@ -23,6 +23,7 @@ "Invalid ownCloud url" : "Ongeldige ownCloud url", "Share" : "Deel", "Shared by" : "Gedeeld door", + "A file or folder has been <strong>shared</strong>" : "Een bestand of map is <strong>gedeeld</strong>", "A file or folder was shared from <strong>another server</strong>" : "Een bestand of map werd gedeeld vanaf <strong>een andere server</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Een openbaar gedeeld bestand of map werd <strong>gedownloaded</strong>", "You received a new remote share from %s" : "U ontving een nieuwe externe share van %s", @@ -31,6 +32,11 @@ "%1$s unshared %2$s from you" : "%1$s stopte met delen van %2$s met je", "Public shared folder %1$s was downloaded" : "Openbaar gedeelde map %1$s werd gedownloaded", "Public shared file %1$s was downloaded" : "Openbaar gedeeld bestand %1$s werd gedownloaded", + "You shared %1$s with %2$s" : "U deelde %1$s met %2$s", + "You shared %1$s with group %2$s" : "U deelde %1$s met groep %2$s", + "%2$s shared %1$s with you" : "%2$s deelde %1$s met u", + "You shared %1$s via link" : "U deelde %1$s via link", + "Shares" : "Gedeeld", "This share is password-protected" : "Deze share is met een wachtwoord beveiligd", "The password is wrong. Try again." : "Wachtwoord ongeldig. Probeer het nogmaals.", "Password" : "Wachtwoord", diff --git a/apps/files_sharing/l10n/nn_NO.js b/apps/files_sharing/l10n/nn_NO.js index eb03c0f7cd2..67e3779265b 100644 --- a/apps/files_sharing/l10n/nn_NO.js +++ b/apps/files_sharing/l10n/nn_NO.js @@ -4,6 +4,12 @@ OC.L10N.register( "Cancel" : "Avbryt", "Share" : "Del", "Shared by" : "Delt av", + "A file or folder has been <strong>shared</strong>" : "Ei fil eller ei mappe har blitt <strong>delt</strong>", + "You shared %1$s with %2$s" : "Du delte %1$s med %2$s", + "You shared %1$s with group %2$s" : "Du delte %1$s med gruppa %2$s", + "%2$s shared %1$s with you" : "%2$s delte %1$s med deg", + "You shared %1$s via link" : "Du delte %1$s via ei lenkje", + "Shares" : "Delingar", "The password is wrong. Try again." : "Passordet er gale. Prøv igjen.", "Password" : "Passord", "Name" : "Namn", diff --git a/apps/files_sharing/l10n/nn_NO.json b/apps/files_sharing/l10n/nn_NO.json index 392cf64f3c5..fbf38ec2628 100644 --- a/apps/files_sharing/l10n/nn_NO.json +++ b/apps/files_sharing/l10n/nn_NO.json @@ -2,6 +2,12 @@ "Cancel" : "Avbryt", "Share" : "Del", "Shared by" : "Delt av", + "A file or folder has been <strong>shared</strong>" : "Ei fil eller ei mappe har blitt <strong>delt</strong>", + "You shared %1$s with %2$s" : "Du delte %1$s med %2$s", + "You shared %1$s with group %2$s" : "Du delte %1$s med gruppa %2$s", + "%2$s shared %1$s with you" : "%2$s delte %1$s med deg", + "You shared %1$s via link" : "Du delte %1$s via ei lenkje", + "Shares" : "Delingar", "The password is wrong. Try again." : "Passordet er gale. Prøv igjen.", "Password" : "Passord", "Name" : "Namn", diff --git a/apps/files_sharing/l10n/pl.js b/apps/files_sharing/l10n/pl.js index b37f1049529..2a8fd58dfd5 100644 --- a/apps/files_sharing/l10n/pl.js +++ b/apps/files_sharing/l10n/pl.js @@ -4,11 +4,18 @@ OC.L10N.register( "Server to server sharing is not enabled on this server" : "Współdzielenie między serwerami nie jest uruchomione na tym serwerze", "The mountpoint name contains invalid characters." : "Nazwa zamontowanego zasobu zawiera niedozwolone znaki.", "Invalid or untrusted SSL certificate" : "Niewłaściwy lub niezaufany certyfikat SSL", + "Could not authenticate to remote share, password might be wrong" : "Nie można zalogować do zdalnego zasobu, hasło może być niepoprawne", + "Storage not valid" : "Zasób nie jest prawidłowy", "Couldn't add remote share" : "Nie można dodać zdalnego folderu", "Shared with you" : "Współdzielony z Tobą", "Shared with others" : "Współdzielony z innymi", "Shared by link" : "Współdzielony linkiem", + "Nothing shared with you yet" : "Nie masz jeszcze nic udostępnionego", + "Files and folders others share with you will show up here" : "Pliki i foldery udostępnione Tobie przez innych wyświetlą się tutaj", + "Nothing shared yet" : "Jeszcze nic nie udostępniono", + "Files and folders you share will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj", "No shared links" : "Brak udostępnionych odnośników", + "Files and folders you share by link will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj", "Do you want to add the remote share {name} from {owner}@{remote}?" : "Czy chcesz dodać udział zdalny {name} od {owner}@{remote}?", "Remote share" : "Zdalny zasób", "Remote share password" : "Hasło do zdalnego zasobu", @@ -17,9 +24,16 @@ OC.L10N.register( "Invalid ownCloud url" : "Błędny adres URL", "Share" : "Udostępnij", "Shared by" : "Udostępniane przez", + "A file or folder has been <strong>shared</strong>" : "Plik lub folder stał się <strong>współdzielony</strong>", + "You shared %1$s with %2$s" : "Współdzielisz %1$s z %2$s", + "You shared %1$s with group %2$s" : "Współdzielisz %1$s z grupą %2$s", + "%2$s shared %1$s with you" : "%2$s współdzieli %1$s z Tobą", + "You shared %1$s via link" : "Udostępniasz %1$s przez link", + "Shares" : "Udziały", "This share is password-protected" : "Udział ten jest chroniony hasłem", "The password is wrong. Try again." : "To hasło jest niewłaściwe. Spróbuj ponownie.", "Password" : "Hasło", + "No entries found in this folder" : "Brak wpisów w tym folderze", "Name" : "Nazwa", "Share time" : "Czas współdzielenia", "Sorry, this link doesn’t seem to work anymore." : "Przepraszamy ale wygląda na to, że ten link już nie działa.", diff --git a/apps/files_sharing/l10n/pl.json b/apps/files_sharing/l10n/pl.json index 2c0c2385247..5071051a96f 100644 --- a/apps/files_sharing/l10n/pl.json +++ b/apps/files_sharing/l10n/pl.json @@ -2,11 +2,18 @@ "Server to server sharing is not enabled on this server" : "Współdzielenie między serwerami nie jest uruchomione na tym serwerze", "The mountpoint name contains invalid characters." : "Nazwa zamontowanego zasobu zawiera niedozwolone znaki.", "Invalid or untrusted SSL certificate" : "Niewłaściwy lub niezaufany certyfikat SSL", + "Could not authenticate to remote share, password might be wrong" : "Nie można zalogować do zdalnego zasobu, hasło może być niepoprawne", + "Storage not valid" : "Zasób nie jest prawidłowy", "Couldn't add remote share" : "Nie można dodać zdalnego folderu", "Shared with you" : "Współdzielony z Tobą", "Shared with others" : "Współdzielony z innymi", "Shared by link" : "Współdzielony linkiem", + "Nothing shared with you yet" : "Nie masz jeszcze nic udostępnionego", + "Files and folders others share with you will show up here" : "Pliki i foldery udostępnione Tobie przez innych wyświetlą się tutaj", + "Nothing shared yet" : "Jeszcze nic nie udostępniono", + "Files and folders you share will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj", "No shared links" : "Brak udostępnionych odnośników", + "Files and folders you share by link will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj", "Do you want to add the remote share {name} from {owner}@{remote}?" : "Czy chcesz dodać udział zdalny {name} od {owner}@{remote}?", "Remote share" : "Zdalny zasób", "Remote share password" : "Hasło do zdalnego zasobu", @@ -15,9 +22,16 @@ "Invalid ownCloud url" : "Błędny adres URL", "Share" : "Udostępnij", "Shared by" : "Udostępniane przez", + "A file or folder has been <strong>shared</strong>" : "Plik lub folder stał się <strong>współdzielony</strong>", + "You shared %1$s with %2$s" : "Współdzielisz %1$s z %2$s", + "You shared %1$s with group %2$s" : "Współdzielisz %1$s z grupą %2$s", + "%2$s shared %1$s with you" : "%2$s współdzieli %1$s z Tobą", + "You shared %1$s via link" : "Udostępniasz %1$s przez link", + "Shares" : "Udziały", "This share is password-protected" : "Udział ten jest chroniony hasłem", "The password is wrong. Try again." : "To hasło jest niewłaściwe. Spróbuj ponownie.", "Password" : "Hasło", + "No entries found in this folder" : "Brak wpisów w tym folderze", "Name" : "Nazwa", "Share time" : "Czas współdzielenia", "Sorry, this link doesn’t seem to work anymore." : "Przepraszamy ale wygląda na to, że ten link już nie działa.", diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js index 3f9e97f95a2..2bc562cc8ac 100644 --- a/apps/files_sharing/l10n/pt_BR.js +++ b/apps/files_sharing/l10n/pt_BR.js @@ -25,6 +25,7 @@ OC.L10N.register( "Invalid ownCloud url" : "Url invalida para ownCloud", "Share" : "Compartilhar", "Shared by" : "Compartilhado por", + "A file or folder has been <strong>shared</strong>" : "Um arquivo ou pasta foi <strong>compartilhado</strong> ", "A file or folder was shared from <strong>another server</strong>" : "Um arquivo ou pasta foi compartilhada a partir de <strong>outro servidor</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Um arquivo ou pasta compartilhada publicamente foi <strong>baixado</strong>", "You received a new remote share from %s" : "Você recebeu um novo compartilhamento remoto de %s", @@ -33,6 +34,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s não compartilhados %2$s de você", "Public shared folder %1$s was downloaded" : "A pasta %1$s compartilhada publicamente foi baixada", "Public shared file %1$s was downloaded" : "O arquivo %1$s compartilhado publicamente foi baixado", + "You shared %1$s with %2$s" : "Você compartilhou %1$s com %2$s", + "You shared %1$s with group %2$s" : "Você compartilhou %1$s com o grupo %2$s", + "%2$s shared %1$s with you" : "%2$s compartilhou %1$s com você", + "You shared %1$s via link" : "Você compartilhou %1$s via link", + "Shares" : "Compartilhamentos", "This share is password-protected" : "Este compartilhamento esta protegido por senha", "The password is wrong. Try again." : "Senha incorreta. Tente novamente.", "Password" : "Senha", diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json index 4665ba63f8b..e9399118cf2 100644 --- a/apps/files_sharing/l10n/pt_BR.json +++ b/apps/files_sharing/l10n/pt_BR.json @@ -23,6 +23,7 @@ "Invalid ownCloud url" : "Url invalida para ownCloud", "Share" : "Compartilhar", "Shared by" : "Compartilhado por", + "A file or folder has been <strong>shared</strong>" : "Um arquivo ou pasta foi <strong>compartilhado</strong> ", "A file or folder was shared from <strong>another server</strong>" : "Um arquivo ou pasta foi compartilhada a partir de <strong>outro servidor</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Um arquivo ou pasta compartilhada publicamente foi <strong>baixado</strong>", "You received a new remote share from %s" : "Você recebeu um novo compartilhamento remoto de %s", @@ -31,6 +32,11 @@ "%1$s unshared %2$s from you" : "%1$s não compartilhados %2$s de você", "Public shared folder %1$s was downloaded" : "A pasta %1$s compartilhada publicamente foi baixada", "Public shared file %1$s was downloaded" : "O arquivo %1$s compartilhado publicamente foi baixado", + "You shared %1$s with %2$s" : "Você compartilhou %1$s com %2$s", + "You shared %1$s with group %2$s" : "Você compartilhou %1$s com o grupo %2$s", + "%2$s shared %1$s with you" : "%2$s compartilhou %1$s com você", + "You shared %1$s via link" : "Você compartilhou %1$s via link", + "Shares" : "Compartilhamentos", "This share is password-protected" : "Este compartilhamento esta protegido por senha", "The password is wrong. Try again." : "Senha incorreta. Tente novamente.", "Password" : "Senha", diff --git a/apps/files_sharing/l10n/pt_PT.js b/apps/files_sharing/l10n/pt_PT.js index 1e8a97d9249..c742b0d90be 100644 --- a/apps/files_sharing/l10n/pt_PT.js +++ b/apps/files_sharing/l10n/pt_PT.js @@ -4,6 +4,8 @@ OC.L10N.register( "Server to server sharing is not enabled on this server" : "A partilha entre servidores não se encontra disponível neste servidor", "The mountpoint name contains invalid characters." : "O nome do ponto de montagem contém carateres inválidos.", "Invalid or untrusted SSL certificate" : "Certificado SSL inválido ou não confiável", + "Could not authenticate to remote share, password might be wrong" : "Não foi possível autenticar para partilha remota, a palavra-passe pode estar errada", + "Storage not valid" : "Armazenamento inválido", "Couldn't add remote share" : "Não foi possível adicionar a partilha remota", "Shared with you" : "Partilhado consigo ", "Shared with others" : "Partilhado com outros", @@ -11,15 +13,32 @@ OC.L10N.register( "Nothing shared with you yet" : "Ainda não foi partilhado nada consigo", "Files and folders others share with you will show up here" : "Os ficheiros e pastas que os outros partilham consigo, serão mostradas aqui", "Nothing shared yet" : "Ainda não foi nada paratilhado", + "Files and folders you share will show up here" : "Os ficheiros e pastas que você partilha serão mostrados aqui", "No shared links" : "Sem hiperligações partilhadas", + "Files and folders you share by link will show up here" : "Os ficheiros e pastas que você partilha por link serão mostrados aqui", "Do you want to add the remote share {name} from {owner}@{remote}?" : "Deseja adicionar a partilha remota {nome} de {proprietário}@{remoto}?", "Remote share" : "Partilha remota", "Remote share password" : "Senha da partilha remota", "Cancel" : "Cancelar", "Add remote share" : "Adicionar partilha remota", + "No ownCloud installation (7 or higher) found at {remote}" : "Nenhuma instalação do OwnCloud (7 ou superior) encontrada em {remote}", "Invalid ownCloud url" : "Url ownCloud inválido", "Share" : "Compartilhar", "Shared by" : "Partilhado por", + "A file or folder has been <strong>shared</strong>" : "Foi <strong>partilhado</strong> um ficheiro ou uma pasta", + "A file or folder was shared from <strong>another server</strong>" : "Um ficheiro ou pasta foi partilhado a partir de <strong>outro servidor</strong>", + "A public shared file or folder was <strong>downloaded</strong>" : "Um ficheiro ou pasta partilhada publicamente foi <strong>descarregado</strong>", + "You received a new remote share from %s" : "Você recebeu uma nova partilha remota de %s", + "%1$s accepted remote share %2$s" : "%1$s aceitou a partilha remota %2$s", + "%1$s declined remote share %2$s" : "%1$s rejeitou a partilha remota %2$s", + "%1$s unshared %2$s from you" : "%1$s retirou a partilha %2$s contigo", + "Public shared folder %1$s was downloaded" : "A pasta partilhada publicamente %1$s foi descarregada", + "Public shared file %1$s was downloaded" : "O ficheiro partilhado publicamente %1$s foi descarregado", + "You shared %1$s with %2$s" : "Partilhou %1$s com %2$s", + "You shared %1$s with group %2$s" : "Partilhou %1$s com o grupo %2$s", + "%2$s shared %1$s with you" : "%2$s partilhou %1$s consigo", + "You shared %1$s via link" : "Partilhou %1$s através de uma hiperligação", + "Shares" : "Partilhas", "This share is password-protected" : "Esta partilha está protegida por senha", "The password is wrong. Try again." : "A senha está errada. Por favor, tente de novo.", "Password" : "Senha", @@ -36,6 +55,7 @@ OC.L10N.register( "Download" : "Transferir", "Download %s" : "Transferir %s", "Direct link" : "Hiperligação direta", + "Federated Cloud Sharing" : "Partilha de Cloud Federada", "Allow users on this server to send shares to other servers" : "Permitir utilizadores neste servidor para enviar as partilhas para outros servidores", "Allow users on this server to receive shares from other servers" : "Permitir utilizadores neste servidor para receber as partilhas de outros servidores" }, diff --git a/apps/files_sharing/l10n/pt_PT.json b/apps/files_sharing/l10n/pt_PT.json index 0200118c022..37dd2267e5b 100644 --- a/apps/files_sharing/l10n/pt_PT.json +++ b/apps/files_sharing/l10n/pt_PT.json @@ -2,6 +2,8 @@ "Server to server sharing is not enabled on this server" : "A partilha entre servidores não se encontra disponível neste servidor", "The mountpoint name contains invalid characters." : "O nome do ponto de montagem contém carateres inválidos.", "Invalid or untrusted SSL certificate" : "Certificado SSL inválido ou não confiável", + "Could not authenticate to remote share, password might be wrong" : "Não foi possível autenticar para partilha remota, a palavra-passe pode estar errada", + "Storage not valid" : "Armazenamento inválido", "Couldn't add remote share" : "Não foi possível adicionar a partilha remota", "Shared with you" : "Partilhado consigo ", "Shared with others" : "Partilhado com outros", @@ -9,15 +11,32 @@ "Nothing shared with you yet" : "Ainda não foi partilhado nada consigo", "Files and folders others share with you will show up here" : "Os ficheiros e pastas que os outros partilham consigo, serão mostradas aqui", "Nothing shared yet" : "Ainda não foi nada paratilhado", + "Files and folders you share will show up here" : "Os ficheiros e pastas que você partilha serão mostrados aqui", "No shared links" : "Sem hiperligações partilhadas", + "Files and folders you share by link will show up here" : "Os ficheiros e pastas que você partilha por link serão mostrados aqui", "Do you want to add the remote share {name} from {owner}@{remote}?" : "Deseja adicionar a partilha remota {nome} de {proprietário}@{remoto}?", "Remote share" : "Partilha remota", "Remote share password" : "Senha da partilha remota", "Cancel" : "Cancelar", "Add remote share" : "Adicionar partilha remota", + "No ownCloud installation (7 or higher) found at {remote}" : "Nenhuma instalação do OwnCloud (7 ou superior) encontrada em {remote}", "Invalid ownCloud url" : "Url ownCloud inválido", "Share" : "Compartilhar", "Shared by" : "Partilhado por", + "A file or folder has been <strong>shared</strong>" : "Foi <strong>partilhado</strong> um ficheiro ou uma pasta", + "A file or folder was shared from <strong>another server</strong>" : "Um ficheiro ou pasta foi partilhado a partir de <strong>outro servidor</strong>", + "A public shared file or folder was <strong>downloaded</strong>" : "Um ficheiro ou pasta partilhada publicamente foi <strong>descarregado</strong>", + "You received a new remote share from %s" : "Você recebeu uma nova partilha remota de %s", + "%1$s accepted remote share %2$s" : "%1$s aceitou a partilha remota %2$s", + "%1$s declined remote share %2$s" : "%1$s rejeitou a partilha remota %2$s", + "%1$s unshared %2$s from you" : "%1$s retirou a partilha %2$s contigo", + "Public shared folder %1$s was downloaded" : "A pasta partilhada publicamente %1$s foi descarregada", + "Public shared file %1$s was downloaded" : "O ficheiro partilhado publicamente %1$s foi descarregado", + "You shared %1$s with %2$s" : "Partilhou %1$s com %2$s", + "You shared %1$s with group %2$s" : "Partilhou %1$s com o grupo %2$s", + "%2$s shared %1$s with you" : "%2$s partilhou %1$s consigo", + "You shared %1$s via link" : "Partilhou %1$s através de uma hiperligação", + "Shares" : "Partilhas", "This share is password-protected" : "Esta partilha está protegida por senha", "The password is wrong. Try again." : "A senha está errada. Por favor, tente de novo.", "Password" : "Senha", @@ -34,6 +53,7 @@ "Download" : "Transferir", "Download %s" : "Transferir %s", "Direct link" : "Hiperligação direta", + "Federated Cloud Sharing" : "Partilha de Cloud Federada", "Allow users on this server to send shares to other servers" : "Permitir utilizadores neste servidor para enviar as partilhas para outros servidores", "Allow users on this server to receive shares from other servers" : "Permitir utilizadores neste servidor para receber as partilhas de outros servidores" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/ro.js b/apps/files_sharing/l10n/ro.js index 107d4a1687e..71e62028e49 100644 --- a/apps/files_sharing/l10n/ro.js +++ b/apps/files_sharing/l10n/ro.js @@ -7,6 +7,12 @@ OC.L10N.register( "Cancel" : "Anulare", "Share" : "Partajează", "Shared by" : "impartite in ", + "A file or folder has been <strong>shared</strong>" : "Un fișier sau director a fost <strong>partajat</strong>", + "You shared %1$s with %2$s" : "Ai partajat %1$s cu %2$s", + "You shared %1$s with group %2$s" : "Ai partajat %1$s cu grupul %2$s", + "%2$s shared %1$s with you" : "%2$s a partajat %1$s cu tine", + "You shared %1$s via link" : "Ai partajat %1$s prin legătură", + "Shares" : "Partajări", "This share is password-protected" : "Această partajare este protejată cu parolă", "The password is wrong. Try again." : "Parola este incorectă. Încercaţi din nou.", "Password" : "Parolă", diff --git a/apps/files_sharing/l10n/ro.json b/apps/files_sharing/l10n/ro.json index 1676f3d7f9f..d580052a402 100644 --- a/apps/files_sharing/l10n/ro.json +++ b/apps/files_sharing/l10n/ro.json @@ -5,6 +5,12 @@ "Cancel" : "Anulare", "Share" : "Partajează", "Shared by" : "impartite in ", + "A file or folder has been <strong>shared</strong>" : "Un fișier sau director a fost <strong>partajat</strong>", + "You shared %1$s with %2$s" : "Ai partajat %1$s cu %2$s", + "You shared %1$s with group %2$s" : "Ai partajat %1$s cu grupul %2$s", + "%2$s shared %1$s with you" : "%2$s a partajat %1$s cu tine", + "You shared %1$s via link" : "Ai partajat %1$s prin legătură", + "Shares" : "Partajări", "This share is password-protected" : "Această partajare este protejată cu parolă", "The password is wrong. Try again." : "Parola este incorectă. Încercaţi din nou.", "Password" : "Parolă", diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js index 31e24f5991c..92d0820aa12 100644 --- a/apps/files_sharing/l10n/ru.js +++ b/apps/files_sharing/l10n/ru.js @@ -25,6 +25,7 @@ OC.L10N.register( "Invalid ownCloud url" : "Неверный адрес ownCloud", "Share" : "Поделиться", "Shared by" : "Поделился", + "A file or folder has been <strong>shared</strong>" : "<strong>Опубликован</strong> файл или каталог", "A file or folder was shared from <strong>another server</strong>" : "Файлом или каталогом поделились с <strong>удаленного сервера</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Общий файл или каталог был <strong>скачан</strong>", "You received a new remote share from %s" : "%s поделился с вами удаленным общим ресурсом", @@ -33,6 +34,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s закрыл для вас доступ к %2$s ", "Public shared folder %1$s was downloaded" : "Общий каталог %1$s был скачан", "Public shared file %1$s was downloaded" : "Общий файл %1$s, был скачан", + "You shared %1$s with %2$s" : "Вы поделились %1$s с %2$s", + "You shared %1$s with group %2$s" : "Вы поделились %1$s с группой %2$s", + "%2$s shared %1$s with you" : "%2$s поделился с вами %1$s", + "You shared %1$s via link" : "Вы поделились %1$s с помощью ссылки", + "Shares" : "События обмена файлами", "This share is password-protected" : "Общий ресурс защищен паролем", "The password is wrong. Try again." : "Неверный пароль. Попробуйте еще раз.", "Password" : "Пароль", diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json index 8ff5e88c458..c27c5bcc03a 100644 --- a/apps/files_sharing/l10n/ru.json +++ b/apps/files_sharing/l10n/ru.json @@ -23,6 +23,7 @@ "Invalid ownCloud url" : "Неверный адрес ownCloud", "Share" : "Поделиться", "Shared by" : "Поделился", + "A file or folder has been <strong>shared</strong>" : "<strong>Опубликован</strong> файл или каталог", "A file or folder was shared from <strong>another server</strong>" : "Файлом или каталогом поделились с <strong>удаленного сервера</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Общий файл или каталог был <strong>скачан</strong>", "You received a new remote share from %s" : "%s поделился с вами удаленным общим ресурсом", @@ -31,6 +32,11 @@ "%1$s unshared %2$s from you" : "%1$s закрыл для вас доступ к %2$s ", "Public shared folder %1$s was downloaded" : "Общий каталог %1$s был скачан", "Public shared file %1$s was downloaded" : "Общий файл %1$s, был скачан", + "You shared %1$s with %2$s" : "Вы поделились %1$s с %2$s", + "You shared %1$s with group %2$s" : "Вы поделились %1$s с группой %2$s", + "%2$s shared %1$s with you" : "%2$s поделился с вами %1$s", + "You shared %1$s via link" : "Вы поделились %1$s с помощью ссылки", + "Shares" : "События обмена файлами", "This share is password-protected" : "Общий ресурс защищен паролем", "The password is wrong. Try again." : "Неверный пароль. Попробуйте еще раз.", "Password" : "Пароль", diff --git a/apps/files_sharing/l10n/si_LK.js b/apps/files_sharing/l10n/si_LK.js index 6d69abd7ef3..06b8b5e3fa2 100644 --- a/apps/files_sharing/l10n/si_LK.js +++ b/apps/files_sharing/l10n/si_LK.js @@ -3,6 +3,7 @@ OC.L10N.register( { "Cancel" : "එපා", "Share" : "බෙදා හදා ගන්න", + "A file or folder has been <strong>shared</strong>" : "ගොනුවක් හෝ ෆෝල්ඩරයක් <strong>හවුල්</strong> වී ඇත", "Password" : "මුර පදය", "Name" : "නම", "Download" : "බාන්න" diff --git a/apps/files_sharing/l10n/si_LK.json b/apps/files_sharing/l10n/si_LK.json index 6a78f6d7dce..be4be8f1a7e 100644 --- a/apps/files_sharing/l10n/si_LK.json +++ b/apps/files_sharing/l10n/si_LK.json @@ -1,6 +1,7 @@ { "translations": { "Cancel" : "එපා", "Share" : "බෙදා හදා ගන්න", + "A file or folder has been <strong>shared</strong>" : "ගොනුවක් හෝ ෆෝල්ඩරයක් <strong>හවුල්</strong> වී ඇත", "Password" : "මුර පදය", "Name" : "නම", "Download" : "බාන්න" diff --git a/apps/files_sharing/l10n/sk_SK.js b/apps/files_sharing/l10n/sk_SK.js index b34a84bc6e1..6e72a0b009b 100644 --- a/apps/files_sharing/l10n/sk_SK.js +++ b/apps/files_sharing/l10n/sk_SK.js @@ -25,6 +25,7 @@ OC.L10N.register( "Invalid ownCloud url" : "Chybná ownCloud url", "Share" : "Zdieľať", "Shared by" : "Zdieľa", + "A file or folder has been <strong>shared</strong>" : "Súbor alebo priečinok bol <strong>zdieľaný</strong>", "A file or folder was shared from <strong>another server</strong>" : "Súbor alebo priečinok bol vyzdieľaný z <strong>iného servera</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Verejne zdieľaný súbor alebo priečinok bol <strong>stiahnutý</strong>", "You received a new remote share from %s" : "Dostali ste nové vzdialené zdieľanie z %s", @@ -33,6 +34,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s už s vami nezdieľa %2$s", "Public shared folder %1$s was downloaded" : "Verejne zdieľaný priečinok %1$s bol stiahnutý", "Public shared file %1$s was downloaded" : "Verejne zdieľaný súbor %1$s bol stiahnutý", + "You shared %1$s with %2$s" : "Bol zdieľaný %1$s s %2$s", + "You shared %1$s with group %2$s" : "Bol zdieľaný %1$s so skupinou %2$s", + "%2$s shared %1$s with you" : "%2$s vám zdieľal %1$s", + "You shared %1$s via link" : "Zdieľate %1$s prostredníctvom odkazu", + "Shares" : "Zdieľanie", "This share is password-protected" : "Toto zdieľanie je chránené heslom", "The password is wrong. Try again." : "Heslo je chybné. Skúste to znova.", "Password" : "Heslo", diff --git a/apps/files_sharing/l10n/sk_SK.json b/apps/files_sharing/l10n/sk_SK.json index 8044b6112ef..3fcef6b6cc7 100644 --- a/apps/files_sharing/l10n/sk_SK.json +++ b/apps/files_sharing/l10n/sk_SK.json @@ -23,6 +23,7 @@ "Invalid ownCloud url" : "Chybná ownCloud url", "Share" : "Zdieľať", "Shared by" : "Zdieľa", + "A file or folder has been <strong>shared</strong>" : "Súbor alebo priečinok bol <strong>zdieľaný</strong>", "A file or folder was shared from <strong>another server</strong>" : "Súbor alebo priečinok bol vyzdieľaný z <strong>iného servera</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Verejne zdieľaný súbor alebo priečinok bol <strong>stiahnutý</strong>", "You received a new remote share from %s" : "Dostali ste nové vzdialené zdieľanie z %s", @@ -31,6 +32,11 @@ "%1$s unshared %2$s from you" : "%1$s už s vami nezdieľa %2$s", "Public shared folder %1$s was downloaded" : "Verejne zdieľaný priečinok %1$s bol stiahnutý", "Public shared file %1$s was downloaded" : "Verejne zdieľaný súbor %1$s bol stiahnutý", + "You shared %1$s with %2$s" : "Bol zdieľaný %1$s s %2$s", + "You shared %1$s with group %2$s" : "Bol zdieľaný %1$s so skupinou %2$s", + "%2$s shared %1$s with you" : "%2$s vám zdieľal %1$s", + "You shared %1$s via link" : "Zdieľate %1$s prostredníctvom odkazu", + "Shares" : "Zdieľanie", "This share is password-protected" : "Toto zdieľanie je chránené heslom", "The password is wrong. Try again." : "Heslo je chybné. Skúste to znova.", "Password" : "Heslo", diff --git a/apps/files_sharing/l10n/sl.js b/apps/files_sharing/l10n/sl.js index dc31132d9da..0e16dfaf48c 100644 --- a/apps/files_sharing/l10n/sl.js +++ b/apps/files_sharing/l10n/sl.js @@ -4,6 +4,8 @@ OC.L10N.register( "Server to server sharing is not enabled on this server" : "Na tem strežniku ni omogočena možnost souporabe strežnika s strežnikom.", "The mountpoint name contains invalid characters." : "Ime točke priklopa vsebuje neveljavne znake.", "Invalid or untrusted SSL certificate" : "Neveljavno oziroma nepotrjeno potrdilo SSL", + "Could not authenticate to remote share, password might be wrong" : "Ni mogoče overiti istovetnosti oddaljene mape za souporabo. Najverjetneje je uporabljeno napačno geslo.", + "Storage not valid" : "Shramba ni veljavna", "Couldn't add remote share" : "Ni mogoče dodati oddaljenega mesta za souporabo", "Shared with you" : "V souporabi z vami", "Shared with others" : "V souporabi z drugimi", @@ -23,6 +25,7 @@ OC.L10N.register( "Invalid ownCloud url" : "Naveden je neveljaven naslov URL strežnika ownCloud", "Share" : "Souporaba", "Shared by" : "V souporabi z", + "A file or folder has been <strong>shared</strong>" : "Za datoteko ali mapo je odobrena <strong>souporaba</strong>.", "A file or folder was shared from <strong>another server</strong>" : "Souporaba datoteke ali mape <strong>z drugega strežnika</strong> je odobrena.", "A public shared file or folder was <strong>downloaded</strong>" : "Mapa ali datoteka v souporabi je bila <strong>prejeta</strong>.", "You received a new remote share from %s" : "Prejeli ste mapo za oddaljeno souporabo z %s", @@ -31,6 +34,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "Uporabnik %1$s je onemogoči souporabo %2$s z vami", "Public shared folder %1$s was downloaded" : "Mapa v souporabi %1$s je bila prejeta", "Public shared file %1$s was downloaded" : "Datoteka v souporabi %1$s je bila prejeta", + "You shared %1$s with %2$s" : "Omogočili ste souporabo %1$s z uporabnikom %2$s", + "You shared %1$s with group %2$s" : "Omogočili ste souporabo %1$s s skupino %2$s", + "%2$s shared %1$s with you" : "Uporabnik %2$s je omogočil souporabo %1$s", + "You shared %1$s via link" : "Omogočili ste souporabo %1$s preko povezave", + "Shares" : "Souporaba", "This share is password-protected" : "To mesto je zaščiteno z geslom.", "The password is wrong. Try again." : "Geslo je napačno. Poskusite znova.", "Password" : "Geslo", @@ -47,6 +55,7 @@ OC.L10N.register( "Download" : "Prejmi", "Download %s" : "Prejmi %s", "Direct link" : "Neposredna povezava", + "Federated Cloud Sharing" : "Upravljana souporaba oblaka", "Allow users on this server to send shares to other servers" : "Dovoli uporabnikom tega strežnika pošiljanje map za souporabo na druge strežnike.", "Allow users on this server to receive shares from other servers" : "Dovoli uporabnikom tega strežnika sprejemanje map za souporabo z drugih strežnikov." }, diff --git a/apps/files_sharing/l10n/sl.json b/apps/files_sharing/l10n/sl.json index eaf78fe1cfe..6bd7181561a 100644 --- a/apps/files_sharing/l10n/sl.json +++ b/apps/files_sharing/l10n/sl.json @@ -2,6 +2,8 @@ "Server to server sharing is not enabled on this server" : "Na tem strežniku ni omogočena možnost souporabe strežnika s strežnikom.", "The mountpoint name contains invalid characters." : "Ime točke priklopa vsebuje neveljavne znake.", "Invalid or untrusted SSL certificate" : "Neveljavno oziroma nepotrjeno potrdilo SSL", + "Could not authenticate to remote share, password might be wrong" : "Ni mogoče overiti istovetnosti oddaljene mape za souporabo. Najverjetneje je uporabljeno napačno geslo.", + "Storage not valid" : "Shramba ni veljavna", "Couldn't add remote share" : "Ni mogoče dodati oddaljenega mesta za souporabo", "Shared with you" : "V souporabi z vami", "Shared with others" : "V souporabi z drugimi", @@ -21,6 +23,7 @@ "Invalid ownCloud url" : "Naveden je neveljaven naslov URL strežnika ownCloud", "Share" : "Souporaba", "Shared by" : "V souporabi z", + "A file or folder has been <strong>shared</strong>" : "Za datoteko ali mapo je odobrena <strong>souporaba</strong>.", "A file or folder was shared from <strong>another server</strong>" : "Souporaba datoteke ali mape <strong>z drugega strežnika</strong> je odobrena.", "A public shared file or folder was <strong>downloaded</strong>" : "Mapa ali datoteka v souporabi je bila <strong>prejeta</strong>.", "You received a new remote share from %s" : "Prejeli ste mapo za oddaljeno souporabo z %s", @@ -29,6 +32,11 @@ "%1$s unshared %2$s from you" : "Uporabnik %1$s je onemogoči souporabo %2$s z vami", "Public shared folder %1$s was downloaded" : "Mapa v souporabi %1$s je bila prejeta", "Public shared file %1$s was downloaded" : "Datoteka v souporabi %1$s je bila prejeta", + "You shared %1$s with %2$s" : "Omogočili ste souporabo %1$s z uporabnikom %2$s", + "You shared %1$s with group %2$s" : "Omogočili ste souporabo %1$s s skupino %2$s", + "%2$s shared %1$s with you" : "Uporabnik %2$s je omogočil souporabo %1$s", + "You shared %1$s via link" : "Omogočili ste souporabo %1$s preko povezave", + "Shares" : "Souporaba", "This share is password-protected" : "To mesto je zaščiteno z geslom.", "The password is wrong. Try again." : "Geslo je napačno. Poskusite znova.", "Password" : "Geslo", @@ -45,6 +53,7 @@ "Download" : "Prejmi", "Download %s" : "Prejmi %s", "Direct link" : "Neposredna povezava", + "Federated Cloud Sharing" : "Upravljana souporaba oblaka", "Allow users on this server to send shares to other servers" : "Dovoli uporabnikom tega strežnika pošiljanje map za souporabo na druge strežnike.", "Allow users on this server to receive shares from other servers" : "Dovoli uporabnikom tega strežnika sprejemanje map za souporabo z drugih strežnikov." },"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" diff --git a/apps/files_sharing/l10n/sq.js b/apps/files_sharing/l10n/sq.js index e09b4d4a4c6..a4a4777f471 100644 --- a/apps/files_sharing/l10n/sq.js +++ b/apps/files_sharing/l10n/sq.js @@ -4,6 +4,12 @@ OC.L10N.register( "Cancel" : "Anullo", "Share" : "Ndaj", "Shared by" : "Ndarë nga", + "A file or folder has been <strong>shared</strong>" : "Një skedar ose dosje është <strong>ndarë</strong>", + "You shared %1$s with %2$s" : "Ju ndatë %1$s me %2$s", + "You shared %1$s with group %2$s" : "Ju ndatë %1$s me grupin %2$s", + "%2$s shared %1$s with you" : "%2$s ndau %1$s me ju", + "You shared %1$s via link" : "Ju ndatë %1$s me lidhje", + "Shares" : "ndarjet", "This share is password-protected" : "Kjo pjesë është e mbrojtur me fjalëkalim", "The password is wrong. Try again." : "Kodi është i gabuar. Provojeni përsëri.", "Password" : "Kodi", diff --git a/apps/files_sharing/l10n/sq.json b/apps/files_sharing/l10n/sq.json index 1fd4a7fa978..d6da034148f 100644 --- a/apps/files_sharing/l10n/sq.json +++ b/apps/files_sharing/l10n/sq.json @@ -2,6 +2,12 @@ "Cancel" : "Anullo", "Share" : "Ndaj", "Shared by" : "Ndarë nga", + "A file or folder has been <strong>shared</strong>" : "Një skedar ose dosje është <strong>ndarë</strong>", + "You shared %1$s with %2$s" : "Ju ndatë %1$s me %2$s", + "You shared %1$s with group %2$s" : "Ju ndatë %1$s me grupin %2$s", + "%2$s shared %1$s with you" : "%2$s ndau %1$s me ju", + "You shared %1$s via link" : "Ju ndatë %1$s me lidhje", + "Shares" : "ndarjet", "This share is password-protected" : "Kjo pjesë është e mbrojtur me fjalëkalim", "The password is wrong. Try again." : "Kodi është i gabuar. Provojeni përsëri.", "Password" : "Kodi", diff --git a/apps/files_sharing/l10n/sr.js b/apps/files_sharing/l10n/sr.js index 68f64f4f138..4c1562c0c46 100644 --- a/apps/files_sharing/l10n/sr.js +++ b/apps/files_sharing/l10n/sr.js @@ -1,11 +1,62 @@ OC.L10N.register( "files_sharing", { - "Cancel" : "Откажи", - "Share" : "Дели", - "Shared by" : "Делио", + "Server to server sharing is not enabled on this server" : "Дељење између сервера није укључено на овом серверу", + "The mountpoint name contains invalid characters." : "Назив тачке монтирања садржи неисправне знакове.", + "Invalid or untrusted SSL certificate" : "Неисправан или неповерљив ССЛ сертификат", + "Could not authenticate to remote share, password might be wrong" : "Не могу да се пријавим на удаљено дељење. Лозинка је можда погрешна", + "Storage not valid" : "Складиште није исправно", + "Couldn't add remote share" : "Не могу да додам удаљено дељење", + "Shared with you" : "Дељено са вама", + "Shared with others" : "Дељено са осталима", + "Shared by link" : "Дељено путем везе", + "Nothing shared with you yet" : "Још увек се ништа са вама не дели", + "Files and folders others share with you will show up here" : "Фајлови и фасцикле које други деле са вама појавиће се овде", + "Nothing shared yet" : "Још се ништа не дели", + "Files and folders you share will show up here" : "Фајлови и фасцикле које делите појавиће се овде", + "No shared links" : "Нема веза за дељење", + "Files and folders you share by link will show up here" : "Фајлови и фасцикле које делите путем везе појавиће се овде", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Желите ли да додате удаљено дељење {name} власника {owner}@{remote}?", + "Remote share" : "Удаљено дељење", + "Remote share password" : "Лозинка удаљеног дељења", + "Cancel" : "Одустани", + "Add remote share" : "Додај удаљено дељење", + "No ownCloud installation (7 or higher) found at {remote}" : "Нема ОунКлауд инсталације верзије 7 или више на {remote}", + "Invalid ownCloud url" : "Неисправан ОунКлауд УРЛ", + "Share" : "Дељење", + "Shared by" : "Дели", + "A file or folder has been <strong>shared</strong>" : "Фајл или фасцикла је <strong>дељен</strong>", + "A file or folder was shared from <strong>another server</strong>" : "Фајл или фасцикла су дељени са <strong>другог сервера</strong>", + "A public shared file or folder was <strong>downloaded</strong>" : "Јавно дељени фајл или фасцикла су <strong>преузети</strong>", + "You received a new remote share from %s" : "Добили сте ново удаљено дељење од %s", + "%1$s accepted remote share %2$s" : "%1$s прихвати удаљено дељење %2$s", + "%1$s declined remote share %2$s" : "%1$s одби удаљено дељење %2$s", + "%1$s unshared %2$s from you" : "%1$s не дели %2$s са вама", + "Public shared folder %1$s was downloaded" : "Јавно дељена фасцикла %1$s је преузета", + "Public shared file %1$s was downloaded" : "Јавно дељени фајл %1$s је преузет", + "You shared %1$s with %2$s" : "Поделили сте %1$s са %2$s", + "You shared %1$s with group %2$s" : "Поделили сте %1$s са групом %2$s", + "%2$s shared %1$s with you" : "%2$s подели %1$s са вама", + "You shared %1$s via link" : "Поделили сте %1$s путем везе", + "Shares" : "Дељења", + "This share is password-protected" : "Дељење је заштићено лозинком", + "The password is wrong. Try again." : "Лозинка је погрешна. Покушајте поново.", "Password" : "Лозинка", - "Name" : "Име", - "Download" : "Преузми" + "No entries found in this folder" : "Нема ничега у овој фасцикли", + "Name" : "Назив", + "Share time" : "Време дељења", + "Sorry, this link doesn’t seem to work anymore." : "Нажалост, изгледа да веза више не ради.", + "Reasons might be:" : "Разлози могу бити:", + "the item was removed" : "ставка је уклоњена", + "the link expired" : "веза је истекла", + "sharing is disabled" : "дељење је искључено", + "For more info, please ask the person who sent this link." : "За више информација, питајте особу која вам је послала везу.", + "Add to your ownCloud" : "Додај у свој ОунКлауд", + "Download" : "Преузми", + "Download %s" : "Преузми %s", + "Direct link" : "Директна веза", + "Federated Cloud Sharing" : "Здружено дељење у облаку", + "Allow users on this server to send shares to other servers" : "Дозвољава корисницима овог сервера да шаљу дељења на друге сервере", + "Allow users on this server to receive shares from other servers" : "Дозвољава корисницима овог сервера да примају дељења са других сервера" }, "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_sharing/l10n/sr.json b/apps/files_sharing/l10n/sr.json index 86a7a4b57d0..9736b0deabe 100644 --- a/apps/files_sharing/l10n/sr.json +++ b/apps/files_sharing/l10n/sr.json @@ -1,9 +1,60 @@ { "translations": { - "Cancel" : "Откажи", - "Share" : "Дели", - "Shared by" : "Делио", + "Server to server sharing is not enabled on this server" : "Дељење између сервера није укључено на овом серверу", + "The mountpoint name contains invalid characters." : "Назив тачке монтирања садржи неисправне знакове.", + "Invalid or untrusted SSL certificate" : "Неисправан или неповерљив ССЛ сертификат", + "Could not authenticate to remote share, password might be wrong" : "Не могу да се пријавим на удаљено дељење. Лозинка је можда погрешна", + "Storage not valid" : "Складиште није исправно", + "Couldn't add remote share" : "Не могу да додам удаљено дељење", + "Shared with you" : "Дељено са вама", + "Shared with others" : "Дељено са осталима", + "Shared by link" : "Дељено путем везе", + "Nothing shared with you yet" : "Још увек се ништа са вама не дели", + "Files and folders others share with you will show up here" : "Фајлови и фасцикле које други деле са вама појавиће се овде", + "Nothing shared yet" : "Још се ништа не дели", + "Files and folders you share will show up here" : "Фајлови и фасцикле које делите појавиће се овде", + "No shared links" : "Нема веза за дељење", + "Files and folders you share by link will show up here" : "Фајлови и фасцикле које делите путем везе појавиће се овде", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Желите ли да додате удаљено дељење {name} власника {owner}@{remote}?", + "Remote share" : "Удаљено дељење", + "Remote share password" : "Лозинка удаљеног дељења", + "Cancel" : "Одустани", + "Add remote share" : "Додај удаљено дељење", + "No ownCloud installation (7 or higher) found at {remote}" : "Нема ОунКлауд инсталације верзије 7 или више на {remote}", + "Invalid ownCloud url" : "Неисправан ОунКлауд УРЛ", + "Share" : "Дељење", + "Shared by" : "Дели", + "A file or folder has been <strong>shared</strong>" : "Фајл или фасцикла је <strong>дељен</strong>", + "A file or folder was shared from <strong>another server</strong>" : "Фајл или фасцикла су дељени са <strong>другог сервера</strong>", + "A public shared file or folder was <strong>downloaded</strong>" : "Јавно дељени фајл или фасцикла су <strong>преузети</strong>", + "You received a new remote share from %s" : "Добили сте ново удаљено дељење од %s", + "%1$s accepted remote share %2$s" : "%1$s прихвати удаљено дељење %2$s", + "%1$s declined remote share %2$s" : "%1$s одби удаљено дељење %2$s", + "%1$s unshared %2$s from you" : "%1$s не дели %2$s са вама", + "Public shared folder %1$s was downloaded" : "Јавно дељена фасцикла %1$s је преузета", + "Public shared file %1$s was downloaded" : "Јавно дељени фајл %1$s је преузет", + "You shared %1$s with %2$s" : "Поделили сте %1$s са %2$s", + "You shared %1$s with group %2$s" : "Поделили сте %1$s са групом %2$s", + "%2$s shared %1$s with you" : "%2$s подели %1$s са вама", + "You shared %1$s via link" : "Поделили сте %1$s путем везе", + "Shares" : "Дељења", + "This share is password-protected" : "Дељење је заштићено лозинком", + "The password is wrong. Try again." : "Лозинка је погрешна. Покушајте поново.", "Password" : "Лозинка", - "Name" : "Име", - "Download" : "Преузми" + "No entries found in this folder" : "Нема ничега у овој фасцикли", + "Name" : "Назив", + "Share time" : "Време дељења", + "Sorry, this link doesn’t seem to work anymore." : "Нажалост, изгледа да веза више не ради.", + "Reasons might be:" : "Разлози могу бити:", + "the item was removed" : "ставка је уклоњена", + "the link expired" : "веза је истекла", + "sharing is disabled" : "дељење је искључено", + "For more info, please ask the person who sent this link." : "За више информација, питајте особу која вам је послала везу.", + "Add to your ownCloud" : "Додај у свој ОунКлауд", + "Download" : "Преузми", + "Download %s" : "Преузми %s", + "Direct link" : "Директна веза", + "Federated Cloud Sharing" : "Здружено дељење у облаку", + "Allow users on this server to send shares to other servers" : "Дозвољава корисницима овог сервера да шаљу дељења на друге сервере", + "Allow users on this server to receive shares from other servers" : "Дозвољава корисницима овог сервера да примају дељења са других сервера" },"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_sharing/l10n/sr@latin.js b/apps/files_sharing/l10n/sr@latin.js index 4f8fdf8aa0e..0f77ea6cc38 100644 --- a/apps/files_sharing/l10n/sr@latin.js +++ b/apps/files_sharing/l10n/sr@latin.js @@ -23,6 +23,7 @@ OC.L10N.register( "Invalid ownCloud url" : "Neispravan ownCloud url", "Share" : "Podeli", "Shared by" : "Deljeno od strane", + "A file or folder has been <strong>shared</strong>" : "Fijl ili direktorijum je <strong>podeljen</strong>", "A file or folder was shared from <strong>another server</strong>" : "Fajl ili direktorijum je deljen sa <strong>drugog servera</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Javni deljeni fajl ili direktorijum je <strong>preuzet</strong>", "You received a new remote share from %s" : "Primili ste novi udaljeni deljeni resurs od %s", @@ -31,6 +32,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s je prekinuo deljenje %2$s sa Vama", "Public shared folder %1$s was downloaded" : "Javni deljeni direktorijum %1$s je preuzet", "Public shared file %1$s was downloaded" : "Javni deljeni fajl %1$s je preuzet", + "You shared %1$s with %2$s" : "Delili ste %1$s sa %2$s", + "You shared %1$s with group %2$s" : "Delili ste %1$s sa grupom %2$s", + "%2$s shared %1$s with you" : "%2$s je delio %1$s sa Vama", + "You shared %1$s via link" : "Delili ste %1$s pomoću prečice", + "Shares" : "Deljenja", "This share is password-protected" : "Ovaj deljeni resurs je zaštićen lozinkom", "The password is wrong. Try again." : "Lozinka je netačna. Pokušajte ponovo.", "Password" : "Lozinka", diff --git a/apps/files_sharing/l10n/sr@latin.json b/apps/files_sharing/l10n/sr@latin.json index 9ff5074d21b..c7ffa922bda 100644 --- a/apps/files_sharing/l10n/sr@latin.json +++ b/apps/files_sharing/l10n/sr@latin.json @@ -21,6 +21,7 @@ "Invalid ownCloud url" : "Neispravan ownCloud url", "Share" : "Podeli", "Shared by" : "Deljeno od strane", + "A file or folder has been <strong>shared</strong>" : "Fijl ili direktorijum je <strong>podeljen</strong>", "A file or folder was shared from <strong>another server</strong>" : "Fajl ili direktorijum je deljen sa <strong>drugog servera</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Javni deljeni fajl ili direktorijum je <strong>preuzet</strong>", "You received a new remote share from %s" : "Primili ste novi udaljeni deljeni resurs od %s", @@ -29,6 +30,11 @@ "%1$s unshared %2$s from you" : "%1$s je prekinuo deljenje %2$s sa Vama", "Public shared folder %1$s was downloaded" : "Javni deljeni direktorijum %1$s je preuzet", "Public shared file %1$s was downloaded" : "Javni deljeni fajl %1$s je preuzet", + "You shared %1$s with %2$s" : "Delili ste %1$s sa %2$s", + "You shared %1$s with group %2$s" : "Delili ste %1$s sa grupom %2$s", + "%2$s shared %1$s with you" : "%2$s je delio %1$s sa Vama", + "You shared %1$s via link" : "Delili ste %1$s pomoću prečice", + "Shares" : "Deljenja", "This share is password-protected" : "Ovaj deljeni resurs je zaštićen lozinkom", "The password is wrong. Try again." : "Lozinka je netačna. Pokušajte ponovo.", "Password" : "Lozinka", diff --git a/apps/files_sharing/l10n/sv.js b/apps/files_sharing/l10n/sv.js index 66012b8c3eb..94224aa1c09 100644 --- a/apps/files_sharing/l10n/sv.js +++ b/apps/files_sharing/l10n/sv.js @@ -22,6 +22,7 @@ OC.L10N.register( "Invalid ownCloud url" : "Felaktig ownCloud url", "Share" : "Dela", "Shared by" : "Delad av", + "A file or folder has been <strong>shared</strong>" : "En fil eller mapp har <strong>delats</strong>", "A file or folder was shared from <strong>another server</strong>" : "En fil eller mapp delades från <strong>en annan server</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "En publikt delad fil eller mapp blev <strong>nerladdad</strong>", "You received a new remote share from %s" : "Du mottog en ny fjärrdelning från %s", @@ -30,6 +31,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s tog bort delningen %2$s från dig", "Public shared folder %1$s was downloaded" : "Publikt delad mapp %1$s blev nerladdad", "Public shared file %1$s was downloaded" : "Publikt delad fil %1$s blev nerladdad", + "You shared %1$s with %2$s" : "Du delade %1$s med %2$s", + "You shared %1$s with group %2$s" : "Du delade %1$s med grupp %2$s", + "%2$s shared %1$s with you" : "%2$s delade %1$s med dig", + "You shared %1$s via link" : "Du delade %1$s via länk", + "Shares" : "Delningar", "This share is password-protected" : "Den här delningen är lösenordsskyddad", "The password is wrong. Try again." : "Lösenordet är fel. Försök igen.", "Password" : "Lösenord", diff --git a/apps/files_sharing/l10n/sv.json b/apps/files_sharing/l10n/sv.json index 4e9735737c0..9b2dd8f9f67 100644 --- a/apps/files_sharing/l10n/sv.json +++ b/apps/files_sharing/l10n/sv.json @@ -20,6 +20,7 @@ "Invalid ownCloud url" : "Felaktig ownCloud url", "Share" : "Dela", "Shared by" : "Delad av", + "A file or folder has been <strong>shared</strong>" : "En fil eller mapp har <strong>delats</strong>", "A file or folder was shared from <strong>another server</strong>" : "En fil eller mapp delades från <strong>en annan server</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "En publikt delad fil eller mapp blev <strong>nerladdad</strong>", "You received a new remote share from %s" : "Du mottog en ny fjärrdelning från %s", @@ -28,6 +29,11 @@ "%1$s unshared %2$s from you" : "%1$s tog bort delningen %2$s från dig", "Public shared folder %1$s was downloaded" : "Publikt delad mapp %1$s blev nerladdad", "Public shared file %1$s was downloaded" : "Publikt delad fil %1$s blev nerladdad", + "You shared %1$s with %2$s" : "Du delade %1$s med %2$s", + "You shared %1$s with group %2$s" : "Du delade %1$s med grupp %2$s", + "%2$s shared %1$s with you" : "%2$s delade %1$s med dig", + "You shared %1$s via link" : "Du delade %1$s via länk", + "Shares" : "Delningar", "This share is password-protected" : "Den här delningen är lösenordsskyddad", "The password is wrong. Try again." : "Lösenordet är fel. Försök igen.", "Password" : "Lösenord", diff --git a/apps/files_sharing/l10n/ta_IN.js b/apps/files_sharing/l10n/ta_IN.js new file mode 100644 index 00000000000..6a7e3897cc8 --- /dev/null +++ b/apps/files_sharing/l10n/ta_IN.js @@ -0,0 +1,11 @@ +OC.L10N.register( + "files_sharing", + { + "A file or folder has been <strong>shared</strong>" : "ஒரு கோப்புறை அல்லது ஆவணம் <strong> பகிர்வு செய்யப்பட்டுள்ளது.</strong>", + "You shared %1$s with %2$s" : "நீங்கள் %1$s 'ஐ %2$s உடன் பகிர்ந்துள்ளிர்கள். ", + "You shared %1$s with group %2$s" : "நீங்கள் %1$s 'ஐ %2$s குழுவுடன் உடன் பகிர்ந்துள்ளிர்கள்.", + "%2$s shared %1$s with you" : "%2$s %1$s 'ஐ உங்களுடன் பகிர்ந்துள்ளார்.", + "You shared %1$s via link" : "நீங்கள் %1$s 'ஐ இணைப்பு மூலம் பகிர்ந்துள்ளிர்கள்.", + "Shares" : "பகிர்வுகள் " +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/ta_IN.json b/apps/files_sharing/l10n/ta_IN.json new file mode 100644 index 00000000000..5b7f88827a4 --- /dev/null +++ b/apps/files_sharing/l10n/ta_IN.json @@ -0,0 +1,9 @@ +{ "translations": { + "A file or folder has been <strong>shared</strong>" : "ஒரு கோப்புறை அல்லது ஆவணம் <strong> பகிர்வு செய்யப்பட்டுள்ளது.</strong>", + "You shared %1$s with %2$s" : "நீங்கள் %1$s 'ஐ %2$s உடன் பகிர்ந்துள்ளிர்கள். ", + "You shared %1$s with group %2$s" : "நீங்கள் %1$s 'ஐ %2$s குழுவுடன் உடன் பகிர்ந்துள்ளிர்கள்.", + "%2$s shared %1$s with you" : "%2$s %1$s 'ஐ உங்களுடன் பகிர்ந்துள்ளார்.", + "You shared %1$s via link" : "நீங்கள் %1$s 'ஐ இணைப்பு மூலம் பகிர்ந்துள்ளிர்கள்.", + "Shares" : "பகிர்வுகள் " +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/files_sharing/l10n/tr.js b/apps/files_sharing/l10n/tr.js index e924e441197..54797731465 100644 --- a/apps/files_sharing/l10n/tr.js +++ b/apps/files_sharing/l10n/tr.js @@ -25,6 +25,7 @@ OC.L10N.register( "Invalid ownCloud url" : "Geçersiz ownCloud adresi", "Share" : "Paylaş", "Shared by" : "Paylaşan", + "A file or folder has been <strong>shared</strong>" : "Bir dosya veya klasör <strong>paylaşıldı</strong>", "A file or folder was shared from <strong>another server</strong>" : "<strong>Başka sunucudan</strong> bir dosya veya klasör paylaşıldı", "A public shared file or folder was <strong>downloaded</strong>" : "Herkese açık paylaşılan bir dosya veya klasör <strong>indirildi</strong>", "You received a new remote share from %s" : "%s kişisinden yeni bir uzak paylaşım aldınız", @@ -33,6 +34,11 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s, sizinle %2$s paylaşımını durdurdu", "Public shared folder %1$s was downloaded" : "Herkese açık paylaşılan klasör %1$s indirildi", "Public shared file %1$s was downloaded" : "Herkese açık paylaşılan dosya %1$s indirildi", + "You shared %1$s with %2$s" : "%1$s dosyasını %2$s ile paylaştınız", + "You shared %1$s with group %2$s" : "%1$s dosyasını %2$s grubu ile paylaştınız", + "%2$s shared %1$s with you" : "%2$s sizinle %1$s dosyasını paylaştı", + "You shared %1$s via link" : "Bağlantı ile %1$s paylaşımını yaptınız", + "Shares" : "Paylaşımlar", "This share is password-protected" : "Bu paylaşım parola korumalı", "The password is wrong. Try again." : "Parola hatalı. Yeniden deneyin.", "Password" : "Parola", diff --git a/apps/files_sharing/l10n/tr.json b/apps/files_sharing/l10n/tr.json index b432345a618..ba545a11909 100644 --- a/apps/files_sharing/l10n/tr.json +++ b/apps/files_sharing/l10n/tr.json @@ -23,6 +23,7 @@ "Invalid ownCloud url" : "Geçersiz ownCloud adresi", "Share" : "Paylaş", "Shared by" : "Paylaşan", + "A file or folder has been <strong>shared</strong>" : "Bir dosya veya klasör <strong>paylaşıldı</strong>", "A file or folder was shared from <strong>another server</strong>" : "<strong>Başka sunucudan</strong> bir dosya veya klasör paylaşıldı", "A public shared file or folder was <strong>downloaded</strong>" : "Herkese açık paylaşılan bir dosya veya klasör <strong>indirildi</strong>", "You received a new remote share from %s" : "%s kişisinden yeni bir uzak paylaşım aldınız", @@ -31,6 +32,11 @@ "%1$s unshared %2$s from you" : "%1$s, sizinle %2$s paylaşımını durdurdu", "Public shared folder %1$s was downloaded" : "Herkese açık paylaşılan klasör %1$s indirildi", "Public shared file %1$s was downloaded" : "Herkese açık paylaşılan dosya %1$s indirildi", + "You shared %1$s with %2$s" : "%1$s dosyasını %2$s ile paylaştınız", + "You shared %1$s with group %2$s" : "%1$s dosyasını %2$s grubu ile paylaştınız", + "%2$s shared %1$s with you" : "%2$s sizinle %1$s dosyasını paylaştı", + "You shared %1$s via link" : "Bağlantı ile %1$s paylaşımını yaptınız", + "Shares" : "Paylaşımlar", "This share is password-protected" : "Bu paylaşım parola korumalı", "The password is wrong. Try again." : "Parola hatalı. Yeniden deneyin.", "Password" : "Parola", diff --git a/apps/files_sharing/l10n/uk.js b/apps/files_sharing/l10n/uk.js index 135b0550558..657954a5de5 100644 --- a/apps/files_sharing/l10n/uk.js +++ b/apps/files_sharing/l10n/uk.js @@ -2,18 +2,20 @@ OC.L10N.register( "files_sharing", { "Server to server sharing is not enabled on this server" : "На даному сервері вимкнута можливість передачі даних між серверами", - "The mountpoint name contains invalid characters." : "Ім'я точки монтування містить неприпустимі символи.", + "The mountpoint name contains invalid characters." : "Ім’я точки монтування містить неприпустимі символи.", "Invalid or untrusted SSL certificate" : "Недійсній або не довірений SSL-сертифікат", + "Could not authenticate to remote share, password might be wrong" : "Не вдалося провести аутентифікацію для доступу до віддаленого сховища, можливо неправильно вказано пароль", + "Storage not valid" : "Cховище недоступне", "Couldn't add remote share" : "Неможливо додати віддалену загальну теку", "Shared with you" : "Доступне для вас", "Shared with others" : "Доступне для інших", "Shared by link" : "Доступне за посиланням", "Nothing shared with you yet" : "Ніхто з вами ще не поділився файлами", - "Files and folders others share with you will show up here" : "Розшарені для вас файли і папки з'являться тут", + "Files and folders others share with you will show up here" : "Розшарені для вас файли і папки з’являться тут", "Nothing shared yet" : "Немає нічого розшареного", - "Files and folders you share will show up here" : "Файли і папки, які розшарені для вас відображатимуться тут", + "Files and folders you share will show up here" : "Файли і папки, які розшарені вами відображатимуться тут", "No shared links" : "Немає опублікованих посилань", - "Files and folders you share by link will show up here" : "Файли і папки, якими ви поділитися по посиланню будуть відображатися тут", + "Files and folders you share by link will show up here" : "Файли і папки, якими ви поділилися за посиланням будуть відображатися тут", "Do you want to add the remote share {name} from {owner}@{remote}?" : "Додати віддалену загальну теку {name} з {owner}@{remote}?", "Remote share" : "Віддалена загальна тека", "Remote share password" : "Пароль для віддаленої загальної теки", @@ -23,6 +25,7 @@ OC.L10N.register( "Invalid ownCloud url" : "Невірний ownCloud URL", "Share" : "Поділитися", "Shared by" : "Опубліковано", + "A file or folder has been <strong>shared</strong>" : "Файл або теку було відкрито для <strong> спільного користування </strong>", "A file or folder was shared from <strong>another server</strong>" : "Файл або каталог був опублікований <strong>з іншого сервера</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Опублікований файл або каталог був <strong>завантажений</strong>", "You received a new remote share from %s" : "Ви отримали нову віддалену папку %s", @@ -31,11 +34,16 @@ OC.L10N.register( "%1$s unshared %2$s from you" : "%1$s не розшарений %2$s для вас", "Public shared folder %1$s was downloaded" : "Опублікований каталог %1$s був завантажений", "Public shared file %1$s was downloaded" : "Опублікований файл %1$s був завантажений", + "You shared %1$s with %2$s" : "Ви поділилися %1$s з %2$s", + "You shared %1$s with group %2$s" : "Ви поділилися %1$s з групою %2$s", + "%2$s shared %1$s with you" : "%2$s поділився %1$s з вами", + "You shared %1$s via link" : "Ви поділилися %1$s використовуючи лінк", + "Shares" : "Розподільні", "This share is password-protected" : "Цей ресурс обміну захищений паролем", "The password is wrong. Try again." : "Невірний пароль. Спробуйте ще раз.", "Password" : "Пароль", "No entries found in this folder" : "Записів не знайдено в цій папці", - "Name" : "Ім'я", + "Name" : "Ім’я", "Share time" : "Дата публікації", "Sorry, this link doesn’t seem to work anymore." : "На жаль, посилання більше не працює.", "Reasons might be:" : "Можливі причини:", @@ -47,6 +55,7 @@ OC.L10N.register( "Download" : "Завантажити", "Download %s" : "Завантажити %s", "Direct link" : "Пряме посилання", + "Federated Cloud Sharing" : "Об’єднання хмарних сховищ", "Allow users on this server to send shares to other servers" : "Дозволити користувачам цього сервера публікувати на інших серверах", "Allow users on this server to receive shares from other servers" : "Дозволити користувачам на цьому сервері отримувати публікації з інших серверів" }, diff --git a/apps/files_sharing/l10n/uk.json b/apps/files_sharing/l10n/uk.json index 21f4f5efb52..d4fb8c7dfe5 100644 --- a/apps/files_sharing/l10n/uk.json +++ b/apps/files_sharing/l10n/uk.json @@ -1,17 +1,19 @@ { "translations": { "Server to server sharing is not enabled on this server" : "На даному сервері вимкнута можливість передачі даних між серверами", - "The mountpoint name contains invalid characters." : "Ім'я точки монтування містить неприпустимі символи.", + "The mountpoint name contains invalid characters." : "Ім’я точки монтування містить неприпустимі символи.", "Invalid or untrusted SSL certificate" : "Недійсній або не довірений SSL-сертифікат", + "Could not authenticate to remote share, password might be wrong" : "Не вдалося провести аутентифікацію для доступу до віддаленого сховища, можливо неправильно вказано пароль", + "Storage not valid" : "Cховище недоступне", "Couldn't add remote share" : "Неможливо додати віддалену загальну теку", "Shared with you" : "Доступне для вас", "Shared with others" : "Доступне для інших", "Shared by link" : "Доступне за посиланням", "Nothing shared with you yet" : "Ніхто з вами ще не поділився файлами", - "Files and folders others share with you will show up here" : "Розшарені для вас файли і папки з'являться тут", + "Files and folders others share with you will show up here" : "Розшарені для вас файли і папки з’являться тут", "Nothing shared yet" : "Немає нічого розшареного", - "Files and folders you share will show up here" : "Файли і папки, які розшарені для вас відображатимуться тут", + "Files and folders you share will show up here" : "Файли і папки, які розшарені вами відображатимуться тут", "No shared links" : "Немає опублікованих посилань", - "Files and folders you share by link will show up here" : "Файли і папки, якими ви поділитися по посиланню будуть відображатися тут", + "Files and folders you share by link will show up here" : "Файли і папки, якими ви поділилися за посиланням будуть відображатися тут", "Do you want to add the remote share {name} from {owner}@{remote}?" : "Додати віддалену загальну теку {name} з {owner}@{remote}?", "Remote share" : "Віддалена загальна тека", "Remote share password" : "Пароль для віддаленої загальної теки", @@ -21,6 +23,7 @@ "Invalid ownCloud url" : "Невірний ownCloud URL", "Share" : "Поділитися", "Shared by" : "Опубліковано", + "A file or folder has been <strong>shared</strong>" : "Файл або теку було відкрито для <strong> спільного користування </strong>", "A file or folder was shared from <strong>another server</strong>" : "Файл або каталог був опублікований <strong>з іншого сервера</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Опублікований файл або каталог був <strong>завантажений</strong>", "You received a new remote share from %s" : "Ви отримали нову віддалену папку %s", @@ -29,11 +32,16 @@ "%1$s unshared %2$s from you" : "%1$s не розшарений %2$s для вас", "Public shared folder %1$s was downloaded" : "Опублікований каталог %1$s був завантажений", "Public shared file %1$s was downloaded" : "Опублікований файл %1$s був завантажений", + "You shared %1$s with %2$s" : "Ви поділилися %1$s з %2$s", + "You shared %1$s with group %2$s" : "Ви поділилися %1$s з групою %2$s", + "%2$s shared %1$s with you" : "%2$s поділився %1$s з вами", + "You shared %1$s via link" : "Ви поділилися %1$s використовуючи лінк", + "Shares" : "Розподільні", "This share is password-protected" : "Цей ресурс обміну захищений паролем", "The password is wrong. Try again." : "Невірний пароль. Спробуйте ще раз.", "Password" : "Пароль", "No entries found in this folder" : "Записів не знайдено в цій папці", - "Name" : "Ім'я", + "Name" : "Ім’я", "Share time" : "Дата публікації", "Sorry, this link doesn’t seem to work anymore." : "На жаль, посилання більше не працює.", "Reasons might be:" : "Можливі причини:", @@ -45,6 +53,7 @@ "Download" : "Завантажити", "Download %s" : "Завантажити %s", "Direct link" : "Пряме посилання", + "Federated Cloud Sharing" : "Об’єднання хмарних сховищ", "Allow users on this server to send shares to other servers" : "Дозволити користувачам цього сервера публікувати на інших серверах", "Allow users on this server to receive shares from other servers" : "Дозволити користувачам на цьому сервері отримувати публікації з інших серверів" },"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);" diff --git a/apps/files_sharing/l10n/vi.js b/apps/files_sharing/l10n/vi.js index e3a4c83d58b..ccefbfacda3 100644 --- a/apps/files_sharing/l10n/vi.js +++ b/apps/files_sharing/l10n/vi.js @@ -1,11 +1,29 @@ OC.L10N.register( "files_sharing", { + "Shared with you" : "Chia sẻ với bạn", + "Shared with others" : "Chia sẻ với người khác", + "Shared by link" : "Chia sẻ theo liên kết", + "Nothing shared with you yet" : "Bạn chưa được chia sẻ gì cả", + "Nothing shared yet" : "Chưa có gì được chia sẻ", + "Files and folders you share will show up here" : "Tập tin và thư mục bạn chia sẻ sẽ được hiển thị tại đây.", + "No shared links" : "Chưa có liên kết chia sẻ", "Cancel" : "Hủy", "Share" : "Chia sẻ", "Shared by" : "Chia sẻ bởi", + "Shares" : "Chia sẻ", + "The password is wrong. Try again." : "Mật khẩu sai. Xin hãy thử lại.", "Password" : "Mật khẩu", + "No entries found in this folder" : "Chưa có mục nào trong thư mục", "Name" : "Tên", - "Download" : "Tải về" + "Share time" : "Chia sẻ thời gian", + "Reasons might be:" : "Lý do có thể là:", + "the item was removed" : "đối tượng đã bị xóa", + "the link expired" : "liên kết đã hết hạn", + "sharing is disabled" : "việc chia sẻ bị cấm", + "Add to your ownCloud" : "Thêm vào ownCloud của bạn", + "Download" : "Tải về", + "Download %s" : "Tải về %s", + "Direct link" : "Link trực tiếp" }, "nplurals=1; plural=0;"); diff --git a/apps/files_sharing/l10n/vi.json b/apps/files_sharing/l10n/vi.json index e3c784e5b78..6140ca95cd9 100644 --- a/apps/files_sharing/l10n/vi.json +++ b/apps/files_sharing/l10n/vi.json @@ -1,9 +1,27 @@ { "translations": { + "Shared with you" : "Chia sẻ với bạn", + "Shared with others" : "Chia sẻ với người khác", + "Shared by link" : "Chia sẻ theo liên kết", + "Nothing shared with you yet" : "Bạn chưa được chia sẻ gì cả", + "Nothing shared yet" : "Chưa có gì được chia sẻ", + "Files and folders you share will show up here" : "Tập tin và thư mục bạn chia sẻ sẽ được hiển thị tại đây.", + "No shared links" : "Chưa có liên kết chia sẻ", "Cancel" : "Hủy", "Share" : "Chia sẻ", "Shared by" : "Chia sẻ bởi", + "Shares" : "Chia sẻ", + "The password is wrong. Try again." : "Mật khẩu sai. Xin hãy thử lại.", "Password" : "Mật khẩu", + "No entries found in this folder" : "Chưa có mục nào trong thư mục", "Name" : "Tên", - "Download" : "Tải về" + "Share time" : "Chia sẻ thời gian", + "Reasons might be:" : "Lý do có thể là:", + "the item was removed" : "đối tượng đã bị xóa", + "the link expired" : "liên kết đã hết hạn", + "sharing is disabled" : "việc chia sẻ bị cấm", + "Add to your ownCloud" : "Thêm vào ownCloud của bạn", + "Download" : "Tải về", + "Download %s" : "Tải về %s", + "Direct link" : "Link trực tiếp" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/zh_CN.js b/apps/files_sharing/l10n/zh_CN.js index 64004e3b1ae..11e71ab4819 100644 --- a/apps/files_sharing/l10n/zh_CN.js +++ b/apps/files_sharing/l10n/zh_CN.js @@ -14,6 +14,12 @@ OC.L10N.register( "Invalid ownCloud url" : "无效的 ownCloud 网址", "Share" : "共享", "Shared by" : "共享人", + "A file or folder has been <strong>shared</strong>" : "一个文件或文件夹已<strong>共享</strong>。", + "You shared %1$s with %2$s" : "您把 %1$s分享给了 %2$s", + "You shared %1$s with group %2$s" : "你把 %1$s 分享给了 %2$s 组", + "%2$s shared %1$s with you" : "%2$s 把 %1$s 分享给了您", + "You shared %1$s via link" : "您通过链接共享了 %1$s", + "Shares" : "共享", "This share is password-protected" : "这是一个密码保护的共享", "The password is wrong. Try again." : "用户名或密码错误!请重试", "Password" : "密码", diff --git a/apps/files_sharing/l10n/zh_CN.json b/apps/files_sharing/l10n/zh_CN.json index 4223da44404..bc26e501a06 100644 --- a/apps/files_sharing/l10n/zh_CN.json +++ b/apps/files_sharing/l10n/zh_CN.json @@ -12,6 +12,12 @@ "Invalid ownCloud url" : "无效的 ownCloud 网址", "Share" : "共享", "Shared by" : "共享人", + "A file or folder has been <strong>shared</strong>" : "一个文件或文件夹已<strong>共享</strong>。", + "You shared %1$s with %2$s" : "您把 %1$s分享给了 %2$s", + "You shared %1$s with group %2$s" : "你把 %1$s 分享给了 %2$s 组", + "%2$s shared %1$s with you" : "%2$s 把 %1$s 分享给了您", + "You shared %1$s via link" : "您通过链接共享了 %1$s", + "Shares" : "共享", "This share is password-protected" : "这是一个密码保护的共享", "The password is wrong. Try again." : "用户名或密码错误!请重试", "Password" : "密码", diff --git a/apps/files_sharing/l10n/zh_HK.js b/apps/files_sharing/l10n/zh_HK.js index 95bde13eda1..e840f92c426 100644 --- a/apps/files_sharing/l10n/zh_HK.js +++ b/apps/files_sharing/l10n/zh_HK.js @@ -3,6 +3,9 @@ OC.L10N.register( { "Cancel" : "取消", "Share" : "分享", + "A file or folder has been <strong>shared</strong>" : "檔案或資料夾已被<strong>分享</strong>", + "You shared %1$s with %2$s" : "你分享了 %1$s 給 %2$s", + "Shares" : "分享", "Password" : "密碼", "Name" : "名稱", "Download" : "下載" diff --git a/apps/files_sharing/l10n/zh_HK.json b/apps/files_sharing/l10n/zh_HK.json index 6f18eaf373c..9e283b58bac 100644 --- a/apps/files_sharing/l10n/zh_HK.json +++ b/apps/files_sharing/l10n/zh_HK.json @@ -1,6 +1,9 @@ { "translations": { "Cancel" : "取消", "Share" : "分享", + "A file or folder has been <strong>shared</strong>" : "檔案或資料夾已被<strong>分享</strong>", + "You shared %1$s with %2$s" : "你分享了 %1$s 給 %2$s", + "Shares" : "分享", "Password" : "密碼", "Name" : "名稱", "Download" : "下載" diff --git a/apps/files_sharing/l10n/zh_TW.js b/apps/files_sharing/l10n/zh_TW.js index 6d6f73c64c9..44231e17bcb 100644 --- a/apps/files_sharing/l10n/zh_TW.js +++ b/apps/files_sharing/l10n/zh_TW.js @@ -14,6 +14,12 @@ OC.L10N.register( "Invalid ownCloud url" : "無效的 ownCloud URL", "Share" : "分享", "Shared by" : "由...分享", + "A file or folder has been <strong>shared</strong>" : "檔案或目錄已被 <strong>分享</strong>", + "You shared %1$s with %2$s" : "您與 %2$s 分享了 %1$s", + "You shared %1$s with group %2$s" : "您與 %2$s 群組分享了 %1$s", + "%2$s shared %1$s with you" : "%2$s 與您分享了 %1$s", + "You shared %1$s via link" : "您以連結分享了 %1$s", + "Shares" : "分享", "This share is password-protected" : "這個分享有密碼保護", "The password is wrong. Try again." : "請檢查您的密碼並再試一次", "Password" : "密碼", diff --git a/apps/files_sharing/l10n/zh_TW.json b/apps/files_sharing/l10n/zh_TW.json index d7518ef2578..4be6f0f10f9 100644 --- a/apps/files_sharing/l10n/zh_TW.json +++ b/apps/files_sharing/l10n/zh_TW.json @@ -12,6 +12,12 @@ "Invalid ownCloud url" : "無效的 ownCloud URL", "Share" : "分享", "Shared by" : "由...分享", + "A file or folder has been <strong>shared</strong>" : "檔案或目錄已被 <strong>分享</strong>", + "You shared %1$s with %2$s" : "您與 %2$s 分享了 %1$s", + "You shared %1$s with group %2$s" : "您與 %2$s 群組分享了 %1$s", + "%2$s shared %1$s with you" : "%2$s 與您分享了 %1$s", + "You shared %1$s via link" : "您以連結分享了 %1$s", + "Shares" : "分享", "This share is password-protected" : "這個分享有密碼保護", "The password is wrong. Try again." : "請檢查您的密碼並再試一次", "Password" : "密碼", diff --git a/apps/files_sharing/lib/activity.php b/apps/files_sharing/lib/activity.php index bfac91fd71a..0cd874d69f0 100644 --- a/apps/files_sharing/lib/activity.php +++ b/apps/files_sharing/lib/activity.php @@ -1,37 +1,70 @@ <?php /** - * ownCloud - publish activities + * ownCloud - Sharing Activity Extension * * @copyright (c) 2014, ownCloud Inc. * * @author Bjoern Schiessle <schiessle@owncloud.com> + * @author Joas Schilling <nickvergessen@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/>. + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. */ namespace OCA\Files_Sharing; -class Activity implements \OCP\Activity\IExtension { +use OC\L10N\Factory; +use OCP\Activity\IExtension; +use OCP\IURLGenerator; - const TYPE_REMOTE_SHARE = 'remote_share'; +class Activity implements IExtension { + /** + * Filter with all sharing related activities + */ + const FILTER_SHARES = 'shares'; + + /** + * Activity types known to this extension + */ const TYPE_PUBLIC_LINKS = 'public_links'; - const SUBJECT_REMOTE_SHARE_RECEIVED = 'remote_share_received'; + const TYPE_REMOTE_SHARE = 'remote_share'; + const TYPE_SHARED = 'shared'; + + /** + * Subject keys for translation of the subjections + */ + const SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED = 'public_shared_file_downloaded'; + const SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED = 'public_shared_folder_downloaded'; + const SUBJECT_REMOTE_SHARE_ACCEPTED = 'remote_share_accepted'; const SUBJECT_REMOTE_SHARE_DECLINED = 'remote_share_declined'; + const SUBJECT_REMOTE_SHARE_RECEIVED = 'remote_share_received'; const SUBJECT_REMOTE_SHARE_UNSHARED = 'remote_share_unshared'; - const SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED = 'public_shared_file_downloaded'; - const SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED = 'public_shared_folder_downloaded'; + + const SUBJECT_SHARED_GROUP_SELF = 'shared_group_self'; + const SUBJECT_SHARED_LINK_SELF = 'shared_link_self'; + const SUBJECT_SHARED_USER_SELF = 'shared_user_self'; + const SUBJECT_SHARED_WITH_BY = 'shared_with_by'; + + /** @var Factory */ + protected $languageFactory; + + /** @var IURLGenerator */ + protected $URLGenerator; + + /** + * @param Factory $languageFactory + * @param IURLGenerator $URLGenerator + */ + public function __construct(Factory $languageFactory, IURLGenerator $URLGenerator) { + $this->languageFactory = $languageFactory; + $this->URLGenerator = $URLGenerator; + } + + protected function getL10N($languageCode = null) { + return $this->languageFactory->get('files_sharing', $languageCode); + } /** * The extension can return an array of additional notification types. @@ -41,45 +74,52 @@ class Activity implements \OCP\Activity\IExtension { * @return array|false */ public function getNotificationTypes($languageCode) { - $l = \OC::$server->getL10N('files_sharing', $languageCode); + $l = $this->getL10N($languageCode); + return array( - self::TYPE_REMOTE_SHARE => $l->t('A file or folder was shared from <strong>another server</strong>'), - self::TYPE_PUBLIC_LINKS => $l->t('A public shared file or folder was <strong>downloaded</strong>'), + self::TYPE_SHARED => (string) $l->t('A file or folder has been <strong>shared</strong>'), + self::TYPE_REMOTE_SHARE => (string) $l->t('A file or folder was shared from <strong>another server</strong>'), + self::TYPE_PUBLIC_LINKS => (string) $l->t('A public shared file or folder was <strong>downloaded</strong>'), ); } /** - * The extension can filter the types based on the filter if required. - * In case no filter is to be applied false is to be returned unchanged. + * For a given method additional types to be displayed in the settings can be returned. + * In case no additional types are to be added false is to be returned. * - * @param array $types - * @param string $filter + * @param string $method * @return array|false */ - public function filterNotificationTypes($types, $filter) { - return $types; + public function getDefaultTypes($method) { + $defaultTypes = [ + self::TYPE_SHARED, + self::TYPE_REMOTE_SHARE, + ]; + + if ($method === 'stream') { + $defaultTypes[] = self::TYPE_PUBLIC_LINKS; + } + + return $defaultTypes; } /** - * For a given method additional types to be displayed in the settings can be returned. - * In case no additional types are to be added false is to be returned. + * A string naming the css class for the icon to be used can be returned. + * If no icon is known for the given type false is to be returned. * - * @param string $method - * @return array|false + * @param string $type + * @return string|false */ - public function getDefaultTypes($method) { - switch ($method) { - case 'email': - $result = array(self::TYPE_REMOTE_SHARE); - break; - case 'stream': - $result = array(self::TYPE_REMOTE_SHARE, self::TYPE_PUBLIC_LINKS); - break; - default: - $result = false; + public function getTypeIcon($type) { + switch ($type) { + case self::TYPE_SHARED: + case self::TYPE_REMOTE_SHARE: + return 'icon-share'; + case self::TYPE_PUBLIC_LINKS: + return 'icon-download'; } - return $result; + return false; } /** @@ -95,23 +135,33 @@ class Activity implements \OCP\Activity\IExtension { * @return string|false */ public function translate($app, $text, $params, $stripPath, $highlightParams, $languageCode) { - - $l = \OC::$server->getL10N('files_sharing', $languageCode); + $l = $this->getL10N($languageCode); if ($app === 'files_sharing') { switch ($text) { case self::SUBJECT_REMOTE_SHARE_RECEIVED: - return $l->t('You received a new remote share from %s', $params)->__toString(); + return (string) $l->t('You received a new remote share from %s', $params); case self::SUBJECT_REMOTE_SHARE_ACCEPTED: - return $l->t('%1$s accepted remote share %2$s', $params)->__toString(); + return (string) $l->t('%1$s accepted remote share %2$s', $params); case self::SUBJECT_REMOTE_SHARE_DECLINED: - return $l->t('%1$s declined remote share %2$s', $params)->__toString(); + return (string) $l->t('%1$s declined remote share %2$s', $params); case self::SUBJECT_REMOTE_SHARE_UNSHARED: - return $l->t('%1$s unshared %2$s from you', $params)->__toString(); + return (string) $l->t('%1$s unshared %2$s from you', $params); case self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED: - return $l->t('Public shared folder %1$s was downloaded', $params)->__toString(); + return (string) $l->t('Public shared folder %1$s was downloaded', $params); case self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED: - return $l->t('Public shared file %1$s was downloaded', $params)->__toString(); + return (string) $l->t('Public shared file %1$s was downloaded', $params); + } + } else if ($app === 'files') { + switch ($text) { + case self::SUBJECT_SHARED_USER_SELF: + return (string) $l->t('You shared %1$s with %2$s', $params); + case self::SUBJECT_SHARED_GROUP_SELF: + return (string) $l->t('You shared %1$s with group %2$s', $params); + case self::SUBJECT_SHARED_WITH_BY: + return (string) $l->t('%2$s shared %1$s with you', $params); + case self::SUBJECT_SHARED_LINK_SELF: + return (string) $l->t('You shared %1$s via link', $params); } } @@ -149,24 +199,19 @@ class Activity implements \OCP\Activity\IExtension { 0 => 'file', ); } - } - - return false; - } + } else if ($app === 'files') { + switch ($text) { + case self::SUBJECT_SHARED_LINK_SELF: + case self::SUBJECT_SHARED_USER_SELF: + case self::SUBJECT_SHARED_WITH_BY: + return [0 => 'file', 1 => 'username']; - /** - * A string naming the css class for the icon to be used can be returned. - * If no icon is known for the given type false is to be returned. - * - * @param string $type - * @return string|false - */ - public function getTypeIcon($type) { - switch ($type) { - case self::TYPE_REMOTE_SHARE: - return 'icon-share'; - case self::TYPE_PUBLIC_LINKS: - return 'icon-download'; + case self::SUBJECT_SHARED_GROUP_SELF: + return [ + 0 => 'file', + //1 => 'group', Group does not exist yet + ]; + } } return false; @@ -191,7 +236,17 @@ class Activity implements \OCP\Activity\IExtension { * @return array|false */ public function getNavigation() { - return false; + $l = $this->getL10N(); + return [ + 'apps' => [], + 'top' => [ + self::FILTER_SHARES => [ + 'id' => self::FILTER_SHARES, + 'name' => (string) $l->t('Shares'), + 'url' => $this->URLGenerator->linkToRoute('activity.Activities.showList', ['filter' => self::FILTER_SHARES]), + ], + ], + ]; } /** @@ -201,6 +256,22 @@ class Activity implements \OCP\Activity\IExtension { * @return boolean */ public function isFilterValid($filterValue) { + return $filterValue === self::FILTER_SHARES; + } + + /** + * The extension can filter the types based on the filter if required. + * In case no filter is to be applied false is to be returned unchanged. + * + * @param array $types + * @param string $filter + * @return array|false + */ + public function filterNotificationTypes($types, $filter) { + switch ($filter) { + case self::FILTER_SHARES: + return array_intersect([self::TYPE_SHARED, self::TYPE_REMOTE_SHARE], $types); + } return false; } @@ -214,8 +285,11 @@ class Activity implements \OCP\Activity\IExtension { * @return array|false */ public function getQueryForFilter($filter) { - if ($filter === 'shares') { - return array('`app` = ? and `type` = ?', array('files_sharing', self::TYPE_REMOTE_SHARE)); + if ($filter === self::FILTER_SHARES) { + return [ + '(`app` = ? or `app` = ?)', + ['files_sharing', 'files'], + ]; } return false; } diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php index 21f807f3533..b71dfb44ab0 100644 --- a/apps/files_sharing/lib/cache.php +++ b/apps/files_sharing/lib/cache.php @@ -45,7 +45,7 @@ class Shared_Cache extends Cache { * Get the source cache of a shared file or folder * * @param string $target Shared target file path - * @return \OC\Files\Cache\Cache + * @return \OC\Files\Cache\Cache|false */ private function getSourceCache($target) { if ($target === false || $target === $this->storage->getMountPoint()) { @@ -82,7 +82,7 @@ class Shared_Cache extends Cache { * get the stored metadata of a file or folder * * @param string|int $file - * @return array + * @return array|false */ public function get($file) { if (is_string($file)) { @@ -148,7 +148,7 @@ class Shared_Cache extends Cache { * get the metadata of all files stored in $folder * * @param string $folderId - * @return array + * @return array|false */ public function getFolderContentsById($folderId) { $cache = $this->getSourceCache(''); @@ -178,7 +178,7 @@ class Shared_Cache extends Cache { * @param string $file * @param array $data * - * @return int file id + * @return int|false file id */ public function put($file, array $data) { $file = ($file === false) ? '' : $file; @@ -395,6 +395,28 @@ class Shared_Cache extends Cache { } /** + * update the folder size and the size of all parent folders + * + * @param string|boolean $path + * @param array $data (optional) meta data of the folder + */ + public function correctFolderSize($path, $data = null) { + $this->calculateFolderSize($path, $data); + if ($path !== '') { + $parent = dirname($path); + if ($parent === '.' or $parent === '/') { + $parent = ''; + } + $this->correctFolderSize($parent); + } else { + // bubble up to source cache + $sourceCache = $this->getSourceCache($path); + $parent = dirname($this->files[$path]); + $sourceCache->correctFolderSize($parent); + } + } + + /** * get the size of a folder and set it in the cache * * @param string $path diff --git a/apps/files_sharing/lib/controllers/sharecontroller.php b/apps/files_sharing/lib/controllers/sharecontroller.php index cd013d4ca96..b0d7781515f 100644 --- a/apps/files_sharing/lib/controllers/sharecontroller.php +++ b/apps/files_sharing/lib/controllers/sharecontroller.php @@ -131,7 +131,7 @@ class ShareController extends Controller { * * @param string $token * @param string $path - * @return TemplateResponse + * @return TemplateResponse|RedirectResponse */ public function showShare($token, $path = '') { \OC_User::setIncognitoMode(true); @@ -170,6 +170,7 @@ class ShareController extends Controller { $shareTmpl['filename'] = $file; $shareTmpl['directory_path'] = $linkItem['file_target']; $shareTmpl['mimetype'] = Filesystem::getMimeType($originalSharePath); + $shareTmpl['previewSupported'] = \OC::$server->getPreviewManager()->isMimeSupported($shareTmpl['mimetype']); $shareTmpl['dirToken'] = $linkItem['token']; $shareTmpl['sharingToken'] = $token; $shareTmpl['server2serversharing'] = Helper::isOutgoingServer2serverShareEnabled(); @@ -182,7 +183,6 @@ class ShareController extends Controller { // Show file list if (Filesystem::is_dir($originalSharePath)) { $shareTmpl['dir'] = $getPath; - $files = array(); $maxUploadFilesize = Util::maxUploadFilesize($originalSharePath); $freeSpace = Util::freeSpace($originalSharePath); $uploadLimit = Util::uploadLimit(); @@ -192,7 +192,6 @@ class ShareController extends Controller { $folder->assign('permissions', \OCP\Constants::PERMISSION_READ); $folder->assign('isPublic', true); $folder->assign('publicUploadEnabled', 'no'); - $folder->assign('files', $files); $folder->assign('uploadMaxFilesize', $maxUploadFilesize); $folder->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize)); $folder->assign('freeSpace', $freeSpace); @@ -205,7 +204,12 @@ class ShareController extends Controller { $shareTmpl['downloadURL'] = $this->urlGenerator->linkToRouteAbsolute('files_sharing.sharecontroller.downloadShare', array('token' => $token)); $shareTmpl['maxSizeAnimateGif'] = $this->config->getSystemValue('max_filesize_animated_gifs_public_sharing', 10); - return new TemplateResponse($this->appName, 'public', $shareTmpl, 'base'); + $csp = new OCP\AppFramework\Http\ContentSecurityPolicy(); + $csp->addAllowedFrameDomain('\'self\''); + $response = new TemplateResponse($this->appName, 'public', $shareTmpl, 'base'); + $response->setContentSecurityPolicy($csp); + + return $response; } /** @@ -230,26 +234,48 @@ class ShareController extends Controller { } } + $files_list = null; + if (!is_null($files)) { // download selected files + $files_list = json_decode($files); + // in case we get only a single file + if ($files_list === null) { + $files_list = array($files); + } + } + $originalSharePath = self::getPath($token); + // Create the activities if (isset($originalSharePath) && Filesystem::isReadable($originalSharePath . $path)) { $originalSharePath = Filesystem::normalizePath($originalSharePath . $path); - $type = \OC\Files\Filesystem::is_dir($originalSharePath) ? 'folder' : 'file'; - $args = $type === 'folder' ? array('dir' => $originalSharePath) : array('dir' => dirname($originalSharePath), 'scrollto' => basename($originalSharePath)); - $linkToFile = \OCP\Util::linkToAbsolute('files', 'index.php', $args); - $subject = $type === 'folder' ? Activity::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED : Activity::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED; - $this->activityManager->publishActivity( - 'files_sharing', $subject, array($originalSharePath), '', array(), $originalSharePath, - $linkToFile, $linkItem['uid_owner'], Activity::TYPE_PUBLIC_LINKS, Activity::PRIORITY_MEDIUM); - } + $isDir = \OC\Files\Filesystem::is_dir($originalSharePath); - if (!is_null($files)) { // download selected files - $files_list = json_decode($files); - // in case we get only a single file - if ($files_list === NULL) { - $files_list = array($files); + $activities = []; + if (!$isDir) { + // Single file public share + $activities[$originalSharePath] = Activity::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED; + } else if (!empty($files_list)) { + // Only some files are downloaded + foreach ($files_list as $file) { + $filePath = Filesystem::normalizePath($originalSharePath . '/' . $file); + $isDir = \OC\Files\Filesystem::is_dir($filePath); + $activities[$filePath] = ($isDir) ? Activity::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED : Activity::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED; + } + } else { + // The folder is downloaded + $activities[$originalSharePath] = Activity::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED; + } + + foreach ($activities as $filePath => $subject) { + $this->activityManager->publishActivity( + 'files_sharing', $subject, array($filePath), '', array(), + $filePath, '', $linkItem['uid_owner'], Activity::TYPE_PUBLIC_LINKS, Activity::PRIORITY_MEDIUM + ); } + } + // download selected files + if (!is_null($files)) { // FIXME: The exit is required here because otherwise the AppFramework is trying to add headers as well // after dispatching the request which results in a "Cannot modify header information" notice. OC_Files::get($originalSharePath, $files_list, $_SERVER['REQUEST_METHOD'] == 'HEAD'); diff --git a/apps/files_sharing/lib/external/manager.php b/apps/files_sharing/lib/external/manager.php index 8985aeb3fce..490e5e5003d 100644 --- a/apps/files_sharing/lib/external/manager.php +++ b/apps/files_sharing/lib/external/manager.php @@ -321,4 +321,4 @@ class Manager { return $result ? $openShares->fetchAll() : array(); } -}
\ No newline at end of file +} diff --git a/apps/files_sharing/lib/external/scanner.php b/apps/files_sharing/lib/external/scanner.php index b45a8942e96..616d4db44e5 100644 --- a/apps/files_sharing/lib/external/scanner.php +++ b/apps/files_sharing/lib/external/scanner.php @@ -14,11 +14,10 @@ use OCP\Files\StorageInvalidException; use OCP\Files\StorageNotAvailableException; class Scanner extends \OC\Files\Cache\Scanner { - /** - * @var \OCA\Files_Sharing\External\Storage - */ + /** @var \OCA\Files_Sharing\External\Storage */ protected $storage; + /** {@inheritDoc} */ public function scan($path, $recursive = self::SCAN_RECURSIVE, $reuse = -1) { $this->scanAll(); } @@ -31,9 +30,11 @@ class Scanner extends \OC\Files\Cache\Scanner { * * @param string $file file to scan * @param int $reuseExisting + * @param int $parentId + * @param array | null $cacheData existing data in the cache for the file to be scanned * @return array an array of metadata of the scanned file */ - public function scanFile($file, $reuseExisting = 0) { + public function scanFile($file, $reuseExisting = 0, $parentId = -1, $cacheData = null) { try { return parent::scanFile($file, $reuseExisting); } catch (ForbiddenException $e) { @@ -54,6 +55,9 @@ class Scanner extends \OC\Files\Cache\Scanner { * Checks the remote share for changes. * If changes are available, scan them and update * the cache. + * @throws NotFoundException + * @throws StorageInvalidException + * @throws \Exception */ public function scanAll() { try { @@ -76,10 +80,14 @@ class Scanner extends \OC\Files\Cache\Scanner { } } + /** + * @param array $data + * @param string $path + */ private function addResult($data, $path) { $id = $this->cache->put($path, $data); if (isset($data['children'])) { - $children = array(); + $children = []; foreach ($data['children'] as $child) { $children[$child['name']] = true; $this->addResult($child, ltrim($path . '/' . $child['name'], '/')); diff --git a/apps/files_sharing/lib/external/storage.php b/apps/files_sharing/lib/external/storage.php index 648376e8cb5..51c4a36029e 100644 --- a/apps/files_sharing/lib/external/storage.php +++ b/apps/files_sharing/lib/external/storage.php @@ -70,7 +70,7 @@ class Storage extends DAV implements ISharedStorage { 'host' => $host, 'root' => $root, 'user' => $options['token'], - 'password' => $options['password'] + 'password' => (string)$options['password'] )); } diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php index d992f8f70b4..ccfbebddb29 100644 --- a/apps/files_sharing/lib/sharedstorage.php +++ b/apps/files_sharing/lib/sharedstorage.php @@ -80,7 +80,7 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage { /** * Get the source file path for a shared file * @param string $target Shared target file path - * @return string source file path or false if not found + * @return string|false source file path or false if not found */ public function getSourcePath($target) { $source = $this->getFile($target); diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php index d9d14f67c33..9e4e8d23151 100644 --- a/apps/files_sharing/public.php +++ b/apps/files_sharing/public.php @@ -10,8 +10,14 @@ // This file is just used to redirect the legacy sharing URLs (< ownCloud 8) to the new ones -$urlGenerator = new \OC\URLGenerator(\OC::$server->getConfig()); +$urlGenerator = \OC::$server->getURLGenerator(); $token = isset($_GET['t']) ? $_GET['t'] : ''; $route = isset($_GET['download']) ? 'files_sharing.sharecontroller.downloadShare' : 'files_sharing.sharecontroller.showShare'; -OC_Response::redirect($urlGenerator->linkToRoute($route, array('token' => $token))); +if($token !== '') { + OC_Response::redirect($urlGenerator->linkToRoute($route, array('token' => $token))); +} else { + header('HTTP/1.0 404 Not Found'); + $tmpl = new OCP\Template('', '404', 'guest'); + print_unescaped($tmpl->fetchPage()); +} diff --git a/apps/files_sharing/publicwebdav.php b/apps/files_sharing/publicwebdav.php index 240891ffef6..c7ee950532e 100644 --- a/apps/files_sharing/publicwebdav.php +++ b/apps/files_sharing/publicwebdav.php @@ -19,26 +19,24 @@ OC_Util::obEnd(); // Backends $authBackend = new OCA\Files_Sharing\Connector\PublicAuth(\OC::$server->getConfig()); -$lockBackend = new OC_Connector_Sabre_Locks(); -$requestBackend = new OC_Connector_Sabre_Request(); // Fire up server $objectTree = new \OC\Connector\Sabre\ObjectTree(); -$server = new OC_Connector_Sabre_Server($objectTree); -$server->httpRequest = $requestBackend; +$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())); -$server->addPlugin(new \Sabre\DAV\Locks\Plugin($lockBackend)); $server->addPlugin(new \Sabre\DAV\Browser\Plugin(false)); // Show something in the Browser, but no upload -$server->addPlugin(new OC_Connector_Sabre_FilesPlugin()); -$server->addPlugin(new OC_Connector_Sabre_MaintenancePlugin()); -$server->addPlugin(new OC_Connector_Sabre_ExceptionLoggerPlugin('webdav')); +$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->subscribeEvent('beforeMethod', function () use ($server, $objectTree, $authBackend) { +$server->on('beforeMethod', function () use ($server, $objectTree, $authBackend) { $share = $authBackend->getShare(); $owner = $share['uid_owner']; $isWritable = $share['permissions'] & (\OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_CREATE); @@ -59,14 +57,14 @@ $server->subscribeEvent('beforeMethod', function () use ($server, $objectTree, $ // Create ownCloud Dir if ($rootInfo->getType() === 'dir') { - $root = new OC_Connector_Sabre_Directory($view, $rootInfo); + $root = new \OC\Connector\Sabre\Directory($view, $rootInfo); } else { - $root = new OC_Connector_Sabre_File($view, $rootInfo); + $root = new \OC\Connector\Sabre\File($view, $rootInfo); } $mountManager = \OC\Files\Filesystem::getMountManager(); $objectTree->init($root, $view, $mountManager); - $server->addPlugin(new OC_Connector_Sabre_QuotaPlugin($view)); + $server->addPlugin(new \OC\Connector\Sabre\QuotaPlugin($view)); }, 30); // priority 30: after auth (10) and acl(20), before lock(50) and handling the request // And off we go! diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php index 4ec4d264b31..fa349f29811 100644 --- a/apps/files_sharing/templates/public.php +++ b/apps/files_sharing/templates/public.php @@ -19,11 +19,10 @@ OCP\Util::addScript('files', 'files'); OCP\Util::addScript('files', 'filelist'); OCP\Util::addscript('files', 'keyboardshortcuts'); -$thumbSize=1024; -$previewSupported = OC\Preview::isMimeSupported($_['mimetype']) ? 'true' : 'false'; +$thumbSize = 1024; ?> -<?php if ( \OC\Preview::isMimeSupported($_['mimetype'])): /* This enables preview images for links (e.g. on Facebook, Google+, ...)*/?> +<?php if ($_['previewSupported']): /* This enables preview images for links (e.g. on Facebook, Google+, ...)*/?> <link rel="image_src" href="<?php p(OCP\Util::linkToRoute( 'core_ajax_public_preview', array('x' => $thumbSize, 'y' => $thumbSize, 'file' => $_['directory_path'], 't' => $_['dirToken']))); ?>" /> <?php endif; ?> @@ -38,7 +37,7 @@ $previewSupported = OC\Preview::isMimeSupported($_['mimetype']) ? 'true' : 'fals <input type="hidden" name="sharingToken" value="<?php p($_['sharingToken']) ?>" id="sharingToken"> <input type="hidden" name="filename" value="<?php p($_['filename']) ?>" id="filename"> <input type="hidden" name="mimetype" value="<?php p($_['mimetype']) ?>" id="mimetype"> -<input type="hidden" name="previewSupported" value="<?php p($previewSupported); ?>" id="previewSupported"> +<input type="hidden" name="previewSupported" value="<?php p($_['previewSupported'] ? 'true' : 'false'); ?>" id="previewSupported"> <input type="hidden" name="mimetypeIcon" value="<?php p(OC_Helper::mimetypeIcon($_['mimetype'])); ?>" id="mimetypeIcon"> <input type="hidden" name="filesize" value="<?php p($_['nonHumanFileSize']); ?>" id="filesize"> <input type="hidden" name="maxSizeAnimateGif" value="<?php p($_['maxSizeAnimateGif']); ?>" id="maxSizeAnimateGif"> diff --git a/apps/files_sharing/tests/activity.php b/apps/files_sharing/tests/activity.php index 04930e3bb76..6975a41fb8b 100644 --- a/apps/files_sharing/tests/activity.php +++ b/apps/files_sharing/tests/activity.php @@ -34,7 +34,12 @@ class Activity extends \OCA\Files_Sharing\Tests\TestCase{ protected function setUp() { parent::setUp(); - $this->activity = new \OCA\Files_Sharing\Activity(); + $this->activity = new \OCA\Files_Sharing\Activity( + $this->getMock('\OC\L10N\Factory'), + $this->getMockBuilder('\OC\URLGenerator') + ->disableOriginalConstructor() + ->getMock() + ); } /** @@ -56,9 +61,8 @@ class Activity extends \OCA\Files_Sharing\Tests\TestCase{ public function dataTestGetDefaultType() { return array( - array('email', array(\OCA\Files_Sharing\Activity::TYPE_REMOTE_SHARE)), - array('stream', array(\OCA\Files_Sharing\Activity::TYPE_REMOTE_SHARE, \OCA\Files_Sharing\Activity::TYPE_PUBLIC_LINKS)), - array('foo', false) + array('email', array(\OCA\Files_Sharing\Activity::TYPE_SHARED, \OCA\Files_Sharing\Activity::TYPE_REMOTE_SHARE)), + array('stream', array(\OCA\Files_Sharing\Activity::TYPE_SHARED, \OCA\Files_Sharing\Activity::TYPE_REMOTE_SHARE, \OCA\Files_Sharing\Activity::TYPE_PUBLIC_LINKS)), ); } diff --git a/apps/files_sharing/tests/api.php b/apps/files_sharing/tests/api.php index 278e7130199..371c94a8c88 100644 --- a/apps/files_sharing/tests/api.php +++ b/apps/files_sharing/tests/api.php @@ -119,6 +119,32 @@ class Test_Files_Sharing_Api extends TestCase { \OCP\Share::unshare('folder', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_LINK, null); } + /** + * @medium + */ + public function testCreateShareInvalidPermissions() { + + // simulate a post request + $_POST['path'] = $this->filename; + $_POST['shareWith'] = \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2; + $_POST['shareType'] = \OCP\Share::SHARE_TYPE_USER; + $_POST['permissions'] = \OCP\Constants::PERMISSION_SHARE; + + $result = \OCA\Files_Sharing\API\Local::createShare([]); + + // share was successful? + $this->assertFalse($result->succeeded()); + $this->assertEquals(400, $result->getStatusCode()); + + $shares = \OCP\Share::getItemShared('file', null); + $this->assertCount(0, $shares); + + $fileinfo = $this->view->getFileInfo($this->filename); + \OCP\Share::unshare('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER, + \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2); + } + + function testEnfoceLinkPassword() { $appConfig = \OC::$server->getAppConfig(); @@ -885,6 +911,51 @@ class Test_Files_Sharing_Api extends TestCase { /** * @medium + * @depends testCreateShare + */ + public function testUpdateShareInvalidPermissions() { + + $fileInfo = $this->view->getFileInfo($this->filename); + + $result = \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, + \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2, \OCP\Constants::PERMISSION_ALL); + + // share was successful? + $this->assertTrue($result); + + $share = \OCP\Share::getItemShared('file', null); + $this->assertCount(1, $share); + $share = reset($share); + + // check if share have expected permissions, single shared files never have + // delete permissions + $this->assertEquals(\OCP\Constants::PERMISSION_ALL & ~\OCP\Constants::PERMISSION_DELETE, $share['permissions']); + + // update permissions + $params = []; + $params['id'] = $share['id']; + $params['_put'] = []; + $params['_put']['permissions'] = \OCP\Constants::PERMISSION_SHARE; + + $result = \OCA\Files_Sharing\API\Local::updateShare($params); + + //Updating should fail with 400 + $this->assertFalse($result->succeeded()); + $this->assertEquals(400, $result->getStatusCode()); + + $share = \OCP\Share::getItemShared('file', $share['file_source']); + $share = reset($share); + + //Permissions should not have changed! + $this->assertEquals(\OCP\Constants::PERMISSION_ALL & ~\OCP\Constants::PERMISSION_DELETE, $share['permissions']); + + \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, + \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2); + } + + + /** + * @medium */ function testUpdateShareUpload() { @@ -1008,6 +1079,24 @@ class Test_Files_Sharing_Api extends TestCase { $this->assertTrue(is_array($updatedLinkShare)); $this->assertEquals($dateWithinRange->format('Y-m-d') . ' 00:00:00', $updatedLinkShare['expiration']); + + // Try to remove expire date + $params = array(); + $params['id'] = $linkShare['id']; + $params['_put'] = ['expireDate' => '']; + + $result = \OCA\Files_Sharing\API\Local::updateShare($params); + + $this->assertFalse($result->succeeded()); + + $items = \OCP\Share::getItemShared('file', $linkShare['file_source']); + + $updatedLinkShare = reset($items); + + // date shouldn't be changed + $this->assertTrue(is_array($updatedLinkShare)); + $this->assertEquals($dateWithinRange->format('Y-m-d') . ' 00:00:00', $updatedLinkShare['expiration']); + // cleanup $config->setAppValue('core', 'shareapi_default_expire_date', 'no'); $config->setAppValue('core', 'shareapi_enforce_expire_date', 'no'); diff --git a/apps/files_sharing/tests/controller/sharecontroller.php b/apps/files_sharing/tests/controller/sharecontroller.php index 931cd506d43..189fb57653c 100644 --- a/apps/files_sharing/tests/controller/sharecontroller.php +++ b/apps/files_sharing/tests/controller/sharecontroller.php @@ -24,7 +24,7 @@ use OC\URLGenerator; /** * @package OCA\Files_Sharing\Controllers */ -class ShareControllerTest extends \PHPUnit_Framework_TestCase { +class ShareControllerTest extends \Test\TestCase { /** @var IAppContainer */ private $container; @@ -158,8 +158,14 @@ class ShareControllerTest extends \PHPUnit_Framework_TestCase { 'fileSize' => '33 B', 'nonHumanFileSize' => 33, 'maxSizeAnimateGif' => 10, + 'previewSupported' => true, ); + + $csp = new \OCP\AppFramework\Http\ContentSecurityPolicy(); + $csp->addAllowedFrameDomain('\'self\''); $expectedResponse = new TemplateResponse($this->container['AppName'], 'public', $sharedTmplParams, 'base'); + $expectedResponse->setContentSecurityPolicy($csp); + $this->assertEquals($expectedResponse, $response); } diff --git a/apps/files_sharing/tests/external/manager.php b/apps/files_sharing/tests/external/manager.php new file mode 100644 index 00000000000..dcb3dfba692 --- /dev/null +++ b/apps/files_sharing/tests/external/manager.php @@ -0,0 +1,142 @@ +<?php +/** + * @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/> + * + */ +namespace OCA\Files_sharing\Tests\External; + +use OC\Files\Storage\StorageFactory; +use Test\TestCase; + +class Manager extends TestCase { + private $uid; + + /** + * @var \OC\Files\Mount\Manager + */ + private $mountManager; + + /** + * @var \OCA\Files_Sharing\External\Manager + */ + private $instance; + + public function setUp() { + $this->uid = uniqid(); + $this->mountManager = new \OC\Files\Mount\Manager(); + $this->instance = new \OCA\Files_Sharing\External\Manager(\OC::$server->getDatabaseConnection(), + $this->mountManager, new StorageFactory(), \OC::$server->getHTTPHelper(), $this->uid); + } + + public function tearDown() { + $this->instance->removeUserShares($this->uid); + } + + private function getFullPath($path) { + return '/' . $this->uid . '/files' . $path; + } + + private function assertMount($mountPoint) { + $mountPoint = rtrim($mountPoint, '/'); + $mount = $this->mountManager->find($this->getFullPath($mountPoint)); + $this->assertInstanceOf('\OCP\Files\Mount\IMountPoint', $mount); + $this->assertEquals($this->getFullPath($mountPoint), rtrim($mount->getMountPoint(), '/')); + $storage = $mount->getStorage(); + $this->assertInstanceOf('\OCA\Files_Sharing\External\Storage', $storage); + } + + private function assertNotMount($mountPoint) { + $mountPoint = rtrim($mountPoint, '/'); + $mount = $this->mountManager->find($this->getFullPath($mountPoint)); + if ($mount) { + $this->assertInstanceOf('\OCP\Files\Mount\IMountPoint', $mount); + $this->assertNotEquals($this->getFullPath($mountPoint), rtrim($mount->getMountPoint(), '/')); + } else { + $this->assertNull($mount); + } + } + + public function testAddBasic() { + $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', true); + \Test_Helper::invokePrivate($this->instance, 'setupMounts'); + $this->assertMount('/example'); + } + + public function testAddBasicEmptyPassword() { + $this->instance->addShare('http://example.com', 'foo', '', 'example', 'me', true); + \Test_Helper::invokePrivate($this->instance, 'setupMounts'); + $this->assertMount('/example'); + } + + public function testAddNotAcceptedShare() { + $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', false); + \Test_Helper::invokePrivate($this->instance, 'setupMounts'); + $this->assertNotMount('/example'); + } + + public function testAcceptMount() { + $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', false); + $open = $this->instance->getOpenShares(); + $this->assertCount(1, $open); + $this->instance->acceptShare($open[0]['id']); + $this->assertEquals([], $this->instance->getOpenShares()); + \Test_Helper::invokePrivate($this->instance, 'setupMounts'); + $this->assertMount('/example'); + } + + public function testDeclineMount() { + $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', false); + $open = $this->instance->getOpenShares(); + $this->assertCount(1, $open); + $this->instance->declineShare($open[0]['id']); + $this->assertEquals([], $this->instance->getOpenShares()); + \Test_Helper::invokePrivate($this->instance, 'setupMounts'); + $this->assertNotMount('/example'); + } + + public function testSetMountPoint() { + $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', true); + \Test_Helper::invokePrivate($this->instance, 'setupMounts'); + $this->assertMount('/example'); + $this->instance->setMountPoint($this->getFullPath('/example'), $this->getFullPath('/renamed')); + $this->mountManager->clear(); + \Test_Helper::invokePrivate($this->instance, 'setupMounts'); + $this->assertMount('/renamed'); + $this->assertNotMount('/example'); + } + + public function testRemoveShare() { + $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', true); + \Test_Helper::invokePrivate($this->instance, 'setupMounts'); + $this->assertMount('/example'); + $this->instance->removeShare($this->getFullPath('/example')); + $this->mountManager->clear(); + \Test_Helper::invokePrivate($this->instance, 'setupMounts'); + $this->assertNotMount('/example'); + } + + public function testRemoveShareForUser() { + $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', true); + \Test_Helper::invokePrivate($this->instance, 'setupMounts'); + $this->assertMount('/example'); + $this->instance->removeUserShares($this->uid); + $this->mountManager->clear(); + \Test_Helper::invokePrivate($this->instance, 'setupMounts'); + $this->assertNotMount('/example'); + } +} diff --git a/apps/files_sharing/tests/propagation.php b/apps/files_sharing/tests/propagation.php new file mode 100644 index 00000000000..3d5f9985afd --- /dev/null +++ b/apps/files_sharing/tests/propagation.php @@ -0,0 +1,90 @@ +<?php +/** + * ownCloud + * + * @author Robin Appelman + * @copyright 2015 Robin Appelman <icewind@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/>. + * + */ + +namespace OCA\Files_sharing\Tests; + +use OC\Files\View; + +class Propagation extends TestCase { + + public function testSizePropagationWhenOwnerChangesFile() { + $this->loginAsUser(self::TEST_FILES_SHARING_API_USER1); + $recipientView = new View('/' . self::TEST_FILES_SHARING_API_USER1 . '/files'); + + $this->loginAsUser(self::TEST_FILES_SHARING_API_USER2); + $ownerView = new View('/' . self::TEST_FILES_SHARING_API_USER2 . '/files'); + $ownerView->mkdir('/sharedfolder/subfolder'); + $ownerView->file_put_contents('/sharedfolder/subfolder/foo.txt', 'bar'); + + $sharedFolderInfo = $ownerView->getFileInfo('/sharedfolder', false); + \OCP\Share::shareItem('folder', $sharedFolderInfo->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER1, 31); + $ownerRootInfo = $ownerView->getFileInfo('', false); + + $this->loginAsUser(self::TEST_FILES_SHARING_API_USER1); + $this->assertTrue($recipientView->file_exists('/sharedfolder/subfolder/foo.txt')); + $recipientRootInfo = $recipientView->getFileInfo('', false); + + // when file changed as owner + $this->loginAsUser(self::TEST_FILES_SHARING_API_USER2); + $ownerView->file_put_contents('/sharedfolder/subfolder/foo.txt', 'foobar'); + + // size of recipient's root stays the same + $this->loginAsUser(self::TEST_FILES_SHARING_API_USER1); + $newRecipientRootInfo = $recipientView->getFileInfo('', false); + $this->assertEquals($recipientRootInfo->getSize(), $newRecipientRootInfo->getSize()); + + // size of owner's root increases + $this->loginAsUser(self::TEST_FILES_SHARING_API_USER2); + $newOwnerRootInfo = $ownerView->getFileInfo('', false); + $this->assertEquals($ownerRootInfo->getSize() + 3, $newOwnerRootInfo->getSize()); + } + + public function testSizePropagationWhenRecipientChangesFile() { + $this->loginAsUser(self::TEST_FILES_SHARING_API_USER1); + $recipientView = new View('/' . self::TEST_FILES_SHARING_API_USER1 . '/files'); + + $this->loginAsUser(self::TEST_FILES_SHARING_API_USER2); + $ownerView = new View('/' . self::TEST_FILES_SHARING_API_USER2 . '/files'); + $ownerView->mkdir('/sharedfolder/subfolder'); + $ownerView->file_put_contents('/sharedfolder/subfolder/foo.txt', 'bar'); + + $sharedFolderInfo = $ownerView->getFileInfo('/sharedfolder', false); + \OCP\Share::shareItem('folder', $sharedFolderInfo->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER1, 31); + $ownerRootInfo = $ownerView->getFileInfo('', false); + + $this->loginAsUser(self::TEST_FILES_SHARING_API_USER1); + $this->assertTrue($recipientView->file_exists('/sharedfolder/subfolder/foo.txt')); + $recipientRootInfo = $recipientView->getFileInfo('', false); + + // when file changed as recipient + $recipientView->file_put_contents('/sharedfolder/subfolder/foo.txt', 'foobar'); + + // size of recipient's root stays the same + $newRecipientRootInfo = $recipientView->getFileInfo('', false); + $this->assertEquals($recipientRootInfo->getSize(), $newRecipientRootInfo->getSize()); + + // size of owner's root increases + $this->loginAsUser(self::TEST_FILES_SHARING_API_USER2); + $newOwnerRootInfo = $ownerView->getFileInfo('', false); + $this->assertEquals($ownerRootInfo->getSize() + 3, $newOwnerRootInfo->getSize()); + } +} diff --git a/apps/files_sharing/tests/sharedstorage.php b/apps/files_sharing/tests/sharedstorage.php index 2959b9aacfb..46f75b488b5 100644 --- a/apps/files_sharing/tests/sharedstorage.php +++ b/apps/files_sharing/tests/sharedstorage.php @@ -182,9 +182,8 @@ class Test_Files_Sharing_Storage extends OCA\Files_sharing\Tests\TestCase { // for the share root we expect: // the shared permissions (1) // the delete permission (8), to enable unshare - // the update permission (2), to allow renaming of the mount point $rootInfo = \OC\Files\Filesystem::getFileInfo($this->folder); - $this->assertSame(11, $rootInfo->getPermissions()); + $this->assertSame(9, $rootInfo->getPermissions()); // for the file within the shared folder we expect: // the shared permissions (1) diff --git a/apps/files_sharing/tests/testcase.php b/apps/files_sharing/tests/testcase.php index 65fbfac7d1d..d1be7e6fad6 100644 --- a/apps/files_sharing/tests/testcase.php +++ b/apps/files_sharing/tests/testcase.php @@ -59,7 +59,7 @@ abstract class TestCase extends \Test\TestCase { // reset backend \OC_User::clearBackends(); - \OC_User::useBackend('database'); + \OC_Group::clearBackends(); // clear share hooks \OC_Hook::clear('OCP\\Share'); @@ -88,13 +88,13 @@ abstract class TestCase extends \Test\TestCase { protected function setUp() { parent::setUp(); - $this->assertFalse(\OC_App::isEnabled('files_encryption')); - //login as user1 self::loginHelper(self::TEST_FILES_SHARING_API_USER1); $this->data = 'foobar'; $this->view = new \OC\Files\View('/' . self::TEST_FILES_SHARING_API_USER1 . '/files'); + + $this->assertFalse(\OC_App::isEnabled('files_encryption')); } protected function tearDown() { @@ -124,6 +124,12 @@ abstract class TestCase extends \Test\TestCase { \OC_User::setUserId(''); Filesystem::tearDown(); + // reset backend + \OC_User::clearBackends(); + \OC_User::useBackend('database'); + \OC_Group::clearBackends(); + \OC_Group::useBackend(new \OC_Group_Database()); + parent::tearDownAfterClass(); } diff --git a/apps/files_trashbin/ajax/delete.php b/apps/files_trashbin/ajax/delete.php index 72553fa0ee0..812c5029698 100644 --- a/apps/files_trashbin/ajax/delete.php +++ b/apps/files_trashbin/ajax/delete.php @@ -7,7 +7,7 @@ OCP\JSON::callCheck(); $folder = isset($_POST['dir']) ? $_POST['dir'] : '/'; // "empty trash" command -if (isset($_POST['allfiles']) and $_POST['allfiles'] === 'true'){ +if (isset($_POST['allfiles']) && (string)$_POST['allfiles'] === 'true'){ $deleteAll = true; if ($folder === '/' || $folder === '') { OCA\Files_Trashbin\Trashbin::deleteAll(); @@ -19,7 +19,7 @@ if (isset($_POST['allfiles']) and $_POST['allfiles'] === 'true'){ } else { $deleteAll = false; - $files = $_POST['files']; + $files = (string)$_POST['files']; $list = json_decode($files); } diff --git a/apps/files_trashbin/ajax/list.php b/apps/files_trashbin/ajax/list.php index e25301a26cb..0a78b44fd9a 100644 --- a/apps/files_trashbin/ajax/list.php +++ b/apps/files_trashbin/ajax/list.php @@ -4,9 +4,9 @@ OCP\JSON::checkLoggedIn(); \OC::$server->getSession()->close(); // Load the files -$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : ''; -$sortAttribute = isset( $_GET['sort'] ) ? $_GET['sort'] : 'name'; -$sortDirection = isset( $_GET['sortdirection'] ) ? ($_GET['sortdirection'] === 'desc') : false; +$dir = isset($_GET['dir']) ? (string)$_GET['dir'] : ''; +$sortAttribute = isset($_GET['sort']) ? (string)$_GET['sort'] : 'name'; +$sortDirection = isset($_GET['sortdirection']) ? ($_GET['sortdirection'] === 'desc') : false; $data = array(); // make filelist diff --git a/apps/files_trashbin/ajax/undelete.php b/apps/files_trashbin/ajax/undelete.php index ab7d57f5a7f..558761680cc 100644 --- a/apps/files_trashbin/ajax/undelete.php +++ b/apps/files_trashbin/ajax/undelete.php @@ -7,10 +7,10 @@ OCP\JSON::callCheck(); $files = $_POST['files']; $dir = '/'; if (isset($_POST['dir'])) { - $dir = rtrim($_POST['dir'], '/'). '/'; + $dir = rtrim((string)$_POST['dir'], '/'). '/'; } $allFiles = false; -if (isset($_POST['allfiles']) and $_POST['allfiles'] === 'true') { +if (isset($_POST['allfiles']) && (string)$_POST['allfiles'] === 'true') { $allFiles = true; $list = array(); $dirListing = true; diff --git a/apps/files_trashbin/command/expire.php b/apps/files_trashbin/command/expire.php new file mode 100644 index 00000000000..968608a31cb --- /dev/null +++ b/apps/files_trashbin/command/expire.php @@ -0,0 +1,56 @@ +<?php +/** + * ownCloud - trash bin + * + * @author Robin Appelman + * @copyright 2015 Robin Appelman icewind@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/>. + * + */ + +namespace OCA\Files_Trashbin\Command; + +use OC\Command\FileAccess; +use OCA\Files_Trashbin\Trashbin; +use OCP\Command\ICommand; + +class Expire implements ICommand { + use FileAccess; + + /** + * @var string + */ + private $user; + + /** + * @var int + */ + private $trashBinSize; + + /** + * @param string $user + * @param int $trashBinSize + */ + function __construct($user, $trashBinSize) { + $this->user = $user; + $this->trashBinSize = $trashBinSize; + } + + public function handle() { + \OC_Util::tearDownFS(); + \OC_Util::setupFS($this->user); + Trashbin::expire($this->trashBinSize, $this->user); + } +} diff --git a/apps/files_trashbin/l10n/ach.php b/apps/files_trashbin/l10n/ach.php deleted file mode 100644 index 5569f410cc9..00000000000 --- a/apps/files_trashbin/l10n/ach.php +++ /dev/null @@ -1,6 +0,0 @@ -<?php -$TRANSLATIONS = array( -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("","") -); -$PLURAL_FORMS = "nplurals=2; plural=(n > 1);"; diff --git a/apps/files_trashbin/l10n/ady.php b/apps/files_trashbin/l10n/ady.php deleted file mode 100644 index 0acad00e8b5..00000000000 --- a/apps/files_trashbin/l10n/ady.php +++ /dev/null @@ -1,6 +0,0 @@ -<?php -$TRANSLATIONS = array( -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("","") -); -$PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/af_ZA.php b/apps/files_trashbin/l10n/af_ZA.php deleted file mode 100644 index 0acad00e8b5..00000000000 --- a/apps/files_trashbin/l10n/af_ZA.php +++ /dev/null @@ -1,6 +0,0 @@ -<?php -$TRANSLATIONS = array( -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("","") -); -$PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/az.js b/apps/files_trashbin/l10n/az.js index 3a3f779a9f5..a6b149dcbdb 100644 --- a/apps/files_trashbin/l10n/az.js +++ b/apps/files_trashbin/l10n/az.js @@ -5,8 +5,13 @@ OC.L10N.register( "Couldn't restore %s" : "Geri qaytarila bilmədi %s", "Deleted files" : "Silinmiş fayllar", "Restore" : "Geri qaytar", + "Delete permanently" : "Həmişəlik sil", "Error" : "Səhv", "restored" : "geriqaytarılıb", + "No deleted files" : "Silinmiş fayllar mövcud deyil", + "You will be able to recover deleted files from here" : "Siz silinmiş faylları burdan bərpa edə bilərsiniz", + "No entries found in this folder" : "Bu qovluqda heç bir verilən tapılmadı", + "Select all" : "Hamısıı seç", "Name" : "Ad", "Deleted" : "Silinib", "Delete" : "Sil" diff --git a/apps/files_trashbin/l10n/az.json b/apps/files_trashbin/l10n/az.json index 4400b23d39a..45d74ddbc9c 100644 --- a/apps/files_trashbin/l10n/az.json +++ b/apps/files_trashbin/l10n/az.json @@ -3,8 +3,13 @@ "Couldn't restore %s" : "Geri qaytarila bilmədi %s", "Deleted files" : "Silinmiş fayllar", "Restore" : "Geri qaytar", + "Delete permanently" : "Həmişəlik sil", "Error" : "Səhv", "restored" : "geriqaytarılıb", + "No deleted files" : "Silinmiş fayllar mövcud deyil", + "You will be able to recover deleted files from here" : "Siz silinmiş faylları burdan bərpa edə bilərsiniz", + "No entries found in this folder" : "Bu qovluqda heç bir verilən tapılmadı", + "Select all" : "Hamısıı seç", "Name" : "Ad", "Deleted" : "Silinib", "Delete" : "Sil" diff --git a/apps/files_trashbin/l10n/cs_CZ.js b/apps/files_trashbin/l10n/cs_CZ.js index 68aa7789d75..4d0f9b7018d 100644 --- a/apps/files_trashbin/l10n/cs_CZ.js +++ b/apps/files_trashbin/l10n/cs_CZ.js @@ -10,7 +10,7 @@ OC.L10N.register( "restored" : "obnoveno", "No deleted files" : "Žádné smazané soubory", "You will be able to recover deleted files from here" : "Odtud budete moci obnovovat odstraněné soubory", - "No entries found in this folder" : "V tomto adresáři nebylo nic nalezeno", + "No entries found in this folder" : "V této složce nebylo nic nalezeno", "Select all" : "Vybrat vše", "Name" : "Název", "Deleted" : "Smazáno", diff --git a/apps/files_trashbin/l10n/cs_CZ.json b/apps/files_trashbin/l10n/cs_CZ.json index 1af12b47b66..cffa7b663fa 100644 --- a/apps/files_trashbin/l10n/cs_CZ.json +++ b/apps/files_trashbin/l10n/cs_CZ.json @@ -8,7 +8,7 @@ "restored" : "obnoveno", "No deleted files" : "Žádné smazané soubory", "You will be able to recover deleted files from here" : "Odtud budete moci obnovovat odstraněné soubory", - "No entries found in this folder" : "V tomto adresáři nebylo nic nalezeno", + "No entries found in this folder" : "V této složce nebylo nic nalezeno", "Select all" : "Vybrat vše", "Name" : "Název", "Deleted" : "Smazáno", diff --git a/apps/files_trashbin/l10n/el.js b/apps/files_trashbin/l10n/el.js index f6e38988323..8abbdb85b48 100644 --- a/apps/files_trashbin/l10n/el.js +++ b/apps/files_trashbin/l10n/el.js @@ -9,6 +9,7 @@ OC.L10N.register( "Error" : "Σφάλμα", "restored" : "επαναφέρθηκαν", "No deleted files" : "Κανένα διαγεγραμμένο αρχείο", + "You will be able to recover deleted files from here" : "Θα έχετε την δυνατότητα επαναφοράς διαγεγραμμένων αρχείων από εδώ", "No entries found in this folder" : "Δεν βρέθηκαν καταχωρήσεις σε αυτόν το φάκελο", "Select all" : "Επιλογή όλων", "Name" : "Όνομα", diff --git a/apps/files_trashbin/l10n/el.json b/apps/files_trashbin/l10n/el.json index f76e46954ca..eb52020a3e1 100644 --- a/apps/files_trashbin/l10n/el.json +++ b/apps/files_trashbin/l10n/el.json @@ -7,6 +7,7 @@ "Error" : "Σφάλμα", "restored" : "επαναφέρθηκαν", "No deleted files" : "Κανένα διαγεγραμμένο αρχείο", + "You will be able to recover deleted files from here" : "Θα έχετε την δυνατότητα επαναφοράς διαγεγραμμένων αρχείων από εδώ", "No entries found in this folder" : "Δεν βρέθηκαν καταχωρήσεις σε αυτόν το φάκελο", "Select all" : "Επιλογή όλων", "Name" : "Όνομα", diff --git a/apps/files_trashbin/l10n/en@pirate.php b/apps/files_trashbin/l10n/en@pirate.php deleted file mode 100644 index 0acad00e8b5..00000000000 --- a/apps/files_trashbin/l10n/en@pirate.php +++ /dev/null @@ -1,6 +0,0 @@ -<?php -$TRANSLATIONS = array( -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("","") -); -$PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/es.js b/apps/files_trashbin/l10n/es.js index 89fcf338118..b7f1a52327a 100644 --- a/apps/files_trashbin/l10n/es.js +++ b/apps/files_trashbin/l10n/es.js @@ -8,8 +8,8 @@ OC.L10N.register( "Delete permanently" : "Eliminar permanentemente", "Error" : "Error", "restored" : "recuperado", - "No deleted files" : "No hay archivos eliminados", - "You will be able to recover deleted files from here" : "Será posible recuperar archivos eliminados desde aquí", + "No deleted files" : "No hay ningún archivo eliminado", + "You will be able to recover deleted files from here" : "Desde aquí se podrán recuperar archivos eliminados", "No entries found in this folder" : "No hay entradas en esta carpeta", "Select all" : "Seleccionar todo", "Name" : "Nombre", diff --git a/apps/files_trashbin/l10n/es.json b/apps/files_trashbin/l10n/es.json index ff957bf7064..c55ae652d55 100644 --- a/apps/files_trashbin/l10n/es.json +++ b/apps/files_trashbin/l10n/es.json @@ -6,8 +6,8 @@ "Delete permanently" : "Eliminar permanentemente", "Error" : "Error", "restored" : "recuperado", - "No deleted files" : "No hay archivos eliminados", - "You will be able to recover deleted files from here" : "Será posible recuperar archivos eliminados desde aquí", + "No deleted files" : "No hay ningún archivo eliminado", + "You will be able to recover deleted files from here" : "Desde aquí se podrán recuperar archivos eliminados", "No entries found in this folder" : "No hay entradas en esta carpeta", "Select all" : "Seleccionar todo", "Name" : "Nombre", diff --git a/apps/files_trashbin/l10n/kn.php b/apps/files_trashbin/l10n/kn.php deleted file mode 100644 index 70f10d7c0bf..00000000000 --- a/apps/files_trashbin/l10n/kn.php +++ /dev/null @@ -1,6 +0,0 @@ -<?php -$TRANSLATIONS = array( -"_%n folder_::_%n folders_" => array(""), -"_%n file_::_%n files_" => array("") -); -$PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/files_trashbin/l10n/lv.js b/apps/files_trashbin/l10n/lv.js index 21ac79785a6..813ddd314e1 100644 --- a/apps/files_trashbin/l10n/lv.js +++ b/apps/files_trashbin/l10n/lv.js @@ -8,6 +8,8 @@ OC.L10N.register( "Delete permanently" : "Dzēst pavisam", "Error" : "Kļūda", "restored" : "atjaunots", + "No deleted files" : "Nav dzēstu failu", + "You will be able to recover deleted files from here" : "No šejienes būs iespējams atgūt dzēstos failus", "No entries found in this folder" : "Šajā mapē nekas nav atrasts", "Select all" : "Atzīmēt visu", "Name" : "Nosaukums", diff --git a/apps/files_trashbin/l10n/lv.json b/apps/files_trashbin/l10n/lv.json index 683a929948b..9c0ad01ce9a 100644 --- a/apps/files_trashbin/l10n/lv.json +++ b/apps/files_trashbin/l10n/lv.json @@ -6,6 +6,8 @@ "Delete permanently" : "Dzēst pavisam", "Error" : "Kļūda", "restored" : "atjaunots", + "No deleted files" : "Nav dzēstu failu", + "You will be able to recover deleted files from here" : "No šejienes būs iespējams atgūt dzēstos failus", "No entries found in this folder" : "Šajā mapē nekas nav atrasts", "Select all" : "Atzīmēt visu", "Name" : "Nosaukums", diff --git a/apps/files_trashbin/l10n/ml_IN.php b/apps/files_trashbin/l10n/ml_IN.php deleted file mode 100644 index 0acad00e8b5..00000000000 --- a/apps/files_trashbin/l10n/ml_IN.php +++ /dev/null @@ -1,6 +0,0 @@ -<?php -$TRANSLATIONS = array( -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("","") -); -$PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/my_MM.php b/apps/files_trashbin/l10n/my_MM.php deleted file mode 100644 index 70f10d7c0bf..00000000000 --- a/apps/files_trashbin/l10n/my_MM.php +++ /dev/null @@ -1,6 +0,0 @@ -<?php -$TRANSLATIONS = array( -"_%n folder_::_%n folders_" => array(""), -"_%n file_::_%n files_" => array("") -); -$PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/files_trashbin/l10n/ne.php b/apps/files_trashbin/l10n/ne.php deleted file mode 100644 index 0acad00e8b5..00000000000 --- a/apps/files_trashbin/l10n/ne.php +++ /dev/null @@ -1,6 +0,0 @@ -<?php -$TRANSLATIONS = array( -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("","") -); -$PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/nqo.php b/apps/files_trashbin/l10n/nqo.php deleted file mode 100644 index 70f10d7c0bf..00000000000 --- a/apps/files_trashbin/l10n/nqo.php +++ /dev/null @@ -1,6 +0,0 @@ -<?php -$TRANSLATIONS = array( -"_%n folder_::_%n folders_" => array(""), -"_%n file_::_%n files_" => array("") -); -$PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/files_trashbin/l10n/pl.js b/apps/files_trashbin/l10n/pl.js index 941e768e304..ba0a2e93bd3 100644 --- a/apps/files_trashbin/l10n/pl.js +++ b/apps/files_trashbin/l10n/pl.js @@ -8,6 +8,10 @@ OC.L10N.register( "Delete permanently" : "Trwale usuń", "Error" : "Błąd", "restored" : "przywrócony", + "No deleted files" : "Brak skasowanych plików", + "You will be able to recover deleted files from here" : "Możesz przywrócić skasowane pliki stąd", + "No entries found in this folder" : "Brak wpisów w tym folderze", + "Select all" : "Wybierz wszystko", "Name" : "Nazwa", "Deleted" : "Usunięte", "Delete" : "Usuń" diff --git a/apps/files_trashbin/l10n/pl.json b/apps/files_trashbin/l10n/pl.json index 01308bd763f..4fa8debaf29 100644 --- a/apps/files_trashbin/l10n/pl.json +++ b/apps/files_trashbin/l10n/pl.json @@ -6,6 +6,10 @@ "Delete permanently" : "Trwale usuń", "Error" : "Błąd", "restored" : "przywrócony", + "No deleted files" : "Brak skasowanych plików", + "You will be able to recover deleted files from here" : "Możesz przywrócić skasowane pliki stąd", + "No entries found in this folder" : "Brak wpisów w tym folderze", + "Select all" : "Wybierz wszystko", "Name" : "Nazwa", "Deleted" : "Usunięte", "Delete" : "Usuń" diff --git a/apps/files_trashbin/l10n/pt_PT.js b/apps/files_trashbin/l10n/pt_PT.js index 291d5085233..8124af21751 100644 --- a/apps/files_trashbin/l10n/pt_PT.js +++ b/apps/files_trashbin/l10n/pt_PT.js @@ -9,6 +9,7 @@ OC.L10N.register( "Error" : "Erro", "restored" : "Restaurado", "No deleted files" : "Sem ficheiros eliminados", + "You will be able to recover deleted files from here" : "Poderá recuperar ficheiros apagados aqui", "No entries found in this folder" : "Não foram encontradas entradas nesta pasta", "Select all" : "Seleccionar todos", "Name" : "Nome", diff --git a/apps/files_trashbin/l10n/pt_PT.json b/apps/files_trashbin/l10n/pt_PT.json index 8fd729edc90..f1fb924af59 100644 --- a/apps/files_trashbin/l10n/pt_PT.json +++ b/apps/files_trashbin/l10n/pt_PT.json @@ -7,6 +7,7 @@ "Error" : "Erro", "restored" : "Restaurado", "No deleted files" : "Sem ficheiros eliminados", + "You will be able to recover deleted files from here" : "Poderá recuperar ficheiros apagados aqui", "No entries found in this folder" : "Não foram encontradas entradas nesta pasta", "Select all" : "Seleccionar todos", "Name" : "Nome", diff --git a/apps/files_trashbin/l10n/sr.js b/apps/files_trashbin/l10n/sr.js index a3ba991eb1c..e9a4f79f94e 100644 --- a/apps/files_trashbin/l10n/sr.js +++ b/apps/files_trashbin/l10n/sr.js @@ -1,11 +1,18 @@ OC.L10N.register( "files_trashbin", { - "Deleted files" : "Обрисане датотеке", + "Couldn't delete %s permanently" : "Не могу заувек да обришем %s", + "Couldn't restore %s" : "Не могу да вратим %s", + "Deleted files" : "Обрисани фајлови", "Restore" : "Врати", - "Delete permanently" : "Обриши за стално", + "Delete permanently" : "Обриши заувек", "Error" : "Грешка", - "Name" : "Име", + "restored" : "враћено", + "No deleted files" : "Нема обрисаних фајлова", + "You will be able to recover deleted files from here" : "Одавде ћете моћи да повратите обрисане фајлове", + "No entries found in this folder" : "Нема ничега у овој фасцикли", + "Select all" : "Означи све", + "Name" : "Назив", "Deleted" : "Обрисано", "Delete" : "Обриши" }, diff --git a/apps/files_trashbin/l10n/sr.json b/apps/files_trashbin/l10n/sr.json index ef05d8fe159..e572b6a3e85 100644 --- a/apps/files_trashbin/l10n/sr.json +++ b/apps/files_trashbin/l10n/sr.json @@ -1,9 +1,16 @@ { "translations": { - "Deleted files" : "Обрисане датотеке", + "Couldn't delete %s permanently" : "Не могу заувек да обришем %s", + "Couldn't restore %s" : "Не могу да вратим %s", + "Deleted files" : "Обрисани фајлови", "Restore" : "Врати", - "Delete permanently" : "Обриши за стално", + "Delete permanently" : "Обриши заувек", "Error" : "Грешка", - "Name" : "Име", + "restored" : "враћено", + "No deleted files" : "Нема обрисаних фајлова", + "You will be able to recover deleted files from here" : "Одавде ћете моћи да повратите обрисане фајлове", + "No entries found in this folder" : "Нема ничега у овој фасцикли", + "Select all" : "Означи све", + "Name" : "Назив", "Deleted" : "Обрисано", "Delete" : "Обриши" },"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);" diff --git a/apps/files_trashbin/l10n/sw_KE.php b/apps/files_trashbin/l10n/sw_KE.php deleted file mode 100644 index 0acad00e8b5..00000000000 --- a/apps/files_trashbin/l10n/sw_KE.php +++ /dev/null @@ -1,6 +0,0 @@ -<?php -$TRANSLATIONS = array( -"_%n folder_::_%n folders_" => array("",""), -"_%n file_::_%n files_" => array("","") -); -$PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/files_trashbin/l10n/vi.js b/apps/files_trashbin/l10n/vi.js index 29338f3327e..718fb9b9edb 100644 --- a/apps/files_trashbin/l10n/vi.js +++ b/apps/files_trashbin/l10n/vi.js @@ -8,6 +8,7 @@ OC.L10N.register( "Delete permanently" : "Xóa vĩnh vễn", "Error" : "Lỗi", "restored" : "khôi phục", + "No entries found in this folder" : "Chưa có mục nào trong thư mục", "Name" : "Tên", "Deleted" : "Đã xóa", "Delete" : "Xóa" diff --git a/apps/files_trashbin/l10n/vi.json b/apps/files_trashbin/l10n/vi.json index 35739aa3c14..b23cd2be244 100644 --- a/apps/files_trashbin/l10n/vi.json +++ b/apps/files_trashbin/l10n/vi.json @@ -6,6 +6,7 @@ "Delete permanently" : "Xóa vĩnh vễn", "Error" : "Lỗi", "restored" : "khôi phục", + "No entries found in this folder" : "Chưa có mục nào trong thư mục", "Name" : "Tên", "Deleted" : "Đã xóa", "Delete" : "Xóa" diff --git a/apps/files_trashbin/lib/trashbin.php b/apps/files_trashbin/lib/trashbin.php index 8ce6d668d66..6a7636a46f2 100644 --- a/apps/files_trashbin/lib/trashbin.php +++ b/apps/files_trashbin/lib/trashbin.php @@ -23,6 +23,7 @@ namespace OCA\Files_Trashbin; use OC\Files\Filesystem; +use OCA\Files_Trashbin\Command\Expire; class Trashbin { // how long do we keep files in the trash bin if no other value is defined in the config file (unit: days) @@ -32,6 +33,13 @@ class Trashbin { // unit: percentage; 50% of available disk space/quota const DEFAULTMAXSIZE = 50; + /** + * Whether versions have already be rescanned during this PHP request + * + * @var bool + */ + private static $scannedVersions = false; + public static function getUidAndFilename($filename) { $uid = \OC\Files\Filesystem::getOwner($filename); \OC\Files\Filesystem::initMountPoints($uid); @@ -204,13 +212,13 @@ class Trashbin { } $userTrashSize += $size; - $userTrashSize -= self::expire($userTrashSize, $user); + self::scheduleExpire($userTrashSize, $user); // if owner !== user we also need to update the owners trash size if ($owner !== $user) { $ownerTrashSize = self::getTrashbinSize($owner); $ownerTrashSize += $size; - $ownerTrashSize -= self::expire($ownerTrashSize, $owner); + self::scheduleExpire($ownerTrashSize, $owner); } return ($sizeOfAddedFiles === false) ? false : true; @@ -422,7 +430,7 @@ class Trashbin { if ($view->is_dir('/files_trashbin/versions/' . $file)) { $rootView->rename(\OC\Files\Filesystem::normalizePath($user . '/files_trashbin/versions/' . $file), \OC\Files\Filesystem::normalizePath($owner . '/files_versions/' . $ownerPath)); - } else if ($versions = self::getVersionsFromTrash($versionedFile, $timestamp)) { + } else if ($versions = self::getVersionsFromTrash($versionedFile, $timestamp, $user)) { foreach ($versions as $v) { if ($timestamp) { $rootView->rename($user . '/files_trashbin/versions/' . $versionedFile . '.v' . $v . '.d' . $timestamp, $owner . '/files_versions/' . $ownerPath . '.v' . $v); @@ -526,8 +534,8 @@ class Trashbin { $file = $filename; } - $size += self::deleteVersions($view, $file, $filename, $timestamp); - $size += self::deleteEncryptionKeys($view, $file, $filename, $timestamp); + $size += self::deleteVersions($view, $file, $filename, $timestamp, $user); + $size += self::deleteEncryptionKeys($view, $file, $filename, $timestamp, $user); if ($view->is_dir('/files_trashbin/files/' . $file)) { $size += self::calculateSize(new \OC\Files\View('/' . $user . '/files_trashbin/files/' . $file)); @@ -548,14 +556,13 @@ class Trashbin { * @param $timestamp * @return int */ - private static function deleteVersions(\OC\Files\View $view, $file, $filename, $timestamp) { + private static function deleteVersions(\OC\Files\View $view, $file, $filename, $timestamp, $user) { $size = 0; if (\OCP\App::isEnabled('files_versions')) { - $user = \OCP\User::getUser(); if ($view->is_dir('files_trashbin/versions/' . $file)) { $size += self::calculateSize(new \OC\Files\view('/' . $user . '/files_trashbin/versions/' . $file)); $view->unlink('files_trashbin/versions/' . $file); - } else if ($versions = self::getVersionsFromTrash($filename, $timestamp)) { + } else if ($versions = self::getVersionsFromTrash($filename, $timestamp, $user)) { foreach ($versions as $v) { if ($timestamp) { $size += $view->filesize('/files_trashbin/versions/' . $filename . '.v' . $v . '.d' . $timestamp); @@ -577,10 +584,9 @@ class Trashbin { * @param $timestamp * @return int */ - private static function deleteEncryptionKeys(\OC\Files\View $view, $file, $filename, $timestamp) { + private static function deleteEncryptionKeys(\OC\Files\View $view, $file, $filename, $timestamp, $user) { $size = 0; if (\OCP\App::isEnabled('files_encryption')) { - $user = \OCP\User::getUser(); $keyfiles = \OC\Files\Filesystem::normalizePath('files_trashbin/keys/' . $filename); @@ -682,26 +688,18 @@ class Trashbin { $freeSpace = self::calculateFreeSpace($size, $user); if ($freeSpace < 0) { - self::expire($size, $user); + self::scheduleExpire($size, $user); } } /** * clean up the trash bin * - * @param int $trashbinSize current size of the trash bin + * @param int $trashBinSize current size of the trash bin * @param string $user - * @return int size of expired files */ - private static function expire($trashbinSize, $user) { - - // let the admin disable auto expire - $autoExpire = \OC_Config::getValue('trashbin_auto_expire', true); - if ($autoExpire === false) { - return 0; - } - - $availableSpace = self::calculateFreeSpace($trashbinSize, $user); + public static function expire($trashBinSize, $user) { + $availableSpace = self::calculateFreeSpace($trashBinSize, $user); $size = 0; $retention_obligation = \OC_Config::getValue('trashbin_retention_obligation', self::DEFAULT_RETENTION_OBLIGATION); @@ -718,8 +716,18 @@ class Trashbin { // delete files from trash until we meet the trash bin size limit again $size += self::deleteFiles(array_slice($dirContent, $count), $user, $availableSpace); + } - return $size; + /**@param int $trashBinSize current size of the trash bin + * @param string $user + */ + private static function scheduleExpire($trashBinSize, $user) { + // let the admin disable auto expire + $autoExpire = \OC_Config::getValue('trashbin_auto_expire', true); + if ($autoExpire === false) { + return; + } + \OC::$server->getCommandBus()->push(new Expire($user, $trashBinSize)); } /** @@ -820,14 +828,17 @@ class Trashbin { * @param int $timestamp timestamp when the file was deleted * @return array */ - private static function getVersionsFromTrash($filename, $timestamp) { - $view = new \OC\Files\View('/' . \OCP\User::getUser() . '/files_trashbin/versions'); + private static function getVersionsFromTrash($filename, $timestamp, $user) { + $view = new \OC\Files\View('/' . $user . '/files_trashbin/versions'); $versions = array(); //force rescan of versions, local storage may not have updated the cache - /** @var \OC\Files\Storage\Storage $storage */ - list($storage, ) = $view->resolvePath('/'); - $storage->getScanner()->scan('files_trashbin'); + if (!self::$scannedVersions) { + /** @var \OC\Files\Storage\Storage $storage */ + list($storage, ) = $view->resolvePath('/'); + $storage->getScanner()->scan('files_trashbin/versions'); + self::$scannedVersions = true; + } if ($timestamp) { // fetch for old versions diff --git a/apps/files_trashbin/tests/js/filelistSpec.js b/apps/files_trashbin/tests/js/filelistSpec.js index fd479234b30..9aa1f907fa9 100644 --- a/apps/files_trashbin/tests/js/filelistSpec.js +++ b/apps/files_trashbin/tests/js/filelistSpec.js @@ -220,6 +220,28 @@ describe('OCA.Trashbin.FileList tests', function() { fileList.findFileEl('somedir.d99999').find('input:checkbox').click(); }); describe('Delete', function() { + it('Shows trashbin actions', function() { + // visible because a few files were selected + expect($('.selectedActions').is(':visible')).toEqual(true); + expect($('.selectedActions .delete-selected').is(':visible')).toEqual(true); + expect($('.selectedActions .undelete').is(':visible')).toEqual(true); + + // check + fileList.$el.find('.select-all').click(); + + // stays visible + expect($('.selectedActions').is(':visible')).toEqual(true); + expect($('.selectedActions .delete-selected').is(':visible')).toEqual(true); + expect($('.selectedActions .undelete').is(':visible')).toEqual(true); + + // uncheck + fileList.$el.find('.select-all').click(); + + // becomes hidden now + expect($('.selectedActions').is(':visible')).toEqual(false); + expect($('.selectedActions .delete-selected').is(':visible')).toEqual(false); + expect($('.selectedActions .undelete').is(':visible')).toEqual(false); + }); it('Deletes selected files when "Delete" clicked', function() { var request; $('.selectedActions .delete-selected').click(); diff --git a/apps/files_trashbin/tests/trashbin.php b/apps/files_trashbin/tests/trashbin.php index 17e38015868..8bc52cc9192 100644 --- a/apps/files_trashbin/tests/trashbin.php +++ b/apps/files_trashbin/tests/trashbin.php @@ -210,6 +210,8 @@ class Test_Trashbin extends \Test\TestCase { \OC\Files\Filesystem::unlink($folder . 'user1-4.txt'); + $this->runCommands(); + $filesInTrashUser2AfterDelete = OCA\Files_Trashbin\Helper::getTrashFiles('/', self::TEST_TRASHBIN_USER2); // user2-1.txt should have been expired diff --git a/apps/files_versions/ajax/getVersions.php b/apps/files_versions/ajax/getVersions.php index 80786433e7a..f3fc91116ba 100644 --- a/apps/files_versions/ajax/getVersions.php +++ b/apps/files_versions/ajax/getVersions.php @@ -3,8 +3,8 @@ OCP\JSON::checkLoggedIn(); OCP\JSON::callCheck(); OCP\JSON::checkAppEnabled('files_versions'); -$source = $_GET['source']; -$start = $_GET['start']; +$source = (string)$_GET['source']; +$start = (int)$_GET['start']; list ($uid, $filename) = OCA\Files_Versions\Storage::getUidAndFilename($source); $count = 5; //show the newest revisions $versions = OCA\Files_Versions\Storage::getVersions($uid, $filename, $source); diff --git a/apps/files_versions/ajax/rollbackVersion.php b/apps/files_versions/ajax/rollbackVersion.php index 326d8db74f7..7bcac614bbc 100644 --- a/apps/files_versions/ajax/rollbackVersion.php +++ b/apps/files_versions/ajax/rollbackVersion.php @@ -4,7 +4,7 @@ OCP\JSON::checkLoggedIn(); OCP\JSON::checkAppEnabled('files_versions'); OCP\JSON::callCheck(); -$file = $_GET['file']; +$file = (string)$_GET['file']; $revision=(int)$_GET['revision']; if(OCA\Files_Versions\Storage::rollback( $file, $revision )) { diff --git a/apps/files_versions/l10n/de.js b/apps/files_versions/l10n/de.js index 71905567b34..012167a7329 100644 --- a/apps/files_versions/l10n/de.js +++ b/apps/files_versions/l10n/de.js @@ -4,7 +4,7 @@ OC.L10N.register( "Could not revert: %s" : "Konnte %s nicht zurücksetzen", "Versions" : "Versionen", "Failed to revert {file} to revision {timestamp}." : "Konnte {file} der Revision {timestamp} nicht rückgängig machen.", - "More versions..." : "Weitere Versionen...", + "More versions..." : "Weitere Versionen…", "No other versions available" : "Keine anderen Versionen verfügbar", "Restore" : "Wiederherstellen" }, diff --git a/apps/files_versions/l10n/de.json b/apps/files_versions/l10n/de.json index f6feac199e2..74d7f066df8 100644 --- a/apps/files_versions/l10n/de.json +++ b/apps/files_versions/l10n/de.json @@ -2,7 +2,7 @@ "Could not revert: %s" : "Konnte %s nicht zurücksetzen", "Versions" : "Versionen", "Failed to revert {file} to revision {timestamp}." : "Konnte {file} der Revision {timestamp} nicht rückgängig machen.", - "More versions..." : "Weitere Versionen...", + "More versions..." : "Weitere Versionen…", "No other versions available" : "Keine anderen Versionen verfügbar", "Restore" : "Wiederherstellen" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_versions/l10n/de_DE.js b/apps/files_versions/l10n/de_DE.js index 0b8e5cdeac7..012167a7329 100644 --- a/apps/files_versions/l10n/de_DE.js +++ b/apps/files_versions/l10n/de_DE.js @@ -4,7 +4,7 @@ OC.L10N.register( "Could not revert: %s" : "Konnte %s nicht zurücksetzen", "Versions" : "Versionen", "Failed to revert {file} to revision {timestamp}." : "Konnte {file} der Revision {timestamp} nicht rückgängig machen.", - "More versions..." : "Mehrere Versionen...", + "More versions..." : "Weitere Versionen…", "No other versions available" : "Keine anderen Versionen verfügbar", "Restore" : "Wiederherstellen" }, diff --git a/apps/files_versions/l10n/de_DE.json b/apps/files_versions/l10n/de_DE.json index 6e5a8ec3bdb..74d7f066df8 100644 --- a/apps/files_versions/l10n/de_DE.json +++ b/apps/files_versions/l10n/de_DE.json @@ -2,7 +2,7 @@ "Could not revert: %s" : "Konnte %s nicht zurücksetzen", "Versions" : "Versionen", "Failed to revert {file} to revision {timestamp}." : "Konnte {file} der Revision {timestamp} nicht rückgängig machen.", - "More versions..." : "Mehrere Versionen...", + "More versions..." : "Weitere Versionen…", "No other versions available" : "Keine anderen Versionen verfügbar", "Restore" : "Wiederherstellen" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_versions/l10n/lb.php b/apps/files_versions/l10n/lb.php deleted file mode 100644 index 3aa625ffc97..00000000000 --- a/apps/files_versions/l10n/lb.php +++ /dev/null @@ -1,5 +0,0 @@ -<?php $TRANSLATIONS = array( -"History" => "Historique", -"Files Versioning" => "Fichier's Versionéierung ", -"Enable" => "Aschalten" -); diff --git a/apps/files_versions/l10n/lv.js b/apps/files_versions/l10n/lv.js index 5a8cbcf0ece..5ac3fa1ad87 100644 --- a/apps/files_versions/l10n/lv.js +++ b/apps/files_versions/l10n/lv.js @@ -3,6 +3,9 @@ OC.L10N.register( { "Could not revert: %s" : "Nevarēja atgriezt — %s", "Versions" : "Versijas", + "Failed to revert {file} to revision {timestamp}." : "Neizdevās atjaunot {file} no rediģējuma {timestamp} ", + "More versions..." : "Vairāk versiju...", + "No other versions available" : "Citas versijas nav pieejamas", "Restore" : "Atjaunot" }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); diff --git a/apps/files_versions/l10n/lv.json b/apps/files_versions/l10n/lv.json index 6781de4d471..f0912544887 100644 --- a/apps/files_versions/l10n/lv.json +++ b/apps/files_versions/l10n/lv.json @@ -1,6 +1,9 @@ { "translations": { "Could not revert: %s" : "Nevarēja atgriezt — %s", "Versions" : "Versijas", + "Failed to revert {file} to revision {timestamp}." : "Neizdevās atjaunot {file} no rediģējuma {timestamp} ", + "More versions..." : "Vairāk versiju...", + "No other versions available" : "Citas versijas nav pieejamas", "Restore" : "Atjaunot" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/sr.js b/apps/files_versions/l10n/sr.js index be85270b3aa..5a7bb5fcbf7 100644 --- a/apps/files_versions/l10n/sr.js +++ b/apps/files_versions/l10n/sr.js @@ -1,6 +1,11 @@ OC.L10N.register( "files_versions", { + "Could not revert: %s" : "Не могу да вратим: %s", + "Versions" : "Верзије", + "Failed to revert {file} to revision {timestamp}." : "Не могу давратим {file} на ревизију {timestamp}.", + "More versions..." : "Још верзија...", + "No other versions available" : "Нема других верзија", "Restore" : "Врати" }, "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_versions/l10n/sr.json b/apps/files_versions/l10n/sr.json index 744ab3c4b72..b3d1c084aea 100644 --- a/apps/files_versions/l10n/sr.json +++ b/apps/files_versions/l10n/sr.json @@ -1,4 +1,9 @@ { "translations": { + "Could not revert: %s" : "Не могу да вратим: %s", + "Versions" : "Верзије", + "Failed to revert {file} to revision {timestamp}." : "Не могу давратим {file} на ревизију {timestamp}.", + "More versions..." : "Још верзија...", + "No other versions available" : "Нема других верзија", "Restore" : "Врати" },"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/provisioning_api/tests/groupstest.php b/apps/provisioning_api/tests/groupstest.php index a25ebfbacfe..4f5e79c3031 100644 --- a/apps/provisioning_api/tests/groupstest.php +++ b/apps/provisioning_api/tests/groupstest.php @@ -63,7 +63,14 @@ class GroupsTest extends TestCase { $this->assertInstanceOf('OC_OCS_Result', $result); $this->assertTrue($result->succeeded()); - $this->assertEquals(array('users' => $users), $result->getData()); + $this->assertEquals(1, sizeof($result->getData()), 'Asserting the result data array only has the "users" key'); + $this->assertArrayHasKey('users', $result->getData()); + $resultData = $result->getData(); + $resultData = $resultData['users']; + + sort($users); + sort($resultData); + $this->assertEquals($users, $resultData); } diff --git a/apps/user_ldap/ajax/clearMappings.php b/apps/user_ldap/ajax/clearMappings.php index e6f3d32e84f..72764d754f7 100644 --- a/apps/user_ldap/ajax/clearMappings.php +++ b/apps/user_ldap/ajax/clearMappings.php @@ -29,7 +29,7 @@ OCP\JSON::checkAdminUser(); OCP\JSON::checkAppEnabled('user_ldap'); OCP\JSON::callCheck(); -$subject = $_POST['ldap_clear_mapping']; +$subject = (string)$_POST['ldap_clear_mapping']; $mapping = null; if($subject === 'user') { $mapping = new UserMapping(\OC::$server->getDatabaseConnection()); diff --git a/apps/user_ldap/ajax/deleteConfiguration.php b/apps/user_ldap/ajax/deleteConfiguration.php index d409d891f61..21263acdae8 100644 --- a/apps/user_ldap/ajax/deleteConfiguration.php +++ b/apps/user_ldap/ajax/deleteConfiguration.php @@ -26,7 +26,7 @@ OCP\JSON::checkAdminUser(); OCP\JSON::checkAppEnabled('user_ldap'); OCP\JSON::callCheck(); -$prefix = $_POST['ldap_serverconfig_chooser']; +$prefix = (string)$_POST['ldap_serverconfig_chooser']; $helper = new \OCA\user_ldap\lib\Helper(); if($helper->deleteServerConfiguration($prefix)) { OCP\JSON::success(); diff --git a/apps/user_ldap/ajax/getConfiguration.php b/apps/user_ldap/ajax/getConfiguration.php index fc51b459a25..bbcc630224d 100644 --- a/apps/user_ldap/ajax/getConfiguration.php +++ b/apps/user_ldap/ajax/getConfiguration.php @@ -26,7 +26,7 @@ OCP\JSON::checkAdminUser(); OCP\JSON::checkAppEnabled('user_ldap'); OCP\JSON::callCheck(); -$prefix = $_POST['ldap_serverconfig_chooser']; +$prefix = (string)$_POST['ldap_serverconfig_chooser']; $ldapWrapper = new OCA\user_ldap\lib\LDAP(); $connection = new \OCA\user_ldap\lib\Connection($ldapWrapper, $prefix); OCP\JSON::success(array('configuration' => $connection->getConfiguration())); diff --git a/apps/user_ldap/ajax/setConfiguration.php b/apps/user_ldap/ajax/setConfiguration.php index 84acecee5da..f2efc4ef859 100644 --- a/apps/user_ldap/ajax/setConfiguration.php +++ b/apps/user_ldap/ajax/setConfiguration.php @@ -26,7 +26,7 @@ OCP\JSON::checkAdminUser(); OCP\JSON::checkAppEnabled('user_ldap'); OCP\JSON::callCheck(); -$prefix = $_POST['ldap_serverconfig_chooser']; +$prefix = (string)$_POST['ldap_serverconfig_chooser']; // Checkboxes are not submitted, when they are unchecked. Set them manually. // only legacy checkboxes (Advanced and Expert tab) need to be handled here, diff --git a/apps/user_ldap/ajax/wizard.php b/apps/user_ldap/ajax/wizard.php index 48bfb56311c..f97024303dc 100644 --- a/apps/user_ldap/ajax/wizard.php +++ b/apps/user_ldap/ajax/wizard.php @@ -31,13 +31,13 @@ $l = \OC::$server->getL10N('user_ldap'); if(!isset($_POST['action'])) { \OCP\JSON::error(array('message' => $l->t('No action specified'))); } -$action = $_POST['action']; +$action = (string)$_POST['action']; if(!isset($_POST['ldap_serverconfig_chooser'])) { \OCP\JSON::error(array('message' => $l->t('No configuration specified'))); } -$prefix = $_POST['ldap_serverconfig_chooser']; +$prefix = (string)$_POST['ldap_serverconfig_chooser']; $ldapWrapper = new \OCA\user_ldap\lib\LDAP(); $configuration = new \OCA\user_ldap\lib\Configuration($prefix); @@ -85,7 +85,7 @@ switch($action) { exit; } } catch (\Exception $e) { - \OCP\JSON::error(array('message' => $e->getMessage())); + \OCP\JSON::error(array('message' => $e->getMessage(), 'code' => $e->getCode())); exit; } \OCP\JSON::error(); diff --git a/apps/user_ldap/appinfo/register_command.php b/apps/user_ldap/appinfo/register_command.php index 651e6a564e1..854f21aae35 100644 --- a/apps/user_ldap/appinfo/register_command.php +++ b/apps/user_ldap/appinfo/register_command.php @@ -25,11 +25,11 @@ $deletedUsersIndex = new DeletedUsersIndex( $ocConfig, $dbConnection, $userMapping ); -$application->add(new OCA\user_ldap\Command\ShowConfig()); +$application->add(new OCA\user_ldap\Command\ShowConfig($helper)); $application->add(new OCA\user_ldap\Command\SetConfig()); $application->add(new OCA\user_ldap\Command\TestConfig()); -$application->add(new OCA\user_ldap\Command\CreateEmptyConfig()); -$application->add(new OCA\user_ldap\Command\DeleteConfig()); +$application->add(new OCA\user_ldap\Command\CreateEmptyConfig($helper)); +$application->add(new OCA\user_ldap\Command\DeleteConfig($helper)); $application->add(new OCA\user_ldap\Command\Search($ocConfig)); $application->add(new OCA\user_ldap\Command\ShowRemnants( $deletedUsersIndex, \OC::$server->getDateTimeFormatter()) diff --git a/apps/user_ldap/command/createemptyconfig.php b/apps/user_ldap/command/createemptyconfig.php index 32010825361..1f051af9d5a 100644 --- a/apps/user_ldap/command/createemptyconfig.php +++ b/apps/user_ldap/command/createemptyconfig.php @@ -17,6 +17,16 @@ use \OCA\user_ldap\lib\Helper; use \OCA\user_ldap\lib\Configuration; class CreateEmptyConfig extends Command { + /** @var \OCA\User_LDAP\lib\Helper */ + protected $helper; + + /** + * @param Helper $helper + */ + public function __construct(Helper $helper) { + $this->helper = $helper; + parent::__construct(); + } protected function configure() { $this @@ -25,7 +35,6 @@ class CreateEmptyConfig extends Command { ; } - protected function execute(InputInterface $input, OutputInterface $output) { $configPrefix = $this->getNewConfigurationPrefix(); $output->writeln("Created new configuration with configID '{$configPrefix}'"); @@ -35,7 +44,7 @@ class CreateEmptyConfig extends Command { } protected function getNewConfigurationPrefix() { - $serverConnections = Helper::getServerConfigurationPrefixes(); + $serverConnections = $this->helper->getServerConfigurationPrefixes(); // first connection uses no prefix if(sizeof($serverConnections) == 0) { diff --git a/apps/user_ldap/command/deleteconfig.php b/apps/user_ldap/command/deleteconfig.php index f8b834a6465..fcffc50f47e 100644 --- a/apps/user_ldap/command/deleteconfig.php +++ b/apps/user_ldap/command/deleteconfig.php @@ -11,11 +11,20 @@ namespace OCA\user_ldap\Command; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use \OCA\user_ldap\lib\Helper; class DeleteConfig extends Command { + /** @var \OCA\User_LDAP\lib\Helper */ + protected $helper; + + /** + * @param Helper $helper + */ + public function __construct(Helper $helper) { + $this->helper = $helper; + parent::__construct(); + } protected function configure() { $this @@ -31,9 +40,9 @@ class DeleteConfig extends Command { protected function execute(InputInterface $input, OutputInterface $output) { - $configPrefix = $input->getArgument('configID');; + $configPrefix = $input->getArgument('configID'); - $success = Helper::deleteServerConfiguration($configPrefix); + $success = $this->helper->deleteServerConfiguration($configPrefix); if($success) { $output->writeln("Deleted configuration with configID '{$configPrefix}'"); diff --git a/apps/user_ldap/command/showconfig.php b/apps/user_ldap/command/showconfig.php index ddbc45243ff..48ab76f1b7e 100644 --- a/apps/user_ldap/command/showconfig.php +++ b/apps/user_ldap/command/showconfig.php @@ -17,6 +17,16 @@ use \OCA\user_ldap\lib\Helper; use \OCA\user_ldap\lib\Configuration; class ShowConfig extends Command { + /** @var \OCA\User_LDAP\lib\Helper */ + protected $helper; + + /** + * @param Helper $helper + */ + public function __construct(Helper $helper) { + $this->helper = $helper; + parent::__construct(); + } protected function configure() { $this @@ -27,12 +37,17 @@ class ShowConfig extends Command { InputArgument::OPTIONAL, 'will show the configuration of the specified id' ) + ->addOption( + 'show-password', + null, + InputOption::VALUE_NONE, + 'show ldap bind password' + ) ; } protected function execute(InputInterface $input, OutputInterface $output) { - $helper = new Helper(); - $availableConfigs = $helper->getServerConfigurationPrefixes(); + $availableConfigs = $this->helper->getServerConfigurationPrefixes(); $configID = $input->getArgument('configID'); if(!is_null($configID)) { $configIDs[] = $configID; @@ -44,15 +59,16 @@ class ShowConfig extends Command { $configIDs = $availableConfigs; } - $this->renderConfigs($configIDs, $output); + $this->renderConfigs($configIDs, $output, $input->getOption('show-password')); } /** * prints the LDAP configuration(s) * @param string[] configID(s) * @param OutputInterface $output + * @param bool $withPassword Set to TRUE to show plaintext passwords in output */ - protected function renderConfigs($configIDs, $output) { + protected function renderConfigs($configIDs, $output, $withPassword) { foreach($configIDs as $id) { $configHolder = new Configuration($id); $configuration = $configHolder->getConfiguration(); @@ -62,7 +78,7 @@ class ShowConfig extends Command { $table->setHeaders(array('Configuration', $id)); $rows = array(); foreach($configuration as $key => $value) { - if($key === 'ldapAgentPassword') { + if($key === 'ldapAgentPassword' && !$withPassword) { $value = '***'; } if(is_array($value)) { diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php index e8d268d3df2..40d702360fb 100644 --- a/apps/user_ldap/group_ldap.php +++ b/apps/user_ldap/group_ldap.php @@ -249,32 +249,71 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface { } /** - * returns a list of users that have the given group as primary group + * returns a filter for a "users in primary group" search or count operation * * @param string $groupDN - * @param $limit - * @param int $offset - * @return string[] + * @param string $search + * @return string + * @throws \Exception */ - public function getUsersInPrimaryGroup($groupDN, $limit = -1, $offset = 0) { + private function prepareFilterForUsersInPrimaryGroup($groupDN, $search = '') { $groupID = $this->getGroupPrimaryGroupID($groupDN); if($groupID === false) { - return array(); + throw new \Exception('Not a valid group'); } - $filter = $this->access->combineFilterWithAnd(array( - $this->access->connection->ldapUserFilter, - 'primaryGroupID=' . $groupID - )); + $filterParts = []; + $filterParts[] = $this->access->getFilterForUserCount(); + if(!empty($search)) { + $filterParts[] = $this->access->getFilterPartForUserSearch($search); + } + $filterParts[] = 'primaryGroupID=' . $groupID; + + $filter = $this->access->combineFilterWithAnd($filterParts); - $users = $this->access->fetchListOfUsers( - $filter, - array($this->access->connection->ldapUserDisplayName, 'dn'), - $limit, - $offset - ); + return $filter; + } + + /** + * returns a list of users that have the given group as primary group + * + * @param string $groupDN + * @param string $search + * @param int $limit + * @param int $offset + * @return string[] + */ + public function getUsersInPrimaryGroup($groupDN, $search = '', $limit = -1, $offset = 0) { + try { + $filter = $this->prepareFilterForUsersInPrimaryGroup($groupDN, $search); + return $this->access->fetchListOfUsers( + $filter, + array($this->access->connection->ldapUserDisplayName, 'dn'), + $limit, + $offset + ); + } catch (\Exception $e) { + return array(); + } + } - return $users; + /** + * returns the number of users that have the given group as primary group + * + * @param string $groupDN + * @param string $search + * @param int $limit + * @param int $offset + * @return int + */ + public function countUsersInPrimaryGroup($groupDN, $search = '', $limit = -1, $offset = 0) { + try { + $filter = $this->prepareFilterForUsersInPrimaryGroup($groupDN, $search); + $users = $this->access->countUsers($filter, array('dn'), $limit, $offset); + return (int)$users; + } catch (\Exception $e) { + return 0; + } } /** @@ -405,6 +444,7 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface { if(!$this->groupExists($gid)) { return array(); } + $search = $this->access->escapeFilterPart($search, true); $cacheKey = 'usersInGroup-'.$gid.'-'.$search.'-'.$limit.'-'.$offset; // check for cache of the exact query $groupUsers = $this->access->connection->getFromCache($cacheKey); @@ -473,7 +513,7 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface { $groupUsers = array_slice($groupUsers, $offset, $limit); //and get users that have the group as primary - $primaryUsers = $this->getUsersInPrimaryGroup($groupDN, $limit, $offset); + $primaryUsers = $this->getUsersInPrimaryGroup($groupDN, $search, $limit, $offset); $groupUsers = array_unique(array_merge($groupUsers, $primaryUsers)); $this->access->connection->writeToCache($cacheKey, $groupUsers); @@ -512,10 +552,13 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface { } if(empty($search)) { - $groupUsers = count($members); + $primaryUsers = $this->countUsersInPrimaryGroup($groupDN, ''); + $groupUsers = count($members) + $primaryUsers; + $this->access->connection->writeToCache($cacheKey, $groupUsers); return $groupUsers; } + $search = $this->access->escapeFilterPart($search, true); $isMemberUid = (strtolower($this->access->connection->ldapGroupMemberAssocAttr) === 'memberuid'); @@ -557,10 +600,9 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface { } //and get users that have the group as primary - $primaryUsers = $this->getUsersInPrimaryGroup($groupDN); - $groupUsers = array_unique(array_merge($groupUsers, $primaryUsers)); + $primaryUsers = $this->countUsersInPrimaryGroup($groupDN, $search); - return count($groupUsers); + return count($groupUsers) + $primaryUsers; } /** @@ -623,6 +665,7 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface { if(!$this->enabled) { return array(); } + $search = $this->access->escapeFilterPart($search, true); $pagingSize = $this->access->connection->ldapPagingSize; if ((! $this->access->connection->hasPagedResultSupport) || empty($pagingSize)) { diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js index b1abb0994ba..768d62a18d1 100644 --- a/apps/user_ldap/js/settings.js +++ b/apps/user_ldap/js/settings.js @@ -351,7 +351,7 @@ var LdapWizard = { encodeURIComponent($('#ldap_serverconfig_chooser').val()); LdapWizard.showSpinner(spinnerID); - var request = LdapWizard.ajax(param, + LdapWizard.ajax(param, function(result) { LdapWizard.applyChanges(result); LdapWizard.hideSpinner(spinnerID); @@ -360,7 +360,7 @@ var LdapWizard = { } }, function (result) { - OC.Notification.show('Counting the entries failed with, ' + result.message); + OC.Notification.showTemporary('Counting the entries failed with: ' + result.message); LdapWizard.hideSpinner(spinnerID); if(!_.isUndefined(doneCallback)) { doneCallback(method); @@ -371,11 +371,17 @@ var LdapWizard = { }, countGroups: function(doneCallback) { - LdapWizard._countThings('countGroups', '#ldap_group_count', doneCallback); + var groupFilter = $('#ldap_group_filter').val(); + if(!_.isEmpty(groupFilter)) { + LdapWizard._countThings('countGroups', '#ldap_group_count', doneCallback); + } }, countUsers: function(doneCallback) { - LdapWizard._countThings('countUsers', '#ldap_user_count', doneCallback); + var userFilter = $('#ldap_userlist_filter').val(); + if(!_.isEmpty(userFilter)) { + LdapWizard._countThings('countUsers', '#ldap_user_count', doneCallback); + } }, /** diff --git a/apps/user_ldap/l10n/af.php b/apps/user_ldap/l10n/af.php deleted file mode 100644 index 3a1e002311c..00000000000 --- a/apps/user_ldap/l10n/af.php +++ /dev/null @@ -1,6 +0,0 @@ -<?php -$TRANSLATIONS = array( -"_%s group found_::_%s groups found_" => array("",""), -"_%s user found_::_%s users found_" => array("","") -); -$PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/user_ldap/l10n/ast.js b/apps/user_ldap/l10n/ast.js index 13fe91c4e32..df63f758307 100644 --- a/apps/user_ldap/l10n/ast.js +++ b/apps/user_ldap/l10n/ast.js @@ -33,6 +33,7 @@ OC.L10N.register( "Confirm Deletion" : "Confirmar desaniciu", "_%s group found_::_%s groups found_" : ["%s grupu alcontráu","%s grupos alcontraos"], "_%s user found_::_%s users found_" : ["%s usuariu alcontráu","%s usuarios alcontraos"], + "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nun deteutamos el nome d'atributu na pantalla d'usuariu. Por favor especifícalu nos axustes avanzaos de ldap", "Could not find the desired feature" : "Nun pudo alcontrase la carauterística deseyada", "Invalid Host" : "Host inválidu", "Server" : "Sirvidor", @@ -76,6 +77,7 @@ OC.L10N.register( "Saving" : "Guardando", "Back" : "Atrás", "Continue" : "Continuar", + "LDAP" : "LDAP", "Expert" : "Espertu", "Advanced" : "Avanzáu", "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Avisu:</b> Les apps user_ldap y user_webdavauth son incompatibles. Pues esperimentar un comportamientu inesperáu. Entruga al to alministrador de sistemes pa desactivar una d'elles.", @@ -125,7 +127,7 @@ OC.L10N.register( "UUID Attribute for Users:" : "Atributu UUID pa usuarios:", "UUID Attribute for Groups:" : "Atributu UUID pa Grupos:", "Username-LDAP User Mapping" : "Asignación del Nome d'usuariu LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuarios úsense p'almacenar y asignar (meta) datos. Col envís d'identificar de forma precisa y reconocer usuarios, cada usuariu de LDAP va tener un nome d'usuariu internu. Esto requier un mapéu ente'l nome d'usuariu y l'usuariu del LDAP. El nome d'usuariu creáu mapéase respeutu al UUID del usuariu nel LDAP. De forma adicional, el DN cachéase p'amenorgar la interaición ente'l LDAP, pero nun s'usa pa identificar. Si'l DN camuda, los cambeos van aplicase. El nome d'usuariu internu úsase penriba de too. Llimpiar los mapeos va dexar restos per toos llaos, nun ye sensible a configuración, ¡afeuta a toles configuraciones del LDAP! Enxamás llimpies los mapeos nun entornu de producción, namái nuna fase de desendolcu o esperimental.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los nomes d'usuariu usense p'atroxar (meta) datos. En cuenta d'identificar y reconocer usuarios, cada usuariu de LDAP tendrá'l so nome d'usuariu internu polo que rique un mapéu dende'l so nome d'usuariu al usuariu de LDAP. El nome d'usuariu creáu mapeáse al UUID del usuariu de LDAP. Amás cacheamos tamién la DN p'amenorgar la intecractividá de LDAP, pero ensin usala pa la identificación. Si la DN camuda, atoparanse los cambios. L'usu internu del nome d'usuariu ye perdayures. ", "Clear Username-LDAP User Mapping" : "Llimpiar l'asignación de los Nomes d'usuariu de los usuarios LDAP", "Clear Groupname-LDAP Group Mapping" : "Llimpiar l'asignación de los Nomes de grupu de los grupos de LDAP" }, diff --git a/apps/user_ldap/l10n/ast.json b/apps/user_ldap/l10n/ast.json index a2f09ec00ba..23c9bcebe8b 100644 --- a/apps/user_ldap/l10n/ast.json +++ b/apps/user_ldap/l10n/ast.json @@ -31,6 +31,7 @@ "Confirm Deletion" : "Confirmar desaniciu", "_%s group found_::_%s groups found_" : ["%s grupu alcontráu","%s grupos alcontraos"], "_%s user found_::_%s users found_" : ["%s usuariu alcontráu","%s usuarios alcontraos"], + "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nun deteutamos el nome d'atributu na pantalla d'usuariu. Por favor especifícalu nos axustes avanzaos de ldap", "Could not find the desired feature" : "Nun pudo alcontrase la carauterística deseyada", "Invalid Host" : "Host inválidu", "Server" : "Sirvidor", @@ -74,6 +75,7 @@ "Saving" : "Guardando", "Back" : "Atrás", "Continue" : "Continuar", + "LDAP" : "LDAP", "Expert" : "Espertu", "Advanced" : "Avanzáu", "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Avisu:</b> Les apps user_ldap y user_webdavauth son incompatibles. Pues esperimentar un comportamientu inesperáu. Entruga al to alministrador de sistemes pa desactivar una d'elles.", @@ -123,7 +125,7 @@ "UUID Attribute for Users:" : "Atributu UUID pa usuarios:", "UUID Attribute for Groups:" : "Atributu UUID pa Grupos:", "Username-LDAP User Mapping" : "Asignación del Nome d'usuariu LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuarios úsense p'almacenar y asignar (meta) datos. Col envís d'identificar de forma precisa y reconocer usuarios, cada usuariu de LDAP va tener un nome d'usuariu internu. Esto requier un mapéu ente'l nome d'usuariu y l'usuariu del LDAP. El nome d'usuariu creáu mapéase respeutu al UUID del usuariu nel LDAP. De forma adicional, el DN cachéase p'amenorgar la interaición ente'l LDAP, pero nun s'usa pa identificar. Si'l DN camuda, los cambeos van aplicase. El nome d'usuariu internu úsase penriba de too. Llimpiar los mapeos va dexar restos per toos llaos, nun ye sensible a configuración, ¡afeuta a toles configuraciones del LDAP! Enxamás llimpies los mapeos nun entornu de producción, namái nuna fase de desendolcu o esperimental.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los nomes d'usuariu usense p'atroxar (meta) datos. En cuenta d'identificar y reconocer usuarios, cada usuariu de LDAP tendrá'l so nome d'usuariu internu polo que rique un mapéu dende'l so nome d'usuariu al usuariu de LDAP. El nome d'usuariu creáu mapeáse al UUID del usuariu de LDAP. Amás cacheamos tamién la DN p'amenorgar la intecractividá de LDAP, pero ensin usala pa la identificación. Si la DN camuda, atoparanse los cambios. L'usu internu del nome d'usuariu ye perdayures. ", "Clear Username-LDAP User Mapping" : "Llimpiar l'asignación de los Nomes d'usuariu de los usuarios LDAP", "Clear Groupname-LDAP Group Mapping" : "Llimpiar l'asignación de los Nomes de grupu de los grupos de LDAP" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/az.js b/apps/user_ldap/l10n/az.js index a170e6ecd2b..a4a190de240 100644 --- a/apps/user_ldap/l10n/az.js +++ b/apps/user_ldap/l10n/az.js @@ -7,16 +7,45 @@ OC.L10N.register( "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Configurasiya doğrudur yalnız, birləşmədə səhv oldu. Xahiş olunur server quraşdırmalarını və daxil etdiyiniz verilənlərin düzgünlüyünü yoxlayasınız.", "The configuration is invalid. Please have a look at the logs for further details." : "Configurasiya dügün deyil. Əlavə detallar üçün xahiş edirik jurnal faylına baxasınız.", "No action specified" : "Heç bir iş təyin edilməyib", + "No configuration specified" : "Təyin edilmiş konfiqurasiya yoxdur", + "No data specified" : "Təyin edilmiş data yoxdur", " Could not set configuration %s" : "%s configi təyin etmək mümkün olmadı", "Deletion failed" : "Silinmədə səhv baş verdi", + "Take over settings from recent server configuration?" : "Biraz onceki konfiqlərən server konfiqini alaq?", "Keep settings?" : "Ayarlar qalsın?", + "{nthServer}. Server" : "{nthServer}. Server", "Cannot add server configuration" : "Server quraşdırmalarını əlavə etmək mümkün olmadı", + "mappings cleared" : "xəritələnmələr təmizləndi", + "Success" : "Uğur", "Error" : "Səhv", - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""], + "Please specify a Base DN" : "Xahiş olunur Base DN təyin edəsiniz", + "Could not determine Base DN" : "Base DN-i təyin etmək olmur", + "Please specify the port" : "Xahiş olunur portu təyin edəsiniz", + "Configuration OK" : "Konfiqurasiya OK-dir", + "Configuration incorrect" : "Konfiqurasiya düzgün deyil", + "Configuration incomplete" : "Konfiqruasiya bitmiş deyil", + "Select groups" : "Qrupları seç", + "Select object classes" : "object class-larını seç", + "Select attributes" : "Atributları seç", + "Connection test succeeded" : "Qoşulma testi uğurlu oldu", + "Connection test failed" : "Qoşulma testi uğursuz oldu", + "Do you really want to delete the current Server Configuration?" : "Siz hal-hazırki server konfiqini silmək istədiyinizdən həqiqətən əminsinizmi?", + "Confirm Deletion" : "Silinmənin təsdiqi", + "_%s group found_::_%s groups found_" : ["%s qruplar tapıldı","%s qruplar tapıldı"], + "_%s user found_::_%s users found_" : ["%s istifadəçilər tapıldı","%s istifadəçilər tapıldı"], + "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "İstifadəçinin ekran atributu adını təyin etmək mümkün deyil. Xahiş olunur sizin özünüz onu əllə ldap konfiqində təyin edəsiniz.", + "Could not find the desired feature" : "Arzulanılan imkanı tapmaq mümkün deyil", + "Invalid Host" : "Yalnış Host", + "Server" : "Server", + "User Filter" : "İstifadəçi süzgəci", + "Login Filter" : "Giriş süzgəci", + "Group Filter" : "Qrup süzgəci", "Save" : "Saxlamaq", + "Test Configuration" : "Konfiqurasiya testi", "Help" : "Kömək", "Host" : "Şəbəkədə ünvan", - "Password" : "Şifrə" + "Port" : "Port", + "Password" : "Şifrə", + "Advanced" : "İrəliləmiş" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/az.json b/apps/user_ldap/l10n/az.json index 0bec40e6d28..0e2afa6765d 100644 --- a/apps/user_ldap/l10n/az.json +++ b/apps/user_ldap/l10n/az.json @@ -5,16 +5,45 @@ "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Configurasiya doğrudur yalnız, birləşmədə səhv oldu. Xahiş olunur server quraşdırmalarını və daxil etdiyiniz verilənlərin düzgünlüyünü yoxlayasınız.", "The configuration is invalid. Please have a look at the logs for further details." : "Configurasiya dügün deyil. Əlavə detallar üçün xahiş edirik jurnal faylına baxasınız.", "No action specified" : "Heç bir iş təyin edilməyib", + "No configuration specified" : "Təyin edilmiş konfiqurasiya yoxdur", + "No data specified" : "Təyin edilmiş data yoxdur", " Could not set configuration %s" : "%s configi təyin etmək mümkün olmadı", "Deletion failed" : "Silinmədə səhv baş verdi", + "Take over settings from recent server configuration?" : "Biraz onceki konfiqlərən server konfiqini alaq?", "Keep settings?" : "Ayarlar qalsın?", + "{nthServer}. Server" : "{nthServer}. Server", "Cannot add server configuration" : "Server quraşdırmalarını əlavə etmək mümkün olmadı", + "mappings cleared" : "xəritələnmələr təmizləndi", + "Success" : "Uğur", "Error" : "Səhv", - "_%s group found_::_%s groups found_" : ["",""], - "_%s user found_::_%s users found_" : ["",""], + "Please specify a Base DN" : "Xahiş olunur Base DN təyin edəsiniz", + "Could not determine Base DN" : "Base DN-i təyin etmək olmur", + "Please specify the port" : "Xahiş olunur portu təyin edəsiniz", + "Configuration OK" : "Konfiqurasiya OK-dir", + "Configuration incorrect" : "Konfiqurasiya düzgün deyil", + "Configuration incomplete" : "Konfiqruasiya bitmiş deyil", + "Select groups" : "Qrupları seç", + "Select object classes" : "object class-larını seç", + "Select attributes" : "Atributları seç", + "Connection test succeeded" : "Qoşulma testi uğurlu oldu", + "Connection test failed" : "Qoşulma testi uğursuz oldu", + "Do you really want to delete the current Server Configuration?" : "Siz hal-hazırki server konfiqini silmək istədiyinizdən həqiqətən əminsinizmi?", + "Confirm Deletion" : "Silinmənin təsdiqi", + "_%s group found_::_%s groups found_" : ["%s qruplar tapıldı","%s qruplar tapıldı"], + "_%s user found_::_%s users found_" : ["%s istifadəçilər tapıldı","%s istifadəçilər tapıldı"], + "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "İstifadəçinin ekran atributu adını təyin etmək mümkün deyil. Xahiş olunur sizin özünüz onu əllə ldap konfiqində təyin edəsiniz.", + "Could not find the desired feature" : "Arzulanılan imkanı tapmaq mümkün deyil", + "Invalid Host" : "Yalnış Host", + "Server" : "Server", + "User Filter" : "İstifadəçi süzgəci", + "Login Filter" : "Giriş süzgəci", + "Group Filter" : "Qrup süzgəci", "Save" : "Saxlamaq", + "Test Configuration" : "Konfiqurasiya testi", "Help" : "Kömək", "Host" : "Şəbəkədə ünvan", - "Password" : "Şifrə" + "Port" : "Port", + "Password" : "Şifrə", + "Advanced" : "İrəliləmiş" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/bg_BG.js b/apps/user_ldap/l10n/bg_BG.js index 91e48905138..32752119b90 100644 --- a/apps/user_ldap/l10n/bg_BG.js +++ b/apps/user_ldap/l10n/bg_BG.js @@ -126,7 +126,6 @@ OC.L10N.register( "UUID Attribute for Users:" : "UUID Атрибут за Потребителите:", "UUID Attribute for Groups:" : "UUID Атрибут за Групите:", "Username-LDAP User Mapping" : "Username-LDAP User Mapping", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Потребителските имена се използват, за да се запази и зададат (мета)данни. За да може да се идентифицира и разпознае потребител, всеки LDAP потребител ще има вътрешно потребителско име. Налага се map-ване от вътрешен потребител към LDAP потребител. Създаденото потребителско име се map-ва към UUID-то на LDAP потребител. В допълнение DN се кешира, за да се намали LDAP комункацията, но не се използва за идентифициране. Ако DN се промени, промяната ще бъде открита. Вътрешното име се използва навсякъде. Изтриването на map-ванията ще се отрази на всички LDAP конфигурации! Никога не изчиствай map-ванията на производствена инсталация, а само докато тестваш и експериментираш.", "Clear Username-LDAP User Mapping" : "Изчисти Username-LDAP User Mapping", "Clear Groupname-LDAP Group Mapping" : "Изчисти Groupname-LDAP Group Mapping" }, diff --git a/apps/user_ldap/l10n/bg_BG.json b/apps/user_ldap/l10n/bg_BG.json index 19ee8da4b33..9db25e037a1 100644 --- a/apps/user_ldap/l10n/bg_BG.json +++ b/apps/user_ldap/l10n/bg_BG.json @@ -124,7 +124,6 @@ "UUID Attribute for Users:" : "UUID Атрибут за Потребителите:", "UUID Attribute for Groups:" : "UUID Атрибут за Групите:", "Username-LDAP User Mapping" : "Username-LDAP User Mapping", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Потребителските имена се използват, за да се запази и зададат (мета)данни. За да може да се идентифицира и разпознае потребител, всеки LDAP потребител ще има вътрешно потребителско име. Налага се map-ване от вътрешен потребител към LDAP потребител. Създаденото потребителско име се map-ва към UUID-то на LDAP потребител. В допълнение DN се кешира, за да се намали LDAP комункацията, но не се използва за идентифициране. Ако DN се промени, промяната ще бъде открита. Вътрешното име се използва навсякъде. Изтриването на map-ванията ще се отрази на всички LDAP конфигурации! Никога не изчиствай map-ванията на производствена инсталация, а само докато тестваш и експериментираш.", "Clear Username-LDAP User Mapping" : "Изчисти Username-LDAP User Mapping", "Clear Groupname-LDAP Group Mapping" : "Изчисти Groupname-LDAP Group Mapping" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/ca.js b/apps/user_ldap/l10n/ca.js index 8250261e9dc..0a99e88517d 100644 --- a/apps/user_ldap/l10n/ca.js +++ b/apps/user_ldap/l10n/ca.js @@ -121,7 +121,6 @@ OC.L10N.register( "UUID Attribute for Users:" : "Atribut UUID per Usuaris:", "UUID Attribute for Groups:" : "Atribut UUID per Grups:", "Username-LDAP User Mapping" : "Mapatge d'usuari Nom d'usuari-LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Els noms d'usuari s'usen per desar i assignar (meta)dades. Per tal d'identificar amb precisió i reconèixer els usuaris, cada usuari LDAP tindrà un nom d'usuari intern. Això requereix mapatge del nom d'usuari a l'usuari LDAP. El nom d'usuari creat es mapa a la UUID de l'usuari LDAP. A més, la DN es posa a la memòria cau per reduir la interacció LDAP, però no s'usa per identificació. En cas que la DN canvïi, els canvis es trobaran. El nom d'usuari intern s'usa a tot arreu. Si esborreu els mapatges quedaran sobrants a tot arreu. Esborrar els mapatges no és sensible a la configuració, afecta a totes les configuracions LDAP! No esborreu mai els mapatges en un entorn de producció, només en un estadi de prova o experimental.", "Clear Username-LDAP User Mapping" : "Elimina el mapatge d'usuari Nom d'usuari-LDAP", "Clear Groupname-LDAP Group Mapping" : "Elimina el mapatge de grup Nom de grup-LDAP" }, diff --git a/apps/user_ldap/l10n/ca.json b/apps/user_ldap/l10n/ca.json index ebf387726e6..e34ab1e1256 100644 --- a/apps/user_ldap/l10n/ca.json +++ b/apps/user_ldap/l10n/ca.json @@ -119,7 +119,6 @@ "UUID Attribute for Users:" : "Atribut UUID per Usuaris:", "UUID Attribute for Groups:" : "Atribut UUID per Grups:", "Username-LDAP User Mapping" : "Mapatge d'usuari Nom d'usuari-LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Els noms d'usuari s'usen per desar i assignar (meta)dades. Per tal d'identificar amb precisió i reconèixer els usuaris, cada usuari LDAP tindrà un nom d'usuari intern. Això requereix mapatge del nom d'usuari a l'usuari LDAP. El nom d'usuari creat es mapa a la UUID de l'usuari LDAP. A més, la DN es posa a la memòria cau per reduir la interacció LDAP, però no s'usa per identificació. En cas que la DN canvïi, els canvis es trobaran. El nom d'usuari intern s'usa a tot arreu. Si esborreu els mapatges quedaran sobrants a tot arreu. Esborrar els mapatges no és sensible a la configuració, afecta a totes les configuracions LDAP! No esborreu mai els mapatges en un entorn de producció, només en un estadi de prova o experimental.", "Clear Username-LDAP User Mapping" : "Elimina el mapatge d'usuari Nom d'usuari-LDAP", "Clear Groupname-LDAP Group Mapping" : "Elimina el mapatge de grup Nom de grup-LDAP" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/cs_CZ.js b/apps/user_ldap/l10n/cs_CZ.js index 058f99d69ab..8af26f62def 100644 --- a/apps/user_ldap/l10n/cs_CZ.js +++ b/apps/user_ldap/l10n/cs_CZ.js @@ -127,7 +127,7 @@ OC.L10N.register( "UUID Attribute for Users:" : "UUID atribut pro uživatele:", "UUID Attribute for Groups:" : "UUID atribut pro skupiny:", "Username-LDAP User Mapping" : "Mapování uživatelských jmen z LDAPu", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Uživatelská jména jsou používány pro uchovávání a přiřazování (meta)dat. Pro správnou identifikaci a rozpoznání uživatelů bude mít každý uživatel z LDAP interní uživatelské jméno. To vyžaduje mapování uživatelských jmen na uživatele LDAP. Vytvořené uživatelské jméno je mapováno na UUID uživatele v LDAP. Navíc je cachována DN pro zmenšení interakce s LDAP, ale není používána pro identifikaci. Pokud se DN změní, bude to správně rozpoznáno. Interní uživatelské jméno se používá celé. Vyčištění mapování zanechá zbytky všude. Vyčištění navíc není specifické konfiguraci, bude mít vliv na všechny LDAP konfigurace! Nikdy nečistěte mapování v produkčním prostředí, jen v testovací nebo experimentální fázi.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Uživatelská jména jsou používána pro uchovávání a přiřazování (meta)dat. Pro správnou identifikaci a rozpoznání uživatelů bude mít každý LDAP uživatel interní uživatelské jméno. To vyžaduje mapování uživatelských jmen na uživatele LDAP. Vytvořené uživatelské jméno je mapováno na UUID uživatele v LDAP. DN informace je navíc udržována v paměti pro snížení interakce s LDAP, ale není používána pro identifikaci. Pokud se DN změní, bude to správně rozpoznáno. Interní uživatelské jméno se používá celé. Vyčištění mapování zanechá zbytky všude. Vyčištění navíc není specifické pro každou konfiguraci, bude mít vliv na všechny LDAP konfigurace! Nikdy nečistěte mapování v produkčním prostředí, ale pouze v testovací nebo experimentální fázi.", "Clear Username-LDAP User Mapping" : "Zrušit mapování uživatelských jmen LDAPu", "Clear Groupname-LDAP Group Mapping" : "Zrušit mapování názvů skupin LDAPu" }, diff --git a/apps/user_ldap/l10n/cs_CZ.json b/apps/user_ldap/l10n/cs_CZ.json index 640d1cf44c4..2831a5689d6 100644 --- a/apps/user_ldap/l10n/cs_CZ.json +++ b/apps/user_ldap/l10n/cs_CZ.json @@ -125,7 +125,7 @@ "UUID Attribute for Users:" : "UUID atribut pro uživatele:", "UUID Attribute for Groups:" : "UUID atribut pro skupiny:", "Username-LDAP User Mapping" : "Mapování uživatelských jmen z LDAPu", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Uživatelská jména jsou používány pro uchovávání a přiřazování (meta)dat. Pro správnou identifikaci a rozpoznání uživatelů bude mít každý uživatel z LDAP interní uživatelské jméno. To vyžaduje mapování uživatelských jmen na uživatele LDAP. Vytvořené uživatelské jméno je mapováno na UUID uživatele v LDAP. Navíc je cachována DN pro zmenšení interakce s LDAP, ale není používána pro identifikaci. Pokud se DN změní, bude to správně rozpoznáno. Interní uživatelské jméno se používá celé. Vyčištění mapování zanechá zbytky všude. Vyčištění navíc není specifické konfiguraci, bude mít vliv na všechny LDAP konfigurace! Nikdy nečistěte mapování v produkčním prostředí, jen v testovací nebo experimentální fázi.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Uživatelská jména jsou používána pro uchovávání a přiřazování (meta)dat. Pro správnou identifikaci a rozpoznání uživatelů bude mít každý LDAP uživatel interní uživatelské jméno. To vyžaduje mapování uživatelských jmen na uživatele LDAP. Vytvořené uživatelské jméno je mapováno na UUID uživatele v LDAP. DN informace je navíc udržována v paměti pro snížení interakce s LDAP, ale není používána pro identifikaci. Pokud se DN změní, bude to správně rozpoznáno. Interní uživatelské jméno se používá celé. Vyčištění mapování zanechá zbytky všude. Vyčištění navíc není specifické pro každou konfiguraci, bude mít vliv na všechny LDAP konfigurace! Nikdy nečistěte mapování v produkčním prostředí, ale pouze v testovací nebo experimentální fázi.", "Clear Username-LDAP User Mapping" : "Zrušit mapování uživatelských jmen LDAPu", "Clear Groupname-LDAP Group Mapping" : "Zrušit mapování názvů skupin LDAPu" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" diff --git a/apps/user_ldap/l10n/da.js b/apps/user_ldap/l10n/da.js index fb6feccc4b6..7d74051a2a9 100644 --- a/apps/user_ldap/l10n/da.js +++ b/apps/user_ldap/l10n/da.js @@ -127,7 +127,7 @@ OC.L10N.register( "UUID Attribute for Users:" : "UUID-attribut for brugere:", "UUID Attribute for Groups:" : "UUID-attribut for grupper:", "Username-LDAP User Mapping" : "Kortlægning mellem brugernavn og LDAP-bruger", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Brugernavne bruges til at lagre og tildele (meta)data. For at kunne identificere og genkende brugere præcist, så vil hver LDAP-bruger have et internt brugernavn. Det oprettede brugernavn kortlægges til UUID'et for LDAP-brugeren. I tillæg mellemlagres DN'et for at mindske LDAP-interaktioner, men det benyttes ikke til identifikation. Hvis DN'et ændres, så vil ændringerne blive registreret. Det interne brugernavn anvendes overalt. Hvis kortlægningerne ryddes, så vil der være rester overalt. Rydning af kortlægningerne er ikke konfigurationssensitivt - det påvirker alle LDAP-konfigurationer! Ryd aldrig kortlægningerne i et produktionsmiljø, kun i et teststadie eller eksperimentelt stadie.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Brugernavne bruges til at lagre og tildele (meta)data. For at kunne identificere og genkende brugere præcist, så vil hver LDAP-bruger have et internt brugernavn. Det oprettede brugernavn kortlægges til UUID'et for LDAP-brugeren. I tillæg mellemlagres DN'et for at mindske LDAP-interaktioner, men det benyttes ikke til identifikation. Hvis DN'et ændres, så vil ændringerne blive registreret. Det interne brugernavn anvendes overalt. Hvis kortlægningerne ryddes, så vil der være rester overalt. Rydning af kortlægningerne er ikke konfigurationssensitivt - det påvirker alle LDAP-konfigurationer! Ryd aldrig kortlægningerne i et produktionsmiljø, kun i et teststadie eller eksperimentelt stadie.", "Clear Username-LDAP User Mapping" : "Ryd kortlægning mellem brugernavn og LDAP-bruger", "Clear Groupname-LDAP Group Mapping" : "Ryd kortlægning mellem gruppenavn og LDAP-gruppe" }, diff --git a/apps/user_ldap/l10n/da.json b/apps/user_ldap/l10n/da.json index 0332afc101d..6a9a7e64410 100644 --- a/apps/user_ldap/l10n/da.json +++ b/apps/user_ldap/l10n/da.json @@ -125,7 +125,7 @@ "UUID Attribute for Users:" : "UUID-attribut for brugere:", "UUID Attribute for Groups:" : "UUID-attribut for grupper:", "Username-LDAP User Mapping" : "Kortlægning mellem brugernavn og LDAP-bruger", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Brugernavne bruges til at lagre og tildele (meta)data. For at kunne identificere og genkende brugere præcist, så vil hver LDAP-bruger have et internt brugernavn. Det oprettede brugernavn kortlægges til UUID'et for LDAP-brugeren. I tillæg mellemlagres DN'et for at mindske LDAP-interaktioner, men det benyttes ikke til identifikation. Hvis DN'et ændres, så vil ændringerne blive registreret. Det interne brugernavn anvendes overalt. Hvis kortlægningerne ryddes, så vil der være rester overalt. Rydning af kortlægningerne er ikke konfigurationssensitivt - det påvirker alle LDAP-konfigurationer! Ryd aldrig kortlægningerne i et produktionsmiljø, kun i et teststadie eller eksperimentelt stadie.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Brugernavne bruges til at lagre og tildele (meta)data. For at kunne identificere og genkende brugere præcist, så vil hver LDAP-bruger have et internt brugernavn. Det oprettede brugernavn kortlægges til UUID'et for LDAP-brugeren. I tillæg mellemlagres DN'et for at mindske LDAP-interaktioner, men det benyttes ikke til identifikation. Hvis DN'et ændres, så vil ændringerne blive registreret. Det interne brugernavn anvendes overalt. Hvis kortlægningerne ryddes, så vil der være rester overalt. Rydning af kortlægningerne er ikke konfigurationssensitivt - det påvirker alle LDAP-konfigurationer! Ryd aldrig kortlægningerne i et produktionsmiljø, kun i et teststadie eller eksperimentelt stadie.", "Clear Username-LDAP User Mapping" : "Ryd kortlægning mellem brugernavn og LDAP-bruger", "Clear Groupname-LDAP Group Mapping" : "Ryd kortlægning mellem gruppenavn og LDAP-gruppe" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/de.js b/apps/user_ldap/l10n/de.js index ba6d9c214f3..ab9f2b65527 100644 --- a/apps/user_ldap/l10n/de.js +++ b/apps/user_ldap/l10n/de.js @@ -1,40 +1,40 @@ OC.L10N.register( "user_ldap", { - "Failed to clear the mappings." : "Löschen der Zuordnung fehlgeschlagen.", + "Failed to clear the mappings." : "Löschen der Zuordnungen fehlgeschlagen.", "Failed to delete the server configuration" : "Löschen der Serverkonfiguration fehlgeschlagen", "The configuration is valid and the connection could be established!" : "Die Konfiguration ist gültig und die Verbindung konnte hergestellt werden!", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Die Konfiguration ist gültig aber die Verbindung ist fehlgeschlagen. Bitte überprüfe die Servereinstellungen und Anmeldeinformationen.", + "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Die Konfiguration ist gültig, aber der LDAP-Bind ist fehlgeschlagen. Bitte überprüfe die Servereinstellungen und Anmeldeinformationen.", "The configuration is invalid. Please have a look at the logs for further details." : "Die Konfiguration ist ungültig. Weitere Details kannst Du in den Logdateien nachlesen.", - "No action specified" : "Keine Aktion spezifiziert", - "No configuration specified" : "Keine Konfiguration spezifiziert", - "No data specified" : "Keine Daten spezifiziert", + "No action specified" : "Keine Aktion angegeben", + "No configuration specified" : "Keine Konfiguration angegeben", + "No data specified" : "Keine Daten angegeben", " Could not set configuration %s" : "Die Konfiguration %s konnte nicht gesetzt werden", "Deletion failed" : "Löschen fehlgeschlagen", "Take over settings from recent server configuration?" : "Einstellungen von letzter Konfiguration übernehmen?", "Keep settings?" : "Einstellungen beibehalten?", "{nthServer}. Server" : "{nthServer}. - Server", - "Cannot add server configuration" : "Das Hinzufügen der Serverkonfiguration schlug fehl", + "Cannot add server configuration" : "Die Serverkonfiguration kann nicht hinzugefügt werden", "mappings cleared" : "Zuordnungen gelöscht", "Success" : "Erfolgreich", "Error" : "Fehler", - "Please specify a Base DN" : "Bitte ein Base-DN spezifizieren", - "Could not determine Base DN" : "Base-DN konnte nicht festgestellt werden", - "Please specify the port" : "Bitte Port spezifizieren", + "Please specify a Base DN" : "Bitte einen Basis-DN angeben", + "Could not determine Base DN" : "Basis-DN konnte nicht ermittelt werden", + "Please specify the port" : "Bitte Port angeben", "Configuration OK" : "Konfiguration OK", "Configuration incorrect" : "Konfiguration nicht korrekt", "Configuration incomplete" : "Konfiguration nicht vollständig", - "Select groups" : "Wähle Gruppen aus", - "Select object classes" : "Objekt-Klassen auswählen", + "Select groups" : "Gruppen auswählen", + "Select object classes" : "Objektklassen auswählen", "Select attributes" : "Attribute auswählen", "Connection test succeeded" : "Verbindungstest erfolgreich", "Connection test failed" : "Verbindungstest fehlgeschlagen", - "Do you really want to delete the current Server Configuration?" : "Möchtest Du die aktuelle Serverkonfiguration wirklich löschen?", - "Confirm Deletion" : "Löschung bestätigen", + "Do you really want to delete the current Server Configuration?" : "Soll die aktuelle Serverkonfiguration wirklich gelöscht werden?", + "Confirm Deletion" : "Löschen bestätigen", "_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"], "_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"], - "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Benutzeranzeigename-Attribut konnte nicht gefunden werden. Bitte gib es selber in den erweiterten LDAP-Einstellungen an.", - "Could not find the desired feature" : "Konnte die gewünschte Funktion nicht finden", + "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Anzeigename-Attribut des Benutzers konnte nicht gefunden werden. Bitte gib es in den erweiterten LDAP-Einstellungen selber an.", + "Could not find the desired feature" : "Die gewünschte Funktion konnte nicht gefunden werden", "Invalid Host" : "Ungültiger Host", "Server" : "Server", "User Filter" : "Nutzer-Filter", @@ -43,17 +43,17 @@ OC.L10N.register( "Save" : "Speichern", "Test Configuration" : "Testkonfiguration", "Help" : "Hilfe", - "Groups meeting these criteria are available in %s:" : "Gruppen-Versammlungen mit diesen Kriterien sind verfügbar in %s:", - "only those object classes:" : "Nur diese Objekt-Klassen:", - "only from those groups:" : "Nur von diesen Gruppen:", + "Groups meeting these criteria are available in %s:" : "Gruppen, auf die diese Kriterien zutreffen, sind verfügbar in %s:", + "only those object classes:" : "Nur diese Objektklassen:", + "only from those groups:" : "Nur aus diesen Gruppen:", "Edit raw filter instead" : "Original-Filter stattdessen bearbeiten", "Raw LDAP filter" : "Original LDAP-Filter", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Der Filter definiert welche LDAP-Gruppen Zugriff auf die %s Instanz haben sollen.", - "Test Filter" : "Test-Filter", + "The filter specifies which LDAP groups shall have access to the %s instance." : "Der Filter bestimmt, welche LDAP-Gruppen Zugriff auf die %s-Instanz haben sollen.", + "Test Filter" : "Testfilter", "groups found" : "Gruppen gefunden", - "Users login with this attribute:" : "Nutzeranmeldung mit diesem Merkmal:", + "Users login with this attribute:" : "Nutzeranmeldung mit diesem Attribut:", "LDAP Username:" : "LDAP-Benutzername:", - "LDAP Email Address:" : "LDAP E-Mail-Adresse:", + "LDAP Email Address:" : "LDAP-E-Mail-Adresse:", "Other Attributes:" : "Andere Attribute:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Bestimmt den Filter, welcher bei einer Anmeldung angewandt wird. %%uid ersetzt den Benutzernamen bei der Anmeldung. Beispiel: \"uid=%%uid\"", "1. Server" : "1. Server", @@ -64,15 +64,15 @@ OC.L10N.register( "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Du kannst das Protokoll auslassen, außer wenn Du SSL benötigst. Beginne dann mit ldaps://", "Port" : "Port", "User DN" : "Benutzer-DN", - "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Der DN des Benutzers für LDAP-Bind, z.B.: uid=agent,dc=example,dc=com. Für anonymen Zugriff lasse DN und Passwort leer.", + "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Der DN des Benutzers, mit dem der LDAP-Bind durchgeführt werden soll, z.B. uid=agent,dc=example,dc=com. Für anonymen Zugriff lasse DN und Passwort leer.", "Password" : "Passwort", "For anonymous access, leave DN and Password empty." : "Lasse die Felder DN und Passwort für anonymen Zugang leer.", - "One Base DN per line" : "Ein Basis-DN pro Zeile", - "You can specify Base DN for users and groups in the Advanced tab" : "Du kannst Basis-DN für Benutzer und Gruppen in dem \"Erweitert\"-Reiter konfigurieren", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Verhindert automatische LDAP-Anfragen. Besser für größere Installationen, benötigt aber einiges an LDAP-Wissen.", - "Manually enter LDAP filters (recommended for large directories)" : "LDAP-Filter manuell eingeben (erforderlich für große Verzeichnisse)", - "Limit %s access to users meeting these criteria:" : "Beschränken Sie den %s Zugriff auf die Benutzer-Sitzungen durch folgende Kriterien:", - "The filter specifies which LDAP users shall have access to the %s instance." : "Der Filter definiert welche LDAP-Benutzer Zugriff auf die %s Instanz haben sollen.", + "One Base DN per line" : "Einen Basis-DN pro Zeile", + "You can specify Base DN for users and groups in the Advanced tab" : "Du kannst Basis-DN für Benutzer und Gruppen im „Erweitert“-Reiter angeben", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Verhindert automatische LDAP-Anfragen. Besser geeignet für größere Installationen, benötigt aber erweiterte LDAP-Kenntnisse.", + "Manually enter LDAP filters (recommended for large directories)" : "LDAP-Filter manuell eingeben (empfohlen für große Verzeichnisse)", + "Limit %s access to users meeting these criteria:" : "Den %s-Zugriff auf Benutzer, die den folgenden Kriterien entsprechen, beschränken:", + "The filter specifies which LDAP users shall have access to the %s instance." : "Der Filter gibt an, welche LDAP-Benutzer Zugriff auf die %s-Instanz haben sollen.", "users found" : "Benutzer gefunden", "Saving" : "Speichern", "Back" : "Zurück", @@ -80,17 +80,17 @@ OC.L10N.register( "LDAP" : "LDAP", "Expert" : "Experte", "Advanced" : "Fortgeschritten", - "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Warnung:</b> Die Anwendungen user_ldap und user_webdavauth sind inkompatibel. Es kann demzufolge zu unerwarteten Verhalten kommen. Bitte\ndeinen Systemadministator eine der beiden Anwendungen zu deaktivieren.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warnung:</b> Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte Deinen Systemadministrator das Modul zu installieren.", + "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Warnung:</b> Die Anwendungen user_ldap und user_webdavauth sind inkompatibel. Es kann deshalb zu unerwartetem Systemverhalten kommen. Bitte kontaktiere Deinen Systemadministator und bitte um die Deaktivierung einer der beiden Anwendungen.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warnung:</b> Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte kontaktiere Deinen Systemadministrator und bitte um die Installation des Moduls.", "Connection Settings" : "Verbindungseinstellungen", "Configuration Active" : "Konfiguration aktiv", "When unchecked, this configuration will be skipped." : "Konfiguration wird übersprungen wenn deaktiviert", - "Backup (Replica) Host" : "Backup Host (Kopie)", + "Backup (Replica) Host" : "Backup von Host (Kopie) anlegen", "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Gib einen optionalen Backup Host an. Es muss sich um eine Kopie des Haupt LDAP/AD Servers handeln.", "Backup (Replica) Port" : "Backup Port", "Disable Main Server" : "Hauptserver deaktivieren", "Only connect to the replica server." : "Nur zum Replikat-Server verbinden.", - "Case insensitive LDAP server (Windows)" : "LDAP-Server (Windows - Groß- und Kleinschreibung bleibt unbeachtet)", + "Case insensitive LDAP server (Windows)" : "LDAP-Server ohne Unterscheidung von Groß-/Kleinschreibung (Windows)", "Turn off SSL certificate validation." : "Schalte die SSL-Zertifikatsprüfung aus.", "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Nur für Testzwecke geeignet, sollte Standardmäßig nicht verwendet werden. Falls die Verbindung nur mit dieser Option funktioniert, importiere das SSL-Zertifikat des LDAP-Servers in deinen %s Server.", "Cache Time-To-Live" : "Speichere Time-To-Live zwischen", @@ -127,7 +127,7 @@ OC.L10N.register( "UUID Attribute for Users:" : "UUID-Attribute für Benutzer:", "UUID Attribute for Groups:" : "UUID-Attribute für Gruppen:", "Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Die Benutzernamen werden genutzt, um (Meta)Daten zuzuordnen und zu speichern. Um Benutzer eindeutig und präzise zu identifizieren, hat jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung (mappen) von Benutzernamen zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzernamens zugeordnet. Zusätzlich wird der DN zwischengespeichert, um die Interaktion mit dem LDAP zu minimieren, was aber nicht der Identifikation dient. Ändert sich der DN, werden die Änderungen durch gefunden. Der interne Benutzername, wird in überall verwendet. Werden die Zuordnungen gelöscht, bleiben überall Reste zurück. Die Löschung der Zuordnungen kann nicht in der Konfiguration vorgenommen werden, beeinflusst aber die LDAP-Konfiguration! Löschen Sie niemals die Zuordnungen in einer produktiven Umgebung. Lösche die Zuordnungen nur in einer Test- oder Experimentierumgebung.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Die Benutzernamen werden genutzt, um (Meta)Daten zuzuordnen und zu speichern. Um Benutzer eindeutig und präzise zu identifizieren, hat jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung (mappen) von Benutzernamen zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzernamens zugeordnet. Zusätzlich wird der DN zwischengespeichert, um die Interaktion mit dem LDAP zu minimieren, was aber nicht der Identifikation dient. Ändert sich der DN, werden die Änderungen durch gefunden. Der interne Benutzername, wird in überall verwendet. Werden die Zuordnungen gelöscht, bleiben überall Reste zurück. Die Löschung der Zuordnungen kann nicht in der Konfiguration vorgenommen werden, beeinflusst aber die LDAP-Konfiguration! Löschen Sie niemals die Zuordnungen in einer produktiven Umgebung. Lösche die Zuordnungen nur in einer Test- oder Experimentierumgebung.", "Clear Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung löschen", "Clear Groupname-LDAP Group Mapping" : "LDAP-Gruppennamenzuordnung löschen" }, diff --git a/apps/user_ldap/l10n/de.json b/apps/user_ldap/l10n/de.json index df4af011afc..a5dc44d91b1 100644 --- a/apps/user_ldap/l10n/de.json +++ b/apps/user_ldap/l10n/de.json @@ -1,38 +1,38 @@ { "translations": { - "Failed to clear the mappings." : "Löschen der Zuordnung fehlgeschlagen.", + "Failed to clear the mappings." : "Löschen der Zuordnungen fehlgeschlagen.", "Failed to delete the server configuration" : "Löschen der Serverkonfiguration fehlgeschlagen", "The configuration is valid and the connection could be established!" : "Die Konfiguration ist gültig und die Verbindung konnte hergestellt werden!", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Die Konfiguration ist gültig aber die Verbindung ist fehlgeschlagen. Bitte überprüfe die Servereinstellungen und Anmeldeinformationen.", + "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Die Konfiguration ist gültig, aber der LDAP-Bind ist fehlgeschlagen. Bitte überprüfe die Servereinstellungen und Anmeldeinformationen.", "The configuration is invalid. Please have a look at the logs for further details." : "Die Konfiguration ist ungültig. Weitere Details kannst Du in den Logdateien nachlesen.", - "No action specified" : "Keine Aktion spezifiziert", - "No configuration specified" : "Keine Konfiguration spezifiziert", - "No data specified" : "Keine Daten spezifiziert", + "No action specified" : "Keine Aktion angegeben", + "No configuration specified" : "Keine Konfiguration angegeben", + "No data specified" : "Keine Daten angegeben", " Could not set configuration %s" : "Die Konfiguration %s konnte nicht gesetzt werden", "Deletion failed" : "Löschen fehlgeschlagen", "Take over settings from recent server configuration?" : "Einstellungen von letzter Konfiguration übernehmen?", "Keep settings?" : "Einstellungen beibehalten?", "{nthServer}. Server" : "{nthServer}. - Server", - "Cannot add server configuration" : "Das Hinzufügen der Serverkonfiguration schlug fehl", + "Cannot add server configuration" : "Die Serverkonfiguration kann nicht hinzugefügt werden", "mappings cleared" : "Zuordnungen gelöscht", "Success" : "Erfolgreich", "Error" : "Fehler", - "Please specify a Base DN" : "Bitte ein Base-DN spezifizieren", - "Could not determine Base DN" : "Base-DN konnte nicht festgestellt werden", - "Please specify the port" : "Bitte Port spezifizieren", + "Please specify a Base DN" : "Bitte einen Basis-DN angeben", + "Could not determine Base DN" : "Basis-DN konnte nicht ermittelt werden", + "Please specify the port" : "Bitte Port angeben", "Configuration OK" : "Konfiguration OK", "Configuration incorrect" : "Konfiguration nicht korrekt", "Configuration incomplete" : "Konfiguration nicht vollständig", - "Select groups" : "Wähle Gruppen aus", - "Select object classes" : "Objekt-Klassen auswählen", + "Select groups" : "Gruppen auswählen", + "Select object classes" : "Objektklassen auswählen", "Select attributes" : "Attribute auswählen", "Connection test succeeded" : "Verbindungstest erfolgreich", "Connection test failed" : "Verbindungstest fehlgeschlagen", - "Do you really want to delete the current Server Configuration?" : "Möchtest Du die aktuelle Serverkonfiguration wirklich löschen?", - "Confirm Deletion" : "Löschung bestätigen", + "Do you really want to delete the current Server Configuration?" : "Soll die aktuelle Serverkonfiguration wirklich gelöscht werden?", + "Confirm Deletion" : "Löschen bestätigen", "_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"], "_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"], - "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Benutzeranzeigename-Attribut konnte nicht gefunden werden. Bitte gib es selber in den erweiterten LDAP-Einstellungen an.", - "Could not find the desired feature" : "Konnte die gewünschte Funktion nicht finden", + "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Anzeigename-Attribut des Benutzers konnte nicht gefunden werden. Bitte gib es in den erweiterten LDAP-Einstellungen selber an.", + "Could not find the desired feature" : "Die gewünschte Funktion konnte nicht gefunden werden", "Invalid Host" : "Ungültiger Host", "Server" : "Server", "User Filter" : "Nutzer-Filter", @@ -41,17 +41,17 @@ "Save" : "Speichern", "Test Configuration" : "Testkonfiguration", "Help" : "Hilfe", - "Groups meeting these criteria are available in %s:" : "Gruppen-Versammlungen mit diesen Kriterien sind verfügbar in %s:", - "only those object classes:" : "Nur diese Objekt-Klassen:", - "only from those groups:" : "Nur von diesen Gruppen:", + "Groups meeting these criteria are available in %s:" : "Gruppen, auf die diese Kriterien zutreffen, sind verfügbar in %s:", + "only those object classes:" : "Nur diese Objektklassen:", + "only from those groups:" : "Nur aus diesen Gruppen:", "Edit raw filter instead" : "Original-Filter stattdessen bearbeiten", "Raw LDAP filter" : "Original LDAP-Filter", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Der Filter definiert welche LDAP-Gruppen Zugriff auf die %s Instanz haben sollen.", - "Test Filter" : "Test-Filter", + "The filter specifies which LDAP groups shall have access to the %s instance." : "Der Filter bestimmt, welche LDAP-Gruppen Zugriff auf die %s-Instanz haben sollen.", + "Test Filter" : "Testfilter", "groups found" : "Gruppen gefunden", - "Users login with this attribute:" : "Nutzeranmeldung mit diesem Merkmal:", + "Users login with this attribute:" : "Nutzeranmeldung mit diesem Attribut:", "LDAP Username:" : "LDAP-Benutzername:", - "LDAP Email Address:" : "LDAP E-Mail-Adresse:", + "LDAP Email Address:" : "LDAP-E-Mail-Adresse:", "Other Attributes:" : "Andere Attribute:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Bestimmt den Filter, welcher bei einer Anmeldung angewandt wird. %%uid ersetzt den Benutzernamen bei der Anmeldung. Beispiel: \"uid=%%uid\"", "1. Server" : "1. Server", @@ -62,15 +62,15 @@ "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Du kannst das Protokoll auslassen, außer wenn Du SSL benötigst. Beginne dann mit ldaps://", "Port" : "Port", "User DN" : "Benutzer-DN", - "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Der DN des Benutzers für LDAP-Bind, z.B.: uid=agent,dc=example,dc=com. Für anonymen Zugriff lasse DN und Passwort leer.", + "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Der DN des Benutzers, mit dem der LDAP-Bind durchgeführt werden soll, z.B. uid=agent,dc=example,dc=com. Für anonymen Zugriff lasse DN und Passwort leer.", "Password" : "Passwort", "For anonymous access, leave DN and Password empty." : "Lasse die Felder DN und Passwort für anonymen Zugang leer.", - "One Base DN per line" : "Ein Basis-DN pro Zeile", - "You can specify Base DN for users and groups in the Advanced tab" : "Du kannst Basis-DN für Benutzer und Gruppen in dem \"Erweitert\"-Reiter konfigurieren", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Verhindert automatische LDAP-Anfragen. Besser für größere Installationen, benötigt aber einiges an LDAP-Wissen.", - "Manually enter LDAP filters (recommended for large directories)" : "LDAP-Filter manuell eingeben (erforderlich für große Verzeichnisse)", - "Limit %s access to users meeting these criteria:" : "Beschränken Sie den %s Zugriff auf die Benutzer-Sitzungen durch folgende Kriterien:", - "The filter specifies which LDAP users shall have access to the %s instance." : "Der Filter definiert welche LDAP-Benutzer Zugriff auf die %s Instanz haben sollen.", + "One Base DN per line" : "Einen Basis-DN pro Zeile", + "You can specify Base DN for users and groups in the Advanced tab" : "Du kannst Basis-DN für Benutzer und Gruppen im „Erweitert“-Reiter angeben", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Verhindert automatische LDAP-Anfragen. Besser geeignet für größere Installationen, benötigt aber erweiterte LDAP-Kenntnisse.", + "Manually enter LDAP filters (recommended for large directories)" : "LDAP-Filter manuell eingeben (empfohlen für große Verzeichnisse)", + "Limit %s access to users meeting these criteria:" : "Den %s-Zugriff auf Benutzer, die den folgenden Kriterien entsprechen, beschränken:", + "The filter specifies which LDAP users shall have access to the %s instance." : "Der Filter gibt an, welche LDAP-Benutzer Zugriff auf die %s-Instanz haben sollen.", "users found" : "Benutzer gefunden", "Saving" : "Speichern", "Back" : "Zurück", @@ -78,17 +78,17 @@ "LDAP" : "LDAP", "Expert" : "Experte", "Advanced" : "Fortgeschritten", - "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Warnung:</b> Die Anwendungen user_ldap und user_webdavauth sind inkompatibel. Es kann demzufolge zu unerwarteten Verhalten kommen. Bitte\ndeinen Systemadministator eine der beiden Anwendungen zu deaktivieren.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warnung:</b> Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte Deinen Systemadministrator das Modul zu installieren.", + "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Warnung:</b> Die Anwendungen user_ldap und user_webdavauth sind inkompatibel. Es kann deshalb zu unerwartetem Systemverhalten kommen. Bitte kontaktiere Deinen Systemadministator und bitte um die Deaktivierung einer der beiden Anwendungen.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warnung:</b> Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte kontaktiere Deinen Systemadministrator und bitte um die Installation des Moduls.", "Connection Settings" : "Verbindungseinstellungen", "Configuration Active" : "Konfiguration aktiv", "When unchecked, this configuration will be skipped." : "Konfiguration wird übersprungen wenn deaktiviert", - "Backup (Replica) Host" : "Backup Host (Kopie)", + "Backup (Replica) Host" : "Backup von Host (Kopie) anlegen", "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Gib einen optionalen Backup Host an. Es muss sich um eine Kopie des Haupt LDAP/AD Servers handeln.", "Backup (Replica) Port" : "Backup Port", "Disable Main Server" : "Hauptserver deaktivieren", "Only connect to the replica server." : "Nur zum Replikat-Server verbinden.", - "Case insensitive LDAP server (Windows)" : "LDAP-Server (Windows - Groß- und Kleinschreibung bleibt unbeachtet)", + "Case insensitive LDAP server (Windows)" : "LDAP-Server ohne Unterscheidung von Groß-/Kleinschreibung (Windows)", "Turn off SSL certificate validation." : "Schalte die SSL-Zertifikatsprüfung aus.", "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Nur für Testzwecke geeignet, sollte Standardmäßig nicht verwendet werden. Falls die Verbindung nur mit dieser Option funktioniert, importiere das SSL-Zertifikat des LDAP-Servers in deinen %s Server.", "Cache Time-To-Live" : "Speichere Time-To-Live zwischen", @@ -125,7 +125,7 @@ "UUID Attribute for Users:" : "UUID-Attribute für Benutzer:", "UUID Attribute for Groups:" : "UUID-Attribute für Gruppen:", "Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Die Benutzernamen werden genutzt, um (Meta)Daten zuzuordnen und zu speichern. Um Benutzer eindeutig und präzise zu identifizieren, hat jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung (mappen) von Benutzernamen zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzernamens zugeordnet. Zusätzlich wird der DN zwischengespeichert, um die Interaktion mit dem LDAP zu minimieren, was aber nicht der Identifikation dient. Ändert sich der DN, werden die Änderungen durch gefunden. Der interne Benutzername, wird in überall verwendet. Werden die Zuordnungen gelöscht, bleiben überall Reste zurück. Die Löschung der Zuordnungen kann nicht in der Konfiguration vorgenommen werden, beeinflusst aber die LDAP-Konfiguration! Löschen Sie niemals die Zuordnungen in einer produktiven Umgebung. Lösche die Zuordnungen nur in einer Test- oder Experimentierumgebung.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Die Benutzernamen werden genutzt, um (Meta)Daten zuzuordnen und zu speichern. Um Benutzer eindeutig und präzise zu identifizieren, hat jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung (mappen) von Benutzernamen zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzernamens zugeordnet. Zusätzlich wird der DN zwischengespeichert, um die Interaktion mit dem LDAP zu minimieren, was aber nicht der Identifikation dient. Ändert sich der DN, werden die Änderungen durch gefunden. Der interne Benutzername, wird in überall verwendet. Werden die Zuordnungen gelöscht, bleiben überall Reste zurück. Die Löschung der Zuordnungen kann nicht in der Konfiguration vorgenommen werden, beeinflusst aber die LDAP-Konfiguration! Löschen Sie niemals die Zuordnungen in einer produktiven Umgebung. Lösche die Zuordnungen nur in einer Test- oder Experimentierumgebung.", "Clear Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung löschen", "Clear Groupname-LDAP Group Mapping" : "LDAP-Gruppennamenzuordnung löschen" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/de_DE.js b/apps/user_ldap/l10n/de_DE.js index a007f589ef6..7690d619cd0 100644 --- a/apps/user_ldap/l10n/de_DE.js +++ b/apps/user_ldap/l10n/de_DE.js @@ -1,40 +1,40 @@ OC.L10N.register( "user_ldap", { - "Failed to clear the mappings." : "Löschen der Zuordnung fehlgeschlagen.", + "Failed to clear the mappings." : "Löschen der Zuordnungen fehlgeschlagen.", "Failed to delete the server configuration" : "Löschen der Serverkonfiguration fehlgeschlagen", "The configuration is valid and the connection could be established!" : "Die Konfiguration ist gültig und die Verbindung konnte hergestellt werden!", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Die Konfiguration ist gültig aber die Verbindung ist fehlgeschlagen. Bitte überprüfen Sie die Servereinstellungen und die Anmeldeinformationen.", + "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Die Konfiguration ist gültig, aber der LDAP-Bind ist fehlgeschlagen. Bitte überprüfen Sie die Servereinstellungen und die Anmeldeinformationen.", "The configuration is invalid. Please have a look at the logs for further details." : "Die Konfiguration ist ungültig. Weitere Details können Sie in den Logdateien nachlesen.", - "No action specified" : "Keine Aktion spezifiziert", - "No configuration specified" : "Keine Konfiguration spezifiziert", - "No data specified" : "Keine Daten spezifiziert", + "No action specified" : "Keine Aktion angegeben", + "No configuration specified" : "Keine Konfiguration angegeben", + "No data specified" : "Keine Daten angegeben", " Could not set configuration %s" : "Die Konfiguration %s konnte nicht gesetzt werden", "Deletion failed" : "Löschen fehlgeschlagen", "Take over settings from recent server configuration?" : "Einstellungen von letzter Konfiguration übernehmen?", "Keep settings?" : "Einstellungen beibehalten?", "{nthServer}. Server" : "{nthServer}. - Server", - "Cannot add server configuration" : "Das Hinzufügen der Serverkonfiguration schlug fehl", + "Cannot add server configuration" : "Die Serverkonfiguration kann nicht hinzugefügt werden", "mappings cleared" : "Zuordnungen gelöscht", "Success" : "Erfolg", "Error" : "Fehler", - "Please specify a Base DN" : "Bitte ein Base-DN spezifizieren", - "Could not determine Base DN" : "Base-DN konnte nicht festgestellt werden", - "Please specify the port" : "Bitte Port spezifizieren", + "Please specify a Base DN" : "Bitte einen Basis-DN angeben", + "Could not determine Base DN" : "Basis-DN konnte nicht ermittelt werden", + "Please specify the port" : "Bitte Port angeben", "Configuration OK" : "Konfiguration OK", "Configuration incorrect" : "Konfiguration nicht korrekt", "Configuration incomplete" : "Konfiguration nicht vollständig", - "Select groups" : "Wähle Gruppen", - "Select object classes" : "Objekt-Klassen auswählen", + "Select groups" : "Gruppen auswählen", + "Select object classes" : "Objektklassen auswählen", "Select attributes" : "Attribute auswählen", "Connection test succeeded" : "Verbindungstest erfolgreich", "Connection test failed" : "Verbindungstest fehlgeschlagen", - "Do you really want to delete the current Server Configuration?" : "Möchten Sie die aktuelle Serverkonfiguration wirklich löschen?", - "Confirm Deletion" : "Löschung bestätigen", + "Do you really want to delete the current Server Configuration?" : "Soll die aktuelle Serverkonfiguration wirklich gelöscht werden?", + "Confirm Deletion" : "Löschen bestätigen", "_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"], "_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"], - "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Benutzeranzeigename-Attribut konnte nicht gefunden werden. Bitte geben Sie es selber in den erweiterten LDAP-Einstellungen an.", - "Could not find the desired feature" : "Konnte die gewünschte Funktion nicht finden", + "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Anzeigename-Attribut des Benutzers konnte nicht gefunden werden. Bitte geben Sie es in den erweiterten LDAP-Einstellungen selber an.", + "Could not find the desired feature" : "Die gewünschte Funktion konnte nicht gefunden werden", "Invalid Host" : "Ungültiger Host", "Server" : "Server", "User Filter" : "Benutzer-Filter", @@ -43,17 +43,17 @@ OC.L10N.register( "Save" : "Speichern", "Test Configuration" : "Testkonfiguration", "Help" : "Hilfe", - "Groups meeting these criteria are available in %s:" : "Gruppen-Versammlungen mit diesen Kriterien sind verfügbar in %s:", - "only those object classes:" : "Nur diese Objekt-Klassen:", - "only from those groups:" : "Nur von diesen Gruppen:", + "Groups meeting these criteria are available in %s:" : "Gruppen, auf die diese Kriterien zutreffen, sind verfügbar in %s:", + "only those object classes:" : "Nur diese Objektklassen:", + "only from those groups:" : "Nur aus diesen Gruppen:", "Edit raw filter instead" : "Original-Filter stattdessen bearbeiten", "Raw LDAP filter" : "Original LDAP-Filter", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Der Filter definiert welche LDAP-Gruppen Zugriff auf die %s Instanz haben sollen.", - "Test Filter" : "Test-Filter", + "The filter specifies which LDAP groups shall have access to the %s instance." : "Der Filter bestimmt, welche LDAP-Gruppen Zugriff auf die %s-Instanz haben sollen.", + "Test Filter" : "Testfilter", "groups found" : "Gruppen gefunden", - "Users login with this attribute:" : "Benutzeranmeldung mit diesem Merkmal:", + "Users login with this attribute:" : "Benutzeranmeldung mit diesem Attribut:", "LDAP Username:" : "LDAP-Benutzername:", - "LDAP Email Address:" : "LDAP E-Mail-Adresse:", + "LDAP Email Address:" : "LDAP-E-Mail-Adresse:", "Other Attributes:" : "Andere Attribute:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Bestimmt den Filter, welcher bei einer Anmeldung angewandt wird. %%uid ersetzt den Benutzernamen bei der Anmeldung. Beispiel: \"uid=%%uid\"", "1. Server" : "1. Server", @@ -64,15 +64,15 @@ OC.L10N.register( "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Sie können das Protokoll auslassen, außer wenn Sie SSL benötigen. Beginnen Sie dann mit ldaps://", "Port" : "Port", "User DN" : "Benutzer-DN", - "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Der DN des Benutzers für LDAP-Bind, z.B.: uid=agent,dc=example,dc=com. Für einen anonymen Zugriff lassen Sie DN und Passwort leer.", + "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Der DN des Benutzers, mit dem der LDAP-Bind durchgeführt werden soll, z.B. uid=agent,dc=example,dc=com. Für einen anonymen Zugriff lassen Sie DN und Passwort leer.", "Password" : "Passwort", "For anonymous access, leave DN and Password empty." : "Lassen Sie die Felder DN und Passwort für einen anonymen Zugang leer.", - "One Base DN per line" : "Ein Basis-DN pro Zeile", - "You can specify Base DN for users and groups in the Advanced tab" : "Sie können Basis-DN für Benutzer und Gruppen in dem \"Erweitert\"-Reiter konfigurieren", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Verhindert automatische LDAP-Anfragen. Besser für größere Installationen, benötigt aber einiges an LDAP-Wissen.", - "Manually enter LDAP filters (recommended for large directories)" : "LDAP-Filter manuell eingeben (erforderlich für große Verzeichnisse)", - "Limit %s access to users meeting these criteria:" : "Beschränken Sie den %s Zugriff auf die Benutzer-Sitzungen durch folgende Kriterien:", - "The filter specifies which LDAP users shall have access to the %s instance." : "Der Filter definiert welche LDAP-Benutzer Zugriff auf die %s Instanz haben sollen.", + "One Base DN per line" : "Einen Basis-DN pro Zeile", + "You can specify Base DN for users and groups in the Advanced tab" : "Sie können Basis-DN für Benutzer und Gruppen im „Erweitert“-Reiter angeben", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Verhindert automatische LDAP-Anfragen. Besser geeignet für größere Installationen, benötigt aber erweiterte LDAP-Kenntnisse.", + "Manually enter LDAP filters (recommended for large directories)" : "LDAP-Filter manuell eingeben (empfohlen für große Verzeichnisse)", + "Limit %s access to users meeting these criteria:" : "Den %s-Zugriff auf Benutzer, die den folgenden Kriterien entsprechen, beschränken:", + "The filter specifies which LDAP users shall have access to the %s instance." : "Der Filter gibt an, welche LDAP-Benutzer Zugriff auf die %s-Instanz haben sollen.", "users found" : "Benutzer gefunden", "Saving" : "Speichern", "Back" : "Zurück", @@ -80,17 +80,17 @@ OC.L10N.register( "LDAP" : "LDAP", "Expert" : "Experte", "Advanced" : "Fortgeschritten", - "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Warnung:</b> Die Anwendungen user_ldap und user_webdavauth sind inkompatibel. Es kann demzufolge zu unerwarteten Verhalten kommen. Bitten Sie Ihren Systemadministator eine der beiden Anwendungen zu deaktivieren.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warnung:</b> Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitten Sie Ihren Systemadministrator das Modul zu installieren.", + "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Warnung:</b> Die Anwendungen user_ldap und user_webdavauth sind inkompatibel. Es kann deshalb zu unerwartetem Systemverhalten kommen. Bitten kontaktieren Sie Ihren Systemadministator und bitten Sie um die Deaktivierung einer der beiden Anwendungen.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warnung:</b> Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte kontaktieren Sie Ihren Systemadministrator und bitten Sie um die Installation des Moduls.", "Connection Settings" : "Verbindungseinstellungen", "Configuration Active" : "Konfiguration aktiv", "When unchecked, this configuration will be skipped." : "Wenn nicht angehakt, wird diese Konfiguration übersprungen.", - "Backup (Replica) Host" : "Backup Host (Kopie)", + "Backup (Replica) Host" : "Backup von Host (Kopie) anlegen", "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Geben Sie einen optionalen Backup Host an. Es muss sich um eine Kopie des Haupt LDAP/AD Servers handeln.", "Backup (Replica) Port" : "Backup Port", "Disable Main Server" : "Hauptserver deaktivieren", "Only connect to the replica server." : "Nur zum Replikat-Server verbinden.", - "Case insensitive LDAP server (Windows)" : "LDAP-Server (Windows: Groß- und Kleinschreibung bleibt unbeachtet)", + "Case insensitive LDAP server (Windows)" : "LDAP-Server ohne Unterscheidung von Groß-/Kleinschreibung (Windows)", "Turn off SSL certificate validation." : "Schalten Sie die SSL-Zertifikatsprüfung aus.", "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Nur für Testzwecke geeignet, sollte Standardmäßig nicht verwendet werden. Falls die Verbindung nur mit dieser Option funktioniert, importieren Sie das SSL-Zertifikat des LDAP-Servers in Ihren %s Server.", "Cache Time-To-Live" : "Speichere Time-To-Live zwischen", @@ -127,7 +127,7 @@ OC.L10N.register( "UUID Attribute for Users:" : "UUID-Attribute für Benutzer:", "UUID Attribute for Groups:" : "UUID-Attribute für Gruppen:", "Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Die Benutzernamen werden genutzt, um (Meta)Daten zuzuordnen und zu speichern. Um Benutzer eindeutig und präzise zu identifizieren, hat jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung (mappen) von Benutzernamen zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzernamens zugeordnet. Zusätzlich wird der DN zwischengespeichert, um die Interaktion mit dem LDAP zu minimieren, was aber nicht der Identifikation dient. Ändert sich der DN, werden die Änderungen durch gefunden. Der interne Benutzername, wird in überall verwendet. Werden die Zuordnungen gelöscht, bleiben überall Reste zurück. Die Löschung der Zuordnungen kann nicht in der Konfiguration vorgenommen werden, beeinflusst aber die LDAP-Konfiguration! Löschen Sie niemals die Zuordnungen in einer produktiven Umgebung. Löschen Sie die Zuordnungen nur in einer Test- oder Experimentierumgebung.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Benutzernamen dienen zum Speichern und Zuweisen von (Meta-)Daten. Um Benutzer eindeutig zu identifizieren und zu erkennen, besitzt jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung des jeweiligen Benutzernamens zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzers zugeordnet. Darüber hinaus wird der DN auch zwischengespeichert, um die Interaktion über LDAP zu reduzieren, was aber nicht zur Identifikation dient. Ändert sich der DN, werden die Änderungen gefunden. Der interne Benutzername wird durchgängig verwendet. Ein Löschen der Zuordnungen führt zum systemweiten Verbleib von Restdaten. Es bleibt nicht auf eine einzelne Konfiguration beschränkt, sondern wirkt sich auf alle LDAP-Konfigurationen aus! Löschen Sie die Zuordnungen nie innerhalb einer Produktivumgebung, sondern nur in einer Test- oder Experimentierumgebung.", "Clear Username-LDAP User Mapping" : "Lösche LDAP-Benutzernamenzuordnung", "Clear Groupname-LDAP Group Mapping" : "Lösche LDAP-Gruppennamenzuordnung" }, diff --git a/apps/user_ldap/l10n/de_DE.json b/apps/user_ldap/l10n/de_DE.json index 5fdb285a863..bdd5393bded 100644 --- a/apps/user_ldap/l10n/de_DE.json +++ b/apps/user_ldap/l10n/de_DE.json @@ -1,38 +1,38 @@ { "translations": { - "Failed to clear the mappings." : "Löschen der Zuordnung fehlgeschlagen.", + "Failed to clear the mappings." : "Löschen der Zuordnungen fehlgeschlagen.", "Failed to delete the server configuration" : "Löschen der Serverkonfiguration fehlgeschlagen", "The configuration is valid and the connection could be established!" : "Die Konfiguration ist gültig und die Verbindung konnte hergestellt werden!", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Die Konfiguration ist gültig aber die Verbindung ist fehlgeschlagen. Bitte überprüfen Sie die Servereinstellungen und die Anmeldeinformationen.", + "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Die Konfiguration ist gültig, aber der LDAP-Bind ist fehlgeschlagen. Bitte überprüfen Sie die Servereinstellungen und die Anmeldeinformationen.", "The configuration is invalid. Please have a look at the logs for further details." : "Die Konfiguration ist ungültig. Weitere Details können Sie in den Logdateien nachlesen.", - "No action specified" : "Keine Aktion spezifiziert", - "No configuration specified" : "Keine Konfiguration spezifiziert", - "No data specified" : "Keine Daten spezifiziert", + "No action specified" : "Keine Aktion angegeben", + "No configuration specified" : "Keine Konfiguration angegeben", + "No data specified" : "Keine Daten angegeben", " Could not set configuration %s" : "Die Konfiguration %s konnte nicht gesetzt werden", "Deletion failed" : "Löschen fehlgeschlagen", "Take over settings from recent server configuration?" : "Einstellungen von letzter Konfiguration übernehmen?", "Keep settings?" : "Einstellungen beibehalten?", "{nthServer}. Server" : "{nthServer}. - Server", - "Cannot add server configuration" : "Das Hinzufügen der Serverkonfiguration schlug fehl", + "Cannot add server configuration" : "Die Serverkonfiguration kann nicht hinzugefügt werden", "mappings cleared" : "Zuordnungen gelöscht", "Success" : "Erfolg", "Error" : "Fehler", - "Please specify a Base DN" : "Bitte ein Base-DN spezifizieren", - "Could not determine Base DN" : "Base-DN konnte nicht festgestellt werden", - "Please specify the port" : "Bitte Port spezifizieren", + "Please specify a Base DN" : "Bitte einen Basis-DN angeben", + "Could not determine Base DN" : "Basis-DN konnte nicht ermittelt werden", + "Please specify the port" : "Bitte Port angeben", "Configuration OK" : "Konfiguration OK", "Configuration incorrect" : "Konfiguration nicht korrekt", "Configuration incomplete" : "Konfiguration nicht vollständig", - "Select groups" : "Wähle Gruppen", - "Select object classes" : "Objekt-Klassen auswählen", + "Select groups" : "Gruppen auswählen", + "Select object classes" : "Objektklassen auswählen", "Select attributes" : "Attribute auswählen", "Connection test succeeded" : "Verbindungstest erfolgreich", "Connection test failed" : "Verbindungstest fehlgeschlagen", - "Do you really want to delete the current Server Configuration?" : "Möchten Sie die aktuelle Serverkonfiguration wirklich löschen?", - "Confirm Deletion" : "Löschung bestätigen", + "Do you really want to delete the current Server Configuration?" : "Soll die aktuelle Serverkonfiguration wirklich gelöscht werden?", + "Confirm Deletion" : "Löschen bestätigen", "_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"], "_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"], - "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Benutzeranzeigename-Attribut konnte nicht gefunden werden. Bitte geben Sie es selber in den erweiterten LDAP-Einstellungen an.", - "Could not find the desired feature" : "Konnte die gewünschte Funktion nicht finden", + "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Anzeigename-Attribut des Benutzers konnte nicht gefunden werden. Bitte geben Sie es in den erweiterten LDAP-Einstellungen selber an.", + "Could not find the desired feature" : "Die gewünschte Funktion konnte nicht gefunden werden", "Invalid Host" : "Ungültiger Host", "Server" : "Server", "User Filter" : "Benutzer-Filter", @@ -41,17 +41,17 @@ "Save" : "Speichern", "Test Configuration" : "Testkonfiguration", "Help" : "Hilfe", - "Groups meeting these criteria are available in %s:" : "Gruppen-Versammlungen mit diesen Kriterien sind verfügbar in %s:", - "only those object classes:" : "Nur diese Objekt-Klassen:", - "only from those groups:" : "Nur von diesen Gruppen:", + "Groups meeting these criteria are available in %s:" : "Gruppen, auf die diese Kriterien zutreffen, sind verfügbar in %s:", + "only those object classes:" : "Nur diese Objektklassen:", + "only from those groups:" : "Nur aus diesen Gruppen:", "Edit raw filter instead" : "Original-Filter stattdessen bearbeiten", "Raw LDAP filter" : "Original LDAP-Filter", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Der Filter definiert welche LDAP-Gruppen Zugriff auf die %s Instanz haben sollen.", - "Test Filter" : "Test-Filter", + "The filter specifies which LDAP groups shall have access to the %s instance." : "Der Filter bestimmt, welche LDAP-Gruppen Zugriff auf die %s-Instanz haben sollen.", + "Test Filter" : "Testfilter", "groups found" : "Gruppen gefunden", - "Users login with this attribute:" : "Benutzeranmeldung mit diesem Merkmal:", + "Users login with this attribute:" : "Benutzeranmeldung mit diesem Attribut:", "LDAP Username:" : "LDAP-Benutzername:", - "LDAP Email Address:" : "LDAP E-Mail-Adresse:", + "LDAP Email Address:" : "LDAP-E-Mail-Adresse:", "Other Attributes:" : "Andere Attribute:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Bestimmt den Filter, welcher bei einer Anmeldung angewandt wird. %%uid ersetzt den Benutzernamen bei der Anmeldung. Beispiel: \"uid=%%uid\"", "1. Server" : "1. Server", @@ -62,15 +62,15 @@ "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Sie können das Protokoll auslassen, außer wenn Sie SSL benötigen. Beginnen Sie dann mit ldaps://", "Port" : "Port", "User DN" : "Benutzer-DN", - "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Der DN des Benutzers für LDAP-Bind, z.B.: uid=agent,dc=example,dc=com. Für einen anonymen Zugriff lassen Sie DN und Passwort leer.", + "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Der DN des Benutzers, mit dem der LDAP-Bind durchgeführt werden soll, z.B. uid=agent,dc=example,dc=com. Für einen anonymen Zugriff lassen Sie DN und Passwort leer.", "Password" : "Passwort", "For anonymous access, leave DN and Password empty." : "Lassen Sie die Felder DN und Passwort für einen anonymen Zugang leer.", - "One Base DN per line" : "Ein Basis-DN pro Zeile", - "You can specify Base DN for users and groups in the Advanced tab" : "Sie können Basis-DN für Benutzer und Gruppen in dem \"Erweitert\"-Reiter konfigurieren", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Verhindert automatische LDAP-Anfragen. Besser für größere Installationen, benötigt aber einiges an LDAP-Wissen.", - "Manually enter LDAP filters (recommended for large directories)" : "LDAP-Filter manuell eingeben (erforderlich für große Verzeichnisse)", - "Limit %s access to users meeting these criteria:" : "Beschränken Sie den %s Zugriff auf die Benutzer-Sitzungen durch folgende Kriterien:", - "The filter specifies which LDAP users shall have access to the %s instance." : "Der Filter definiert welche LDAP-Benutzer Zugriff auf die %s Instanz haben sollen.", + "One Base DN per line" : "Einen Basis-DN pro Zeile", + "You can specify Base DN for users and groups in the Advanced tab" : "Sie können Basis-DN für Benutzer und Gruppen im „Erweitert“-Reiter angeben", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Verhindert automatische LDAP-Anfragen. Besser geeignet für größere Installationen, benötigt aber erweiterte LDAP-Kenntnisse.", + "Manually enter LDAP filters (recommended for large directories)" : "LDAP-Filter manuell eingeben (empfohlen für große Verzeichnisse)", + "Limit %s access to users meeting these criteria:" : "Den %s-Zugriff auf Benutzer, die den folgenden Kriterien entsprechen, beschränken:", + "The filter specifies which LDAP users shall have access to the %s instance." : "Der Filter gibt an, welche LDAP-Benutzer Zugriff auf die %s-Instanz haben sollen.", "users found" : "Benutzer gefunden", "Saving" : "Speichern", "Back" : "Zurück", @@ -78,17 +78,17 @@ "LDAP" : "LDAP", "Expert" : "Experte", "Advanced" : "Fortgeschritten", - "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Warnung:</b> Die Anwendungen user_ldap und user_webdavauth sind inkompatibel. Es kann demzufolge zu unerwarteten Verhalten kommen. Bitten Sie Ihren Systemadministator eine der beiden Anwendungen zu deaktivieren.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warnung:</b> Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitten Sie Ihren Systemadministrator das Modul zu installieren.", + "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Warnung:</b> Die Anwendungen user_ldap und user_webdavauth sind inkompatibel. Es kann deshalb zu unerwartetem Systemverhalten kommen. Bitten kontaktieren Sie Ihren Systemadministator und bitten Sie um die Deaktivierung einer der beiden Anwendungen.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Warnung:</b> Da das PHP-Modul für LDAP nicht installiert ist, wird das Backend nicht funktionieren. Bitte kontaktieren Sie Ihren Systemadministrator und bitten Sie um die Installation des Moduls.", "Connection Settings" : "Verbindungseinstellungen", "Configuration Active" : "Konfiguration aktiv", "When unchecked, this configuration will be skipped." : "Wenn nicht angehakt, wird diese Konfiguration übersprungen.", - "Backup (Replica) Host" : "Backup Host (Kopie)", + "Backup (Replica) Host" : "Backup von Host (Kopie) anlegen", "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Geben Sie einen optionalen Backup Host an. Es muss sich um eine Kopie des Haupt LDAP/AD Servers handeln.", "Backup (Replica) Port" : "Backup Port", "Disable Main Server" : "Hauptserver deaktivieren", "Only connect to the replica server." : "Nur zum Replikat-Server verbinden.", - "Case insensitive LDAP server (Windows)" : "LDAP-Server (Windows: Groß- und Kleinschreibung bleibt unbeachtet)", + "Case insensitive LDAP server (Windows)" : "LDAP-Server ohne Unterscheidung von Groß-/Kleinschreibung (Windows)", "Turn off SSL certificate validation." : "Schalten Sie die SSL-Zertifikatsprüfung aus.", "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Nur für Testzwecke geeignet, sollte Standardmäßig nicht verwendet werden. Falls die Verbindung nur mit dieser Option funktioniert, importieren Sie das SSL-Zertifikat des LDAP-Servers in Ihren %s Server.", "Cache Time-To-Live" : "Speichere Time-To-Live zwischen", @@ -125,7 +125,7 @@ "UUID Attribute for Users:" : "UUID-Attribute für Benutzer:", "UUID Attribute for Groups:" : "UUID-Attribute für Gruppen:", "Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Die Benutzernamen werden genutzt, um (Meta)Daten zuzuordnen und zu speichern. Um Benutzer eindeutig und präzise zu identifizieren, hat jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung (mappen) von Benutzernamen zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzernamens zugeordnet. Zusätzlich wird der DN zwischengespeichert, um die Interaktion mit dem LDAP zu minimieren, was aber nicht der Identifikation dient. Ändert sich der DN, werden die Änderungen durch gefunden. Der interne Benutzername, wird in überall verwendet. Werden die Zuordnungen gelöscht, bleiben überall Reste zurück. Die Löschung der Zuordnungen kann nicht in der Konfiguration vorgenommen werden, beeinflusst aber die LDAP-Konfiguration! Löschen Sie niemals die Zuordnungen in einer produktiven Umgebung. Löschen Sie die Zuordnungen nur in einer Test- oder Experimentierumgebung.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Benutzernamen dienen zum Speichern und Zuweisen von (Meta-)Daten. Um Benutzer eindeutig zu identifizieren und zu erkennen, besitzt jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung des jeweiligen Benutzernamens zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzers zugeordnet. Darüber hinaus wird der DN auch zwischengespeichert, um die Interaktion über LDAP zu reduzieren, was aber nicht zur Identifikation dient. Ändert sich der DN, werden die Änderungen gefunden. Der interne Benutzername wird durchgängig verwendet. Ein Löschen der Zuordnungen führt zum systemweiten Verbleib von Restdaten. Es bleibt nicht auf eine einzelne Konfiguration beschränkt, sondern wirkt sich auf alle LDAP-Konfigurationen aus! Löschen Sie die Zuordnungen nie innerhalb einer Produktivumgebung, sondern nur in einer Test- oder Experimentierumgebung.", "Clear Username-LDAP User Mapping" : "Lösche LDAP-Benutzernamenzuordnung", "Clear Groupname-LDAP Group Mapping" : "Lösche LDAP-Gruppennamenzuordnung" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/el.js b/apps/user_ldap/l10n/el.js index 098fc25fa6f..cf6cdc061ef 100644 --- a/apps/user_ldap/l10n/el.js +++ b/apps/user_ldap/l10n/el.js @@ -127,7 +127,6 @@ OC.L10N.register( "UUID Attribute for Users:" : "Χαρακτηριστικό UUID για Χρήστες:", "UUID Attribute for Groups:" : "Χαρακτηριστικό UUID για Ομάδες:", "Username-LDAP User Mapping" : "Αντιστοίχιση Χρηστών Όνομα Χρήστη-LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Τα ονόματα χρηστών χρησιμοποιούνται για την αποθήκευση και την ανάθεση (μετα) δεδομένων. Προκειμένου να προσδιοριστούν με ακρίβεια και να αναγνωρίστουν οι χρήστες, κάθε χρήστης LDAP θα έχει ένα εσωτερικό όνομα. Αυτό απαιτεί μια αντιστοίχιση του ονόματος χρήστη με το χρήστη LDAP. Το όνομα χρήστη που δημιουργήθηκε αντιστοιχίζεται στην UUID του χρήστη LDAP. Επιπροσθέτως, το DN αποθηκεύεται προσωρινά (cache) ώστε να μειωθεί η αλληλεπίδραση LDAP, αλλά δεν χρησιμοποιείται για την ταυτοποίηση. Αν το DN αλλάξει, οι αλλαγές θα βρεθούν. Το εσωτερικό όνομα χρήστη χρησιμοποιείται παντού. Η εκκαθάριση των αντιστοιχίσεων θα αφήσει κατάλοιπα παντού. Η εκκαθάριση των αντιστοιχίσεων δεν επηρεάζεται από τη διαμόρφωση, επηρεάζει όλες τις διαμορφώσεις LDAP! Μην διαγράψετε ποτέ τις αντιστοιχίσεις σε ένα λειτουργικό περιβάλλον παρά μόνο σε δοκιμές ή σε πειραματικό στάδιο.", "Clear Username-LDAP User Mapping" : "Διαγραφή αντιστοίχησης Ονόματος Χρήστη LDAP-Χρήστη", "Clear Groupname-LDAP Group Mapping" : "Διαγραφή αντιστοίχησης Ονόματος Ομάδας-LDAP Ομάδας" }, diff --git a/apps/user_ldap/l10n/el.json b/apps/user_ldap/l10n/el.json index 44119559c08..59aac4319ee 100644 --- a/apps/user_ldap/l10n/el.json +++ b/apps/user_ldap/l10n/el.json @@ -125,7 +125,6 @@ "UUID Attribute for Users:" : "Χαρακτηριστικό UUID για Χρήστες:", "UUID Attribute for Groups:" : "Χαρακτηριστικό UUID για Ομάδες:", "Username-LDAP User Mapping" : "Αντιστοίχιση Χρηστών Όνομα Χρήστη-LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Τα ονόματα χρηστών χρησιμοποιούνται για την αποθήκευση και την ανάθεση (μετα) δεδομένων. Προκειμένου να προσδιοριστούν με ακρίβεια και να αναγνωρίστουν οι χρήστες, κάθε χρήστης LDAP θα έχει ένα εσωτερικό όνομα. Αυτό απαιτεί μια αντιστοίχιση του ονόματος χρήστη με το χρήστη LDAP. Το όνομα χρήστη που δημιουργήθηκε αντιστοιχίζεται στην UUID του χρήστη LDAP. Επιπροσθέτως, το DN αποθηκεύεται προσωρινά (cache) ώστε να μειωθεί η αλληλεπίδραση LDAP, αλλά δεν χρησιμοποιείται για την ταυτοποίηση. Αν το DN αλλάξει, οι αλλαγές θα βρεθούν. Το εσωτερικό όνομα χρήστη χρησιμοποιείται παντού. Η εκκαθάριση των αντιστοιχίσεων θα αφήσει κατάλοιπα παντού. Η εκκαθάριση των αντιστοιχίσεων δεν επηρεάζεται από τη διαμόρφωση, επηρεάζει όλες τις διαμορφώσεις LDAP! Μην διαγράψετε ποτέ τις αντιστοιχίσεις σε ένα λειτουργικό περιβάλλον παρά μόνο σε δοκιμές ή σε πειραματικό στάδιο.", "Clear Username-LDAP User Mapping" : "Διαγραφή αντιστοίχησης Ονόματος Χρήστη LDAP-Χρήστη", "Clear Groupname-LDAP Group Mapping" : "Διαγραφή αντιστοίχησης Ονόματος Ομάδας-LDAP Ομάδας" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/en_GB.js b/apps/user_ldap/l10n/en_GB.js index 9476b44dde0..3ddcd982d74 100644 --- a/apps/user_ldap/l10n/en_GB.js +++ b/apps/user_ldap/l10n/en_GB.js @@ -127,7 +127,7 @@ OC.L10N.register( "UUID Attribute for Users:" : "UUID Attribute for Users:", "UUID Attribute for Groups:" : "UUID Attribute for Groups:", "Username-LDAP User Mapping" : "Username-LDAP User Mapping", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Usernames are used to store and assign (meta) data. In order to precisely identify and recognise users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Usernames are used to store and assign (meta) data. In order to precisely identify and recognise users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage.", "Clear Username-LDAP User Mapping" : "Clear Username-LDAP User Mapping", "Clear Groupname-LDAP Group Mapping" : "Clear Groupname-LDAP Group Mapping" }, diff --git a/apps/user_ldap/l10n/en_GB.json b/apps/user_ldap/l10n/en_GB.json index fd6861a5184..fabe3d94764 100644 --- a/apps/user_ldap/l10n/en_GB.json +++ b/apps/user_ldap/l10n/en_GB.json @@ -125,7 +125,7 @@ "UUID Attribute for Users:" : "UUID Attribute for Users:", "UUID Attribute for Groups:" : "UUID Attribute for Groups:", "Username-LDAP User Mapping" : "Username-LDAP User Mapping", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Usernames are used to store and assign (meta) data. In order to precisely identify and recognise users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Usernames are used to store and assign (meta) data. In order to precisely identify and recognise users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage.", "Clear Username-LDAP User Mapping" : "Clear Username-LDAP User Mapping", "Clear Groupname-LDAP Group Mapping" : "Clear Groupname-LDAP Group Mapping" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/es.js b/apps/user_ldap/l10n/es.js index 731213be81c..5f0bae4e13b 100644 --- a/apps/user_ldap/l10n/es.js +++ b/apps/user_ldap/l10n/es.js @@ -4,8 +4,8 @@ OC.L10N.register( "Failed to clear the mappings." : "Ocurrió un fallo al borrar las asignaciones.", "Failed to delete the server configuration" : "No se pudo borrar la configuración del servidor", "The configuration is valid and the connection could be established!" : "¡La configuración es válida y la conexión puede establecerse!", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuración es válida, pero falló el Enlace. Por favor, compruebe la configuración del servidor y las credenciales.", - "The configuration is invalid. Please have a look at the logs for further details." : "La configuración no es válida. Por favor, busque en el log para más detalles.", + "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuración es válida, pero falló el nexo. Por favor, compruebe la configuración del servidor y las credenciales.", + "The configuration is invalid. Please have a look at the logs for further details." : "La configuración no es válida. Por favor, revise el registro para más detalles.", "No action specified" : "No se ha especificado la acción", "No configuration specified" : "No se ha especificado la configuración", "No data specified" : "No se han especificado los datos", @@ -21,7 +21,7 @@ OC.L10N.register( "Please specify a Base DN" : "Especifique un DN base", "Could not determine Base DN" : "No se pudo determinar un DN base", "Please specify the port" : "Especifique el puerto", - "Configuration OK" : "Configuración Correcta", + "Configuration OK" : "Configuración correcta", "Configuration incorrect" : "Configuración Incorrecta", "Configuration incomplete" : "Configuración incompleta", "Select groups" : "Seleccionar grupos", @@ -80,19 +80,19 @@ OC.L10N.register( "LDAP" : "LDAP", "Expert" : "Experto", "Advanced" : "Avanzado", - "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Advertencia:</b> Las apps user_ldap y user_webdavauth son incompatibles. Puede que experimente un comportamiento inesperado. Pregunte al su administrador de sistemas para desactivar uno de ellos.", + "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Advertencia:</b> Las apps user_ldap y user_webdavauth son incompatibles. Puede que experimente un comportamiento inesperado. Pídale a su administrador del sistema que desactive uno de ellos.", "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advertencia:</b> El módulo LDAP de PHP no está instalado, el sistema no funcionará. Por favor consulte al administrador del sistema para instalarlo.", "Connection Settings" : "Configuración de conexión", "Configuration Active" : "Configuracion activa", - "When unchecked, this configuration will be skipped." : "Cuando deseleccione, esta configuracion sera omitida.", - "Backup (Replica) Host" : "Servidor de copia de seguridad (Replica)", + "When unchecked, this configuration will be skipped." : "Cuando esté desmarcado, esta configuración se omitirá", + "Backup (Replica) Host" : "Servidor de copia de seguridad (Réplica)", "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Dar un servidor de copia de seguridad opcional. Debe ser una réplica del servidor principal LDAP / AD.", "Backup (Replica) Port" : "Puerto para copias de seguridad (Replica)", "Disable Main Server" : "Deshabilitar servidor principal", "Only connect to the replica server." : "Conectar sólo con el servidor de réplica.", "Case insensitive LDAP server (Windows)" : "Servidor de LDAP insensible a mayúsculas/minúsculas (Windows)", "Turn off SSL certificate validation." : "Apagar la validación por certificado SSL.", - "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "No se recomienda, ¡utilízalo únicamente para pruebas! Si la conexión únicamente funciona con esta opción, importa el certificado SSL del servidor LDAP en tu servidor %s.", + "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "No se recomienda, ¡utilícelo únicamente para pruebas! Si la conexión sólo funciona con esta opción, importe el certificado SSL del servidor LDAP en su servidor %s.", "Cache Time-To-Live" : "Cache TTL", "in seconds. A change empties the cache." : "en segundos. Un cambio vacía la caché.", "Directory Settings" : "Configuracion de directorio", @@ -106,7 +106,7 @@ OC.L10N.register( "The LDAP attribute to use to generate the groups's display name." : "El campo LDAP a usar para generar el nombre para mostrar del grupo.", "Base Group Tree" : "Árbol base de grupo", "One Group Base DN per line" : "Un DN Base de Grupo por línea", - "Group Search Attributes" : "Atributos de busqueda de grupo", + "Group Search Attributes" : "Atributos de búsqueda de grupo", "Group-Member association" : "Asociación Grupo-Miembro", "Nested Groups" : "Grupos anidados", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando se active, se permitirán grupos que contengan otros grupos (solo funciona si el atributo de miembro de grupo contiene DNs).", @@ -121,13 +121,13 @@ OC.L10N.register( "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Vacío para el nombre de usuario (por defecto). En otro caso, especifique un atributo LDAP/AD.", "Internal Username" : "Nombre de usuario interno", "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "El nombre de usuario interno será creado de forma predeterminada desde el atributo UUID. Esto asegura que el nombre de usuario es único y los caracteres no necesitan ser convertidos. En el nombre de usuario interno sólo se pueden usar estos caracteres: [ a-zA-Z0-9_.@- ]. El resto de caracteres son sustituidos por su correspondiente en ASCII o simplemente omitidos. En caso de duplicidades, se añadirá o incrementará un número. El nombre de usuario interno es usado para identificar un usuario. Es también el nombre predeterminado para la carpeta personal del usuario en ownCloud. También es parte de URLs remotas, por ejemplo, para todos los servicios *DAV. Con esta configuración el comportamiento predeterminado puede ser cambiado. Para conseguir un comportamiento similar a como era antes de ownCloud 5, introduzca el campo del nombre para mostrar del usuario en la siguiente caja. Déjelo vacío para el comportamiento predeterminado. Los cambios solo tendrán efecto en los usuarios LDAP mapeados (añadidos) recientemente.", - "Internal Username Attribute:" : "Atributo Nombre de usuario Interno:", + "Internal Username Attribute:" : "Atributo de nombre de usuario interno:", "Override UUID detection" : "Sobrescribir la detección UUID", "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Por defecto, el atributo UUID es autodetectado. Este atributo es usado para identificar indudablemente usuarios y grupos LDAP. Además, el nombre de usuario interno será creado en base al UUID, si no ha sido especificado otro comportamiento arriba. Puedes sobrescribir la configuración y pasar un atributo de tu elección. Debes asegurarte de que el atributo de tu elección sea accesible por los usuarios y grupos y ser único. Déjalo en blanco para usar el comportamiento por defecto. Los cambios tendrán efecto solo en los usuarios y grupos de LDAP mapeados (añadidos) recientemente.", "UUID Attribute for Users:" : "Atributo UUID para usuarios:", "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Asignación del Nombre de usuario de un usuario LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuarios son usados para almacenar y asignar (meta) datos. Con el fin de identificar de forma precisa y reconocer usuarios, cada usuario de LDAP tendrá un nombre de usuario interno. Esto requiere un mapeo entre el nombre de usuario y el usuario del LDAP. El nombre de usuario creado es mapeado respecto al UUID del usuario en el LDAP. De forma adicional, el DN es cacheado para reducir la interacción entre el LDAP, pero no es usado para identificar. Si el DN cambia, los cambios serán aplicados. El nombre de usuario interno es usado por encima de todo. Limpiar los mapeos dejará restos por todas partes, no es sensible a configuración, ¡afecta a todas las configuraciones del LDAP! Nunca limpies los mapeos en un entorno de producción, únicamente en una fase de desarrollo o experimental.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuarios son usados para almacenar y asignar (meta) datos. Con el fin de identificar de forma precisa y reconocer usuarios, cada usuario de LDAP tendrá un nombre de usuario interno. Esto requiere un mapeo entre el nombre de usuario y el usuario del LDAP. El nombre de usuario creado es mapeado respecto al UUID del usuario en el LDAP. De forma adicional, el DN es cacheado para reducir la interacción entre el LDAP, pero no es usado para identificar. Si el DN cambia, los cambios serán aplicados. El nombre de usuario interno es usado por encima de todo. Limpiar los mapeos dejará restos por todas partes, no es sensible a configuración, ¡afecta a todas las configuraciones del LDAP! Nunca limpies los mapeos en un entorno de producción, únicamente en una fase de desarrollo o experimental.", "Clear Username-LDAP User Mapping" : "Borrar la asignación de los Nombres de usuario de los usuarios LDAP", "Clear Groupname-LDAP Group Mapping" : "Borrar la asignación de los Nombres de grupo de los grupos de LDAP" }, diff --git a/apps/user_ldap/l10n/es.json b/apps/user_ldap/l10n/es.json index b5a07d210a4..c9bd3e10266 100644 --- a/apps/user_ldap/l10n/es.json +++ b/apps/user_ldap/l10n/es.json @@ -2,8 +2,8 @@ "Failed to clear the mappings." : "Ocurrió un fallo al borrar las asignaciones.", "Failed to delete the server configuration" : "No se pudo borrar la configuración del servidor", "The configuration is valid and the connection could be established!" : "¡La configuración es válida y la conexión puede establecerse!", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuración es válida, pero falló el Enlace. Por favor, compruebe la configuración del servidor y las credenciales.", - "The configuration is invalid. Please have a look at the logs for further details." : "La configuración no es válida. Por favor, busque en el log para más detalles.", + "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuración es válida, pero falló el nexo. Por favor, compruebe la configuración del servidor y las credenciales.", + "The configuration is invalid. Please have a look at the logs for further details." : "La configuración no es válida. Por favor, revise el registro para más detalles.", "No action specified" : "No se ha especificado la acción", "No configuration specified" : "No se ha especificado la configuración", "No data specified" : "No se han especificado los datos", @@ -19,7 +19,7 @@ "Please specify a Base DN" : "Especifique un DN base", "Could not determine Base DN" : "No se pudo determinar un DN base", "Please specify the port" : "Especifique el puerto", - "Configuration OK" : "Configuración Correcta", + "Configuration OK" : "Configuración correcta", "Configuration incorrect" : "Configuración Incorrecta", "Configuration incomplete" : "Configuración incompleta", "Select groups" : "Seleccionar grupos", @@ -78,19 +78,19 @@ "LDAP" : "LDAP", "Expert" : "Experto", "Advanced" : "Avanzado", - "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Advertencia:</b> Las apps user_ldap y user_webdavauth son incompatibles. Puede que experimente un comportamiento inesperado. Pregunte al su administrador de sistemas para desactivar uno de ellos.", + "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Advertencia:</b> Las apps user_ldap y user_webdavauth son incompatibles. Puede que experimente un comportamiento inesperado. Pídale a su administrador del sistema que desactive uno de ellos.", "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advertencia:</b> El módulo LDAP de PHP no está instalado, el sistema no funcionará. Por favor consulte al administrador del sistema para instalarlo.", "Connection Settings" : "Configuración de conexión", "Configuration Active" : "Configuracion activa", - "When unchecked, this configuration will be skipped." : "Cuando deseleccione, esta configuracion sera omitida.", - "Backup (Replica) Host" : "Servidor de copia de seguridad (Replica)", + "When unchecked, this configuration will be skipped." : "Cuando esté desmarcado, esta configuración se omitirá", + "Backup (Replica) Host" : "Servidor de copia de seguridad (Réplica)", "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Dar un servidor de copia de seguridad opcional. Debe ser una réplica del servidor principal LDAP / AD.", "Backup (Replica) Port" : "Puerto para copias de seguridad (Replica)", "Disable Main Server" : "Deshabilitar servidor principal", "Only connect to the replica server." : "Conectar sólo con el servidor de réplica.", "Case insensitive LDAP server (Windows)" : "Servidor de LDAP insensible a mayúsculas/minúsculas (Windows)", "Turn off SSL certificate validation." : "Apagar la validación por certificado SSL.", - "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "No se recomienda, ¡utilízalo únicamente para pruebas! Si la conexión únicamente funciona con esta opción, importa el certificado SSL del servidor LDAP en tu servidor %s.", + "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "No se recomienda, ¡utilícelo únicamente para pruebas! Si la conexión sólo funciona con esta opción, importe el certificado SSL del servidor LDAP en su servidor %s.", "Cache Time-To-Live" : "Cache TTL", "in seconds. A change empties the cache." : "en segundos. Un cambio vacía la caché.", "Directory Settings" : "Configuracion de directorio", @@ -104,7 +104,7 @@ "The LDAP attribute to use to generate the groups's display name." : "El campo LDAP a usar para generar el nombre para mostrar del grupo.", "Base Group Tree" : "Árbol base de grupo", "One Group Base DN per line" : "Un DN Base de Grupo por línea", - "Group Search Attributes" : "Atributos de busqueda de grupo", + "Group Search Attributes" : "Atributos de búsqueda de grupo", "Group-Member association" : "Asociación Grupo-Miembro", "Nested Groups" : "Grupos anidados", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando se active, se permitirán grupos que contengan otros grupos (solo funciona si el atributo de miembro de grupo contiene DNs).", @@ -119,13 +119,13 @@ "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Vacío para el nombre de usuario (por defecto). En otro caso, especifique un atributo LDAP/AD.", "Internal Username" : "Nombre de usuario interno", "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "El nombre de usuario interno será creado de forma predeterminada desde el atributo UUID. Esto asegura que el nombre de usuario es único y los caracteres no necesitan ser convertidos. En el nombre de usuario interno sólo se pueden usar estos caracteres: [ a-zA-Z0-9_.@- ]. El resto de caracteres son sustituidos por su correspondiente en ASCII o simplemente omitidos. En caso de duplicidades, se añadirá o incrementará un número. El nombre de usuario interno es usado para identificar un usuario. Es también el nombre predeterminado para la carpeta personal del usuario en ownCloud. También es parte de URLs remotas, por ejemplo, para todos los servicios *DAV. Con esta configuración el comportamiento predeterminado puede ser cambiado. Para conseguir un comportamiento similar a como era antes de ownCloud 5, introduzca el campo del nombre para mostrar del usuario en la siguiente caja. Déjelo vacío para el comportamiento predeterminado. Los cambios solo tendrán efecto en los usuarios LDAP mapeados (añadidos) recientemente.", - "Internal Username Attribute:" : "Atributo Nombre de usuario Interno:", + "Internal Username Attribute:" : "Atributo de nombre de usuario interno:", "Override UUID detection" : "Sobrescribir la detección UUID", "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Por defecto, el atributo UUID es autodetectado. Este atributo es usado para identificar indudablemente usuarios y grupos LDAP. Además, el nombre de usuario interno será creado en base al UUID, si no ha sido especificado otro comportamiento arriba. Puedes sobrescribir la configuración y pasar un atributo de tu elección. Debes asegurarte de que el atributo de tu elección sea accesible por los usuarios y grupos y ser único. Déjalo en blanco para usar el comportamiento por defecto. Los cambios tendrán efecto solo en los usuarios y grupos de LDAP mapeados (añadidos) recientemente.", "UUID Attribute for Users:" : "Atributo UUID para usuarios:", "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Asignación del Nombre de usuario de un usuario LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuarios son usados para almacenar y asignar (meta) datos. Con el fin de identificar de forma precisa y reconocer usuarios, cada usuario de LDAP tendrá un nombre de usuario interno. Esto requiere un mapeo entre el nombre de usuario y el usuario del LDAP. El nombre de usuario creado es mapeado respecto al UUID del usuario en el LDAP. De forma adicional, el DN es cacheado para reducir la interacción entre el LDAP, pero no es usado para identificar. Si el DN cambia, los cambios serán aplicados. El nombre de usuario interno es usado por encima de todo. Limpiar los mapeos dejará restos por todas partes, no es sensible a configuración, ¡afecta a todas las configuraciones del LDAP! Nunca limpies los mapeos en un entorno de producción, únicamente en una fase de desarrollo o experimental.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuarios son usados para almacenar y asignar (meta) datos. Con el fin de identificar de forma precisa y reconocer usuarios, cada usuario de LDAP tendrá un nombre de usuario interno. Esto requiere un mapeo entre el nombre de usuario y el usuario del LDAP. El nombre de usuario creado es mapeado respecto al UUID del usuario en el LDAP. De forma adicional, el DN es cacheado para reducir la interacción entre el LDAP, pero no es usado para identificar. Si el DN cambia, los cambios serán aplicados. El nombre de usuario interno es usado por encima de todo. Limpiar los mapeos dejará restos por todas partes, no es sensible a configuración, ¡afecta a todas las configuraciones del LDAP! Nunca limpies los mapeos en un entorno de producción, únicamente en una fase de desarrollo o experimental.", "Clear Username-LDAP User Mapping" : "Borrar la asignación de los Nombres de usuario de los usuarios LDAP", "Clear Groupname-LDAP Group Mapping" : "Borrar la asignación de los Nombres de grupo de los grupos de LDAP" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/es_AR.js b/apps/user_ldap/l10n/es_AR.js index e563a76153a..6be422a0800 100644 --- a/apps/user_ldap/l10n/es_AR.js +++ b/apps/user_ldap/l10n/es_AR.js @@ -109,7 +109,6 @@ OC.L10N.register( "UUID Attribute for Users:" : "Atributo UUID para usuarios:", "UUID Attribute for Groups:" : "Atributo UUID para grupos:", "Username-LDAP User Mapping" : "Asignación del Nombre de usuario de un usuario LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuarios son usados para almacenar y asignar datos (metadatos). Con el fin de identificar de forma precisa y reconocer usuarios, a cada usuario de LDAP se será asignado un nombre de usuario interno. Esto requiere un mapeo entre el nombre de usuario y el usuario del LDAP. El nombre de usuario creado es mapeado respecto al UUID del usuario en el LDAP. De forma adicional, el DN es dejado en caché para reducir la interacción entre el LDAP, pero no es usado para la identificación. Si el DN cambia, los cambios van a ser aplicados. El nombre de usuario interno es usado en todos los lugares. Vaciar los mapeos, deja restos por todas partes. Vaciar los mapeos, no es sensible a configuración, ¡afecta a todas las configuraciones del LDAP! Nunca limpies los mapeos en un entorno de producción, solamente en fase de desarrollo o experimental.", "Clear Username-LDAP User Mapping" : "Borrar la asignación de los Nombres de usuario de los usuarios LDAP", "Clear Groupname-LDAP Group Mapping" : "Borrar la asignación de los Nombres de grupo de los grupos de LDAP" }, diff --git a/apps/user_ldap/l10n/es_AR.json b/apps/user_ldap/l10n/es_AR.json index 7cc3ed556fd..5e70ef4390e 100644 --- a/apps/user_ldap/l10n/es_AR.json +++ b/apps/user_ldap/l10n/es_AR.json @@ -107,7 +107,6 @@ "UUID Attribute for Users:" : "Atributo UUID para usuarios:", "UUID Attribute for Groups:" : "Atributo UUID para grupos:", "Username-LDAP User Mapping" : "Asignación del Nombre de usuario de un usuario LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuarios son usados para almacenar y asignar datos (metadatos). Con el fin de identificar de forma precisa y reconocer usuarios, a cada usuario de LDAP se será asignado un nombre de usuario interno. Esto requiere un mapeo entre el nombre de usuario y el usuario del LDAP. El nombre de usuario creado es mapeado respecto al UUID del usuario en el LDAP. De forma adicional, el DN es dejado en caché para reducir la interacción entre el LDAP, pero no es usado para la identificación. Si el DN cambia, los cambios van a ser aplicados. El nombre de usuario interno es usado en todos los lugares. Vaciar los mapeos, deja restos por todas partes. Vaciar los mapeos, no es sensible a configuración, ¡afecta a todas las configuraciones del LDAP! Nunca limpies los mapeos en un entorno de producción, solamente en fase de desarrollo o experimental.", "Clear Username-LDAP User Mapping" : "Borrar la asignación de los Nombres de usuario de los usuarios LDAP", "Clear Groupname-LDAP Group Mapping" : "Borrar la asignación de los Nombres de grupo de los grupos de LDAP" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/es_MX.js b/apps/user_ldap/l10n/es_MX.js index 30c32d5beca..a2860ddd60e 100644 --- a/apps/user_ldap/l10n/es_MX.js +++ b/apps/user_ldap/l10n/es_MX.js @@ -101,7 +101,6 @@ OC.L10N.register( "UUID Attribute for Users:" : "Atributo UUID para usuarios:", "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Asignación del Nombre de usuario de un usuario LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuarios son usados para almacenar y asignar (meta) datos. Con el fin de identificar de forma precisa y reconocer usuarios, cada usuario de LDAP tendrá un nombre de usuario interno. Esto requiere un mapeo entre el nombre de usuario y el usuario del LDAP. El nombre de usuario creado es mapeado respecto al UUID del usuario en el LDAP. De forma adicional, el DN es cacheado para reducir la interacción entre el LDAP, pero no es usado para identificar. Si el DN cambia, los cambios serán aplicados. El nombre de usuario interno es usado por encima de todo. Limpiar los mapeos dejará restos por todas partes, no es sensible a configuración, ¡afecta a todas las configuraciones del LDAP! Nunca limpies los mapeos en un entorno de producción, únicamente en una fase de desarrollo o experimental.", "Clear Username-LDAP User Mapping" : "Borrar la asignación de los Nombres de usuario de los usuarios LDAP", "Clear Groupname-LDAP Group Mapping" : "Borrar la asignación de los Nombres de grupo de los grupos de LDAP" }, diff --git a/apps/user_ldap/l10n/es_MX.json b/apps/user_ldap/l10n/es_MX.json index bf9546306b3..0f25e3dec5f 100644 --- a/apps/user_ldap/l10n/es_MX.json +++ b/apps/user_ldap/l10n/es_MX.json @@ -99,7 +99,6 @@ "UUID Attribute for Users:" : "Atributo UUID para usuarios:", "UUID Attribute for Groups:" : "Atributo UUID para Grupos:", "Username-LDAP User Mapping" : "Asignación del Nombre de usuario de un usuario LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los usuarios son usados para almacenar y asignar (meta) datos. Con el fin de identificar de forma precisa y reconocer usuarios, cada usuario de LDAP tendrá un nombre de usuario interno. Esto requiere un mapeo entre el nombre de usuario y el usuario del LDAP. El nombre de usuario creado es mapeado respecto al UUID del usuario en el LDAP. De forma adicional, el DN es cacheado para reducir la interacción entre el LDAP, pero no es usado para identificar. Si el DN cambia, los cambios serán aplicados. El nombre de usuario interno es usado por encima de todo. Limpiar los mapeos dejará restos por todas partes, no es sensible a configuración, ¡afecta a todas las configuraciones del LDAP! Nunca limpies los mapeos en un entorno de producción, únicamente en una fase de desarrollo o experimental.", "Clear Username-LDAP User Mapping" : "Borrar la asignación de los Nombres de usuario de los usuarios LDAP", "Clear Groupname-LDAP Group Mapping" : "Borrar la asignación de los Nombres de grupo de los grupos de LDAP" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/et_EE.js b/apps/user_ldap/l10n/et_EE.js index 6208c0fa697..f726859e825 100644 --- a/apps/user_ldap/l10n/et_EE.js +++ b/apps/user_ldap/l10n/et_EE.js @@ -126,7 +126,6 @@ OC.L10N.register( "UUID Attribute for Users:" : "UUID atribuut kasutajatele:", "UUID Attribute for Groups:" : "UUID atribuut gruppidele:", "Username-LDAP User Mapping" : "LDAP-Kasutajatunnus Kasutaja Vastendus", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud kasutab kasutajanime talletamaks ja omistamaks (pseudo) andmeid. Et täpselt tuvastada ja määratleda kasutajaid, peab iga LDAP kasutaja omama sisemist kasutajatunnust. See vajab ownCloud kasutajatunnuse vastendust LDAP kasutajaks. Tekitatud kasutajanimi vastendatakse LDAP kasutaja UUID-iks. Lisaks puhverdatakse DN vähendamaks LDAP päringuid, kuid seda ei kasutata tuvastamisel. ownCloud suudab tuvastada ka DN muutumise. ownCloud sisemist kasutajatunnust kasutatakse üle kogu ownCloudi. Eemaldates vastenduse tekivad kõikjal andmejäägid. Vastenduste eemaldamine ei ole konfiguratsiooni tundlik, see mõjutab kõiki LDAP seadistusi! Ära kunagi eemalda vastendusi produktsioonis! Seda võid teha ainult testis või katsetuste masinas.", "Clear Username-LDAP User Mapping" : "Puhasta LDAP-Kasutajatunnus Kasutaja Vastendus", "Clear Groupname-LDAP Group Mapping" : "Puhasta LDAP-Grupinimi Grupp Vastendus" }, diff --git a/apps/user_ldap/l10n/et_EE.json b/apps/user_ldap/l10n/et_EE.json index 81286459007..6994bacb485 100644 --- a/apps/user_ldap/l10n/et_EE.json +++ b/apps/user_ldap/l10n/et_EE.json @@ -124,7 +124,6 @@ "UUID Attribute for Users:" : "UUID atribuut kasutajatele:", "UUID Attribute for Groups:" : "UUID atribuut gruppidele:", "Username-LDAP User Mapping" : "LDAP-Kasutajatunnus Kasutaja Vastendus", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud kasutab kasutajanime talletamaks ja omistamaks (pseudo) andmeid. Et täpselt tuvastada ja määratleda kasutajaid, peab iga LDAP kasutaja omama sisemist kasutajatunnust. See vajab ownCloud kasutajatunnuse vastendust LDAP kasutajaks. Tekitatud kasutajanimi vastendatakse LDAP kasutaja UUID-iks. Lisaks puhverdatakse DN vähendamaks LDAP päringuid, kuid seda ei kasutata tuvastamisel. ownCloud suudab tuvastada ka DN muutumise. ownCloud sisemist kasutajatunnust kasutatakse üle kogu ownCloudi. Eemaldates vastenduse tekivad kõikjal andmejäägid. Vastenduste eemaldamine ei ole konfiguratsiooni tundlik, see mõjutab kõiki LDAP seadistusi! Ära kunagi eemalda vastendusi produktsioonis! Seda võid teha ainult testis või katsetuste masinas.", "Clear Username-LDAP User Mapping" : "Puhasta LDAP-Kasutajatunnus Kasutaja Vastendus", "Clear Groupname-LDAP Group Mapping" : "Puhasta LDAP-Grupinimi Grupp Vastendus" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/eu.js b/apps/user_ldap/l10n/eu.js index 3da1f9be156..3fb4c747006 100644 --- a/apps/user_ldap/l10n/eu.js +++ b/apps/user_ldap/l10n/eu.js @@ -123,7 +123,6 @@ OC.L10N.register( "UUID Attribute for Users:" : "Erabiltzaileentzako UUID atributuak:", "UUID Attribute for Groups:" : "Taldeentzako UUID atributuak:", "Username-LDAP User Mapping" : "LDAP-erabiltzaile-izena erabiltzailearen mapeatzea", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Erabiltzaile izenak (meta) datuak gordetzeko eta esleitzeko erabiltzen dira. Erabiltzaileak zehazki identifikatzeko eta ezagutzeko LDAP erabiltzaile bakoitzak barne erabiltzaile-izen bat edukiko du. Honek erabiltzaile izenatik LDAP erabiltzailera mapatzea eskatzen du. Sortutako erabiltzaile-izena mapatzen da LDAP erabiltzailearen UUID-ra. Gainera DN-a cachean gordetzen da ere LDAP-ren interakzioa txikitzeko, baina DN-a ez da erabiltzen identifikatzeko. Baldin eta DN-a aldatzen bada aldaketak aurkituko dira. Barneko erabiltzaile-izena denean erabiltzen da. Mapatzea garbitzeagatik hondarrak nonnahi ageriko dira. Mapatzeak garbitzeak eragiten dio LDAP ezarpen guztiei. Ez garbitu inoiz mapatzeak ingurune produktibo batean, egin soilik proba edo esperimentazio egoera batean.", "Clear Username-LDAP User Mapping" : "Garbitu LDAP-erabiltzaile-izenaren erabiltzaile mapaketa", "Clear Groupname-LDAP Group Mapping" : "Garbitu LDAP-talde-izenaren talde mapaketa" }, diff --git a/apps/user_ldap/l10n/eu.json b/apps/user_ldap/l10n/eu.json index 1c698593f56..cd89875f96f 100644 --- a/apps/user_ldap/l10n/eu.json +++ b/apps/user_ldap/l10n/eu.json @@ -121,7 +121,6 @@ "UUID Attribute for Users:" : "Erabiltzaileentzako UUID atributuak:", "UUID Attribute for Groups:" : "Taldeentzako UUID atributuak:", "Username-LDAP User Mapping" : "LDAP-erabiltzaile-izena erabiltzailearen mapeatzea", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Erabiltzaile izenak (meta) datuak gordetzeko eta esleitzeko erabiltzen dira. Erabiltzaileak zehazki identifikatzeko eta ezagutzeko LDAP erabiltzaile bakoitzak barne erabiltzaile-izen bat edukiko du. Honek erabiltzaile izenatik LDAP erabiltzailera mapatzea eskatzen du. Sortutako erabiltzaile-izena mapatzen da LDAP erabiltzailearen UUID-ra. Gainera DN-a cachean gordetzen da ere LDAP-ren interakzioa txikitzeko, baina DN-a ez da erabiltzen identifikatzeko. Baldin eta DN-a aldatzen bada aldaketak aurkituko dira. Barneko erabiltzaile-izena denean erabiltzen da. Mapatzea garbitzeagatik hondarrak nonnahi ageriko dira. Mapatzeak garbitzeak eragiten dio LDAP ezarpen guztiei. Ez garbitu inoiz mapatzeak ingurune produktibo batean, egin soilik proba edo esperimentazio egoera batean.", "Clear Username-LDAP User Mapping" : "Garbitu LDAP-erabiltzaile-izenaren erabiltzaile mapaketa", "Clear Groupname-LDAP Group Mapping" : "Garbitu LDAP-talde-izenaren talde mapaketa" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/fi_FI.js b/apps/user_ldap/l10n/fi_FI.js index 037708dc637..e36e2520462 100644 --- a/apps/user_ldap/l10n/fi_FI.js +++ b/apps/user_ldap/l10n/fi_FI.js @@ -41,6 +41,7 @@ OC.L10N.register( "For anonymous access, leave DN and Password empty." : "Jos haluat mahdollistaa anonyymin pääsyn, jätä DN ja Salasana tyhjäksi ", "You can specify Base DN for users and groups in the Advanced tab" : "Voit määrittää käyttäjien ja ryhmien oletus DN:n (distinguished name) 'tarkemmat asetukset'-välilehdeltä ", "users found" : "käyttäjää löytynyt", + "Saving" : "Tallennetaan", "Back" : "Takaisin", "Continue" : "Jatka", "LDAP" : "LDAP", diff --git a/apps/user_ldap/l10n/fi_FI.json b/apps/user_ldap/l10n/fi_FI.json index 335f13bd093..8081756a0e9 100644 --- a/apps/user_ldap/l10n/fi_FI.json +++ b/apps/user_ldap/l10n/fi_FI.json @@ -39,6 +39,7 @@ "For anonymous access, leave DN and Password empty." : "Jos haluat mahdollistaa anonyymin pääsyn, jätä DN ja Salasana tyhjäksi ", "You can specify Base DN for users and groups in the Advanced tab" : "Voit määrittää käyttäjien ja ryhmien oletus DN:n (distinguished name) 'tarkemmat asetukset'-välilehdeltä ", "users found" : "käyttäjää löytynyt", + "Saving" : "Tallennetaan", "Back" : "Takaisin", "Continue" : "Jatka", "LDAP" : "LDAP", diff --git a/apps/user_ldap/l10n/fr.js b/apps/user_ldap/l10n/fr.js index 0783dd94af7..8cc22a71a91 100644 --- a/apps/user_ldap/l10n/fr.js +++ b/apps/user_ldap/l10n/fr.js @@ -48,14 +48,14 @@ OC.L10N.register( "only from those groups:" : "seulement de ces groupes :", "Edit raw filter instead" : "Éditer le filtre raw à la place", "Raw LDAP filter" : "Filtre Raw LDAP", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Le filtre spécifie quels groupes LDAP doivent avoir accès à l'instance %s.", + "The filter specifies which LDAP groups shall have access to the %s instance." : "Le filtre spécifie quels groupes LDAP ont accès à l'instance %s.", "Test Filter" : "Test du filtre", "groups found" : "groupes trouvés", - "Users login with this attribute:" : "Utilisateurs se connectant avec cet attribut :", + "Users login with this attribute:" : "Les utilisateurs se connectent en utilisant cet attribut :", "LDAP Username:" : "Nom d'utilisateur LDAP :", "LDAP Email Address:" : "Adresse email LDAP :", "Other Attributes:" : "Autres attributs :", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Définit le filtre à appliquer lors d'une tentative de connexion. %%uid remplace le nom d'utilisateur lors de la connexion. Exemple : \"uid=%%uid\"", + "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Définit le filtre à appliquer lors d'une tentative de connexion. %%uid remplace le nom d'utilisateur. Exemple : \"uid=%%uid\"", "1. Server" : "1. Serveur", "%s. Server:" : "%s. Serveur :", "Add Server Configuration" : "Ajouter une configuration du serveur", @@ -127,7 +127,7 @@ OC.L10N.register( "UUID Attribute for Users:" : "Attribut UUID pour les utilisateurs :", "UUID Attribute for Groups:" : "Attribut UUID pour les groupes :", "Username-LDAP User Mapping" : "Association Nom d'utilisateur-Utilisateur LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Les noms d'utilisateurs sont utilisés pour le stockage et l'assignation de (meta) données. Pour identifier et reconnaître précisément les utilisateurs, chaque utilisateur LDAP aura un nom interne spécifique. Cela requiert l'association d'un nom d'utilisateur ownCloud à un nom d'utilisateur LDAP. Le nom d'utilisateur créé est associé à l'attribut UUID de l'utilisateur LDAP. Par ailleurs, le DN est mémorisé en cache pour limiter les interactions LDAP mais il n'est pas utilisé pour l'identification. Si le DN est modifié, ces modifications seront retrouvées. Seul le nom interne à ownCloud est utilisé au sein du produit. Supprimer les associations créera des orphelins et l'action affectera toutes les configurations LDAP. NE JAMAIS SUPPRIMER LES ASSOCIATIONS EN ENVIRONNEMENT DE PRODUCTION, mais uniquement sur des environnements de tests et d'expérimentation.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Les noms d'utilisateurs sont utilisés pour le stockage et l'assignation de (meta) données. Pour identifier et reconnaître précisément les utilisateurs, chaque utilisateur LDAP aura un nom interne spécifique. Cela requiert l'association d'un nom d'utilisateur ownCloud à un nom d'utilisateur LDAP. Le nom d'utilisateur créé est associé à l'attribut UUID de l'utilisateur LDAP. Par ailleurs, le DN est mémorisé en cache pour limiter les interactions LDAP mais il n'est pas utilisé pour l'identification. Si le DN est modifié, ces modifications seront retrouvées. Seul le nom interne à ownCloud est utilisé au sein du produit. Supprimer les associations créera des orphelins et l'action affectera toutes les configurations LDAP. NE JAMAIS SUPPRIMER LES ASSOCIATIONS EN ENVIRONNEMENT DE PRODUCTION, mais uniquement sur des environnements de tests et d'expérimentations.", "Clear Username-LDAP User Mapping" : "Supprimer l'association utilisateur interne-utilisateur LDAP", "Clear Groupname-LDAP Group Mapping" : "Supprimer l'association nom de groupe-groupe LDAP" }, diff --git a/apps/user_ldap/l10n/fr.json b/apps/user_ldap/l10n/fr.json index 06cc2e9c60e..523a503467c 100644 --- a/apps/user_ldap/l10n/fr.json +++ b/apps/user_ldap/l10n/fr.json @@ -46,14 +46,14 @@ "only from those groups:" : "seulement de ces groupes :", "Edit raw filter instead" : "Éditer le filtre raw à la place", "Raw LDAP filter" : "Filtre Raw LDAP", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Le filtre spécifie quels groupes LDAP doivent avoir accès à l'instance %s.", + "The filter specifies which LDAP groups shall have access to the %s instance." : "Le filtre spécifie quels groupes LDAP ont accès à l'instance %s.", "Test Filter" : "Test du filtre", "groups found" : "groupes trouvés", - "Users login with this attribute:" : "Utilisateurs se connectant avec cet attribut :", + "Users login with this attribute:" : "Les utilisateurs se connectent en utilisant cet attribut :", "LDAP Username:" : "Nom d'utilisateur LDAP :", "LDAP Email Address:" : "Adresse email LDAP :", "Other Attributes:" : "Autres attributs :", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Définit le filtre à appliquer lors d'une tentative de connexion. %%uid remplace le nom d'utilisateur lors de la connexion. Exemple : \"uid=%%uid\"", + "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Définit le filtre à appliquer lors d'une tentative de connexion. %%uid remplace le nom d'utilisateur. Exemple : \"uid=%%uid\"", "1. Server" : "1. Serveur", "%s. Server:" : "%s. Serveur :", "Add Server Configuration" : "Ajouter une configuration du serveur", @@ -125,7 +125,7 @@ "UUID Attribute for Users:" : "Attribut UUID pour les utilisateurs :", "UUID Attribute for Groups:" : "Attribut UUID pour les groupes :", "Username-LDAP User Mapping" : "Association Nom d'utilisateur-Utilisateur LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Les noms d'utilisateurs sont utilisés pour le stockage et l'assignation de (meta) données. Pour identifier et reconnaître précisément les utilisateurs, chaque utilisateur LDAP aura un nom interne spécifique. Cela requiert l'association d'un nom d'utilisateur ownCloud à un nom d'utilisateur LDAP. Le nom d'utilisateur créé est associé à l'attribut UUID de l'utilisateur LDAP. Par ailleurs, le DN est mémorisé en cache pour limiter les interactions LDAP mais il n'est pas utilisé pour l'identification. Si le DN est modifié, ces modifications seront retrouvées. Seul le nom interne à ownCloud est utilisé au sein du produit. Supprimer les associations créera des orphelins et l'action affectera toutes les configurations LDAP. NE JAMAIS SUPPRIMER LES ASSOCIATIONS EN ENVIRONNEMENT DE PRODUCTION, mais uniquement sur des environnements de tests et d'expérimentation.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Les noms d'utilisateurs sont utilisés pour le stockage et l'assignation de (meta) données. Pour identifier et reconnaître précisément les utilisateurs, chaque utilisateur LDAP aura un nom interne spécifique. Cela requiert l'association d'un nom d'utilisateur ownCloud à un nom d'utilisateur LDAP. Le nom d'utilisateur créé est associé à l'attribut UUID de l'utilisateur LDAP. Par ailleurs, le DN est mémorisé en cache pour limiter les interactions LDAP mais il n'est pas utilisé pour l'identification. Si le DN est modifié, ces modifications seront retrouvées. Seul le nom interne à ownCloud est utilisé au sein du produit. Supprimer les associations créera des orphelins et l'action affectera toutes les configurations LDAP. NE JAMAIS SUPPRIMER LES ASSOCIATIONS EN ENVIRONNEMENT DE PRODUCTION, mais uniquement sur des environnements de tests et d'expérimentations.", "Clear Username-LDAP User Mapping" : "Supprimer l'association utilisateur interne-utilisateur LDAP", "Clear Groupname-LDAP Group Mapping" : "Supprimer l'association nom de groupe-groupe LDAP" },"pluralForm" :"nplurals=2; plural=(n > 1);" diff --git a/apps/user_ldap/l10n/gl.js b/apps/user_ldap/l10n/gl.js index a2359d41ebc..4269c47363e 100644 --- a/apps/user_ldap/l10n/gl.js +++ b/apps/user_ldap/l10n/gl.js @@ -18,9 +18,9 @@ OC.L10N.register( "mappings cleared" : "limpadas as asignacións", "Success" : "Correcto", "Error" : "Erro", - "Please specify a Base DN" : "Por favor indique un DN base", + "Please specify a Base DN" : "Indique un DN base", "Could not determine Base DN" : "Non se puido determinar o DN base", - "Please specify the port" : "Por favor indique un porto", + "Please specify the port" : "Especifique un porto", "Configuration OK" : "Configuración correcta", "Configuration incorrect" : "Configuración incorrecta", "Configuration incomplete" : "Configuración incompleta", @@ -127,7 +127,7 @@ OC.L10N.register( "UUID Attribute for Users:" : "Atributo do UUID para usuarios:", "UUID Attribute for Groups:" : "Atributo do UUID para grupos:", "Username-LDAP User Mapping" : "Asignación do usuario ao «nome de usuario LDAP»", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Os nomes de usuario empréganse para almacenar e asignar (meta) datos. Coa fin de identificar con precisión e recoñecer aos usuarios, cada usuario LDAP terá un nome de usuario interno. Isto require unha asignación de ownCloud nome de usuario a usuario LDAP. O nome de usuario creado asignase ao UUID do usuario LDAP. Ademais o DN almacenase na caché, para así reducir a interacción do LDAP, mais non se utiliza para a identificación. Se o DN cambia, os cambios poden ser atopados polo ownCloud. O nome interno no ownCloud utilizase en todo o ownCloud. A limpeza das asignacións deixará rastros en todas partes. A limpeza das asignacións non é sensíbel á configuración, afecta a todas as configuracións de LDAP! Non limpar nunca as asignacións nun entorno de produción. Limpar as asignacións só en fases de proba ou experimentais.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Os nomes de usuario empréganse para almacenar e asignar (meta) datos. Coa fin de identificar con precisión e recoñecer aos usuarios, cada usuario LDAP terá un nome de usuario interno. Isto require unha asignación do nome de usuario a usuario LDAP. O nome de usuario creado asignase ao UUID do usuario LDAP. Ademais o DN almacenase na caché, para así reducir a interacción do LDAP, mais non se utiliza para a identificación. Se o DN cambia, os cambios poden ser atopados. O nome interno do usuario utilizase para todo. A limpeza das asignacións deixará rastros en todas partes. A limpeza das asignacións non é sensíbel á configuración, afecta a todas as configuracións de LDAP! Non limpar nunca as asignacións nun entorno de produción. Limpar as asignacións só en fases de proba ou experimentais.", "Clear Username-LDAP User Mapping" : "Limpar a asignación do usuario ao «nome de usuario LDAP»", "Clear Groupname-LDAP Group Mapping" : "Limpar a asignación do grupo ao «nome de grupo LDAP»" }, diff --git a/apps/user_ldap/l10n/gl.json b/apps/user_ldap/l10n/gl.json index 0f6d4e00cdf..9aa1d3f6765 100644 --- a/apps/user_ldap/l10n/gl.json +++ b/apps/user_ldap/l10n/gl.json @@ -16,9 +16,9 @@ "mappings cleared" : "limpadas as asignacións", "Success" : "Correcto", "Error" : "Erro", - "Please specify a Base DN" : "Por favor indique un DN base", + "Please specify a Base DN" : "Indique un DN base", "Could not determine Base DN" : "Non se puido determinar o DN base", - "Please specify the port" : "Por favor indique un porto", + "Please specify the port" : "Especifique un porto", "Configuration OK" : "Configuración correcta", "Configuration incorrect" : "Configuración incorrecta", "Configuration incomplete" : "Configuración incompleta", @@ -125,7 +125,7 @@ "UUID Attribute for Users:" : "Atributo do UUID para usuarios:", "UUID Attribute for Groups:" : "Atributo do UUID para grupos:", "Username-LDAP User Mapping" : "Asignación do usuario ao «nome de usuario LDAP»", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Os nomes de usuario empréganse para almacenar e asignar (meta) datos. Coa fin de identificar con precisión e recoñecer aos usuarios, cada usuario LDAP terá un nome de usuario interno. Isto require unha asignación de ownCloud nome de usuario a usuario LDAP. O nome de usuario creado asignase ao UUID do usuario LDAP. Ademais o DN almacenase na caché, para así reducir a interacción do LDAP, mais non se utiliza para a identificación. Se o DN cambia, os cambios poden ser atopados polo ownCloud. O nome interno no ownCloud utilizase en todo o ownCloud. A limpeza das asignacións deixará rastros en todas partes. A limpeza das asignacións non é sensíbel á configuración, afecta a todas as configuracións de LDAP! Non limpar nunca as asignacións nun entorno de produción. Limpar as asignacións só en fases de proba ou experimentais.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Os nomes de usuario empréganse para almacenar e asignar (meta) datos. Coa fin de identificar con precisión e recoñecer aos usuarios, cada usuario LDAP terá un nome de usuario interno. Isto require unha asignación do nome de usuario a usuario LDAP. O nome de usuario creado asignase ao UUID do usuario LDAP. Ademais o DN almacenase na caché, para así reducir a interacción do LDAP, mais non se utiliza para a identificación. Se o DN cambia, os cambios poden ser atopados. O nome interno do usuario utilizase para todo. A limpeza das asignacións deixará rastros en todas partes. A limpeza das asignacións non é sensíbel á configuración, afecta a todas as configuracións de LDAP! Non limpar nunca as asignacións nun entorno de produción. Limpar as asignacións só en fases de proba ou experimentais.", "Clear Username-LDAP User Mapping" : "Limpar a asignación do usuario ao «nome de usuario LDAP»", "Clear Groupname-LDAP Group Mapping" : "Limpar a asignación do grupo ao «nome de grupo LDAP»" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/hu_HU.js b/apps/user_ldap/l10n/hu_HU.js index d1baabf1ce4..8548724aea7 100644 --- a/apps/user_ldap/l10n/hu_HU.js +++ b/apps/user_ldap/l10n/hu_HU.js @@ -124,7 +124,6 @@ OC.L10N.register( "UUID Attribute for Users:" : "A felhasználók UUID attribútuma:", "UUID Attribute for Groups:" : "A csoportok UUID attribútuma:", "Username-LDAP User Mapping" : "Felhasználó - LDAP felhasználó hozzárendelés", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "A felhasználónevek segítségével történik a (meta)adatok tárolása és hozzárendelése. A felhasználók pontos azonosítása céljából minden LDAP felhasználóhoz egy belső felhasználónevet rendelünk. Ezt a felhasználónevet az LDAP felhasználó UUID attribútumához rendeljük hozzá. Ezen túlmenően a DN is tárolásra kerül a gyorsítótárban, hogy csökkentsük az LDAP lekérdezések számát, de a DN-t nem használjuk azonosításra. Ha a DN megváltozik, akkor a rendszer ezt észleli. A belső felhasználóneveket a rendszer igen sok helyen használja, ezért a hozzárendelések törlése sok érvénytelen adatrekordot eredményez az adatbázisban. A hozzárendelések törlése nem függ a konfigurációtól, minden LDAP konfigurációt érint! Ténylegesen működő szolgáltatás esetén sose törölje a hozzárendeléseket, csak tesztelési vagy kísérleti célú szerveren!", "Clear Username-LDAP User Mapping" : "A felhasználó - LDAP felhasználó hozzárendelés törlése", "Clear Groupname-LDAP Group Mapping" : "A csoport - LDAP csoport hozzárendelés törlése" }, diff --git a/apps/user_ldap/l10n/hu_HU.json b/apps/user_ldap/l10n/hu_HU.json index be919f99e47..a9d9a69195a 100644 --- a/apps/user_ldap/l10n/hu_HU.json +++ b/apps/user_ldap/l10n/hu_HU.json @@ -122,7 +122,6 @@ "UUID Attribute for Users:" : "A felhasználók UUID attribútuma:", "UUID Attribute for Groups:" : "A csoportok UUID attribútuma:", "Username-LDAP User Mapping" : "Felhasználó - LDAP felhasználó hozzárendelés", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "A felhasználónevek segítségével történik a (meta)adatok tárolása és hozzárendelése. A felhasználók pontos azonosítása céljából minden LDAP felhasználóhoz egy belső felhasználónevet rendelünk. Ezt a felhasználónevet az LDAP felhasználó UUID attribútumához rendeljük hozzá. Ezen túlmenően a DN is tárolásra kerül a gyorsítótárban, hogy csökkentsük az LDAP lekérdezések számát, de a DN-t nem használjuk azonosításra. Ha a DN megváltozik, akkor a rendszer ezt észleli. A belső felhasználóneveket a rendszer igen sok helyen használja, ezért a hozzárendelések törlése sok érvénytelen adatrekordot eredményez az adatbázisban. A hozzárendelések törlése nem függ a konfigurációtól, minden LDAP konfigurációt érint! Ténylegesen működő szolgáltatás esetén sose törölje a hozzárendeléseket, csak tesztelési vagy kísérleti célú szerveren!", "Clear Username-LDAP User Mapping" : "A felhasználó - LDAP felhasználó hozzárendelés törlése", "Clear Groupname-LDAP Group Mapping" : "A csoport - LDAP csoport hozzárendelés törlése" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/it.js b/apps/user_ldap/l10n/it.js index 30b9a39f0ea..3d0faefbcd0 100644 --- a/apps/user_ldap/l10n/it.js +++ b/apps/user_ldap/l10n/it.js @@ -127,7 +127,7 @@ OC.L10N.register( "UUID Attribute for Users:" : "Attributo UUID per gli utenti:", "UUID Attribute for Groups:" : "Attributo UUID per i gruppi:", "Username-LDAP User Mapping" : "Associazione Nome utente-Utente LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "I nomi utente sono utilizzati per archiviare e assegnare i (meta) dati. Per identificare con precisione e riconoscere gli utenti, ogni utente LDAP avrà un nome utente interno. Ciò richiede un'associazione tra il nome utente e l'utente LDAP. In aggiunta, il DN viene mantenuto in cache per ridurre l'interazione con LDAP, ma non è utilizzato per l'identificazione. Se il DN cambia, le modifiche saranno rilevate. Il nome utente interno è utilizzato dappertutto. La cancellazione delle associazioni lascerà tracce residue ovunque e interesserà esclusivamente la configurazione LDAP. Non cancellare mai le associazioni in un ambiente di produzione, ma solo in una fase sperimentale o di test.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "I nomi utente sono utilizzati per archiviare e assegnare i (meta) dati. Per identificare con precisione e riconoscere gli utenti, ogni utente LDAP avrà un nome utente interno. Ciò richiede un'associazione tra il nome utente e l'utente LDAP. In aggiunta, il DN viene mantenuto in cache per ridurre l'interazione con LDAP, ma non è utilizzato per l'identificazione. Se il DN cambia, le modifiche saranno rilevate. Il nome utente interno è utilizzato dappertutto. La cancellazione delle associazioni lascerà tracce residue ovunque e interesserà tutta la configurazione LDAP. Non cancellare mai le associazioni in un ambiente di produzione, ma solo in una fase sperimentale o di test.", "Clear Username-LDAP User Mapping" : "Cancella associazione Nome utente-Utente LDAP", "Clear Groupname-LDAP Group Mapping" : "Cancella associazione Nome gruppo-Gruppo LDAP" }, diff --git a/apps/user_ldap/l10n/it.json b/apps/user_ldap/l10n/it.json index 58b405730a4..c5c4950379e 100644 --- a/apps/user_ldap/l10n/it.json +++ b/apps/user_ldap/l10n/it.json @@ -125,7 +125,7 @@ "UUID Attribute for Users:" : "Attributo UUID per gli utenti:", "UUID Attribute for Groups:" : "Attributo UUID per i gruppi:", "Username-LDAP User Mapping" : "Associazione Nome utente-Utente LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "I nomi utente sono utilizzati per archiviare e assegnare i (meta) dati. Per identificare con precisione e riconoscere gli utenti, ogni utente LDAP avrà un nome utente interno. Ciò richiede un'associazione tra il nome utente e l'utente LDAP. In aggiunta, il DN viene mantenuto in cache per ridurre l'interazione con LDAP, ma non è utilizzato per l'identificazione. Se il DN cambia, le modifiche saranno rilevate. Il nome utente interno è utilizzato dappertutto. La cancellazione delle associazioni lascerà tracce residue ovunque e interesserà esclusivamente la configurazione LDAP. Non cancellare mai le associazioni in un ambiente di produzione, ma solo in una fase sperimentale o di test.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "I nomi utente sono utilizzati per archiviare e assegnare i (meta) dati. Per identificare con precisione e riconoscere gli utenti, ogni utente LDAP avrà un nome utente interno. Ciò richiede un'associazione tra il nome utente e l'utente LDAP. In aggiunta, il DN viene mantenuto in cache per ridurre l'interazione con LDAP, ma non è utilizzato per l'identificazione. Se il DN cambia, le modifiche saranno rilevate. Il nome utente interno è utilizzato dappertutto. La cancellazione delle associazioni lascerà tracce residue ovunque e interesserà tutta la configurazione LDAP. Non cancellare mai le associazioni in un ambiente di produzione, ma solo in una fase sperimentale o di test.", "Clear Username-LDAP User Mapping" : "Cancella associazione Nome utente-Utente LDAP", "Clear Groupname-LDAP Group Mapping" : "Cancella associazione Nome gruppo-Gruppo LDAP" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/ja.js b/apps/user_ldap/l10n/ja.js index b139c5b3fb4..84ae5b22991 100644 --- a/apps/user_ldap/l10n/ja.js +++ b/apps/user_ldap/l10n/ja.js @@ -3,7 +3,7 @@ OC.L10N.register( { "Failed to clear the mappings." : "マッピングのクリアに失敗しました。", "Failed to delete the server configuration" : "サーバー設定の削除に失敗しました", - "The configuration is valid and the connection could be established!" : "設定は有効であり、接続を確立しました!", + "The configuration is valid and the connection could be established!" : "設定は有効です。接続できました。", "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "設定は有効ですが、接続に失敗しました。サーバー設定と資格情報を確認してください。", "The configuration is invalid. Please have a look at the logs for further details." : "設定が無効です。詳細はログを確認してください。", "No action specified" : "アクションが指定されていません", @@ -11,7 +11,7 @@ OC.L10N.register( "No data specified" : "データが指定されていません", " Could not set configuration %s" : "構成 %s を設定できませんでした", "Deletion failed" : "削除に失敗しました", - "Take over settings from recent server configuration?" : "最近のサーバー設定から設定を引き継ぎますか?", + "Take over settings from recent server configuration?" : "最新のサーバー設定から設定を引き継ぎますか?", "Keep settings?" : "設定を保持しますか?", "{nthServer}. Server" : "{nthServer}. サーバー", "Cannot add server configuration" : "サーバー設定を追加できません", @@ -39,23 +39,23 @@ OC.L10N.register( "Server" : "サーバー", "User Filter" : "ユーザーフィルター", "Login Filter" : "ログインフィルター", - "Group Filter" : "グループフィルタ", + "Group Filter" : "グループフィルター", "Save" : "保存", "Test Configuration" : "設定をテスト", "Help" : "ヘルプ", "Groups meeting these criteria are available in %s:" : "これらの基準を満たすグループが %s で利用可能:", - "only those object classes:" : "それらのオブジェクトクラスのみ:", - "only from those groups:" : "それらのグループからのみ:", - "Edit raw filter instead" : "フィルタを編集", - "Raw LDAP filter" : "LDAP フィルタ", - "The filter specifies which LDAP groups shall have access to the %s instance." : "フィルタは、どの LDAP グループが %s にアクセスするかを指定します。", + "only those object classes:" : "このオブジェクトクラスのみ:", + "only from those groups:" : "次のグループから:", + "Edit raw filter instead" : "フィルターを直接編集", + "Raw LDAP filter" : "LDAPフィルター", + "The filter specifies which LDAP groups shall have access to the %s instance." : "フィルターは、どの LDAP グループが %s にアクセスするかを指定します。", "Test Filter" : "フィルターをテスト", "groups found" : "グループが見つかりました", "Users login with this attribute:" : "この属性でユーザーログイン:", "LDAP Username:" : "LDAPユーザー名:", "LDAP Email Address:" : "LDAPメールアドレス:", - "Other Attributes:" : "他の属性:", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "ログイン実行時に適用するフィルタを定義します。%%uid にはログイン操作におけるユーザー名が入ります。例: \"uid=%%uid\"", + "Other Attributes:" : "その他の属性:", + "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "ログイン実行時に適用するフィルターを定義します。%%uid にはログイン操作におけるユーザー名が入ります。例: \"uid=%%uid\"", "1. Server" : "1. Server", "%s. Server:" : "%s. サーバー:", "Add Server Configuration" : "サーバー設定を追加", @@ -64,15 +64,15 @@ OC.L10N.register( "You can omit the protocol, except you require SSL. Then start with ldaps://" : "SSL通信しない場合には、プロトコル名を省略することができます。そうでない場合には、ldaps:// から始めてください。", "Port" : "ポート", "User DN" : "ユーザーDN", - "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "クライアントユーザーのDNは、特定のものに結びつけることはしません。 例えば uid=agent,dc=example,dc=com. だと匿名アクセスの場合、DNとパスワードは空のままです。", + "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "どのクライアントユーザーのDNで接続するか指定します。例えば uid=agent,dc=example,dc=com になります。匿名アクセスの場合、DNとパスワードは空のままにしてください。", "Password" : "パスワード", - "For anonymous access, leave DN and Password empty." : "匿名アクセスの場合は、DNとパスワードを空にしてください。", - "One Base DN per line" : "1行に1つのベースDN", - "You can specify Base DN for users and groups in the Advanced tab" : "拡張タブでユーザーとグループのベースDNを指定することができます。", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "自動LDAP問合せを停止。大規模な設定には適していますが、LDAPの知識がいくらか必要になります。", + "For anonymous access, leave DN and Password empty." : "匿名アクセスの場合は、DNとパスワードを空のままにしてください。", + "One Base DN per line" : "1行に1つのベースDNを記入", + "You can specify Base DN for users and groups in the Advanced tab" : "詳細設定でユーザーとグループのベースDNを指定することができます。", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "自動的なLDAP問合せを停止します。大規模な設定には適していますが、LDAPの知識が必要になります。", "Manually enter LDAP filters (recommended for large directories)" : "手動でLDAPフィルターを入力(大規模ディレクトリ時のみ推奨)", - "Limit %s access to users meeting these criteria:" : "この基準を満たすユーザーに対し %s へのアクセスを制限:", - "The filter specifies which LDAP users shall have access to the %s instance." : "フィルタは、どのLDAPユーザーが %s にアクセスするかを指定します。", + "Limit %s access to users meeting these criteria:" : "以下のフィルターに適合するユーザーのみ %s へアクセスを許可:", + "The filter specifies which LDAP users shall have access to the %s instance." : "フィルターは、どのLDAPユーザーが %s にアクセスするかを指定します。", "users found" : "ユーザーが見つかりました", "Saving" : "保存中", "Back" : "戻る", @@ -81,9 +81,9 @@ OC.L10N.register( "Expert" : "エキスパート設定", "Advanced" : "詳細設定", "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>警告:</b> user_ldap と user_webdavauth のアプリには互換性がありません。予期せぬ動作をする可能性があります。システム管理者にどちらかを無効にするよう問い合わせてください。", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>警告:</b> PHP LDAP モジュールがインストールされていません。バックエンドが正しく動作しません。システム管理者にインストールするよう問い合わせてください。", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>警告:</b> PHP LDAP モジュールがインストールされていません。バックエンド接続が正しく動作しません。システム管理者にインストールするよう問い合わせてください。", "Connection Settings" : "接続設定", - "Configuration Active" : "設定はアクティブです", + "Configuration Active" : "設定は有効です", "When unchecked, this configuration will be skipped." : "チェックを外すと、この設定はスキップされます。", "Backup (Replica) Host" : "バックアップ(レプリカ)ホスト", "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "バックアップホストをオプションで指定することができます。メインのLDAP/ADサーバーのレプリカである必要があります。", @@ -108,26 +108,25 @@ OC.L10N.register( "One Group Base DN per line" : "1行に1つのグループベースDN", "Group Search Attributes" : "グループ検索属性", "Group-Member association" : "グループとメンバーの関連付け", - "Nested Groups" : "ネスト化ブロック", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "オンに切り替えたら、グループを含むグループがサポートされます。(グループメンバーの属性がDNを含む場合のみ有効です。)", + "Nested Groups" : "ネストされたグループ", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "オンにすると、グループを含むグループが有効になります。(グループメンバーの属性にDNが含まれる場合のみ利用できます。)", "Paging chunksize" : "ページ分割サイズ", "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "ページ分割サイズは、LDAP検索時にユーザーやグループのリスト一覧データを一括で返すデータ量を指定します。(設定が0の場合には、LDAP検索の分割転送は無効)", "Special Attributes" : "特殊属性", - "Quota Field" : "クォータフィールド", + "Quota Field" : "クォータ属性", "Quota Default" : "クォータのデフォルト", "in bytes" : "バイト", - "Email Field" : "メールフィールド", + "Email Field" : "メール属性", "User Home Folder Naming Rule" : "ユーザーのホームフォルダー命名規則", "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "ユーザー名を空のままにしてください(デフォルト)。もしくは、LDAPもしくはADの属性を指定してください。", "Internal Username" : "内部ユーザー名", - "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "デフォルトでは、内部ユーザー名はUUID属性から作成されます。これにより、ユーザー名がユニークであり、かつ文字の変換が不要であることを保証します。内部ユーザー名には、[ a-zA-Z0-9_.@- ] の文字のみが有効であるという制限があり、その他の文字は対応する ASCII コードに変換されるか単に無視されます。そのため、他のユーザ名との衝突の回数が増加するでしょう。内部ユーザー名は、内部的にユーザを識別するために用いられ、また、ownCloudにおけるデフォルトのホームフォルダー名としても用いられます。例えば*DAVサービスのように、リモートURLの一部でもあります。この設定により、デフォルトの振る舞いを再定義します。ownCloud 5 以前と同じような振る舞いにするためには、以下のフィールドにユーザー表示名の属性を入力します。空にするとデフォルトの振る舞いとなります。変更は新しくマッピング(追加)されたLDAPユーザーにおいてのみ有効となります。", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "デフォルトでは、内部的なユーザー名がUUID属性から作成されます。これにより、ユーザー名がユニークであり、かつ文字の変換が不要であることを保証します。内部ユーザー名には、[ a-zA-Z0-9_.@- ] の文字のみが有効であるという制限があり、その他の文字は対応する ASCII コードに変換されるか単に無視されます。そのため、他のユーザ名との衝突の回数が増加するでしょう。内部ユーザー名は、内部的にユーザを識別するために用いられ、また、ownCloudにおけるデフォルトのホームフォルダー名としても用いられます。例えば*DAVサービスのように、リモートURLの一部でもあります。この設定により、デフォルトの振る舞いを再定義します。ownCloud 5 以前と同じような振る舞いにするためには、以下のフィールドにユーザー表示名の属性を入力します。空にするとデフォルトの振る舞いとなります。変更は新しくマッピング(追加)されたLDAPユーザーにおいてのみ有効となります。", "Internal Username Attribute:" : "内部ユーザー名属性:", "Override UUID detection" : "UUID検出を再定義する", "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "デフォルトでは、UUID 属性は自動的に検出されます。UUID属性は、LDAPユーザーとLDAPグループを間違いなく識別するために利用されます。また、もしこれを指定しない場合は、内部ユーザー名はUUIDに基づいて作成されます。この設定は再定義することができ、あなたの選択した属性を用いることができます。選択した属性がユーザーとグループの両方に対して適用でき、かつユニークであることを確認してください。空であればデフォルトの振る舞いとなります。変更は、新しくマッピング(追加)されたLDAPユーザーとLDAPグループに対してのみ有効となります。", "UUID Attribute for Users:" : "ユーザーのUUID属性:", "UUID Attribute for Groups:" : "グループの UUID 属性:", "Username-LDAP User Mapping" : "ユーザー名とLDAPユーザのマッピング", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ユーザー名は(メタ)データの保存と割り当てに使用されます。ユーザーを正確に識別して認識するために、個々のLDAPユーザは内部ユーザ名を持っています。これは、ユーザー名からLDAPユーザーへのマッピングが必要であることを意味しています。この生成されたユーザ名は、LDAPユーザのUUIDにマッピングされます。加えて、DNがLDAPとのインタラクションを削減するためにキャッシュされますが、識別には利用されません。DNが変わった場合は、変更が検出されます。内部ユーザ名は全体に亘って利用されます。マッピングをクリアすると、いたるところに使われないままの物が残るでしょう。マッピングのクリアは設定に敏感ではありませんが、すべてのLDAPの設定に影響を与えます!本番の環境では決してマッピングをクリアしないでください。テストもしくは実験の段階でのみマッピングのクリアを行なってください。", "Clear Username-LDAP User Mapping" : "ユーザー名とLDAPユーザーのマッピングをクリアする", "Clear Groupname-LDAP Group Mapping" : "グループ名とLDAPグループのマッピングをクリアする" }, diff --git a/apps/user_ldap/l10n/ja.json b/apps/user_ldap/l10n/ja.json index 25ad7f73bd8..a03d120b1e8 100644 --- a/apps/user_ldap/l10n/ja.json +++ b/apps/user_ldap/l10n/ja.json @@ -1,7 +1,7 @@ { "translations": { "Failed to clear the mappings." : "マッピングのクリアに失敗しました。", "Failed to delete the server configuration" : "サーバー設定の削除に失敗しました", - "The configuration is valid and the connection could be established!" : "設定は有効であり、接続を確立しました!", + "The configuration is valid and the connection could be established!" : "設定は有効です。接続できました。", "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "設定は有効ですが、接続に失敗しました。サーバー設定と資格情報を確認してください。", "The configuration is invalid. Please have a look at the logs for further details." : "設定が無効です。詳細はログを確認してください。", "No action specified" : "アクションが指定されていません", @@ -9,7 +9,7 @@ "No data specified" : "データが指定されていません", " Could not set configuration %s" : "構成 %s を設定できませんでした", "Deletion failed" : "削除に失敗しました", - "Take over settings from recent server configuration?" : "最近のサーバー設定から設定を引き継ぎますか?", + "Take over settings from recent server configuration?" : "最新のサーバー設定から設定を引き継ぎますか?", "Keep settings?" : "設定を保持しますか?", "{nthServer}. Server" : "{nthServer}. サーバー", "Cannot add server configuration" : "サーバー設定を追加できません", @@ -37,23 +37,23 @@ "Server" : "サーバー", "User Filter" : "ユーザーフィルター", "Login Filter" : "ログインフィルター", - "Group Filter" : "グループフィルタ", + "Group Filter" : "グループフィルター", "Save" : "保存", "Test Configuration" : "設定をテスト", "Help" : "ヘルプ", "Groups meeting these criteria are available in %s:" : "これらの基準を満たすグループが %s で利用可能:", - "only those object classes:" : "それらのオブジェクトクラスのみ:", - "only from those groups:" : "それらのグループからのみ:", - "Edit raw filter instead" : "フィルタを編集", - "Raw LDAP filter" : "LDAP フィルタ", - "The filter specifies which LDAP groups shall have access to the %s instance." : "フィルタは、どの LDAP グループが %s にアクセスするかを指定します。", + "only those object classes:" : "このオブジェクトクラスのみ:", + "only from those groups:" : "次のグループから:", + "Edit raw filter instead" : "フィルターを直接編集", + "Raw LDAP filter" : "LDAPフィルター", + "The filter specifies which LDAP groups shall have access to the %s instance." : "フィルターは、どの LDAP グループが %s にアクセスするかを指定します。", "Test Filter" : "フィルターをテスト", "groups found" : "グループが見つかりました", "Users login with this attribute:" : "この属性でユーザーログイン:", "LDAP Username:" : "LDAPユーザー名:", "LDAP Email Address:" : "LDAPメールアドレス:", - "Other Attributes:" : "他の属性:", - "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "ログイン実行時に適用するフィルタを定義します。%%uid にはログイン操作におけるユーザー名が入ります。例: \"uid=%%uid\"", + "Other Attributes:" : "その他の属性:", + "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "ログイン実行時に適用するフィルターを定義します。%%uid にはログイン操作におけるユーザー名が入ります。例: \"uid=%%uid\"", "1. Server" : "1. Server", "%s. Server:" : "%s. サーバー:", "Add Server Configuration" : "サーバー設定を追加", @@ -62,15 +62,15 @@ "You can omit the protocol, except you require SSL. Then start with ldaps://" : "SSL通信しない場合には、プロトコル名を省略することができます。そうでない場合には、ldaps:// から始めてください。", "Port" : "ポート", "User DN" : "ユーザーDN", - "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "クライアントユーザーのDNは、特定のものに結びつけることはしません。 例えば uid=agent,dc=example,dc=com. だと匿名アクセスの場合、DNとパスワードは空のままです。", + "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "どのクライアントユーザーのDNで接続するか指定します。例えば uid=agent,dc=example,dc=com になります。匿名アクセスの場合、DNとパスワードは空のままにしてください。", "Password" : "パスワード", - "For anonymous access, leave DN and Password empty." : "匿名アクセスの場合は、DNとパスワードを空にしてください。", - "One Base DN per line" : "1行に1つのベースDN", - "You can specify Base DN for users and groups in the Advanced tab" : "拡張タブでユーザーとグループのベースDNを指定することができます。", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "自動LDAP問合せを停止。大規模な設定には適していますが、LDAPの知識がいくらか必要になります。", + "For anonymous access, leave DN and Password empty." : "匿名アクセスの場合は、DNとパスワードを空のままにしてください。", + "One Base DN per line" : "1行に1つのベースDNを記入", + "You can specify Base DN for users and groups in the Advanced tab" : "詳細設定でユーザーとグループのベースDNを指定することができます。", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "自動的なLDAP問合せを停止します。大規模な設定には適していますが、LDAPの知識が必要になります。", "Manually enter LDAP filters (recommended for large directories)" : "手動でLDAPフィルターを入力(大規模ディレクトリ時のみ推奨)", - "Limit %s access to users meeting these criteria:" : "この基準を満たすユーザーに対し %s へのアクセスを制限:", - "The filter specifies which LDAP users shall have access to the %s instance." : "フィルタは、どのLDAPユーザーが %s にアクセスするかを指定します。", + "Limit %s access to users meeting these criteria:" : "以下のフィルターに適合するユーザーのみ %s へアクセスを許可:", + "The filter specifies which LDAP users shall have access to the %s instance." : "フィルターは、どのLDAPユーザーが %s にアクセスするかを指定します。", "users found" : "ユーザーが見つかりました", "Saving" : "保存中", "Back" : "戻る", @@ -79,9 +79,9 @@ "Expert" : "エキスパート設定", "Advanced" : "詳細設定", "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>警告:</b> user_ldap と user_webdavauth のアプリには互換性がありません。予期せぬ動作をする可能性があります。システム管理者にどちらかを無効にするよう問い合わせてください。", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>警告:</b> PHP LDAP モジュールがインストールされていません。バックエンドが正しく動作しません。システム管理者にインストールするよう問い合わせてください。", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>警告:</b> PHP LDAP モジュールがインストールされていません。バックエンド接続が正しく動作しません。システム管理者にインストールするよう問い合わせてください。", "Connection Settings" : "接続設定", - "Configuration Active" : "設定はアクティブです", + "Configuration Active" : "設定は有効です", "When unchecked, this configuration will be skipped." : "チェックを外すと、この設定はスキップされます。", "Backup (Replica) Host" : "バックアップ(レプリカ)ホスト", "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "バックアップホストをオプションで指定することができます。メインのLDAP/ADサーバーのレプリカである必要があります。", @@ -106,26 +106,25 @@ "One Group Base DN per line" : "1行に1つのグループベースDN", "Group Search Attributes" : "グループ検索属性", "Group-Member association" : "グループとメンバーの関連付け", - "Nested Groups" : "ネスト化ブロック", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "オンに切り替えたら、グループを含むグループがサポートされます。(グループメンバーの属性がDNを含む場合のみ有効です。)", + "Nested Groups" : "ネストされたグループ", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "オンにすると、グループを含むグループが有効になります。(グループメンバーの属性にDNが含まれる場合のみ利用できます。)", "Paging chunksize" : "ページ分割サイズ", "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "ページ分割サイズは、LDAP検索時にユーザーやグループのリスト一覧データを一括で返すデータ量を指定します。(設定が0の場合には、LDAP検索の分割転送は無効)", "Special Attributes" : "特殊属性", - "Quota Field" : "クォータフィールド", + "Quota Field" : "クォータ属性", "Quota Default" : "クォータのデフォルト", "in bytes" : "バイト", - "Email Field" : "メールフィールド", + "Email Field" : "メール属性", "User Home Folder Naming Rule" : "ユーザーのホームフォルダー命名規則", "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "ユーザー名を空のままにしてください(デフォルト)。もしくは、LDAPもしくはADの属性を指定してください。", "Internal Username" : "内部ユーザー名", - "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "デフォルトでは、内部ユーザー名はUUID属性から作成されます。これにより、ユーザー名がユニークであり、かつ文字の変換が不要であることを保証します。内部ユーザー名には、[ a-zA-Z0-9_.@- ] の文字のみが有効であるという制限があり、その他の文字は対応する ASCII コードに変換されるか単に無視されます。そのため、他のユーザ名との衝突の回数が増加するでしょう。内部ユーザー名は、内部的にユーザを識別するために用いられ、また、ownCloudにおけるデフォルトのホームフォルダー名としても用いられます。例えば*DAVサービスのように、リモートURLの一部でもあります。この設定により、デフォルトの振る舞いを再定義します。ownCloud 5 以前と同じような振る舞いにするためには、以下のフィールドにユーザー表示名の属性を入力します。空にするとデフォルトの振る舞いとなります。変更は新しくマッピング(追加)されたLDAPユーザーにおいてのみ有効となります。", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "デフォルトでは、内部的なユーザー名がUUID属性から作成されます。これにより、ユーザー名がユニークであり、かつ文字の変換が不要であることを保証します。内部ユーザー名には、[ a-zA-Z0-9_.@- ] の文字のみが有効であるという制限があり、その他の文字は対応する ASCII コードに変換されるか単に無視されます。そのため、他のユーザ名との衝突の回数が増加するでしょう。内部ユーザー名は、内部的にユーザを識別するために用いられ、また、ownCloudにおけるデフォルトのホームフォルダー名としても用いられます。例えば*DAVサービスのように、リモートURLの一部でもあります。この設定により、デフォルトの振る舞いを再定義します。ownCloud 5 以前と同じような振る舞いにするためには、以下のフィールドにユーザー表示名の属性を入力します。空にするとデフォルトの振る舞いとなります。変更は新しくマッピング(追加)されたLDAPユーザーにおいてのみ有効となります。", "Internal Username Attribute:" : "内部ユーザー名属性:", "Override UUID detection" : "UUID検出を再定義する", "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "デフォルトでは、UUID 属性は自動的に検出されます。UUID属性は、LDAPユーザーとLDAPグループを間違いなく識別するために利用されます。また、もしこれを指定しない場合は、内部ユーザー名はUUIDに基づいて作成されます。この設定は再定義することができ、あなたの選択した属性を用いることができます。選択した属性がユーザーとグループの両方に対して適用でき、かつユニークであることを確認してください。空であればデフォルトの振る舞いとなります。変更は、新しくマッピング(追加)されたLDAPユーザーとLDAPグループに対してのみ有効となります。", "UUID Attribute for Users:" : "ユーザーのUUID属性:", "UUID Attribute for Groups:" : "グループの UUID 属性:", "Username-LDAP User Mapping" : "ユーザー名とLDAPユーザのマッピング", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ユーザー名は(メタ)データの保存と割り当てに使用されます。ユーザーを正確に識別して認識するために、個々のLDAPユーザは内部ユーザ名を持っています。これは、ユーザー名からLDAPユーザーへのマッピングが必要であることを意味しています。この生成されたユーザ名は、LDAPユーザのUUIDにマッピングされます。加えて、DNがLDAPとのインタラクションを削減するためにキャッシュされますが、識別には利用されません。DNが変わった場合は、変更が検出されます。内部ユーザ名は全体に亘って利用されます。マッピングをクリアすると、いたるところに使われないままの物が残るでしょう。マッピングのクリアは設定に敏感ではありませんが、すべてのLDAPの設定に影響を与えます!本番の環境では決してマッピングをクリアしないでください。テストもしくは実験の段階でのみマッピングのクリアを行なってください。", "Clear Username-LDAP User Mapping" : "ユーザー名とLDAPユーザーのマッピングをクリアする", "Clear Groupname-LDAP Group Mapping" : "グループ名とLDAPグループのマッピングをクリアする" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/user_ldap/l10n/ko.js b/apps/user_ldap/l10n/ko.js index 120121de0c3..85607d571b6 100644 --- a/apps/user_ldap/l10n/ko.js +++ b/apps/user_ldap/l10n/ko.js @@ -127,7 +127,6 @@ OC.L10N.register( "UUID Attribute for Users:" : "사용자 UUID 속성:", "UUID Attribute for Groups:" : "그룹 UUID 속성:", "Username-LDAP User Mapping" : "사용자 이름-LDAP 사용자 매핑", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "사용자 이름은 (메타) 데이터를 저장하고 할당하는 데 사용됩니다. 사용자를 정확하게 식별하기 위하여 각각 LDAP 사용자는 내부 사용자 이름을 갖습니다. 이는 사용자 이름과 LDAP 사용자 간의 매핑이 필요합니다. 생성된 사용자 이름은 LDAP 사용자의 UUID로 매핑됩니다. 추가적으로 LDAP 통신을 줄이기 위해서 DN이 캐시에 저장되지만 식별에 사용되지는 않습니다. DN이 변경되면 변경 사항이 기록됩니다. 내부 사용자 이름은 계속 사용됩니다. 매핑을 비우면 흔적이 남아 있게 됩니다. 매핑을 비우는 작업은 모든 LDAP 설정에 영향을 줍니다! 테스트 및 실험 단계에만 사용하고, 사용 중인 서버에서는 시도하지 마십시오.", "Clear Username-LDAP User Mapping" : "사용자 이름-LDAP 사용자 매핑 비우기", "Clear Groupname-LDAP Group Mapping" : "그룹 이름-LDAP 그룹 매핑 비우기" }, diff --git a/apps/user_ldap/l10n/ko.json b/apps/user_ldap/l10n/ko.json index 38c9d9aa83c..9179f76480e 100644 --- a/apps/user_ldap/l10n/ko.json +++ b/apps/user_ldap/l10n/ko.json @@ -125,7 +125,6 @@ "UUID Attribute for Users:" : "사용자 UUID 속성:", "UUID Attribute for Groups:" : "그룹 UUID 속성:", "Username-LDAP User Mapping" : "사용자 이름-LDAP 사용자 매핑", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "사용자 이름은 (메타) 데이터를 저장하고 할당하는 데 사용됩니다. 사용자를 정확하게 식별하기 위하여 각각 LDAP 사용자는 내부 사용자 이름을 갖습니다. 이는 사용자 이름과 LDAP 사용자 간의 매핑이 필요합니다. 생성된 사용자 이름은 LDAP 사용자의 UUID로 매핑됩니다. 추가적으로 LDAP 통신을 줄이기 위해서 DN이 캐시에 저장되지만 식별에 사용되지는 않습니다. DN이 변경되면 변경 사항이 기록됩니다. 내부 사용자 이름은 계속 사용됩니다. 매핑을 비우면 흔적이 남아 있게 됩니다. 매핑을 비우는 작업은 모든 LDAP 설정에 영향을 줍니다! 테스트 및 실험 단계에만 사용하고, 사용 중인 서버에서는 시도하지 마십시오.", "Clear Username-LDAP User Mapping" : "사용자 이름-LDAP 사용자 매핑 비우기", "Clear Groupname-LDAP Group Mapping" : "그룹 이름-LDAP 그룹 매핑 비우기" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/user_ldap/l10n/mr.js b/apps/user_ldap/l10n/mr.js new file mode 100644 index 00000000000..37042a4f412 --- /dev/null +++ b/apps/user_ldap/l10n/mr.js @@ -0,0 +1,7 @@ +OC.L10N.register( + "user_ldap", + { + "_%s group found_::_%s groups found_" : ["",""], + "_%s user found_::_%s users found_" : ["",""] +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/mr.json b/apps/user_ldap/l10n/mr.json new file mode 100644 index 00000000000..521de7ba1a8 --- /dev/null +++ b/apps/user_ldap/l10n/mr.json @@ -0,0 +1,5 @@ +{ "translations": { + "_%s group found_::_%s groups found_" : ["",""], + "_%s user found_::_%s users found_" : ["",""] +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/user_ldap/l10n/nb_NO.js b/apps/user_ldap/l10n/nb_NO.js index dedbb1a70d6..07bd76811f3 100644 --- a/apps/user_ldap/l10n/nb_NO.js +++ b/apps/user_ldap/l10n/nb_NO.js @@ -127,7 +127,6 @@ OC.L10N.register( "UUID Attribute for Users:" : "UUID-attributt for brukere:", "UUID Attribute for Groups:" : "UUID-attributt for grupper:", "Username-LDAP User Mapping" : "Tilknytning av brukernavn til LDAP-bruker", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Brukernavn brukes til å lagre og tilordne (meta)data. For at brukere skal identifiseres og gjenkjennes presist, vil hver LDAP-bruker ha et internt brukernavn. Dette krever en tilknytning fra brukernavn til LDAP-bruker. Brukernavn som opprettes blir knyttet til LDAP-brukerens UUID. I tillegg mellomlagres DN for å redusere LDAP-kommunikasjon, men det brukes ikke til identifisering. Hvis DN endres vil endringene bli oppdaget. Det interne brukernavnet brukes alle steder. Nullstilling av tilknytningene vil etterlate seg rester overalt. Nullstilling av tilknytningene skjer ikke pr. konfigurasjon, det påvirker alle LDAP-konfigurasjoner! Nullstill aldri tilknytningene i et produksjonsmiljø, kun ved testing eller eksperimentering.", "Clear Username-LDAP User Mapping" : "Nullstill tilknytning av brukernavn til LDAP-bruker", "Clear Groupname-LDAP Group Mapping" : "Nullstill tilknytning av gruppenavn til LDAP-gruppe" }, diff --git a/apps/user_ldap/l10n/nb_NO.json b/apps/user_ldap/l10n/nb_NO.json index f9398c1531f..d96af5cde99 100644 --- a/apps/user_ldap/l10n/nb_NO.json +++ b/apps/user_ldap/l10n/nb_NO.json @@ -125,7 +125,6 @@ "UUID Attribute for Users:" : "UUID-attributt for brukere:", "UUID Attribute for Groups:" : "UUID-attributt for grupper:", "Username-LDAP User Mapping" : "Tilknytning av brukernavn til LDAP-bruker", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Brukernavn brukes til å lagre og tilordne (meta)data. For at brukere skal identifiseres og gjenkjennes presist, vil hver LDAP-bruker ha et internt brukernavn. Dette krever en tilknytning fra brukernavn til LDAP-bruker. Brukernavn som opprettes blir knyttet til LDAP-brukerens UUID. I tillegg mellomlagres DN for å redusere LDAP-kommunikasjon, men det brukes ikke til identifisering. Hvis DN endres vil endringene bli oppdaget. Det interne brukernavnet brukes alle steder. Nullstilling av tilknytningene vil etterlate seg rester overalt. Nullstilling av tilknytningene skjer ikke pr. konfigurasjon, det påvirker alle LDAP-konfigurasjoner! Nullstill aldri tilknytningene i et produksjonsmiljø, kun ved testing eller eksperimentering.", "Clear Username-LDAP User Mapping" : "Nullstill tilknytning av brukernavn til LDAP-bruker", "Clear Groupname-LDAP Group Mapping" : "Nullstill tilknytning av gruppenavn til LDAP-gruppe" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/nl.js b/apps/user_ldap/l10n/nl.js index ae280e1a05e..67c46ea674f 100644 --- a/apps/user_ldap/l10n/nl.js +++ b/apps/user_ldap/l10n/nl.js @@ -127,7 +127,7 @@ OC.L10N.register( "UUID Attribute for Users:" : "UUID attribuut voor gebruikers:", "UUID Attribute for Groups:" : "UUID attribuut voor groepen:", "Username-LDAP User Mapping" : "Gebruikersnaam-LDAP gebruikers vertaling", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud maakt gebruik van gebruikersnamen om (meta) data op te slaan en toe te wijzen. Om gebruikers uniek te identificeren, krijgt elke LDAP-gebruiker ook een interne gebruikersnaam. Dit vereist een koppeling van de ownCloud gebruikersnaam aan een LDAP-gebruiker. De gecreëerde gebruikersnaam is gekoppeld aan de UUID van de LDAP-gebruiker. Aanvullend wordt ook de 'DN' gecached om het aantal LDAP-interacties te verminderen, maar dit wordt niet gebruikt voor identificatie. Als de DN verandert, zullen de veranderingen worden gevonden. De interne naam wordt overal gebruikt. Het wissen van de koppeling zal overal resten achterlaten. Het wissen van koppelingen is niet configuratiegevoelig, maar het raakt wel alle LDAP instellingen! Zorg ervoor dat deze koppelingen nooit in een productieomgeving gewist worden. Maak ze alleen leeg in een test- of ontwikkelomgeving.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud maakt gebruik van gebruikersnamen om (meta) data op te slaan en toe te wijzen. Om gebruikers uniek te identificeren, krijgt elke LDAP-gebruiker ook een interne gebruikersnaam. Dit vereist een koppeling van de ownCloud gebruikersnaam aan een LDAP-gebruiker. De gecreëerde gebruikersnaam is gekoppeld aan de UUID van de LDAP-gebruiker. Aanvullend wordt ook de 'DN' gecached om het aantal LDAP-interacties te verminderen, maar dit wordt niet gebruikt voor identificatie. Als de DN verandert, zullen de veranderingen worden gevonden. De interne naam wordt overal gebruikt. Het wissen van de koppeling zal overal resten achterlaten. Het wissen van koppelingen is niet configuratiegevoelig, maar het raakt wel alle LDAP instellingen! Zorg ervoor dat deze koppelingen nooit in een productieomgeving gewist worden. Maak ze alleen leeg in een test- of ontwikkelomgeving.", "Clear Username-LDAP User Mapping" : "Leegmaken Gebruikersnaam-LDAP gebruikers vertaling", "Clear Groupname-LDAP Group Mapping" : "Leegmaken Groepsnaam-LDAP groep vertaling" }, diff --git a/apps/user_ldap/l10n/nl.json b/apps/user_ldap/l10n/nl.json index ed0ce08501a..39fb5fbea10 100644 --- a/apps/user_ldap/l10n/nl.json +++ b/apps/user_ldap/l10n/nl.json @@ -125,7 +125,7 @@ "UUID Attribute for Users:" : "UUID attribuut voor gebruikers:", "UUID Attribute for Groups:" : "UUID attribuut voor groepen:", "Username-LDAP User Mapping" : "Gebruikersnaam-LDAP gebruikers vertaling", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud maakt gebruik van gebruikersnamen om (meta) data op te slaan en toe te wijzen. Om gebruikers uniek te identificeren, krijgt elke LDAP-gebruiker ook een interne gebruikersnaam. Dit vereist een koppeling van de ownCloud gebruikersnaam aan een LDAP-gebruiker. De gecreëerde gebruikersnaam is gekoppeld aan de UUID van de LDAP-gebruiker. Aanvullend wordt ook de 'DN' gecached om het aantal LDAP-interacties te verminderen, maar dit wordt niet gebruikt voor identificatie. Als de DN verandert, zullen de veranderingen worden gevonden. De interne naam wordt overal gebruikt. Het wissen van de koppeling zal overal resten achterlaten. Het wissen van koppelingen is niet configuratiegevoelig, maar het raakt wel alle LDAP instellingen! Zorg ervoor dat deze koppelingen nooit in een productieomgeving gewist worden. Maak ze alleen leeg in een test- of ontwikkelomgeving.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud maakt gebruik van gebruikersnamen om (meta) data op te slaan en toe te wijzen. Om gebruikers uniek te identificeren, krijgt elke LDAP-gebruiker ook een interne gebruikersnaam. Dit vereist een koppeling van de ownCloud gebruikersnaam aan een LDAP-gebruiker. De gecreëerde gebruikersnaam is gekoppeld aan de UUID van de LDAP-gebruiker. Aanvullend wordt ook de 'DN' gecached om het aantal LDAP-interacties te verminderen, maar dit wordt niet gebruikt voor identificatie. Als de DN verandert, zullen de veranderingen worden gevonden. De interne naam wordt overal gebruikt. Het wissen van de koppeling zal overal resten achterlaten. Het wissen van koppelingen is niet configuratiegevoelig, maar het raakt wel alle LDAP instellingen! Zorg ervoor dat deze koppelingen nooit in een productieomgeving gewist worden. Maak ze alleen leeg in een test- of ontwikkelomgeving.", "Clear Username-LDAP User Mapping" : "Leegmaken Gebruikersnaam-LDAP gebruikers vertaling", "Clear Groupname-LDAP Group Mapping" : "Leegmaken Groepsnaam-LDAP groep vertaling" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/pl.js b/apps/user_ldap/l10n/pl.js index 054d7a3494a..c535163462f 100644 --- a/apps/user_ldap/l10n/pl.js +++ b/apps/user_ldap/l10n/pl.js @@ -127,7 +127,6 @@ OC.L10N.register( "UUID Attribute for Users:" : "Atrybuty UUID dla użytkowników:", "UUID Attribute for Groups:" : "Atrybuty UUID dla grup:", "Username-LDAP User Mapping" : "Mapowanie użytkownika LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Nazwy użytkowników są używane w celu przechowywania i przypisywania (meta) danych. Aby dokładnie zidentyfikować i rozpoznać użytkowników, każdy użytkownik LDAP będzie miał wewnętrzną nazwę. To wymaga utworzenia przypisania nazwy użytkownika do użytkownika LDAP. Utworzona nazwa użytkownika jet przypisywana do UUID użytkownika LDAP. Dodatkowo DN jest również buforowany aby zmniejszyć interakcję z LDAP, ale nie jest używany do identyfikacji. Jeśli DN się zmieni, zmiany zostaną odnalezione. Wewnętrzny użytkownik jest używany we wszystkich przypadkach. Wyczyszczenie mapowań spowoduje pozostawienie wszędzie resztek informacji. Wyczyszczenie mapowań nie jest wrażliwe na konfigurację, wpływa ono na wszystkie konfiguracje LDAP! Nigdy nie czyść mapowań w środowisku produkcyjnym, tylko podczas testów lub w fazie eksperymentalnej. ", "Clear Username-LDAP User Mapping" : "Czyść Mapowanie użytkownika LDAP", "Clear Groupname-LDAP Group Mapping" : "Czyść Mapowanie nazwy grupy LDAP" }, diff --git a/apps/user_ldap/l10n/pl.json b/apps/user_ldap/l10n/pl.json index 04fd22c0836..2a573916fff 100644 --- a/apps/user_ldap/l10n/pl.json +++ b/apps/user_ldap/l10n/pl.json @@ -125,7 +125,6 @@ "UUID Attribute for Users:" : "Atrybuty UUID dla użytkowników:", "UUID Attribute for Groups:" : "Atrybuty UUID dla grup:", "Username-LDAP User Mapping" : "Mapowanie użytkownika LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Nazwy użytkowników są używane w celu przechowywania i przypisywania (meta) danych. Aby dokładnie zidentyfikować i rozpoznać użytkowników, każdy użytkownik LDAP będzie miał wewnętrzną nazwę. To wymaga utworzenia przypisania nazwy użytkownika do użytkownika LDAP. Utworzona nazwa użytkownika jet przypisywana do UUID użytkownika LDAP. Dodatkowo DN jest również buforowany aby zmniejszyć interakcję z LDAP, ale nie jest używany do identyfikacji. Jeśli DN się zmieni, zmiany zostaną odnalezione. Wewnętrzny użytkownik jest używany we wszystkich przypadkach. Wyczyszczenie mapowań spowoduje pozostawienie wszędzie resztek informacji. Wyczyszczenie mapowań nie jest wrażliwe na konfigurację, wpływa ono na wszystkie konfiguracje LDAP! Nigdy nie czyść mapowań w środowisku produkcyjnym, tylko podczas testów lub w fazie eksperymentalnej. ", "Clear Username-LDAP User Mapping" : "Czyść Mapowanie użytkownika LDAP", "Clear Groupname-LDAP Group Mapping" : "Czyść Mapowanie nazwy grupy LDAP" },"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" diff --git a/apps/user_ldap/l10n/pt_BR.js b/apps/user_ldap/l10n/pt_BR.js index a4a481524ba..2dc6a22f56a 100644 --- a/apps/user_ldap/l10n/pt_BR.js +++ b/apps/user_ldap/l10n/pt_BR.js @@ -127,7 +127,7 @@ OC.L10N.register( "UUID Attribute for Users:" : "UUID Atributos para Usuários:", "UUID Attribute for Groups:" : "UUID Atributos para Grupos:", "Username-LDAP User Mapping" : "Usuário-LDAP Mapeamento de Usuário", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Nomes de usuários sãi usados para armazenar e atribuir (meta) dados. A fim de identificar com precisão e reconhecer usuários, cada usuário LDAP terá um nome de usuário interno. Isso requer um mapeamento nome de usuário para usuário LDAP. O nome de usuário criado é mapeado para o UUID do usuário LDAP. Adicionalmente, o DN fica em cache, assim como para reduzir a interação LDAP, mas não é utilizado para a identificação. Se o DN muda, as mudanças serão encontradas. O nome de usuário interno é utilizado em todo lugar. Limpar os mapeamentos não influencia a configuração. Limpar os mapeamentos deixará rastros em todo lugar. Limpar os mapeamentos não influencia a configuração, mas afeta as configurações LDAP! Somente limpe os mapeamentos em embiente de testes ou em estágio experimental.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Nomes de usuários são usados para armazenar e atribuir dados (meta). A fim de identificar e reconhecer precisamente usuários, cada usuário LDAP terá um nome de usuário interno. Isso requer um mapeamento de nome de usuário para usuário LDAP. O nome de usuário criado é mapeado para o UUID do usuário LDAP. Além disso, o DN é armazenado em cache, assim como para reduzir a interação LDAP, mas não é usado para identificação. Se o DN muda, as mudanças serão encontrados. O nome de usuário interno é usado por toda parte. Limpando os mapeamentos terá sobras em todos os lugares. Limpando os mapeamentos não é a configuração sensível, que afeta todas as configurações LDAP! Nunca limpar os mapeamentos em um ambiente de produção, somente em um teste ou estágio experimental.", "Clear Username-LDAP User Mapping" : "Limpar Mapeamento de Usuário Nome de Usuário-LDAP", "Clear Groupname-LDAP Group Mapping" : "Limpar NomedoGrupo-LDAP Mapeamento do Grupo" }, diff --git a/apps/user_ldap/l10n/pt_BR.json b/apps/user_ldap/l10n/pt_BR.json index 4dd9088b727..4453f0bb0c3 100644 --- a/apps/user_ldap/l10n/pt_BR.json +++ b/apps/user_ldap/l10n/pt_BR.json @@ -125,7 +125,7 @@ "UUID Attribute for Users:" : "UUID Atributos para Usuários:", "UUID Attribute for Groups:" : "UUID Atributos para Grupos:", "Username-LDAP User Mapping" : "Usuário-LDAP Mapeamento de Usuário", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Nomes de usuários sãi usados para armazenar e atribuir (meta) dados. A fim de identificar com precisão e reconhecer usuários, cada usuário LDAP terá um nome de usuário interno. Isso requer um mapeamento nome de usuário para usuário LDAP. O nome de usuário criado é mapeado para o UUID do usuário LDAP. Adicionalmente, o DN fica em cache, assim como para reduzir a interação LDAP, mas não é utilizado para a identificação. Se o DN muda, as mudanças serão encontradas. O nome de usuário interno é utilizado em todo lugar. Limpar os mapeamentos não influencia a configuração. Limpar os mapeamentos deixará rastros em todo lugar. Limpar os mapeamentos não influencia a configuração, mas afeta as configurações LDAP! Somente limpe os mapeamentos em embiente de testes ou em estágio experimental.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Nomes de usuários são usados para armazenar e atribuir dados (meta). A fim de identificar e reconhecer precisamente usuários, cada usuário LDAP terá um nome de usuário interno. Isso requer um mapeamento de nome de usuário para usuário LDAP. O nome de usuário criado é mapeado para o UUID do usuário LDAP. Além disso, o DN é armazenado em cache, assim como para reduzir a interação LDAP, mas não é usado para identificação. Se o DN muda, as mudanças serão encontrados. O nome de usuário interno é usado por toda parte. Limpando os mapeamentos terá sobras em todos os lugares. Limpando os mapeamentos não é a configuração sensível, que afeta todas as configurações LDAP! Nunca limpar os mapeamentos em um ambiente de produção, somente em um teste ou estágio experimental.", "Clear Username-LDAP User Mapping" : "Limpar Mapeamento de Usuário Nome de Usuário-LDAP", "Clear Groupname-LDAP Group Mapping" : "Limpar NomedoGrupo-LDAP Mapeamento do Grupo" },"pluralForm" :"nplurals=2; plural=(n > 1);" diff --git a/apps/user_ldap/l10n/pt_PT.js b/apps/user_ldap/l10n/pt_PT.js index 0f4b3d11bed..4a740ff1d1e 100644 --- a/apps/user_ldap/l10n/pt_PT.js +++ b/apps/user_ldap/l10n/pt_PT.js @@ -33,6 +33,7 @@ OC.L10N.register( "Confirm Deletion" : "Confirmar a operação de apagar", "_%s group found_::_%s groups found_" : ["%s grupo encontrado","%s grupos encontrados"], "_%s user found_::_%s users found_" : ["%s utilizador encontrado","%s utilizadores encontrados"], + "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Não foi possível detetar o atributo do nome do utilizador. Por favor especifique-o nas configurações ldap avançadas.", "Could not find the desired feature" : "Não se encontrou a função desejada", "Invalid Host" : "Hospedeiro Inválido", "Server" : "Servidor", @@ -126,7 +127,7 @@ OC.L10N.register( "UUID Attribute for Users:" : "Atributo UUID para utilizadores:", "UUID Attribute for Groups:" : "Atributo UUID para grupos:", "Username-LDAP User Mapping" : "Mapeamento do utilizador LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "O ownCloud usa nomes de utilizadores para guardar e atribuir (meta) dados. Para identificar com precisão os utilizadores, cada utilizador de LDAP tem um nome de utilizador interno. Isto requer um mapeamento entre o utilizador LDAP e o utilizador ownCloud. Adicionalmente, o DN é colocado em cache para reduzir a interação com LDAP, porém não é usado para identificação. Se o DN muda, essas alterações serão vistas pelo ownCloud. O nome interno do ownCloud é usado em todo o lado, no ownCloud. Limpar os mapeamentos deixará vestígios em todo o lado. A limpeza dos mapeamentos não é sensível à configuração, pois afeta todas as configurações de LDAP! Nunca limpe os mapeamentos num ambiente de produção, apenas o faça numa fase de testes ou experimental.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "O ownCloud usa nomes de utilizadores para guardar e atribuir (meta) dados. Para identificar com precisão os utilizadores, cada utilizador de LDAP tem um nome de utilizador interno. Isto requer um mapeamento entre o utilizador LDAP e o utilizador ownCloud. Adicionalmente, o DN é colocado em cache para reduzir a interação com LDAP, porém não é usado para identificação. Se o DN muda, essas alterações serão vistas pelo ownCloud. O nome interno do ownCloud é usado em todo o lado, no ownCloud. Limpar os mapeamentos deixará vestígios em todo o lado. A limpeza dos mapeamentos não é sensível à configuração, pois afeta todas as configurações de LDAP! Nunca limpe os mapeamentos num ambiente de produção, apenas o faça numa fase de testes ou experimental.", "Clear Username-LDAP User Mapping" : "Limpar mapeamento do utilizador-LDAP", "Clear Groupname-LDAP Group Mapping" : "Limpar o mapeamento do nome de grupo LDAP" }, diff --git a/apps/user_ldap/l10n/pt_PT.json b/apps/user_ldap/l10n/pt_PT.json index 9c753884160..81071aec577 100644 --- a/apps/user_ldap/l10n/pt_PT.json +++ b/apps/user_ldap/l10n/pt_PT.json @@ -31,6 +31,7 @@ "Confirm Deletion" : "Confirmar a operação de apagar", "_%s group found_::_%s groups found_" : ["%s grupo encontrado","%s grupos encontrados"], "_%s user found_::_%s users found_" : ["%s utilizador encontrado","%s utilizadores encontrados"], + "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Não foi possível detetar o atributo do nome do utilizador. Por favor especifique-o nas configurações ldap avançadas.", "Could not find the desired feature" : "Não se encontrou a função desejada", "Invalid Host" : "Hospedeiro Inválido", "Server" : "Servidor", @@ -124,7 +125,7 @@ "UUID Attribute for Users:" : "Atributo UUID para utilizadores:", "UUID Attribute for Groups:" : "Atributo UUID para grupos:", "Username-LDAP User Mapping" : "Mapeamento do utilizador LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "O ownCloud usa nomes de utilizadores para guardar e atribuir (meta) dados. Para identificar com precisão os utilizadores, cada utilizador de LDAP tem um nome de utilizador interno. Isto requer um mapeamento entre o utilizador LDAP e o utilizador ownCloud. Adicionalmente, o DN é colocado em cache para reduzir a interação com LDAP, porém não é usado para identificação. Se o DN muda, essas alterações serão vistas pelo ownCloud. O nome interno do ownCloud é usado em todo o lado, no ownCloud. Limpar os mapeamentos deixará vestígios em todo o lado. A limpeza dos mapeamentos não é sensível à configuração, pois afeta todas as configurações de LDAP! Nunca limpe os mapeamentos num ambiente de produção, apenas o faça numa fase de testes ou experimental.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "O ownCloud usa nomes de utilizadores para guardar e atribuir (meta) dados. Para identificar com precisão os utilizadores, cada utilizador de LDAP tem um nome de utilizador interno. Isto requer um mapeamento entre o utilizador LDAP e o utilizador ownCloud. Adicionalmente, o DN é colocado em cache para reduzir a interação com LDAP, porém não é usado para identificação. Se o DN muda, essas alterações serão vistas pelo ownCloud. O nome interno do ownCloud é usado em todo o lado, no ownCloud. Limpar os mapeamentos deixará vestígios em todo o lado. A limpeza dos mapeamentos não é sensível à configuração, pois afeta todas as configurações de LDAP! Nunca limpe os mapeamentos num ambiente de produção, apenas o faça numa fase de testes ou experimental.", "Clear Username-LDAP User Mapping" : "Limpar mapeamento do utilizador-LDAP", "Clear Groupname-LDAP Group Mapping" : "Limpar o mapeamento do nome de grupo LDAP" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/ru.js b/apps/user_ldap/l10n/ru.js index 016ef747a2c..f21c98e121c 100644 --- a/apps/user_ldap/l10n/ru.js +++ b/apps/user_ldap/l10n/ru.js @@ -3,9 +3,9 @@ OC.L10N.register( { "Failed to clear the mappings." : "Не удалось очистить соответствия.", "Failed to delete the server configuration" : "Не удалось удалить конфигурацию сервера", - "The configuration is valid and the connection could be established!" : "Конфигурация правильная и подключение может быть установлено!", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Конфигурация верна, но операция подключения завершилась неудачно. Проверьте настройки сервера и учетные данные.", - "The configuration is invalid. Please have a look at the logs for further details." : "Конфигурация недействительна. Проверьте журналы для уточнения деталей.", + "The configuration is valid and the connection could be established!" : "Конфигурация корректна и подключение может быть установлено!", + "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Конфигурация корректна, но операция подключения завершилась неудачно. Проверьте настройки сервера и учетные данные.", + "The configuration is invalid. Please have a look at the logs for further details." : "Конфигурация некорректна. Проверьте журналы для уточнения деталей.", "No action specified" : "Действие не указано", "No configuration specified" : "Конфигурация не создана", "No data specified" : "Нет данных", @@ -13,16 +13,16 @@ OC.L10N.register( "Deletion failed" : "Удаление не удалось", "Take over settings from recent server configuration?" : "Принять настройки из последней конфигурации сервера?", "Keep settings?" : "Сохранить настройки?", - "{nthServer}. Server" : "{nthServer}. Сервер", - "Cannot add server configuration" : "Не получилось добавить конфигурацию сервера", - "mappings cleared" : "Соответствия очищены", + "{nthServer}. Server" : "Сервер {nthServer}.", + "Cannot add server configuration" : "Не удалось добавить конфигурацию сервера", + "mappings cleared" : "соответствия очищены", "Success" : "Успешно", "Error" : "Ошибка", "Please specify a Base DN" : "Необходимо указать Base DN", "Could not determine Base DN" : "Невозможно определить Base DN", "Please specify the port" : "Укажите порт", "Configuration OK" : "Конфигурация в порядке", - "Configuration incorrect" : "Конфигурация неправильна", + "Configuration incorrect" : "Конфигурация некорректна", "Configuration incomplete" : "Конфигурация не завершена", "Select groups" : "Выберите группы", "Select object classes" : "Выберите объектные классы", @@ -34,45 +34,45 @@ OC.L10N.register( "_%s group found_::_%s groups found_" : ["%s группа найдена","%s группы найдены","%s групп найдено"], "_%s user found_::_%s users found_" : ["%s пользователь найден","%s пользователя найдено","%s пользователей найдено"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Не удалось автоматически определить атрибут содержащий отображаемое имя пользователя. Зайдите в расширенные настройки ldap и укажите его вручную.", - "Could not find the desired feature" : "Не могу найти требуемой функциональности", - "Invalid Host" : "Неверный сервер", + "Could not find the desired feature" : "Не удается найти требуемую функциональность", + "Invalid Host" : "Некорректный адрес сервера", "Server" : "Сервер", - "User Filter" : "Пользователи", - "Login Filter" : "Логин", + "User Filter" : "Фильтр пользователей", + "Login Filter" : "Фильтр логинов", "Group Filter" : "Фильтр группы", "Save" : "Сохранить", "Test Configuration" : "Проверить конфигурацию", "Help" : "Помощь", - "Groups meeting these criteria are available in %s:" : "Группы, отвечающие этим критериям доступны в %s:", - "only those object classes:" : "только эти объектные классы", - "only from those groups:" : "только из этих групп", + "Groups meeting these criteria are available in %s:" : "Группы, отвечающие этим критериям доступны в %s:", + "only those object classes:" : "только эти объектные классы:", + "only from those groups:" : "только из этих групп:", "Edit raw filter instead" : "Редактировать исходный фильтр", "Raw LDAP filter" : "Исходный LDAP фильтр", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Этот фильтр определяет, какие LDAP группы должны иметь доступ к %s.", + "The filter specifies which LDAP groups shall have access to the %s instance." : "Этот фильтр определяет какие LDAP группы должны иметь доступ к экземпляру %s.", "Test Filter" : "Проверить фильтр", "groups found" : "групп найдено", - "Users login with this attribute:" : "Пользователи пользуются этим атрибутом для входа:", + "Users login with this attribute:" : "Логин пользователей с этим атрибутом:", "LDAP Username:" : "Имя пользователя LDAP", - "LDAP Email Address:" : "LDAP адрес электронной почты:", + "LDAP Email Address:" : "Адрес email LDAP:", "Other Attributes:" : "Другие атрибуты:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Определяет фильтр для применения при попытке входа. %%uid заменяет имя пользователя при входе в систему. Например: \"uid=%%uid\"", - "1. Server" : "1. Сервер", - "%s. Server:" : "%s. Сервер:", + "1. Server" : "Сервер 1.", + "%s. Server:" : "Сервер %s:", "Add Server Configuration" : "Добавить конфигурацию сервера", "Delete Configuration" : "Удалить конфигурацию", "Host" : "Сервер", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Можно опустить протокол, за исключением того, когда вам требуется SSL. Тогда начните с ldaps :/ /", + "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Можно пренебречь протоколом, за исключением использования SSL. В этом случае укажите ldaps://", "Port" : "Порт", "User DN" : "DN пользователя", "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "DN пользователя, под которым выполняется подключение, например, uid=agent,dc=example,dc=com. Для анонимного доступа оставьте DN и пароль пустыми.", "Password" : "Пароль", "For anonymous access, leave DN and Password empty." : "Для анонимного доступа оставьте DN и пароль пустыми.", "One Base DN per line" : "По одной базе поиска (Base DN) в строке.", - "You can specify Base DN for users and groups in the Advanced tab" : "Вы можете задать Base DN для пользователей и групп на вкладке \"Расширенное\"", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Перестаёт посылать автоматически запросы LDAP. Эта опция хороша для крупных проектов, но требует некоторых знаний LDAP.", + "You can specify Base DN for users and groups in the Advanced tab" : "Вы можете задать Base DN для пользователей и групп на вкладке \"Расширенные\"", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Избегает отправки автоматических запросов LDAP. Эта опция подходит для крупных проектов, но требует некоторых знаний LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Ввести LDAP фильтры вручную (рекомендуется для больших директорий)", - "Limit %s access to users meeting these criteria:" : "Ограничить доступ к %s пользователям, удовлетворяющим этому критерию:", - "The filter specifies which LDAP users shall have access to the %s instance." : "Этот фильтр указывает, какие пользователи LDAP должны иметь доступ к %s.", + "Limit %s access to users meeting these criteria:" : "Ограничить доступ пользователям к %s, удовлетворяющим этому критерию:", + "The filter specifies which LDAP users shall have access to the %s instance." : "Этот фильтр указывает, какие пользователи LDAP должны иметь доступ к экземпляру %s.", "users found" : "пользователей найдено", "Saving" : "Сохраняется", "Back" : "Назад", @@ -81,7 +81,7 @@ OC.L10N.register( "Expert" : "Эксперт", "Advanced" : "Дополнительно", "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Предупреждение:</b> Приложения user_ldap и user_webdavauth несовместимы. Вы можете наблюдать некорректное поведение. Пожалуйста, попросите вашего системного администратора отключить одно из них.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Внимание:</b> Модуль LDAP для PHP не установлен, бэкенд не будет работать. Пожалуйста, попросите вашего системного администратора его установить. ", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Предупреждение:</b> Модуль LDAP для PHP не установлен, бэкенд не будет работать. Пожалуйста, попросите вашего системного администратора его установить. ", "Connection Settings" : "Настройки подключения", "Configuration Active" : "Конфигурация активна", "When unchecked, this configuration will be skipped." : "Когда галочка снята, эта конфигурация будет пропущена.", @@ -89,45 +89,45 @@ OC.L10N.register( "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Укажите дополнительный резервный сервер. Он должен быть репликой главного LDAP/AD сервера.", "Backup (Replica) Port" : "Порт резервного сервера", "Disable Main Server" : "Отключить главный сервер", - "Only connect to the replica server." : "Подключаться только к серверу-реплике.", + "Only connect to the replica server." : "Подключаться только к резервному серверу", "Case insensitive LDAP server (Windows)" : "Нечувствительный к регистру сервер LDAP (Windows)", "Turn off SSL certificate validation." : "Отключить проверку сертификата SSL.", "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Не рекомендуется, используйте только в режиме тестирования! Если соединение работает только с этой опцией, импортируйте на ваш %s сервер SSL-сертификат сервера LDAP.", - "Cache Time-To-Live" : "Кэш времени жизни", + "Cache Time-To-Live" : "Кэш времени жизни (TTL)", "in seconds. A change empties the cache." : "в секундах. Изменение очистит кэш.", "Directory Settings" : "Настройки каталога", "User Display Name Field" : "Поле отображаемого имени пользователя", "The LDAP attribute to use to generate the user's display name." : "Атрибут LDAP, который используется для генерации отображаемого имени пользователя.", - "Base User Tree" : "База пользовательского дерева", + "Base User Tree" : "База дерева пользователей", "One User Base DN per line" : "По одной базовому DN пользователей в строке.", "User Search Attributes" : "Атрибуты поиска пользоватетелей", "Optional; one attribute per line" : "Опционально; один атрибут в строке", "Group Display Name Field" : "Поле отображаемого имени группы", "The LDAP attribute to use to generate the groups's display name." : "Атрибут LDAP, который используется для генерации отображаемого имени группы.", - "Base Group Tree" : "База группового дерева", + "Base Group Tree" : "База дерева групп", "One Group Base DN per line" : "По одной базовому DN групп в строке.", - "Group Search Attributes" : "Атрибуты поиска для группы", + "Group Search Attributes" : "Атрибуты поиска групп", "Group-Member association" : "Ассоциация Группа-Участник", "Nested Groups" : "Вложенные группы", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "При включении, активируется поддержка групп, содержащих другие группы. (Работает только если атрибут член группы содержит DN.)", - "Paging chunksize" : "Постраничный chunksize", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "ChunkSize используется в страничных поисках LDAP которые могут возвращать громоздкие результаты, как например списки пользователей или групп. (Настройка его в \"0\" отключает страничный поиск LDAP для таких ситуаций.)", + "Paging chunksize" : "Страничный размер блоков", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "ChunkSize используется в страничных поисках LDAP которые могут возвращать громоздкие результаты, как например списки пользователей или групп. (Установка значения в \"0\" отключает страничный поиск LDAP для таких ситуаций.)", "Special Attributes" : "Специальные атрибуты", "Quota Field" : "Поле квоты", "Quota Default" : "Квота по умолчанию", "in bytes" : "в байтах", - "Email Field" : "Поле адреса электронной почты", + "Email Field" : "Поле адреса email", "User Home Folder Naming Rule" : "Правило именования домашнего каталога пользователя", "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Оставьте пустым для использования имени пользователя (по умолчанию). Иначе укажите атрибут LDAP/AD.", "Internal Username" : "Внутреннее имя пользователя", - "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "По умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Таким образом имя пользователя становится уникальным и не требует конвертации символов. Внутреннее имя пользователя может состоять только из следующих символов: [ a-zA-Z0-9_.@- ]. Остальные символы замещаются соответствиями из таблицы ASCII или же просто пропускаются. При совпадении к имени будет добавлено или увеличено число. Внутреннее имя пользователя используется для внутренней идентификации пользователя. Также оно является именем по умолчанию для каталога пользователя в ownCloud. Оно также является частью URL, к примеру, для всех сервисов *DAV. С помощью данной настройки можно изменить поведение по умолчанию. Чтобы достичь поведения, как было до ownCloud 5, введите атрибут отображаемого имени пользователя в этом поле. Оставьте его пустым для режима по умолчанию. Изменения будут иметь эффект только для новых подключенных (добавленных) пользователей LDAP.", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "По умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Таким образом имя пользователя становится уникальным и не требует конвертации символов. Внутреннее имя пользователя может состоять только из следующих символов: [ a-zA-Z0-9_.@- ]. Остальные символы заменяются аналогами из таблицы ASCII или же просто пропускаются. В случае конфликта к имени будет добавлено/увеличено число. Внутреннее имя пользователя используется для внутренней идентификации пользователя. Также оно является именем по умолчанию для каталога пользователя в ownCloud. Оно также является частью URL, к примеру, для всех сервисов *DAV. С помощью данной настройки можно изменить поведение по умолчанию. Чтобы достичь поведения, как было до ownCloud 5, введите атрибут отображаемого имени пользователя в этом поле. Оставьте его пустым для режима по умолчанию. Изменения будут иметь эффект только для новых подключенных (добавленных) пользователей LDAP.", "Internal Username Attribute:" : "Атрибут для внутреннего имени:", "Override UUID detection" : "Переопределить нахождение UUID", "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "По умолчанию ownCloud определяет атрибут UUID автоматически. Этот атрибут используется для того, чтобы достоверно идентифицировать пользователей и группы LDAP. Также на основании атрибута UUID создается внутреннее имя пользователя, если выше не указано иначе. Вы можете переопределить эту настройку и указать свой атрибут по выбору. Вы должны удостовериться, что выбранный вами атрибут может быть выбран для пользователей и групп, а также то, что он уникальный. Оставьте поле пустым для поведения по умолчанию. Изменения вступят в силу только для новых подключенных (добавленных) пользователей и групп LDAP.", "UUID Attribute for Users:" : "UUID-атрибуты для пользователей:", "UUID Attribute for Groups:" : "UUID-атрибуты для групп:", "Username-LDAP User Mapping" : "Соответствия Имя-Пользователь LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud использует имена пользователей для хранения и назначения метаданных. Для точной идентификации и распознавания пользователей, каждый пользователь LDAP будет иметь свое внутреннее имя пользователя. Это требует привязки имени пользователя ownCloud к пользователю LDAP. При создании имя пользователя назначается идентификатору UUID пользователя LDAP. Помимо этого кешируется различающееся имя (DN) для уменьшения числа обращений к LDAP, однако оно не используется для идентификации. Если различающееся имя было изменено, об этом станет известно ownCloud. Внутреннее имя ownCloud используется повсеместно в ownCloud. После сброса привязок в базе могут сохраниться остатки старой информации. Сброс привязок не привязан к конфигурации, он повлияет на все LDAP-подключения! Ни в коем случае не рекомендуется сбрасывать привязки, если система уже находится в эксплуатации, только на этапе тестирования.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud использует имена пользователей для хранения и назначения метаданных. Для точной идентификации и распознавания пользователей, каждый пользователь LDAP будет иметь свое внутреннее имя пользователя. Это требует привязки имени пользователя ownCloud к пользователю LDAP. При создании имя пользователя назначается идентификатору UUID пользователя LDAP. Помимо этого кешируется доменное имя (DN) для уменьшения числа обращений к LDAP, однако оно не используется для идентификации. Если доменное имя было изменено, об этом станет известно ownCloud. Внутреннее имя ownCloud используется повсеместно в ownCloud. После сброса привязок в базе могут сохраниться остатки старой информации. Сброс привязок не привязан к конфигурации, он повлияет на все LDAP подключения! Ни в коем случае не рекомендуется сбрасывать привязки если система уже находится в эксплуатации, только на этапе тестирования.", "Clear Username-LDAP User Mapping" : "Очистить соответствия Имя-Пользователь LDAP", "Clear Groupname-LDAP Group Mapping" : "Очистить соответствия Группа-Группа LDAP" }, diff --git a/apps/user_ldap/l10n/ru.json b/apps/user_ldap/l10n/ru.json index e20baa90401..354381760bf 100644 --- a/apps/user_ldap/l10n/ru.json +++ b/apps/user_ldap/l10n/ru.json @@ -1,9 +1,9 @@ { "translations": { "Failed to clear the mappings." : "Не удалось очистить соответствия.", "Failed to delete the server configuration" : "Не удалось удалить конфигурацию сервера", - "The configuration is valid and the connection could be established!" : "Конфигурация правильная и подключение может быть установлено!", - "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Конфигурация верна, но операция подключения завершилась неудачно. Проверьте настройки сервера и учетные данные.", - "The configuration is invalid. Please have a look at the logs for further details." : "Конфигурация недействительна. Проверьте журналы для уточнения деталей.", + "The configuration is valid and the connection could be established!" : "Конфигурация корректна и подключение может быть установлено!", + "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Конфигурация корректна, но операция подключения завершилась неудачно. Проверьте настройки сервера и учетные данные.", + "The configuration is invalid. Please have a look at the logs for further details." : "Конфигурация некорректна. Проверьте журналы для уточнения деталей.", "No action specified" : "Действие не указано", "No configuration specified" : "Конфигурация не создана", "No data specified" : "Нет данных", @@ -11,16 +11,16 @@ "Deletion failed" : "Удаление не удалось", "Take over settings from recent server configuration?" : "Принять настройки из последней конфигурации сервера?", "Keep settings?" : "Сохранить настройки?", - "{nthServer}. Server" : "{nthServer}. Сервер", - "Cannot add server configuration" : "Не получилось добавить конфигурацию сервера", - "mappings cleared" : "Соответствия очищены", + "{nthServer}. Server" : "Сервер {nthServer}.", + "Cannot add server configuration" : "Не удалось добавить конфигурацию сервера", + "mappings cleared" : "соответствия очищены", "Success" : "Успешно", "Error" : "Ошибка", "Please specify a Base DN" : "Необходимо указать Base DN", "Could not determine Base DN" : "Невозможно определить Base DN", "Please specify the port" : "Укажите порт", "Configuration OK" : "Конфигурация в порядке", - "Configuration incorrect" : "Конфигурация неправильна", + "Configuration incorrect" : "Конфигурация некорректна", "Configuration incomplete" : "Конфигурация не завершена", "Select groups" : "Выберите группы", "Select object classes" : "Выберите объектные классы", @@ -32,45 +32,45 @@ "_%s group found_::_%s groups found_" : ["%s группа найдена","%s группы найдены","%s групп найдено"], "_%s user found_::_%s users found_" : ["%s пользователь найден","%s пользователя найдено","%s пользователей найдено"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Не удалось автоматически определить атрибут содержащий отображаемое имя пользователя. Зайдите в расширенные настройки ldap и укажите его вручную.", - "Could not find the desired feature" : "Не могу найти требуемой функциональности", - "Invalid Host" : "Неверный сервер", + "Could not find the desired feature" : "Не удается найти требуемую функциональность", + "Invalid Host" : "Некорректный адрес сервера", "Server" : "Сервер", - "User Filter" : "Пользователи", - "Login Filter" : "Логин", + "User Filter" : "Фильтр пользователей", + "Login Filter" : "Фильтр логинов", "Group Filter" : "Фильтр группы", "Save" : "Сохранить", "Test Configuration" : "Проверить конфигурацию", "Help" : "Помощь", - "Groups meeting these criteria are available in %s:" : "Группы, отвечающие этим критериям доступны в %s:", - "only those object classes:" : "только эти объектные классы", - "only from those groups:" : "только из этих групп", + "Groups meeting these criteria are available in %s:" : "Группы, отвечающие этим критериям доступны в %s:", + "only those object classes:" : "только эти объектные классы:", + "only from those groups:" : "только из этих групп:", "Edit raw filter instead" : "Редактировать исходный фильтр", "Raw LDAP filter" : "Исходный LDAP фильтр", - "The filter specifies which LDAP groups shall have access to the %s instance." : "Этот фильтр определяет, какие LDAP группы должны иметь доступ к %s.", + "The filter specifies which LDAP groups shall have access to the %s instance." : "Этот фильтр определяет какие LDAP группы должны иметь доступ к экземпляру %s.", "Test Filter" : "Проверить фильтр", "groups found" : "групп найдено", - "Users login with this attribute:" : "Пользователи пользуются этим атрибутом для входа:", + "Users login with this attribute:" : "Логин пользователей с этим атрибутом:", "LDAP Username:" : "Имя пользователя LDAP", - "LDAP Email Address:" : "LDAP адрес электронной почты:", + "LDAP Email Address:" : "Адрес email LDAP:", "Other Attributes:" : "Другие атрибуты:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Определяет фильтр для применения при попытке входа. %%uid заменяет имя пользователя при входе в систему. Например: \"uid=%%uid\"", - "1. Server" : "1. Сервер", - "%s. Server:" : "%s. Сервер:", + "1. Server" : "Сервер 1.", + "%s. Server:" : "Сервер %s:", "Add Server Configuration" : "Добавить конфигурацию сервера", "Delete Configuration" : "Удалить конфигурацию", "Host" : "Сервер", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Можно опустить протокол, за исключением того, когда вам требуется SSL. Тогда начните с ldaps :/ /", + "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Можно пренебречь протоколом, за исключением использования SSL. В этом случае укажите ldaps://", "Port" : "Порт", "User DN" : "DN пользователя", "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "DN пользователя, под которым выполняется подключение, например, uid=agent,dc=example,dc=com. Для анонимного доступа оставьте DN и пароль пустыми.", "Password" : "Пароль", "For anonymous access, leave DN and Password empty." : "Для анонимного доступа оставьте DN и пароль пустыми.", "One Base DN per line" : "По одной базе поиска (Base DN) в строке.", - "You can specify Base DN for users and groups in the Advanced tab" : "Вы можете задать Base DN для пользователей и групп на вкладке \"Расширенное\"", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Перестаёт посылать автоматически запросы LDAP. Эта опция хороша для крупных проектов, но требует некоторых знаний LDAP.", + "You can specify Base DN for users and groups in the Advanced tab" : "Вы можете задать Base DN для пользователей и групп на вкладке \"Расширенные\"", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Избегает отправки автоматических запросов LDAP. Эта опция подходит для крупных проектов, но требует некоторых знаний LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Ввести LDAP фильтры вручную (рекомендуется для больших директорий)", - "Limit %s access to users meeting these criteria:" : "Ограничить доступ к %s пользователям, удовлетворяющим этому критерию:", - "The filter specifies which LDAP users shall have access to the %s instance." : "Этот фильтр указывает, какие пользователи LDAP должны иметь доступ к %s.", + "Limit %s access to users meeting these criteria:" : "Ограничить доступ пользователям к %s, удовлетворяющим этому критерию:", + "The filter specifies which LDAP users shall have access to the %s instance." : "Этот фильтр указывает, какие пользователи LDAP должны иметь доступ к экземпляру %s.", "users found" : "пользователей найдено", "Saving" : "Сохраняется", "Back" : "Назад", @@ -79,7 +79,7 @@ "Expert" : "Эксперт", "Advanced" : "Дополнительно", "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Предупреждение:</b> Приложения user_ldap и user_webdavauth несовместимы. Вы можете наблюдать некорректное поведение. Пожалуйста, попросите вашего системного администратора отключить одно из них.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Внимание:</b> Модуль LDAP для PHP не установлен, бэкенд не будет работать. Пожалуйста, попросите вашего системного администратора его установить. ", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Предупреждение:</b> Модуль LDAP для PHP не установлен, бэкенд не будет работать. Пожалуйста, попросите вашего системного администратора его установить. ", "Connection Settings" : "Настройки подключения", "Configuration Active" : "Конфигурация активна", "When unchecked, this configuration will be skipped." : "Когда галочка снята, эта конфигурация будет пропущена.", @@ -87,45 +87,45 @@ "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Укажите дополнительный резервный сервер. Он должен быть репликой главного LDAP/AD сервера.", "Backup (Replica) Port" : "Порт резервного сервера", "Disable Main Server" : "Отключить главный сервер", - "Only connect to the replica server." : "Подключаться только к серверу-реплике.", + "Only connect to the replica server." : "Подключаться только к резервному серверу", "Case insensitive LDAP server (Windows)" : "Нечувствительный к регистру сервер LDAP (Windows)", "Turn off SSL certificate validation." : "Отключить проверку сертификата SSL.", "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Не рекомендуется, используйте только в режиме тестирования! Если соединение работает только с этой опцией, импортируйте на ваш %s сервер SSL-сертификат сервера LDAP.", - "Cache Time-To-Live" : "Кэш времени жизни", + "Cache Time-To-Live" : "Кэш времени жизни (TTL)", "in seconds. A change empties the cache." : "в секундах. Изменение очистит кэш.", "Directory Settings" : "Настройки каталога", "User Display Name Field" : "Поле отображаемого имени пользователя", "The LDAP attribute to use to generate the user's display name." : "Атрибут LDAP, который используется для генерации отображаемого имени пользователя.", - "Base User Tree" : "База пользовательского дерева", + "Base User Tree" : "База дерева пользователей", "One User Base DN per line" : "По одной базовому DN пользователей в строке.", "User Search Attributes" : "Атрибуты поиска пользоватетелей", "Optional; one attribute per line" : "Опционально; один атрибут в строке", "Group Display Name Field" : "Поле отображаемого имени группы", "The LDAP attribute to use to generate the groups's display name." : "Атрибут LDAP, который используется для генерации отображаемого имени группы.", - "Base Group Tree" : "База группового дерева", + "Base Group Tree" : "База дерева групп", "One Group Base DN per line" : "По одной базовому DN групп в строке.", - "Group Search Attributes" : "Атрибуты поиска для группы", + "Group Search Attributes" : "Атрибуты поиска групп", "Group-Member association" : "Ассоциация Группа-Участник", "Nested Groups" : "Вложенные группы", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "При включении, активируется поддержка групп, содержащих другие группы. (Работает только если атрибут член группы содержит DN.)", - "Paging chunksize" : "Постраничный chunksize", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "ChunkSize используется в страничных поисках LDAP которые могут возвращать громоздкие результаты, как например списки пользователей или групп. (Настройка его в \"0\" отключает страничный поиск LDAP для таких ситуаций.)", + "Paging chunksize" : "Страничный размер блоков", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "ChunkSize используется в страничных поисках LDAP которые могут возвращать громоздкие результаты, как например списки пользователей или групп. (Установка значения в \"0\" отключает страничный поиск LDAP для таких ситуаций.)", "Special Attributes" : "Специальные атрибуты", "Quota Field" : "Поле квоты", "Quota Default" : "Квота по умолчанию", "in bytes" : "в байтах", - "Email Field" : "Поле адреса электронной почты", + "Email Field" : "Поле адреса email", "User Home Folder Naming Rule" : "Правило именования домашнего каталога пользователя", "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Оставьте пустым для использования имени пользователя (по умолчанию). Иначе укажите атрибут LDAP/AD.", "Internal Username" : "Внутреннее имя пользователя", - "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "По умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Таким образом имя пользователя становится уникальным и не требует конвертации символов. Внутреннее имя пользователя может состоять только из следующих символов: [ a-zA-Z0-9_.@- ]. Остальные символы замещаются соответствиями из таблицы ASCII или же просто пропускаются. При совпадении к имени будет добавлено или увеличено число. Внутреннее имя пользователя используется для внутренней идентификации пользователя. Также оно является именем по умолчанию для каталога пользователя в ownCloud. Оно также является частью URL, к примеру, для всех сервисов *DAV. С помощью данной настройки можно изменить поведение по умолчанию. Чтобы достичь поведения, как было до ownCloud 5, введите атрибут отображаемого имени пользователя в этом поле. Оставьте его пустым для режима по умолчанию. Изменения будут иметь эффект только для новых подключенных (добавленных) пользователей LDAP.", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "По умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Таким образом имя пользователя становится уникальным и не требует конвертации символов. Внутреннее имя пользователя может состоять только из следующих символов: [ a-zA-Z0-9_.@- ]. Остальные символы заменяются аналогами из таблицы ASCII или же просто пропускаются. В случае конфликта к имени будет добавлено/увеличено число. Внутреннее имя пользователя используется для внутренней идентификации пользователя. Также оно является именем по умолчанию для каталога пользователя в ownCloud. Оно также является частью URL, к примеру, для всех сервисов *DAV. С помощью данной настройки можно изменить поведение по умолчанию. Чтобы достичь поведения, как было до ownCloud 5, введите атрибут отображаемого имени пользователя в этом поле. Оставьте его пустым для режима по умолчанию. Изменения будут иметь эффект только для новых подключенных (добавленных) пользователей LDAP.", "Internal Username Attribute:" : "Атрибут для внутреннего имени:", "Override UUID detection" : "Переопределить нахождение UUID", "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "По умолчанию ownCloud определяет атрибут UUID автоматически. Этот атрибут используется для того, чтобы достоверно идентифицировать пользователей и группы LDAP. Также на основании атрибута UUID создается внутреннее имя пользователя, если выше не указано иначе. Вы можете переопределить эту настройку и указать свой атрибут по выбору. Вы должны удостовериться, что выбранный вами атрибут может быть выбран для пользователей и групп, а также то, что он уникальный. Оставьте поле пустым для поведения по умолчанию. Изменения вступят в силу только для новых подключенных (добавленных) пользователей и групп LDAP.", "UUID Attribute for Users:" : "UUID-атрибуты для пользователей:", "UUID Attribute for Groups:" : "UUID-атрибуты для групп:", "Username-LDAP User Mapping" : "Соответствия Имя-Пользователь LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud использует имена пользователей для хранения и назначения метаданных. Для точной идентификации и распознавания пользователей, каждый пользователь LDAP будет иметь свое внутреннее имя пользователя. Это требует привязки имени пользователя ownCloud к пользователю LDAP. При создании имя пользователя назначается идентификатору UUID пользователя LDAP. Помимо этого кешируется различающееся имя (DN) для уменьшения числа обращений к LDAP, однако оно не используется для идентификации. Если различающееся имя было изменено, об этом станет известно ownCloud. Внутреннее имя ownCloud используется повсеместно в ownCloud. После сброса привязок в базе могут сохраниться остатки старой информации. Сброс привязок не привязан к конфигурации, он повлияет на все LDAP-подключения! Ни в коем случае не рекомендуется сбрасывать привязки, если система уже находится в эксплуатации, только на этапе тестирования.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud использует имена пользователей для хранения и назначения метаданных. Для точной идентификации и распознавания пользователей, каждый пользователь LDAP будет иметь свое внутреннее имя пользователя. Это требует привязки имени пользователя ownCloud к пользователю LDAP. При создании имя пользователя назначается идентификатору UUID пользователя LDAP. Помимо этого кешируется доменное имя (DN) для уменьшения числа обращений к LDAP, однако оно не используется для идентификации. Если доменное имя было изменено, об этом станет известно ownCloud. Внутреннее имя ownCloud используется повсеместно в ownCloud. После сброса привязок в базе могут сохраниться остатки старой информации. Сброс привязок не привязан к конфигурации, он повлияет на все LDAP подключения! Ни в коем случае не рекомендуется сбрасывать привязки если система уже находится в эксплуатации, только на этапе тестирования.", "Clear Username-LDAP User Mapping" : "Очистить соответствия Имя-Пользователь LDAP", "Clear Groupname-LDAP Group Mapping" : "Очистить соответствия Группа-Группа LDAP" },"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);" diff --git a/apps/user_ldap/l10n/sk_SK.js b/apps/user_ldap/l10n/sk_SK.js index 79ff7d3a715..3f41750a5b9 100644 --- a/apps/user_ldap/l10n/sk_SK.js +++ b/apps/user_ldap/l10n/sk_SK.js @@ -123,11 +123,11 @@ OC.L10N.register( "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "V predvolenom nastavení bude interné používateľské meno vytvorené z UUID atribútu. Zabezpečí sa to, že používateľské meno bude jedinečné a znaky nemusia byť prevedené. Interné meno má obmedzenie, iba tieto znaky sú povolené: [a-zA-Z0-9_ @ -.]. Ostatné znaky sú nahradené ich ASCII alebo jednoducho vynechané. Pri kolíziách používateľských mien bude číslo pridané / odobrané. Interné používateľské meno sa používa na internú identifikáciu používateľa. Je tiež predvoleným názvom používateľského domovského priečinka v ownCloud. Je tiež súčasťou URL pre vzdialený prístup, napríklad pre všetky služby *DAV. S týmto nastavením sa dá prepísať predvolené správanie. Pre dosiahnutie podobného správania sa ako pred verziou ownCloud 5 zadajte atribút zobrazenia používateľského mena v tomto poli. Ponechajte prázdne pre predvolené správanie. Zmeny budú mať vplyv iba na novo namapovaných (pridaných) LDAP používateľov.", "Internal Username Attribute:" : "Atribút interného používateľského mena:", "Override UUID detection" : "Prepísať UUID detekciu", - "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "V predvolenom nastavení je UUID atribút detekovaný automaticky. UUID atribút je použitý na jedinečnú identifikáciu používateľov a skupín z LDAP. Naviac je na základe UUID vytvorené tiež interné používateľské meno, ak nie je nastavené inak. Môžete predvolené nastavenie prepísať a použiť atribút ktorý si sami zvolíte. Musíte sa ale ubezpečiť, že atribút ktorý vyberiete bude uvedený pri používateľoch, aj pri skupinách a je jedinečný. Ponechajte prázdne pre predvolené správanie. Zmena bude mať vplyv len na novo namapovaných (pridaných) používateľov a skupiny z LDAP.", + "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "V predvolenom nastavení sa atribút UUID deteguje automaticky. Atribút UUID sa používa na jednoznačnú identifikáciu používateľov a skupín z LDAPu. Naviac sa na základe UUID vytvára aj interné používateľské meno, ak nie je nastavené inak. Môžete predvolené nastavenie prepísať a použiť atribút ktorý si sami zvolíte. Musíte sa ale ubezpečiť, že atribút, ktorý vyberiete, bude uvedený pri používateľoch aj pri skupinách a bude jedinečný. Ak voľbu ponecháte prázdnu, použije sa predvolené správanie. Zmena bude mať vplyv len na novo namapovaných (pridaných) používateľov a skupiny z LDAPu.", "UUID Attribute for Users:" : "UUID atribút pre používateľov:", "UUID Attribute for Groups:" : "UUID atribút pre skupiny:", "Username-LDAP User Mapping" : "Mapovanie názvov LDAP používateľských mien", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Používateľské mená sa používajú pre uchovávanie a priraďovanie (meta) dát. Pre správnu identifikáciu a rozpoznanie používateľov bude mať každý používateľ z LDAP interné používateľské meno. To je nevyhnutné pre namapovanie používateľských mien na používateľov v LDAP. Vytvorené používateľské meno je namapované na UUID používateľa v LDAP. Naviac je cachovaná DN pre obmedzenie interakcie s LDAP, ale nie je používaná pre identifikáciu. Ak sa DN zmení, bude to správne rozpoznané. Interné používateľské meno sa používa všade. Vyčistenie namapovaní vymaže zvyšky všade. Vyčistenie naviac nie je špecifické, bude mať vplyv na všetky LDAP konfigurácie! Nikdy nečistite namapovanie v produkčnom prostredí, len v testovacej alebo experimentálnej fáze.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Používateľské mená sa používajú na uchovávanie a priraďovanie (meta)dát. Každý používateľ v LDAP bude mať interné používateľské meno, aby bolo možné správne identifikovať a rozpoznávať používateľov. To je vyžaduje vytvorenie mapovania používateľských mien na používateľov v LDAPe. Vytvorené používateľské meno sa namapuje na UUID používateľa v LDAPe. Naviac je sa vo vyrovnávacej pamäti udržiava DN, aby sa obmedzila nadmerná interakcia s LDAPom, ale to sa nepoužíva na identifikáciu. Ak sa DN zmení, zmena bude správne rozpoznaná. Interné používateľské meno sa používa všade. Vyčistenie mapovaní vymaže zvyšky všade. Vyčistenie mapovaní naviac nie je špecifické pre určitú konfiguráciu; bude mať vplyv na všetky konfigurácie LDAPu! Nikdy nečistite mapovanie v produkčnom prostredí, len v testovacej alebo experimentálnej fáze.", "Clear Username-LDAP User Mapping" : "Zrušiť mapovanie LDAP používateľských mien", "Clear Groupname-LDAP Group Mapping" : "Zrušiť mapovanie názvov LDAP skupín" }, diff --git a/apps/user_ldap/l10n/sk_SK.json b/apps/user_ldap/l10n/sk_SK.json index 17d511b2ea9..62a010f3f53 100644 --- a/apps/user_ldap/l10n/sk_SK.json +++ b/apps/user_ldap/l10n/sk_SK.json @@ -121,11 +121,11 @@ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "V predvolenom nastavení bude interné používateľské meno vytvorené z UUID atribútu. Zabezpečí sa to, že používateľské meno bude jedinečné a znaky nemusia byť prevedené. Interné meno má obmedzenie, iba tieto znaky sú povolené: [a-zA-Z0-9_ @ -.]. Ostatné znaky sú nahradené ich ASCII alebo jednoducho vynechané. Pri kolíziách používateľských mien bude číslo pridané / odobrané. Interné používateľské meno sa používa na internú identifikáciu používateľa. Je tiež predvoleným názvom používateľského domovského priečinka v ownCloud. Je tiež súčasťou URL pre vzdialený prístup, napríklad pre všetky služby *DAV. S týmto nastavením sa dá prepísať predvolené správanie. Pre dosiahnutie podobného správania sa ako pred verziou ownCloud 5 zadajte atribút zobrazenia používateľského mena v tomto poli. Ponechajte prázdne pre predvolené správanie. Zmeny budú mať vplyv iba na novo namapovaných (pridaných) LDAP používateľov.", "Internal Username Attribute:" : "Atribút interného používateľského mena:", "Override UUID detection" : "Prepísať UUID detekciu", - "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "V predvolenom nastavení je UUID atribút detekovaný automaticky. UUID atribút je použitý na jedinečnú identifikáciu používateľov a skupín z LDAP. Naviac je na základe UUID vytvorené tiež interné používateľské meno, ak nie je nastavené inak. Môžete predvolené nastavenie prepísať a použiť atribút ktorý si sami zvolíte. Musíte sa ale ubezpečiť, že atribút ktorý vyberiete bude uvedený pri používateľoch, aj pri skupinách a je jedinečný. Ponechajte prázdne pre predvolené správanie. Zmena bude mať vplyv len na novo namapovaných (pridaných) používateľov a skupiny z LDAP.", + "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "V predvolenom nastavení sa atribút UUID deteguje automaticky. Atribút UUID sa používa na jednoznačnú identifikáciu používateľov a skupín z LDAPu. Naviac sa na základe UUID vytvára aj interné používateľské meno, ak nie je nastavené inak. Môžete predvolené nastavenie prepísať a použiť atribút ktorý si sami zvolíte. Musíte sa ale ubezpečiť, že atribút, ktorý vyberiete, bude uvedený pri používateľoch aj pri skupinách a bude jedinečný. Ak voľbu ponecháte prázdnu, použije sa predvolené správanie. Zmena bude mať vplyv len na novo namapovaných (pridaných) používateľov a skupiny z LDAPu.", "UUID Attribute for Users:" : "UUID atribút pre používateľov:", "UUID Attribute for Groups:" : "UUID atribút pre skupiny:", "Username-LDAP User Mapping" : "Mapovanie názvov LDAP používateľských mien", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Používateľské mená sa používajú pre uchovávanie a priraďovanie (meta) dát. Pre správnu identifikáciu a rozpoznanie používateľov bude mať každý používateľ z LDAP interné používateľské meno. To je nevyhnutné pre namapovanie používateľských mien na používateľov v LDAP. Vytvorené používateľské meno je namapované na UUID používateľa v LDAP. Naviac je cachovaná DN pre obmedzenie interakcie s LDAP, ale nie je používaná pre identifikáciu. Ak sa DN zmení, bude to správne rozpoznané. Interné používateľské meno sa používa všade. Vyčistenie namapovaní vymaže zvyšky všade. Vyčistenie naviac nie je špecifické, bude mať vplyv na všetky LDAP konfigurácie! Nikdy nečistite namapovanie v produkčnom prostredí, len v testovacej alebo experimentálnej fáze.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Používateľské mená sa používajú na uchovávanie a priraďovanie (meta)dát. Každý používateľ v LDAP bude mať interné používateľské meno, aby bolo možné správne identifikovať a rozpoznávať používateľov. To je vyžaduje vytvorenie mapovania používateľských mien na používateľov v LDAPe. Vytvorené používateľské meno sa namapuje na UUID používateľa v LDAPe. Naviac je sa vo vyrovnávacej pamäti udržiava DN, aby sa obmedzila nadmerná interakcia s LDAPom, ale to sa nepoužíva na identifikáciu. Ak sa DN zmení, zmena bude správne rozpoznaná. Interné používateľské meno sa používa všade. Vyčistenie mapovaní vymaže zvyšky všade. Vyčistenie mapovaní naviac nie je špecifické pre určitú konfiguráciu; bude mať vplyv na všetky konfigurácie LDAPu! Nikdy nečistite mapovanie v produkčnom prostredí, len v testovacej alebo experimentálnej fáze.", "Clear Username-LDAP User Mapping" : "Zrušiť mapovanie LDAP používateľských mien", "Clear Groupname-LDAP Group Mapping" : "Zrušiť mapovanie názvov LDAP skupín" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" diff --git a/apps/user_ldap/l10n/sl.js b/apps/user_ldap/l10n/sl.js index 04ea48e11ec..8e6e5ed261f 100644 --- a/apps/user_ldap/l10n/sl.js +++ b/apps/user_ldap/l10n/sl.js @@ -127,7 +127,6 @@ OC.L10N.register( "UUID Attribute for Users:" : "Atribut UUID za uporabnike:", "UUID Attribute for Groups:" : "Atribut UUID za skupine:", "Username-LDAP User Mapping" : "Uporabniška preslikava uporabniškega imena na LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Uporabniška imena so uporabljena za shranjevanje in dodeljevanje (meta) podatkov. Za natančno določanje in prepoznavanje uporabnikov je uporabljen sistem notranjega uporabniškega imena vsakega uporabnika LDAP. Ta možnost zahteva preslikavo uporabniškega imena v uporabnika LDAP in preslikano na njegov UUID. Sistem predpomni enolična imena za zmanjšanje odvisnosti LDAP, vendar pa ta podatek ni uporabljen za določevanje uporabnika. Če se enolično ime spremeni, se spremeni notranje uporabniško ime. Čiščenje preslikav pušča ostanke podatkov in vpliva na vse nastavitve LDAP! V delovnem okolju zato spreminjanje preslikav ni priporočljivo, možnost pa je na voljo za preizkušanje.", "Clear Username-LDAP User Mapping" : "Izbriši preslikavo uporabniškega imena na LDAP", "Clear Groupname-LDAP Group Mapping" : "Izbriši preslikavo skupine na LDAP" }, diff --git a/apps/user_ldap/l10n/sl.json b/apps/user_ldap/l10n/sl.json index ef7bdd1ce32..3370556c6a4 100644 --- a/apps/user_ldap/l10n/sl.json +++ b/apps/user_ldap/l10n/sl.json @@ -125,7 +125,6 @@ "UUID Attribute for Users:" : "Atribut UUID za uporabnike:", "UUID Attribute for Groups:" : "Atribut UUID za skupine:", "Username-LDAP User Mapping" : "Uporabniška preslikava uporabniškega imena na LDAP", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Uporabniška imena so uporabljena za shranjevanje in dodeljevanje (meta) podatkov. Za natančno določanje in prepoznavanje uporabnikov je uporabljen sistem notranjega uporabniškega imena vsakega uporabnika LDAP. Ta možnost zahteva preslikavo uporabniškega imena v uporabnika LDAP in preslikano na njegov UUID. Sistem predpomni enolična imena za zmanjšanje odvisnosti LDAP, vendar pa ta podatek ni uporabljen za določevanje uporabnika. Če se enolično ime spremeni, se spremeni notranje uporabniško ime. Čiščenje preslikav pušča ostanke podatkov in vpliva na vse nastavitve LDAP! V delovnem okolju zato spreminjanje preslikav ni priporočljivo, možnost pa je na voljo za preizkušanje.", "Clear Username-LDAP User Mapping" : "Izbriši preslikavo uporabniškega imena na LDAP", "Clear Groupname-LDAP Group Mapping" : "Izbriši preslikavo skupine na LDAP" },"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" diff --git a/apps/user_ldap/l10n/sr.js b/apps/user_ldap/l10n/sr.js index dd41cb2ea2d..f10d32f30fe 100644 --- a/apps/user_ldap/l10n/sr.js +++ b/apps/user_ldap/l10n/sr.js @@ -2,28 +2,34 @@ OC.L10N.register( "user_ldap", { "Deletion failed" : "Брисање није успело", + "Keep settings?" : "Задржати поставке?", "Error" : "Грешка", + "Confirm Deletion" : "Потврдa брисањa", "_%s group found_::_%s groups found_" : ["","",""], "_%s user found_::_%s users found_" : ["","",""], + "Server" : "Сервер", "Group Filter" : "Филтер групе", "Save" : "Сачувај", "Help" : "Помоћ", "Host" : "Домаћин", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Можете да изоставите протокол, осим ако захтевате SSL. У том случају почните са ldaps://.", + "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Можете да изоставите протокол, осим ако захтевате ССЛ. У том случају почните са ldaps://", "Port" : "Порт", "User DN" : "Корисник DN", "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "DN корисника клијента са којим треба да се успостави веза, нпр. uid=agent,dc=example,dc=com. За анониман приступ, оставите поља DN и лозинка празним.", "Password" : "Лозинка", "For anonymous access, leave DN and Password empty." : "За анониман приступ, оставите поља DN и лозинка празним.", "Back" : "Назад", + "Continue" : "Настави", "Advanced" : "Напредно", - "Turn off SSL certificate validation." : "Искључите потврду SSL сертификата.", - "in seconds. A change empties the cache." : "у секундама. Промена испражњава кеш меморију.", + "Turn off SSL certificate validation." : "Искључите потврду ССЛ сертификата.", + "in seconds. A change empties the cache." : "у секундама. Промена празни кеш меморију.", "User Display Name Field" : "Име приказа корисника", "Base User Tree" : "Основно стабло корисника", "Group Display Name Field" : "Име приказа групе", - "Base Group Tree" : "Основна стабло група", + "Base Group Tree" : "Стабло основне групе", "Group-Member association" : "Придруживање чланова у групу", + "Quota Field" : "Поље квоте", + "Quota Default" : "Подразумевана квота", "in bytes" : "у бајтовима" }, "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/user_ldap/l10n/sr.json b/apps/user_ldap/l10n/sr.json index 5fe091e5d3b..31d1fb15877 100644 --- a/apps/user_ldap/l10n/sr.json +++ b/apps/user_ldap/l10n/sr.json @@ -1,27 +1,33 @@ { "translations": { "Deletion failed" : "Брисање није успело", + "Keep settings?" : "Задржати поставке?", "Error" : "Грешка", + "Confirm Deletion" : "Потврдa брисањa", "_%s group found_::_%s groups found_" : ["","",""], "_%s user found_::_%s users found_" : ["","",""], + "Server" : "Сервер", "Group Filter" : "Филтер групе", "Save" : "Сачувај", "Help" : "Помоћ", "Host" : "Домаћин", - "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Можете да изоставите протокол, осим ако захтевате SSL. У том случају почните са ldaps://.", + "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Можете да изоставите протокол, осим ако захтевате ССЛ. У том случају почните са ldaps://", "Port" : "Порт", "User DN" : "Корисник DN", "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "DN корисника клијента са којим треба да се успостави веза, нпр. uid=agent,dc=example,dc=com. За анониман приступ, оставите поља DN и лозинка празним.", "Password" : "Лозинка", "For anonymous access, leave DN and Password empty." : "За анониман приступ, оставите поља DN и лозинка празним.", "Back" : "Назад", + "Continue" : "Настави", "Advanced" : "Напредно", - "Turn off SSL certificate validation." : "Искључите потврду SSL сертификата.", - "in seconds. A change empties the cache." : "у секундама. Промена испражњава кеш меморију.", + "Turn off SSL certificate validation." : "Искључите потврду ССЛ сертификата.", + "in seconds. A change empties the cache." : "у секундама. Промена празни кеш меморију.", "User Display Name Field" : "Име приказа корисника", "Base User Tree" : "Основно стабло корисника", "Group Display Name Field" : "Име приказа групе", - "Base Group Tree" : "Основна стабло група", + "Base Group Tree" : "Стабло основне групе", "Group-Member association" : "Придруживање чланова у групу", + "Quota Field" : "Поље квоте", + "Quota Default" : "Подразумевана квота", "in bytes" : "у бајтовима" },"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/user_ldap/l10n/sv.js b/apps/user_ldap/l10n/sv.js index 78fe328944a..f0fd5615867 100644 --- a/apps/user_ldap/l10n/sv.js +++ b/apps/user_ldap/l10n/sv.js @@ -127,7 +127,6 @@ OC.L10N.register( "UUID Attribute for Users:" : "UUID-attribut för användare:", "UUID Attribute for Groups:" : "UUID-attribut för grupper:", "Username-LDAP User Mapping" : "Användarnamn-LDAP användarmappning", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud använder sig av användarnamn för att lagra och tilldela (meta) data. För att exakt kunna identifiera och känna igen användare, kommer varje LDAP-användare ha ett internt användarnamn. Detta kräver en mappning från ownCloud-användarnamn till LDAP-användare. Det skapade användarnamnet mappas till UUID för LDAP-användaren. Dessutom cachas DN samt minskar LDAP-interaktionen, men den används inte för identifiering. Om DN förändras, kommer förändringarna hittas av ownCloud. Det interna ownCloud-namnet används överallt i ownCloud. Om du rensar/raderar mappningarna kommer att lämna referenser överallt i systemet. Men den är inte konfigurationskänslig, den påverkar alla LDAP-konfigurationer! Rensa/radera aldrig mappningarna i en produktionsmiljö, utan gör detta endast i testmiljö!", "Clear Username-LDAP User Mapping" : "Rensa användarnamn-LDAP användarmappning", "Clear Groupname-LDAP Group Mapping" : "Rensa gruppnamn-LDAP gruppmappning" }, diff --git a/apps/user_ldap/l10n/sv.json b/apps/user_ldap/l10n/sv.json index 41d6c1d7492..4f416eac3ea 100644 --- a/apps/user_ldap/l10n/sv.json +++ b/apps/user_ldap/l10n/sv.json @@ -125,7 +125,6 @@ "UUID Attribute for Users:" : "UUID-attribut för användare:", "UUID Attribute for Groups:" : "UUID-attribut för grupper:", "Username-LDAP User Mapping" : "Användarnamn-LDAP användarmappning", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud använder sig av användarnamn för att lagra och tilldela (meta) data. För att exakt kunna identifiera och känna igen användare, kommer varje LDAP-användare ha ett internt användarnamn. Detta kräver en mappning från ownCloud-användarnamn till LDAP-användare. Det skapade användarnamnet mappas till UUID för LDAP-användaren. Dessutom cachas DN samt minskar LDAP-interaktionen, men den används inte för identifiering. Om DN förändras, kommer förändringarna hittas av ownCloud. Det interna ownCloud-namnet används överallt i ownCloud. Om du rensar/raderar mappningarna kommer att lämna referenser överallt i systemet. Men den är inte konfigurationskänslig, den påverkar alla LDAP-konfigurationer! Rensa/radera aldrig mappningarna i en produktionsmiljö, utan gör detta endast i testmiljö!", "Clear Username-LDAP User Mapping" : "Rensa användarnamn-LDAP användarmappning", "Clear Groupname-LDAP Group Mapping" : "Rensa gruppnamn-LDAP gruppmappning" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/l10n/tr.js b/apps/user_ldap/l10n/tr.js index a4c308e5354..41e6d03bfa8 100644 --- a/apps/user_ldap/l10n/tr.js +++ b/apps/user_ldap/l10n/tr.js @@ -127,7 +127,7 @@ OC.L10N.register( "UUID Attribute for Users:" : "Kullanıcılar için UUID Özniteliği:", "UUID Attribute for Groups:" : "Gruplar için UUID Özniteliği:", "Username-LDAP User Mapping" : "Kullanıcı Adı-LDAP Kullanıcısı Eşleştirme", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Kullanıcı adları, (üst) veri depolaması ve ataması için kullanılır. Kullanıcıları kesin olarak tanımlamak ve algılamak için, her LDAP kullanıcısı bir dahili kullanıcı adına sahip olacak. Bu kullanıcı adı ile LDAP kullanıcısı arasında bir eşleşme gerektirir. Oluşturulan kullanıcı adı LDAP kullanıcısının UUID'si ile eşleştirilir. Ek olarak LDAP etkileşimini azaltmak için DN de önbelleğe alınır ancak bu kimlik tanıma için kullanılmaz. Eğer DN değişirse, değişiklikler tespit edilir. Dahili kullanıcı her yerde kullanılır. Eşleştirmeleri temizlemek, her yerde kalıntılar bırakacaktır. Eşleştirmeleri temizlemek yapılandırmaya hassas bir şekilde bağlı değildir, tüm LDAP yapılandırmalarını etkiler! Üretim ortamında eşleştirmeleri asla temizlemeyin, sadece sınama veya deneysel aşamada kullanın.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Kullanıcı adları, (üst) veri depolaması ve ataması için kullanılır. Kullanıcıları kesin olarak tanımlamak ve algılamak için, her LDAP kullanıcısı bir dahili kullanıcı adına sahip olacak. Bu kullanıcı adı ile LDAP kullanıcısı arasında bir eşleşme gerektirir. Oluşturulan kullanıcı adı LDAP kullanıcısının UUID'si ile eşleştirilir. Ek olarak LDAP etkileşimini azaltmak için DN de önbelleğe alınır ancak bu kimlik tanıma için kullanılmaz. Eğer DN değişirse, değişiklikler tespit edilir. Dahili kullanıcı her yerde kullanılır. Eşleştirmeleri temizlemek, her yerde kalıntılar bırakacaktır. Eşleştirmeleri temizlemek yapılandırmaya hassas bir şekilde bağlı değildir, tüm LDAP yapılandırmalarını etkiler! Üretim ortamında eşleştirmeleri asla temizlemeyin, sadece sınama veya deneysel aşamada kullanın.", "Clear Username-LDAP User Mapping" : "Kullanıcı Adı-LDAP Kullanıcısı Eşleştirmesini Temizle", "Clear Groupname-LDAP Group Mapping" : "Grup Adı-LDAP Grubu Eşleştirmesini Temizle" }, diff --git a/apps/user_ldap/l10n/tr.json b/apps/user_ldap/l10n/tr.json index dbd4a9b7406..678eb81a141 100644 --- a/apps/user_ldap/l10n/tr.json +++ b/apps/user_ldap/l10n/tr.json @@ -125,7 +125,7 @@ "UUID Attribute for Users:" : "Kullanıcılar için UUID Özniteliği:", "UUID Attribute for Groups:" : "Gruplar için UUID Özniteliği:", "Username-LDAP User Mapping" : "Kullanıcı Adı-LDAP Kullanıcısı Eşleştirme", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Kullanıcı adları, (üst) veri depolaması ve ataması için kullanılır. Kullanıcıları kesin olarak tanımlamak ve algılamak için, her LDAP kullanıcısı bir dahili kullanıcı adına sahip olacak. Bu kullanıcı adı ile LDAP kullanıcısı arasında bir eşleşme gerektirir. Oluşturulan kullanıcı adı LDAP kullanıcısının UUID'si ile eşleştirilir. Ek olarak LDAP etkileşimini azaltmak için DN de önbelleğe alınır ancak bu kimlik tanıma için kullanılmaz. Eğer DN değişirse, değişiklikler tespit edilir. Dahili kullanıcı her yerde kullanılır. Eşleştirmeleri temizlemek, her yerde kalıntılar bırakacaktır. Eşleştirmeleri temizlemek yapılandırmaya hassas bir şekilde bağlı değildir, tüm LDAP yapılandırmalarını etkiler! Üretim ortamında eşleştirmeleri asla temizlemeyin, sadece sınama veya deneysel aşamada kullanın.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Kullanıcı adları, (üst) veri depolaması ve ataması için kullanılır. Kullanıcıları kesin olarak tanımlamak ve algılamak için, her LDAP kullanıcısı bir dahili kullanıcı adına sahip olacak. Bu kullanıcı adı ile LDAP kullanıcısı arasında bir eşleşme gerektirir. Oluşturulan kullanıcı adı LDAP kullanıcısının UUID'si ile eşleştirilir. Ek olarak LDAP etkileşimini azaltmak için DN de önbelleğe alınır ancak bu kimlik tanıma için kullanılmaz. Eğer DN değişirse, değişiklikler tespit edilir. Dahili kullanıcı her yerde kullanılır. Eşleştirmeleri temizlemek, her yerde kalıntılar bırakacaktır. Eşleştirmeleri temizlemek yapılandırmaya hassas bir şekilde bağlı değildir, tüm LDAP yapılandırmalarını etkiler! Üretim ortamında eşleştirmeleri asla temizlemeyin, sadece sınama veya deneysel aşamada kullanın.", "Clear Username-LDAP User Mapping" : "Kullanıcı Adı-LDAP Kullanıcısı Eşleştirmesini Temizle", "Clear Groupname-LDAP Group Mapping" : "Grup Adı-LDAP Grubu Eşleştirmesini Temizle" },"pluralForm" :"nplurals=2; plural=(n > 1);" diff --git a/apps/user_ldap/l10n/uk.js b/apps/user_ldap/l10n/uk.js index 7d0409fabac..c231a4a5553 100644 --- a/apps/user_ldap/l10n/uk.js +++ b/apps/user_ldap/l10n/uk.js @@ -127,7 +127,7 @@ OC.L10N.register( "UUID Attribute for Users:" : "UUID Атрибут для користувачів:", "UUID Attribute for Groups:" : "UUID Атрибут для груп:", "Username-LDAP User Mapping" : "Картографія Імен користувачів-LDAP ", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud використовує імена користувачів для зберігання і призначення метаданих. Для точної ідентифікації і розпізнавання користувачів, кожен користувач LDAP буде мати своє внутрішнє ім'я користувача. Це вимагає прив'язки імені користувача ownCloud до користувача LDAP. При створенні ім'я користувача призначається ідентифікатору UUID користувача LDAP. Крім цього кешується розрізнювальне ім'я (DN) для зменшення числа звернень до LDAP, однак воно не використовується для ідентифікації. Якщо розрізнювальне ім'я було змінене, про це стане відомо ownCloud. Внутрішнє ім'я ownCloud використовується скрізь в ownCloud. Після скидання прив'язок в базі можуть зберегтися залишки старої інформації. Скидання прив'язок не прив'язано до конфігурації, він вплине на всі LDAP-підключення! Ні в якому разі не рекомендується скидати прив'язки, якщо система вже знаходиться в експлуатації, тільки на етапі тестування.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud використовує імена користувачів для зберігання та призначення метаданих. Для точної ідентифікації та розпізнавання користувачів, кожен користувач LDAP буде мати своє внутрішнє ім'я користувача. Це вимагає прив'язки імені користувача ownCloud до користувача LDAP. При створенні ім'я користувача призначається ідентифікатором UUID користувача LDAP. Крім цього кешируєтся доменне ім'я (DN) для зменшення числа звернень до LDAP, однак воно не використовується для ідентифікації. Якщо доменне ім'я було змінено, про це стане відомо ownCloud. Внутрішнє ім'я ownCloud використовується повсюдно в ownCloud. Після скидання прив'язок в базі можуть зберегтися залишки старої інформації. Скидання прив'язок не прив'язане до конфігурації, воно вплине на всі LDAP підключення! Ні в якому разі не рекомендується скидати прив'язки якщо система вже знаходиться в експлуатації, тільки на етапі тестування.", "Clear Username-LDAP User Mapping" : "Очистити картографію Імен користувачів-LDAP", "Clear Groupname-LDAP Group Mapping" : "Очистити картографію Імен груп-LDAP" }, diff --git a/apps/user_ldap/l10n/uk.json b/apps/user_ldap/l10n/uk.json index e069adf2ea7..597c15170d6 100644 --- a/apps/user_ldap/l10n/uk.json +++ b/apps/user_ldap/l10n/uk.json @@ -125,7 +125,7 @@ "UUID Attribute for Users:" : "UUID Атрибут для користувачів:", "UUID Attribute for Groups:" : "UUID Атрибут для груп:", "Username-LDAP User Mapping" : "Картографія Імен користувачів-LDAP ", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud використовує імена користувачів для зберігання і призначення метаданих. Для точної ідентифікації і розпізнавання користувачів, кожен користувач LDAP буде мати своє внутрішнє ім'я користувача. Це вимагає прив'язки імені користувача ownCloud до користувача LDAP. При створенні ім'я користувача призначається ідентифікатору UUID користувача LDAP. Крім цього кешується розрізнювальне ім'я (DN) для зменшення числа звернень до LDAP, однак воно не використовується для ідентифікації. Якщо розрізнювальне ім'я було змінене, про це стане відомо ownCloud. Внутрішнє ім'я ownCloud використовується скрізь в ownCloud. Після скидання прив'язок в базі можуть зберегтися залишки старої інформації. Скидання прив'язок не прив'язано до конфігурації, він вплине на всі LDAP-підключення! Ні в якому разі не рекомендується скидати прив'язки, якщо система вже знаходиться в експлуатації, тільки на етапі тестування.", + "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "ownCloud використовує імена користувачів для зберігання та призначення метаданих. Для точної ідентифікації та розпізнавання користувачів, кожен користувач LDAP буде мати своє внутрішнє ім'я користувача. Це вимагає прив'язки імені користувача ownCloud до користувача LDAP. При створенні ім'я користувача призначається ідентифікатором UUID користувача LDAP. Крім цього кешируєтся доменне ім'я (DN) для зменшення числа звернень до LDAP, однак воно не використовується для ідентифікації. Якщо доменне ім'я було змінено, про це стане відомо ownCloud. Внутрішнє ім'я ownCloud використовується повсюдно в ownCloud. Після скидання прив'язок в базі можуть зберегтися залишки старої інформації. Скидання прив'язок не прив'язане до конфігурації, воно вплине на всі LDAP підключення! Ні в якому разі не рекомендується скидати прив'язки якщо система вже знаходиться в експлуатації, тільки на етапі тестування.", "Clear Username-LDAP User Mapping" : "Очистити картографію Імен користувачів-LDAP", "Clear Groupname-LDAP Group Mapping" : "Очистити картографію Імен груп-LDAP" },"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);" diff --git a/apps/user_ldap/l10n/vi.js b/apps/user_ldap/l10n/vi.js index 591ee3b536a..0223475bc7b 100644 --- a/apps/user_ldap/l10n/vi.js +++ b/apps/user_ldap/l10n/vi.js @@ -1,15 +1,25 @@ OC.L10N.register( "user_ldap", { + "Failed to clear the mappings." : "Lỗi khi xóa ánh xạ.", + "Failed to delete the server configuration" : "Lỗi khi xóa cấu hình máy chủ", "Deletion failed" : "Xóa thất bại", "Success" : "Thành công", "Error" : "Lỗi", "Select groups" : "Chọn nhóm", "_%s group found_::_%s groups found_" : [""], "_%s user found_::_%s users found_" : [""], + "Invalid Host" : "Host không hợp lệ", + "Server" : "Máy chủ", + "User Filter" : "Bộ lọc người dùng", + "Login Filter" : "Bộ lọc đăng nhập", "Group Filter" : "Bộ lọc nhóm", "Save" : "Lưu", + "Test Configuration" : "Kiểm tra cấu hình", "Help" : "Giúp đỡ", + "Other Attributes:" : "Thuộc tính khác", + "1. Server" : "1. Máy chủ", + "%s. Server:" : "%s. Máy chủ:", "Host" : "Máy chủ", "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Bạn có thể bỏ qua các giao thức, ngoại trừ SSL. Sau đó bắt đầu với ldaps://", "Port" : "Cổng", diff --git a/apps/user_ldap/l10n/vi.json b/apps/user_ldap/l10n/vi.json index 1d30979d877..fb87f489942 100644 --- a/apps/user_ldap/l10n/vi.json +++ b/apps/user_ldap/l10n/vi.json @@ -1,13 +1,23 @@ { "translations": { + "Failed to clear the mappings." : "Lỗi khi xóa ánh xạ.", + "Failed to delete the server configuration" : "Lỗi khi xóa cấu hình máy chủ", "Deletion failed" : "Xóa thất bại", "Success" : "Thành công", "Error" : "Lỗi", "Select groups" : "Chọn nhóm", "_%s group found_::_%s groups found_" : [""], "_%s user found_::_%s users found_" : [""], + "Invalid Host" : "Host không hợp lệ", + "Server" : "Máy chủ", + "User Filter" : "Bộ lọc người dùng", + "Login Filter" : "Bộ lọc đăng nhập", "Group Filter" : "Bộ lọc nhóm", "Save" : "Lưu", + "Test Configuration" : "Kiểm tra cấu hình", "Help" : "Giúp đỡ", + "Other Attributes:" : "Thuộc tính khác", + "1. Server" : "1. Máy chủ", + "%s. Server:" : "%s. Máy chủ:", "Host" : "Máy chủ", "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Bạn có thể bỏ qua các giao thức, ngoại trừ SSL. Sau đó bắt đầu với ldaps://", "Port" : "Cổng", diff --git a/apps/user_ldap/l10n/zh_CN.js b/apps/user_ldap/l10n/zh_CN.js index 6ca18829fe0..9d15030773c 100644 --- a/apps/user_ldap/l10n/zh_CN.js +++ b/apps/user_ldap/l10n/zh_CN.js @@ -78,7 +78,6 @@ OC.L10N.register( "Override UUID detection" : "超越UUID检测", "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "ownCloud 默认会自动检测 UUID 属性。UUID 属性用来无误地识别 LDAP 用户和组。同时,如果上面没有特别设置,内部用户名也基于 UUID 创建。也可以覆盖设置,直接指定一个属性。但一定要确保指定的属性取得的用户和组是唯一的。留空,则执行默认操作。更改只影响新映射 (或增加) 的 LDAP 用户和组。", "Username-LDAP User Mapping" : "用户名-LDAP用户映射", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "用户名用于存储和分配数据 (元)。为了准确地识别和确认用户,每个用户都有一个内部用户名。这需要一个 ownCloud 用户名到 LDAP 用户的映射。创建的用户名被映射到 LDAP 用户的 UUID。此外,DN 也会被缓存,以减少 LDAP 连接,但它不用于识别。DN 的变化会被监视到。内部用户名会被用于所有地方。清除映射将导致一片混乱。清除映射不是常用的设置,它会影响到所有的 LDAP 配置!千万不要在正式环境中清除映射,只有在测试或试验时才这样做。", "Clear Username-LDAP User Mapping" : "清除用户-LDAP用户映射", "Clear Groupname-LDAP Group Mapping" : "清除组用户-LDAP级映射" }, diff --git a/apps/user_ldap/l10n/zh_CN.json b/apps/user_ldap/l10n/zh_CN.json index 04f94691b99..e53376a4ba7 100644 --- a/apps/user_ldap/l10n/zh_CN.json +++ b/apps/user_ldap/l10n/zh_CN.json @@ -76,7 +76,6 @@ "Override UUID detection" : "超越UUID检测", "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "ownCloud 默认会自动检测 UUID 属性。UUID 属性用来无误地识别 LDAP 用户和组。同时,如果上面没有特别设置,内部用户名也基于 UUID 创建。也可以覆盖设置,直接指定一个属性。但一定要确保指定的属性取得的用户和组是唯一的。留空,则执行默认操作。更改只影响新映射 (或增加) 的 LDAP 用户和组。", "Username-LDAP User Mapping" : "用户名-LDAP用户映射", - "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "用户名用于存储和分配数据 (元)。为了准确地识别和确认用户,每个用户都有一个内部用户名。这需要一个 ownCloud 用户名到 LDAP 用户的映射。创建的用户名被映射到 LDAP 用户的 UUID。此外,DN 也会被缓存,以减少 LDAP 连接,但它不用于识别。DN 的变化会被监视到。内部用户名会被用于所有地方。清除映射将导致一片混乱。清除映射不是常用的设置,它会影响到所有的 LDAP 配置!千万不要在正式环境中清除映射,只有在测试或试验时才这样做。", "Clear Username-LDAP User Mapping" : "清除用户-LDAP用户映射", "Clear Groupname-LDAP Group Mapping" : "清除组用户-LDAP级映射" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/user_ldap/l10n/zh_TW.js b/apps/user_ldap/l10n/zh_TW.js index ea05e4418cf..ce49f4a056d 100644 --- a/apps/user_ldap/l10n/zh_TW.js +++ b/apps/user_ldap/l10n/zh_TW.js @@ -19,6 +19,7 @@ OC.L10N.register( "Confirm Deletion" : "確認刪除", "_%s group found_::_%s groups found_" : [""], "_%s user found_::_%s users found_" : [""], + "Server" : "伺服器", "Group Filter" : "Group Filter", "Save" : "儲存", "Test Configuration" : "測試此設定", diff --git a/apps/user_ldap/l10n/zh_TW.json b/apps/user_ldap/l10n/zh_TW.json index 5f8faaa0083..50d1c724e9d 100644 --- a/apps/user_ldap/l10n/zh_TW.json +++ b/apps/user_ldap/l10n/zh_TW.json @@ -17,6 +17,7 @@ "Confirm Deletion" : "確認刪除", "_%s group found_::_%s groups found_" : [""], "_%s user found_::_%s users found_" : [""], + "Server" : "伺服器", "Group Filter" : "Group Filter", "Save" : "儲存", "Test Configuration" : "測試此設定", diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php index b6394823947..03c667a6a0c 100644 --- a/apps/user_ldap/lib/access.php +++ b/apps/user_ldap/lib/access.php @@ -303,7 +303,7 @@ class Access extends LDAPUtility implements user\IUserTools { /** * returns the LDAP DN for the given internal ownCloud name of the user * @param string $name the ownCloud name in question - * @return string with the LDAP DN on success, otherwise false + * @return string|false with the LDAP DN on success, otherwise false */ public function username2dn($name) { $fdn = $this->userMapper->getDNbyName($name); @@ -322,7 +322,7 @@ class Access extends LDAPUtility implements user\IUserTools { * returns the internal ownCloud name for the given LDAP DN of the group, false on DN outside of search DN or failure * @param string $fdn the dn of the group object * @param string $ldapName optional, the display name of the object - * @return string with the name to use in ownCloud, false on DN outside of search DN + * @return string|false with the name to use in ownCloud, false on DN outside of search DN */ public function dn2groupname($fdn, $ldapName = null) { //To avoid bypassing the base DN settings under certain circumstances @@ -339,7 +339,7 @@ class Access extends LDAPUtility implements user\IUserTools { * returns the internal ownCloud name for the given LDAP DN of the user, false on DN outside of search DN or failure * @param string $dn the dn of the user object * @param string $ldapName optional, the display name of the object - * @return string with with the name to use in ownCloud + * @return string|false with with the name to use in ownCloud */ public function dn2username($fdn, $ldapName = null) { //To avoid bypassing the base DN settings under certain circumstances @@ -357,7 +357,7 @@ class Access extends LDAPUtility implements user\IUserTools { * @param string $dn the dn of the user object * @param string $ldapName optional, the display name of the object * @param bool $isUser optional, whether it is a user object (otherwise group assumed) - * @return string with with the name to use in ownCloud + * @return string|false with with the name to use in ownCloud */ public function dn2ocname($fdn, $ldapName = null, $isUser = true) { if($isUser) { @@ -508,7 +508,7 @@ class Access extends LDAPUtility implements user\IUserTools { /** * creates a unique name for internal ownCloud use for users. Don't call it directly. * @param string $name the display name of the object - * @return string with with the name to use in ownCloud or false if unsuccessful + * @return string|false with with the name to use in ownCloud or false if unsuccessful * * Instead of using this method directly, call * createAltInternalOwnCloudName($name, true) @@ -530,7 +530,7 @@ class Access extends LDAPUtility implements user\IUserTools { /** * creates a unique name for internal ownCloud use for groups. Don't call it directly. * @param string $name the display name of the object - * @return string with with the name to use in ownCloud or false if unsuccessful. + * @return string|false with with the name to use in ownCloud or false if unsuccessful. * * Instead of using this method directly, call * createAltInternalOwnCloudName($name, false) @@ -569,7 +569,7 @@ class Access extends LDAPUtility implements user\IUserTools { * creates a unique name for internal ownCloud use. * @param string $name the display name of the object * @param boolean $isUser whether name should be created for a user (true) or a group (false) - * @return string with with the name to use in ownCloud or false if unsuccessful + * @return string|false with with the name to use in ownCloud or false if unsuccessful */ private function createAltInternalOwnCloudName($name, $isUser) { $originalTTL = $this->connection->ldapCacheTTL; @@ -958,7 +958,7 @@ class Access extends LDAPUtility implements user\IUserTools { /** * escapes (user provided) parts for LDAP filter * @param string $input, the provided value - * @param bool $allowAsterisk wether in * at the beginning should be preserved + * @param bool $allowAsterisk whether in * at the beginning should be preserved * @return string the escaped string */ public function escapeFilterPart($input, $allowAsterisk = false) { @@ -1372,7 +1372,8 @@ class Access extends LDAPUtility implements user\IUserTools { * @return void */ private function setPagedResultCookie($base, $filter, $limit, $offset, $cookie) { - if(!empty($cookie)) { + // allow '0' for 389ds + if(!empty($cookie) || $cookie === '0') { $cacheKey = 'lc' . crc32($base) . '-' . crc32($filter) . '-' .intval($limit) . '-' . intval($offset); $this->cookies[$cacheKey] = $cookie; $this->lastCookie = $cookie; @@ -1410,11 +1411,12 @@ class Access extends LDAPUtility implements user\IUserTools { foreach($bases as $base) { $cookie = $this->getPagedResultCookie($base, $filter, $limit, $offset); - if(empty($cookie) && ($offset > 0)) { + if(empty($cookie) && $cookie !== "0" && ($offset > 0)) { // no cookie known, although the offset is not 0. Maybe cache run out. We need // to start all over *sigh* (btw, Dear Reader, did you know LDAP paged // searching was designed by MSFT?) // Lukas: No, but thanks to reading that source I finally know! + // '0' is valid, because 389ds $reOffset = ($offset - $limit) < 0 ? 0 : $offset - $limit; //a bit recursive, $offset of 0 is the exit \OCP\Util::writeLog('user_ldap', 'Looking for cookie L/O '.$limit.'/'.$reOffset, \OCP\Util::INFO); @@ -1422,7 +1424,8 @@ class Access extends LDAPUtility implements user\IUserTools { $cookie = $this->getPagedResultCookie($base, $filter, $limit, $offset); //still no cookie? obviously, the server does not like us. Let's skip paging efforts. //TODO: remember this, probably does not change in the next request... - if(empty($cookie)) { + if(empty($cookie) && $cookie !== '0') { + // '0' is valid, because 389ds $cookie = null; } } @@ -1443,6 +1446,17 @@ class Access extends LDAPUtility implements user\IUserTools { } } + } else if($this->connection->hasPagedResultSupport && $limit === 0) { + // a search without limit was requested. However, if we do use + // Paged Search once, we always must do it. This requires us to + // initialize it with the configured page size. + $this->abandonPagedSearch(); + // in case someone set it to 0 … use 500, otherwise no results will + // be returned. + $pageSize = intval($this->connection->ldapPagingSize) > 0 ? intval($this->connection->ldapPagingSize) : 500; + $pagedSearchOK = $this->ldap->controlPagedResult( + $this->connection->getConnectionResource(), $pageSize, false, '' + ); } return $pagedSearchOK; diff --git a/apps/user_ldap/lib/connection.php b/apps/user_ldap/lib/connection.php index a9d21ffc8e7..86874a26aaa 100644 --- a/apps/user_ldap/lib/connection.php +++ b/apps/user_ldap/lib/connection.php @@ -32,6 +32,7 @@ namespace OCA\user_ldap\lib; * @property boolean hasPagedResultSupport * @property string[] ldapBaseUsers * @property int|string ldapPagingSize holds an integer + * @property bool|mixed|void ldapGroupMemberAssocAttr */ class Connection extends LDAPUtility { private $ldapConnectionRes = null; @@ -592,7 +593,7 @@ class Connection extends LDAPUtility { if(!$ldapLogin) { \OCP\Util::writeLog('user_ldap', 'Bind failed: ' . $this->ldap->errno($cr) . ': ' . $this->ldap->error($cr), - \OCP\Util::ERROR); + \OCP\Util::WARN); $this->ldapConnectionRes = null; return false; } diff --git a/apps/user_ldap/lib/wizard.php b/apps/user_ldap/lib/wizard.php index 2e4507a2585..49605cc9492 100644 --- a/apps/user_ldap/lib/wizard.php +++ b/apps/user_ldap/lib/wizard.php @@ -110,7 +110,7 @@ class Wizard extends LDAPUtility { return false; } $groupsTotal = ($groupsTotal !== false) ? $groupsTotal : 0; - $output = self::$l->n('%s group found', '%s groups found', $groupsTotal, $groupsTotal); + $output = self::$l->n('%s group found', '%s groups found', $groupsTotal, array($groupsTotal)); $this->result->addChange('ldap_group_count', $output); return $this->result; } @@ -124,7 +124,7 @@ class Wizard extends LDAPUtility { $usersTotal = $this->countEntries($filter, 'users'); $usersTotal = ($usersTotal !== false) ? $usersTotal : 0; - $output = self::$l->n('%s user found', '%s users found', $usersTotal, $usersTotal); + $output = self::$l->n('%s user found', '%s users found', $usersTotal, array($usersTotal)); $this->result->addChange('ldap_user_count', $output); return $this->result; } @@ -314,7 +314,7 @@ class Wizard extends LDAPUtility { /** * detects the available LDAP attributes - * @return array The instance's WizardResult instance + * @return array|false The instance's WizardResult instance * @throws \Exception */ private function getUserAttributes() { @@ -348,7 +348,7 @@ class Wizard extends LDAPUtility { /** * detects the available LDAP groups - * @return WizardResult the instance's WizardResult instance + * @return WizardResult|false the instance's WizardResult instance */ public function determineGroupsForGroups() { return $this->determineGroups('ldap_groupfilter_groups', @@ -358,7 +358,7 @@ class Wizard extends LDAPUtility { /** * detects the available LDAP groups - * @return WizardResult the instance's WizardResult instance + * @return WizardResult|false the instance's WizardResult instance */ public function determineGroupsForUsers() { return $this->determineGroups('ldap_userfilter_groups', @@ -370,7 +370,7 @@ class Wizard extends LDAPUtility { * @param string $dbKey * @param string $confKey * @param bool $testMemberOf - * @return WizardResult the instance's WizardResult instance + * @return WizardResult|false the instance's WizardResult instance * @throws \Exception */ private function determineGroups($dbKey, $confKey, $testMemberOf = true) { @@ -467,7 +467,7 @@ class Wizard extends LDAPUtility { /** * Detects the available object classes - * @return WizardResult the instance's WizardResult instance + * @return WizardResult|false the instance's WizardResult instance * @throws \Exception */ public function determineGroupObjectClasses() { @@ -524,7 +524,7 @@ class Wizard extends LDAPUtility { } /** - * @return WizardResult + * @return WizardResult|false * @throws \Exception */ public function getGroupFilter() { @@ -548,7 +548,7 @@ class Wizard extends LDAPUtility { } /** - * @return WizardResult + * @return WizardResult|false * @throws \Exception */ public function getUserListFilter() { @@ -850,13 +850,23 @@ class Wizard extends LDAPUtility { } $base = $this->configuration->ldapBase[0]; foreach($cns as $cn) { - $rr = $this->ldap->search($cr, $base, 'cn=' . $cn, array('dn')); + $rr = $this->ldap->search($cr, $base, 'cn=' . $cn, array('dn', 'primaryGroupToken')); if(!$this->ldap->isResource($rr)) { continue; } $er = $this->ldap->firstEntry($cr, $rr); + $attrs = $this->ldap->getAttributes($cr, $er); $dn = $this->ldap->getDN($cr, $er); - $filter .= '(memberof=' . $dn . ')'; + if(empty($dn)) { + continue; + } + $filterPart = '(memberof=' . $dn . ')'; + if(isset($attrs['primaryGroupToken'])) { + $pgt = $attrs['primaryGroupToken'][0]; + $primaryFilterPart = '(primaryGroupID=' . $pgt .')'; + $filterPart = '(|' . $filterPart . $primaryFilterPart . ')'; + } + $filter .= $filterPart; } $filter .= ')'; } @@ -1146,7 +1156,7 @@ class Wizard extends LDAPUtility { * Configuration class * @param bool $po whether the objectClass with most result entries * shall be pre-selected via the result - * @return array, list of found items. + * @return array|false list of found items. * @throws \Exception */ private function determineFeature($objectclasses, $attr, $dbkey, $confkey, $po = false) { diff --git a/apps/user_ldap/templates/settings.php b/apps/user_ldap/templates/settings.php index 811deada944..6aa2183726b 100644 --- a/apps/user_ldap/templates/settings.php +++ b/apps/user_ldap/templates/settings.php @@ -60,7 +60,7 @@ <p class="ldapIndent"><label for="ldap_expert_uuid_user_attr"><?php p($l->t('UUID Attribute for Users:'));?></label><input type="text" id="ldap_expert_uuid_user_attr" name="ldap_expert_uuid_user_attr" data-default="<?php p($_['ldap_expert_uuid_user_attr_default']); ?>" /></p> <p class="ldapIndent"><label for="ldap_expert_uuid_group_attr"><?php p($l->t('UUID Attribute for Groups:'));?></label><input type="text" id="ldap_expert_uuid_group_attr" name="ldap_expert_uuid_group_attr" data-default="<?php p($_['ldap_expert_uuid_group_attr_default']); ?>" /></p> <p><strong><?php p($l->t('Username-LDAP User Mapping'));?></strong></p> - <p class="ldapIndent"><?php p($l->t('Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage.'));?></p> + <p class="ldapIndent"><?php p($l->t('Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage.'));?></p> <p class="ldapIndent"><button type="button" id="ldap_action_clear_user_mappings" name="ldap_action_clear_user_mappings"><?php p($l->t('Clear Username-LDAP User Mapping'));?></button><br/><button type="button" id="ldap_action_clear_group_mappings" name="ldap_action_clear_group_mappings"><?php p($l->t('Clear Groupname-LDAP Group Mapping'));?></button></p> <?php print_unescaped($_['settingControls']); ?> </fieldset> diff --git a/apps/user_ldap/tests/group_ldap.php b/apps/user_ldap/tests/group_ldap.php index efd7f803f3b..44f0f82c2f7 100644 --- a/apps/user_ldap/tests/group_ldap.php +++ b/apps/user_ldap/tests/group_ldap.php @@ -76,10 +76,15 @@ class Test_Group_Ldap extends \Test\TestCase { ->method('readAttribute') ->will($this->returnValue(array('u11', 'u22', 'u33', 'u34'))); + // for primary groups + $access->expects($this->once()) + ->method('countUsers') + ->will($this->returnValue(2)); + $groupBackend = new GroupLDAP($access); $users = $groupBackend->countUsersInGroup('group'); - $this->assertSame(4, $users); + $this->assertSame(6, $users); } public function testCountWithSearchString() { diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php index 051e760105b..270e94121d5 100644 --- a/apps/user_ldap/user_ldap.php +++ b/apps/user_ldap/user_ldap.php @@ -303,7 +303,7 @@ class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn /** * get display name of the user * @param string $uid user ID of the user - * @return string display name + * @return string|false display name */ public function getDisplayName($uid) { if(!$this->userExists($uid)) { diff --git a/apps/user_webdavauth/l10n/de.js b/apps/user_webdavauth/l10n/de.js index aead50e2b72..6e667dca0b7 100644 --- a/apps/user_webdavauth/l10n/de.js +++ b/apps/user_webdavauth/l10n/de.js @@ -1,7 +1,7 @@ OC.L10N.register( "user_webdavauth", { - "WebDAV Authentication" : "WebDAV Authentifikation", + "WebDAV Authentication" : "WebDAV-Authentifizierung", "Address:" : "Adresse:", "Save" : "Speichern", "The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." : "Die Benutzerdaten werden an diese Adresse gesendet. Dieses Plugin prüft die Antwort und wird die HTTP-Statuscodes 401 und 403 als ungültige Daten interpretieren und alle anderen Antworten als gültige Daten." diff --git a/apps/user_webdavauth/l10n/de.json b/apps/user_webdavauth/l10n/de.json index 6a9a9520dce..f347f7724e5 100644 --- a/apps/user_webdavauth/l10n/de.json +++ b/apps/user_webdavauth/l10n/de.json @@ -1,5 +1,5 @@ { "translations": { - "WebDAV Authentication" : "WebDAV Authentifikation", + "WebDAV Authentication" : "WebDAV-Authentifizierung", "Address:" : "Adresse:", "Save" : "Speichern", "The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." : "Die Benutzerdaten werden an diese Adresse gesendet. Dieses Plugin prüft die Antwort und wird die HTTP-Statuscodes 401 und 403 als ungültige Daten interpretieren und alle anderen Antworten als gültige Daten." diff --git a/apps/user_webdavauth/l10n/hy.js b/apps/user_webdavauth/l10n/hy.js index 5d509b1c664..83f869e3dbd 100644 --- a/apps/user_webdavauth/l10n/hy.js +++ b/apps/user_webdavauth/l10n/hy.js @@ -1,6 +1,7 @@ OC.L10N.register( "user_webdavauth", { + "WebDAV Authentication" : "WebDAV նույնականացում", "Address:" : "Հասցե՝", "Save" : "Պահպանել" }, diff --git a/apps/user_webdavauth/l10n/hy.json b/apps/user_webdavauth/l10n/hy.json index ac0399d5cf8..17703f4e54e 100644 --- a/apps/user_webdavauth/l10n/hy.json +++ b/apps/user_webdavauth/l10n/hy.json @@ -1,4 +1,5 @@ { "translations": { + "WebDAV Authentication" : "WebDAV նույնականացում", "Address:" : "Հասցե՝", "Save" : "Պահպանել" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_webdavauth/l10n/sr.js b/apps/user_webdavauth/l10n/sr.js index 9413d934a2c..df3c00a5585 100644 --- a/apps/user_webdavauth/l10n/sr.js +++ b/apps/user_webdavauth/l10n/sr.js @@ -1,7 +1,9 @@ OC.L10N.register( "user_webdavauth", { - "WebDAV Authentication" : "WebDAV провера идентитета", - "Save" : "Сачувај" + "WebDAV Authentication" : "ВебДАВ провера идентитета", + "Address:" : "Адреса:", + "Save" : "Сачувај", + "The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." : "Кориснички акредитиви биће послати на ову адресу. Прикључак проверава одговор и ХТТП кодове 401 и 403 тумачиће као неисправне акредитиве а све остале одговоре као исправне." }, "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/user_webdavauth/l10n/sr.json b/apps/user_webdavauth/l10n/sr.json index 7e50e7c4132..037fd2929b1 100644 --- a/apps/user_webdavauth/l10n/sr.json +++ b/apps/user_webdavauth/l10n/sr.json @@ -1,5 +1,7 @@ { "translations": { - "WebDAV Authentication" : "WebDAV провера идентитета", - "Save" : "Сачувај" + "WebDAV Authentication" : "ВебДАВ провера идентитета", + "Address:" : "Адреса:", + "Save" : "Сачувај", + "The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." : "Кориснички акредитиви биће послати на ову адресу. Прикључак проверава одговор и ХТТП кодове 401 и 403 тумачиће као неисправне акредитиве а све остале одговоре као исправне." },"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 |