aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files')
-rw-r--r--apps/files/admin.php3
-rw-r--r--apps/files/ajax/delete.php15
-rw-r--r--apps/files/ajax/download.php11
-rw-r--r--apps/files/ajax/getstoragestats.php1
-rw-r--r--apps/files/ajax/list.php26
-rw-r--r--apps/files/ajax/mimeicon.php27
-rw-r--r--apps/files/ajax/move.php1
-rw-r--r--apps/files/ajax/newfile.php20
-rw-r--r--apps/files/ajax/newfolder.php28
-rw-r--r--apps/files/ajax/rename.php22
-rw-r--r--apps/files/ajax/upload.php5
-rw-r--r--apps/files/appinfo/app.php1
-rw-r--r--apps/files/appinfo/application.php9
-rw-r--r--apps/files/appinfo/remote.php57
-rw-r--r--apps/files/appinfo/routes.php10
-rw-r--r--apps/files/appinfo/update.php96
-rw-r--r--apps/files/appinfo/version2
-rw-r--r--apps/files/command/scan.php9
-rw-r--r--apps/files/controller/apicontroller.php3
-rw-r--r--apps/files/css/detailsView.css55
-rw-r--r--apps/files/css/files.css173
-rw-r--r--apps/files/css/mobile.css22
-rw-r--r--apps/files/download.php1
-rw-r--r--apps/files/index.php15
-rw-r--r--apps/files/js/detailfileinfoview.js56
-rw-r--r--apps/files/js/detailsview.js271
-rw-r--r--apps/files/js/detailtabview.js93
-rw-r--r--apps/files/js/file-upload.js12
-rw-r--r--apps/files/js/fileactions.js413
-rw-r--r--apps/files/js/fileactionsmenu.js132
-rw-r--r--apps/files/js/fileinfomodel.js71
-rw-r--r--apps/files/js/filelist.js376
-rw-r--r--apps/files/js/files.js69
-rw-r--r--apps/files/js/mainfileinfodetailview.js147
-rw-r--r--apps/files/js/navigation.js2
-rw-r--r--apps/files/js/tagsplugin.js11
-rw-r--r--apps/files/l10n/ar.js3
-rw-r--r--apps/files/l10n/ar.json3
-rw-r--r--apps/files/l10n/ast.js7
-rw-r--r--apps/files/l10n/ast.json7
-rw-r--r--apps/files/l10n/az.js5
-rw-r--r--apps/files/l10n/az.json5
-rw-r--r--apps/files/l10n/be.js2
-rw-r--r--apps/files/l10n/be.json2
-rw-r--r--apps/files/l10n/bg_BG.js3
-rw-r--r--apps/files/l10n/bg_BG.json3
-rw-r--r--apps/files/l10n/bs.js3
-rw-r--r--apps/files/l10n/bs.json3
-rw-r--r--apps/files/l10n/ca.js21
-rw-r--r--apps/files/l10n/ca.json21
-rw-r--r--apps/files/l10n/cs_CZ.js9
-rw-r--r--apps/files/l10n/cs_CZ.json9
-rw-r--r--apps/files/l10n/da.js9
-rw-r--r--apps/files/l10n/da.json9
-rw-r--r--apps/files/l10n/de.js9
-rw-r--r--apps/files/l10n/de.json9
-rw-r--r--apps/files/l10n/de_AT.js6
-rw-r--r--apps/files/l10n/de_AT.json6
-rw-r--r--apps/files/l10n/de_DE.js9
-rw-r--r--apps/files/l10n/de_DE.json9
-rw-r--r--apps/files/l10n/el.js9
-rw-r--r--apps/files/l10n/el.json9
-rw-r--r--apps/files/l10n/en_GB.js6
-rw-r--r--apps/files/l10n/en_GB.json6
-rw-r--r--apps/files/l10n/eo.js7
-rw-r--r--apps/files/l10n/eo.json7
-rw-r--r--apps/files/l10n/es.js11
-rw-r--r--apps/files/l10n/es.json11
-rw-r--r--apps/files/l10n/es_AR.js3
-rw-r--r--apps/files/l10n/es_AR.json3
-rw-r--r--apps/files/l10n/es_MX.js3
-rw-r--r--apps/files/l10n/es_MX.json3
-rw-r--r--apps/files/l10n/et_EE.js19
-rw-r--r--apps/files/l10n/et_EE.json19
-rw-r--r--apps/files/l10n/eu.js3
-rw-r--r--apps/files/l10n/eu.json3
-rw-r--r--apps/files/l10n/fi_FI.js9
-rw-r--r--apps/files/l10n/fi_FI.json9
-rw-r--r--apps/files/l10n/fr.js19
-rw-r--r--apps/files/l10n/fr.json19
-rw-r--r--apps/files/l10n/gl.js9
-rw-r--r--apps/files/l10n/gl.json9
-rw-r--r--apps/files/l10n/hr.js3
-rw-r--r--apps/files/l10n/hr.json3
-rw-r--r--apps/files/l10n/hu_HU.js10
-rw-r--r--apps/files/l10n/hu_HU.json10
-rw-r--r--apps/files/l10n/id.js14
-rw-r--r--apps/files/l10n/id.json14
-rw-r--r--apps/files/l10n/is.js2
-rw-r--r--apps/files/l10n/is.json2
-rw-r--r--apps/files/l10n/it.js9
-rw-r--r--apps/files/l10n/it.json9
-rw-r--r--apps/files/l10n/ja.js11
-rw-r--r--apps/files/l10n/ja.json11
-rw-r--r--apps/files/l10n/ko.js13
-rw-r--r--apps/files/l10n/ko.json13
-rw-r--r--apps/files/l10n/lb.js3
-rw-r--r--apps/files/l10n/lb.json3
-rw-r--r--apps/files/l10n/lt_LT.js15
-rw-r--r--apps/files/l10n/lt_LT.json15
-rw-r--r--apps/files/l10n/lv.js3
-rw-r--r--apps/files/l10n/lv.json3
-rw-r--r--apps/files/l10n/mk.js1
-rw-r--r--apps/files/l10n/mk.json1
-rw-r--r--apps/files/l10n/nb_NO.js15
-rw-r--r--apps/files/l10n/nb_NO.json15
-rw-r--r--apps/files/l10n/nl.js9
-rw-r--r--apps/files/l10n/nl.json9
-rw-r--r--apps/files/l10n/nn_NO.js1
-rw-r--r--apps/files/l10n/nn_NO.json1
-rw-r--r--apps/files/l10n/oc.js127
-rw-r--r--apps/files/l10n/oc.json127
-rw-r--r--apps/files/l10n/pl.js9
-rw-r--r--apps/files/l10n/pl.json9
-rw-r--r--apps/files/l10n/pt_BR.js10
-rw-r--r--apps/files/l10n/pt_BR.json10
-rw-r--r--apps/files/l10n/pt_PT.js7
-rw-r--r--apps/files/l10n/pt_PT.json7
-rw-r--r--apps/files/l10n/ro.js8
-rw-r--r--apps/files/l10n/ro.json8
-rw-r--r--apps/files/l10n/ru.js21
-rw-r--r--apps/files/l10n/ru.json21
-rw-r--r--apps/files/l10n/sk_SK.js6
-rw-r--r--apps/files/l10n/sk_SK.json6
-rw-r--r--apps/files/l10n/sl.js7
-rw-r--r--apps/files/l10n/sl.json7
-rw-r--r--apps/files/l10n/sq.js3
-rw-r--r--apps/files/l10n/sq.json3
-rw-r--r--apps/files/l10n/sr.js9
-rw-r--r--apps/files/l10n/sr.json9
-rw-r--r--apps/files/l10n/sr@latin.js167
-rw-r--r--apps/files/l10n/sr@latin.json167
-rw-r--r--apps/files/l10n/sv.js3
-rw-r--r--apps/files/l10n/sv.json3
-rw-r--r--apps/files/l10n/th_TH.js76
-rw-r--r--apps/files/l10n/th_TH.json76
-rw-r--r--apps/files/l10n/tr.js11
-rw-r--r--apps/files/l10n/tr.json11
-rw-r--r--apps/files/l10n/uk.js65
-rw-r--r--apps/files/l10n/uk.json65
-rw-r--r--apps/files/l10n/vi.js5
-rw-r--r--apps/files/l10n/vi.json5
-rw-r--r--apps/files/l10n/zh_CN.js15
-rw-r--r--apps/files/l10n/zh_CN.json15
-rw-r--r--apps/files/l10n/zh_TW.js3
-rw-r--r--apps/files/l10n/zh_TW.json3
-rw-r--r--apps/files/lib/activity.php51
-rw-r--r--apps/files/lib/app.php11
-rw-r--r--apps/files/lib/capabilities.php37
-rw-r--r--apps/files/lib/helper.php9
-rw-r--r--apps/files/templates/admin.php2
-rw-r--r--apps/files/templates/appnavigation.php4
-rw-r--r--apps/files/templates/index.php3
-rw-r--r--apps/files/templates/list.php2
-rw-r--r--apps/files/templates/test.pngbin0 -> 2302 bytes
-rw-r--r--apps/files/tests/activitytest.php68
-rw-r--r--apps/files/tests/ajax_rename.php29
-rw-r--r--apps/files/tests/controller/apicontrollertest.php2
-rw-r--r--apps/files/tests/js/detailsviewSpec.js157
-rw-r--r--apps/files/tests/js/favoritespluginspec.js2
-rw-r--r--apps/files/tests/js/fileUploadSpec.js59
-rw-r--r--apps/files/tests/js/fileactionsSpec.js551
-rw-r--r--apps/files/tests/js/fileactionsmenuSpec.js273
-rw-r--r--apps/files/tests/js/filelistSpec.js177
-rw-r--r--apps/files/tests/js/mainfileinfodetailviewSpec.js175
-rw-r--r--apps/files/tests/service/tagservice.php1
166 files changed, 4198 insertions, 1370 deletions
diff --git a/apps/files/admin.php b/apps/files/admin.php
index 70f537d0db9..349c27ff742 100644
--- a/apps/files/admin.php
+++ b/apps/files/admin.php
@@ -42,9 +42,10 @@ if($_POST && OC_Util::isCallRegistered()) {
}
$htaccessWritable=is_writable(OC::$SERVERROOT.'/.htaccess');
+$userIniWritable=is_writable(OC::$SERVERROOT.'/.user.ini');
$tmpl = new OCP\Template( 'files', 'admin' );
-$tmpl->assign( 'uploadChangable', $htaccessWorking and $htaccessWritable );
+$tmpl->assign( 'uploadChangable', ($htaccessWorking and $htaccessWritable) or $userIniWritable );
$tmpl->assign( 'uploadMaxFilesize', $maxUploadFilesize);
// max possible makes only sense on a 32 bit system
$tmpl->assign( 'displayMaxPossibleUploadSize', PHP_INT_SIZE===4);
diff --git a/apps/files/ajax/delete.php b/apps/files/ajax/delete.php
index 9d4f0b0fcf5..2d02869df14 100644
--- a/apps/files/ajax/delete.php
+++ b/apps/files/ajax/delete.php
@@ -1,13 +1,11 @@
<?php
/**
* @author Arthur Schiwon <blizzz@owncloud.com>
- * @author Björn Schießle <schiessle@owncloud.com>
* @author Frank Karlitschek <frank@owncloud.org>
* @author Jakob Sack <mail@jakobsack.de>
* @author Joas Schilling <nickvergessen@owncloud.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lukas Reschke <lukas@owncloud.com>
- * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <icewind@owncloud.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
@@ -54,10 +52,15 @@ $success = true;
//Now delete
foreach ($files as $file) {
- if (\OC\Files\Filesystem::file_exists($dir . '/' . $file) &&
- !(\OC\Files\Filesystem::isDeletable($dir . '/' . $file) &&
- \OC\Files\Filesystem::unlink($dir . '/' . $file))
- ) {
+ try {
+ if (\OC\Files\Filesystem::file_exists($dir . '/' . $file) &&
+ !(\OC\Files\Filesystem::isDeletable($dir . '/' . $file) &&
+ \OC\Files\Filesystem::unlink($dir . '/' . $file))
+ ) {
+ $filesWithError .= $file . "\n";
+ $success = false;
+ }
+ } catch (\Exception $e) {
$filesWithError .= $file . "\n";
$success = false;
}
diff --git a/apps/files/ajax/download.php b/apps/files/ajax/download.php
index e67635ab853..26bab8837b4 100644
--- a/apps/files/ajax/download.php
+++ b/apps/files/ajax/download.php
@@ -39,4 +39,15 @@ if (!is_array($files_list)) {
$files_list = array($files);
}
+/**
+ * this sets a cookie to be able to recognize the start of the download
+ * the content must not be longer than 32 characters and must only contain
+ * alphanumeric characters
+ */
+if(isset($_GET['downloadStartSecret'])
+ && !isset($_GET['downloadStartSecret'][32])
+ && preg_match('!^[a-zA-Z0-9]+$!', $_GET['downloadStartSecret']) === 1) {
+ setcookie('ocDownloadStarted', $_GET['downloadStartSecret'], time() + 20, '/');
+}
+
OC_Files::get($dir, $files_list, $_SERVER['REQUEST_METHOD'] == 'HEAD');
diff --git a/apps/files/ajax/getstoragestats.php b/apps/files/ajax/getstoragestats.php
index e56e425c1c6..10f8704dded 100644
--- a/apps/files/ajax/getstoragestats.php
+++ b/apps/files/ajax/getstoragestats.php
@@ -2,7 +2,6 @@
/**
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lukas Reschke <lukas@owncloud.com>
- * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <icewind@owncloud.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
diff --git a/apps/files/ajax/list.php b/apps/files/ajax/list.php
index 8daea6ca3fe..19129e9de11 100644
--- a/apps/files/ajax/list.php
+++ b/apps/files/ajax/list.php
@@ -45,10 +45,32 @@ try {
$sortAttribute = isset($_GET['sort']) ? (string)$_GET['sort'] : 'name';
$sortDirection = isset($_GET['sortdirection']) ? ($_GET['sortdirection'] === 'desc') : false;
+ $mimetypeFilters = isset($_GET['mimetypes']) ? json_decode($_GET['mimetypes']) : '';
- // make filelist
+ $files = [];
+ // Clean up duplicates from array
+ if (is_array($mimetypeFilters) && count($mimetypeFilters)) {
+ $mimetypeFilters = array_unique($mimetypeFilters);
+
+ if (!in_array('httpd/unix-directory', $mimetypeFilters)) {
+ // append folder filter to be able to browse folders
+ $mimetypeFilters[] = 'httpd/unix-directory';
+ }
+
+ // create filelist with mimetype filter - as getFiles only supports on
+ // mimetype filter at once we will filter this folder for each
+ // mimetypeFilter
+ foreach ($mimetypeFilters as $mimetypeFilter) {
+ $files = array_merge($files, \OCA\Files\Helper::getFiles($dir, $sortAttribute, $sortDirection, $mimetypeFilter));
+ }
+
+ // sort the files accordingly
+ $files = \OCA\Files\Helper::sortFiles($files, $sortAttribute, $sortDirection);
+ } else {
+ // create file list without mimetype filter
+ $files = \OCA\Files\Helper::getFiles($dir, $sortAttribute, $sortDirection);
+ }
- $files = \OCA\Files\Helper::getFiles($dir, $sortAttribute, $sortDirection);
$files = \OCA\Files\Helper::populateTags($files);
$data['directory'] = $dir;
$data['files'] = \OCA\Files\Helper::formatFileInfos($files);
diff --git a/apps/files/ajax/mimeicon.php b/apps/files/ajax/mimeicon.php
deleted file mode 100644
index 008ad41953e..00000000000
--- a/apps/files/ajax/mimeicon.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * @author Jörn Friedrich Dreyer <jfd@butonic.de>
- * @author Lukas Reschke <lukas@owncloud.com>
- * @author Robin Appelman <icewind@owncloud.com>
- *
- * @copyright Copyright (c) 2015, ownCloud, Inc.
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- */
-\OC::$server->getSession()->close();
-
-$mime = isset($_GET['mime']) ? (string)$_GET['mime'] : '';
-
-print OC_Helper::mimetypeIcon($mime);
diff --git a/apps/files/ajax/move.php b/apps/files/ajax/move.php
index ab02f993f82..0961636a116 100644
--- a/apps/files/ajax/move.php
+++ b/apps/files/ajax/move.php
@@ -5,7 +5,6 @@
* @author Georg Ehrke <georg@owncloud.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lukas Reschke <lukas@owncloud.com>
- * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <icewind@owncloud.com>
* @author Vincent Petry <pvince81@owncloud.com>
*
diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php
index b4e1e508a3f..be09b288d4b 100644
--- a/apps/files/ajax/newfile.php
+++ b/apps/files/ajax/newfile.php
@@ -4,7 +4,6 @@
* @author Georg Ehrke <georg@owncloud.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lukas Reschke <lukas@owncloud.com>
- * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <icewind@owncloud.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
@@ -78,10 +77,21 @@ $templateManager = OC_Helper::getFileTemplateManager();
$mimeType = OC_Helper::getMimetypeDetector()->detectPath($target);
$content = $templateManager->getTemplate($mimeType);
-if($content) {
- $success = \OC\Files\Filesystem::file_put_contents($target, $content);
-} else {
- $success = \OC\Files\Filesystem::touch($target);
+try {
+ if($content) {
+ $success = \OC\Files\Filesystem::file_put_contents($target, $content);
+ } else {
+ $success = \OC\Files\Filesystem::touch($target);
+ }
+} catch (\Exception $e) {
+ $result = [
+ 'success' => false,
+ 'data' => [
+ 'message' => $e->getMessage()
+ ]
+ ];
+ OCP\JSON::error($result);
+ exit();
}
if($success) {
diff --git a/apps/files/ajax/newfolder.php b/apps/files/ajax/newfolder.php
index 90bc9ecbb83..a2897dd437a 100644
--- a/apps/files/ajax/newfolder.php
+++ b/apps/files/ajax/newfolder.php
@@ -6,7 +6,6 @@
* @author Georg Ehrke <georg@owncloud.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lukas Reschke <lukas@owncloud.com>
- * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <icewind@owncloud.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
@@ -74,15 +73,26 @@ if (\OC\Files\Filesystem::file_exists($target)) {
exit();
}
-if(\OC\Files\Filesystem::mkdir($target)) {
- if ( $dir !== '/') {
- $path = $dir.'/'.$folderName;
- } else {
- $path = '/'.$folderName;
+try {
+ if(\OC\Files\Filesystem::mkdir($target)) {
+ if ( $dir !== '/') {
+ $path = $dir.'/'.$folderName;
+ } else {
+ $path = '/'.$folderName;
+ }
+ $meta = \OC\Files\Filesystem::getFileInfo($path);
+ $meta['type'] = 'dir'; // missing ?!
+ OCP\JSON::success(array('data' => \OCA\Files\Helper::formatFileInfo($meta)));
+ exit();
}
- $meta = \OC\Files\Filesystem::getFileInfo($path);
- $meta['type'] = 'dir'; // missing ?!
- OCP\JSON::success(array('data' => \OCA\Files\Helper::formatFileInfo($meta)));
+} catch (\Exception $e) {
+ $result = [
+ 'success' => false,
+ 'data' => [
+ 'message' => $e->getMessage()
+ ]
+ ];
+ OCP\JSON::error($result);
exit();
}
diff --git a/apps/files/ajax/rename.php b/apps/files/ajax/rename.php
index 576902e29e5..a24a57b1046 100644
--- a/apps/files/ajax/rename.php
+++ b/apps/files/ajax/rename.php
@@ -7,6 +7,7 @@
* @author Lukas Reschke <lukas@owncloud.com>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <icewind@owncloud.com>
+ * @author Vincent Petry <pvince81@owncloud.com>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
* @license AGPL-3.0
@@ -29,15 +30,26 @@ OCP\JSON::checkLoggedIn();
OCP\JSON::callCheck();
\OC::$server->getSession()->close();
+$l10n = \OC::$server->getL10N('files');
+
$files = new \OCA\Files\App(
\OC\Files\Filesystem::getView(),
\OC::$server->getL10N('files')
);
-$result = $files->rename(
- isset($_GET['dir']) ? (string)$_GET['dir'] : '',
- isset($_GET['file']) ? (string)$_GET['file'] : '',
- isset($_GET['newname']) ? (string)$_GET['newname'] : ''
-);
+try {
+ $result = $files->rename(
+ isset($_GET['dir']) ? (string)$_GET['dir'] : '',
+ isset($_GET['file']) ? (string)$_GET['file'] : '',
+ isset($_GET['newname']) ? (string)$_GET['newname'] : ''
+ );
+} catch (\Exception $e) {
+ $result = [
+ 'success' => false,
+ 'data' => [
+ 'message' => $e->getMessage()
+ ]
+ ];
+}
if($result['success'] === true){
OCP\JSON::success(['data' => $result['data']]);
diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php
index 4d5dc84e9c7..4bc2ce8bdf3 100644
--- a/apps/files/ajax/upload.php
+++ b/apps/files/ajax/upload.php
@@ -9,7 +9,6 @@
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Lukas Reschke <lukas@owncloud.com>
* @author Luke Policinski <lpolicinski@gmail.com>
- * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <icewind@owncloud.com>
* @author Roman Geber <rgeber@owncloudapps.com>
* @author TheSFReader <TheSFReader@gmail.com>
@@ -83,6 +82,10 @@ if (empty($_POST['dirToken'])) {
// The token defines the target directory (security reasons)
$path = \OC\Files\Filesystem::getPath($linkItem['file_source']);
+ if($path === null) {
+ OCP\JSON::error(array('data' => array_merge(array('message' => $l->t('Unable to set upload directory.')))));
+ die();
+ }
$dir = sprintf(
"/%s/%s",
$path,
diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php
index c483ad31ec5..40b194ab882 100644
--- a/apps/files/appinfo/app.php
+++ b/apps/files/appinfo/app.php
@@ -3,7 +3,6 @@
* @author Jakob Sack <mail@jakobsack.de>
* @author Joas Schilling <nickvergessen@owncloud.com>
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
- * @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <icewind@owncloud.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
diff --git a/apps/files/appinfo/application.php b/apps/files/appinfo/application.php
index c8aaf375d96..6ba77e09556 100644
--- a/apps/files/appinfo/application.php
+++ b/apps/files/appinfo/application.php
@@ -1,6 +1,5 @@
<?php
/**
- * @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Tobias Kaminsky <tobias@kaminsky.me>
* @author Vincent Petry <pvince81@owncloud.com>
@@ -21,8 +20,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
-
-namespace OCA\Files\Appinfo;
+namespace OCA\Files\AppInfo;
use OCA\Files\Controller\ApiController;
use OCP\AppFramework\App;
@@ -68,5 +66,10 @@ class Application extends App {
$homeFolder
);
});
+
+ /*
+ * Register capabilities
+ */
+ $container->registerCapability('OCA\Files\Capabilities');
}
}
diff --git a/apps/files/appinfo/remote.php b/apps/files/appinfo/remote.php
index 1e54fc10efa..36479ae13d0 100644
--- a/apps/files/appinfo/remote.php
+++ b/apps/files/appinfo/remote.php
@@ -30,51 +30,26 @@
// no php execution timeout for webdav
set_time_limit(0);
+// Turn off output buffering to prevent memory problems
+\OC_Util::obEnd();
+
+$serverFactory = new \OC\Connector\Sabre\ServerFactory(
+ \OC::$server->getConfig(),
+ \OC::$server->getLogger(),
+ \OC::$server->getDatabaseConnection(),
+ \OC::$server->getUserSession(),
+ \OC::$server->getMountManager(),
+ \OC::$server->getTagManager()
+);
// Backends
$authBackend = new \OC\Connector\Sabre\Auth();
+$requestUri = \OC::$server->getRequest()->getRequestUri();
-// Fire up server
-$objectTree = new \OC\Connector\Sabre\ObjectTree();
-$server = new \OC\Connector\Sabre\Server($objectTree);
-// Set URL explicitly due to reverse-proxy situations
-$server->httpRequest->setUrl(\OC::$server->getRequest()->getRequestUri());
-$server->setBaseUri($baseuri);
-
-// Load plugins
-$defaults = new OC_Defaults();
-$server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend, $defaults->getName()));
-// FIXME: The following line is a workaround for legacy components relying on being able to send a GET to /
-$server->addPlugin(new \OC\Connector\Sabre\DummyGetResponsePlugin());
-$server->addPlugin(new \OC\Connector\Sabre\FilesPlugin($objectTree));
-$server->addPlugin(new \OC\Connector\Sabre\MaintenancePlugin());
-$server->addPlugin(new \OC\Connector\Sabre\ExceptionLoggerPlugin('webdav', \OC::$server->getLogger()));
-
-// wait with registering these until auth is handled and the filesystem is setup
-$server->on('beforeMethod', function () use ($server, $objectTree) {
- $view = \OC\Files\Filesystem::getView();
- $rootInfo = $view->getFileInfo('');
-
- // Create ownCloud Dir
- $mountManager = \OC\Files\Filesystem::getMountManager();
- $rootDir = new \OC\Connector\Sabre\Directory($view, $rootInfo);
- $objectTree->init($rootDir, $view, $mountManager);
-
- $server->addPlugin(new \OC\Connector\Sabre\TagsPlugin($objectTree, \OC::$server->getTagManager()));
- $server->addPlugin(new \OC\Connector\Sabre\QuotaPlugin($view));
-
- // custom properties plugin must be the last one
- $server->addPlugin(
- new \Sabre\DAV\PropertyStorage\Plugin(
- new \OC\Connector\Sabre\CustomPropertiesBackend(
- $objectTree,
- \OC::$server->getDatabaseConnection(),
- \OC::$server->getUserSession()->getUser()
- )
- )
- );
- $server->addPlugin(new \OC\Connector\Sabre\CopyEtagHeaderPlugin());
-}, 30); // priority 30: after auth (10) and acl(20), before lock(50) and handling the request
+$server = $serverFactory->createServer($baseuri, $requestUri, $authBackend, function() {
+ // use the view for the logged in user
+ return \OC\Files\Filesystem::getView();
+});
// And off we go!
$server->exec();
diff --git a/apps/files/appinfo/routes.php b/apps/files/appinfo/routes.php
index b6506824a80..d1b8954d5ce 100644
--- a/apps/files/appinfo/routes.php
+++ b/apps/files/appinfo/routes.php
@@ -3,6 +3,7 @@
* @author Bart Visscher <bartv@thisnet.nl>
* @author Lukas Reschke <lukas@owncloud.com>
* @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Tobias Kaminsky <tobias@kaminsky.me>
* @author Tom Needham <tom@owncloud.com>
* @author Vincent Petry <pvince81@owncloud.com>
@@ -23,8 +24,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
-
-namespace OCA\Files\Appinfo;
+namespace OCA\Files\AppInfo;
$application = new Application();
$application->registerRoutes(
@@ -65,8 +65,6 @@ $this->create('files_ajax_getstoragestats', 'ajax/getstoragestats.php')
->actionInclude('files/ajax/getstoragestats.php');
$this->create('files_ajax_list', 'ajax/list.php')
->actionInclude('files/ajax/list.php');
-$this->create('files_ajax_mimeicon', 'ajax/mimeicon.php')
- ->actionInclude('files/ajax/mimeicon.php');
$this->create('files_ajax_move', 'ajax/move.php')
->actionInclude('files/ajax/move.php');
$this->create('files_ajax_newfile', 'ajax/newfile.php')
@@ -83,6 +81,4 @@ $this->create('files_ajax_upload', 'ajax/upload.php')
$this->create('download', 'download{file}')
->requirements(array('file' => '.*'))
->actionInclude('files/download.php');
-
-// Register with the capabilities API
-\OC_API::register('get', '/cloud/capabilities', array('OCA\Files\Capabilities', 'getCapabilities'), 'files', \OC_API::USER_AUTH);
+
diff --git a/apps/files/appinfo/update.php b/apps/files/appinfo/update.php
new file mode 100644
index 00000000000..2691c05c348
--- /dev/null
+++ b/apps/files/appinfo/update.php
@@ -0,0 +1,96 @@
+<?php
+/**
+ * @author Björn Schießle <schiessle@owncloud.com>
+ * @author Joas Schilling <nickvergessen@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+$installedVersion = \OC::$server->getConfig()->getAppValue('files', 'installed_version');
+$ocVersion = explode('.', \OC::$server->getSystemConfig()->getValue('version'));
+
+/**
+ * In case encryption was not enabled, we accidently set encrypted = 1 for
+ * files inside mount points, since 8.1.0. This breaks opening the files in
+ * 8.1.1 because we fixed the code that checks if a file is encrypted.
+ * In order to fix the file, we need to reset the flag of the file. However,
+ * the flag might be set because the file is in fact encrypted because it was
+ * uploaded at a time where encryption was enabled.
+ *
+ * So we can only do this when:
+ * - Current version of ownCloud before the update is 8.1.0 or 8.2.0.(0-2)
+ * - Encryption is disabled
+ * - files_encryption is not known in the app config
+ *
+ * If the first two are not the case, we are save. However, if files_encryption
+ * values exist in the config, we might have a false negative here.
+ * Now if there is no file with unencrypted size greater 0, that means there are
+ * no files that are still encrypted with "files_encryption" encryption. So we
+ * can also safely reset the flag here.
+ *
+ * If this is not the case, we go with "better save then sorry" and don't change
+ * the flag but write a message to the ownCloud log file.
+ */
+
+/**
+ * @param \OCP\IDBConnection $conn
+ */
+function owncloud_reset_encrypted_flag(\OCP\IDBConnection $conn) {
+ $conn->executeUpdate('UPDATE `*PREFIX*filecache` SET `encrypted` = 0 WHERE `encrypted` = 1');
+}
+
+// Current version of ownCloud before the update is 8.1.0 or 8.2.0.(0-2)
+if ($installedVersion === '1.1.9' && (
+ // 8.1.0.x
+ (((int) $ocVersion[0]) === 8 && ((int) $ocVersion[1]) === 1 && ((int) $ocVersion[2]) === 0)
+ ||
+ // < 8.2.0.3
+ (((int) $ocVersion[0]) === 8 && ((int) $ocVersion[1]) === 2 && ((int) $ocVersion[2]) === 0 && ((int) $ocVersion[3]) < 3)
+ )) {
+
+ // Encryption is not enabled
+ if (!\OC::$server->getEncryptionManager()->isEnabled()) {
+ $conn = \OC::$server->getDatabaseConnection();
+
+ // Old encryption is not known in app config
+ $oldEncryption = \OC::$server->getConfig()->getAppKeys('files_encryption');
+ if (empty($oldEncryption)) {
+ owncloud_reset_encrypted_flag($conn);
+ } else {
+ $query = $conn->prepare('SELECT * FROM `*PREFIX*filecache` WHERE `encrypted` = 1 AND `unencrypted_size` > 0', 1);
+ $query->execute();
+ $empty = $query->fetch();
+
+ if (empty($empty)) {
+ owncloud_reset_encrypted_flag($conn);
+ } else {
+ /**
+ * Sorry in case you are a false positive, but we are not 100% that
+ * you don't have any encrypted files anymore, so we can not reset
+ * the value safely
+ */
+ \OC::$server->getLogger()->warning(
+ 'If you have a problem with files not being accessible and '
+ . 'you are not using encryption, please have a look at the following'
+ . 'issue: {issue}',
+ [
+ 'issue' => 'https://github.com/owncloud/core/issues/17846',
+ ]
+ );
+ }
+ }
+ }
+}
diff --git a/apps/files/appinfo/version b/apps/files/appinfo/version
index 512a1faa680..5ed5faa5f16 100644
--- a/apps/files/appinfo/version
+++ b/apps/files/appinfo/version
@@ -1 +1 @@
-1.1.9
+1.1.10
diff --git a/apps/files/command/scan.php b/apps/files/command/scan.php
index 599dc603c7b..99ce64e09cc 100644
--- a/apps/files/command/scan.php
+++ b/apps/files/command/scan.php
@@ -92,10 +92,10 @@ class Scan extends Command {
}
protected function execute(InputInterface $input, OutputInterface $output) {
- $path = $input->getOption('path');
- if ($path) {
- $path = '/'.trim($path, '/');
- list (, $user, ) = explode('/', $path, 3);
+ $inputPath = $input->getOption('path');
+ if ($inputPath) {
+ $inputPath = '/' . trim($inputPath, '/');
+ list (, $user,) = explode('/', $inputPath, 3);
$users = array($user);
} else if ($input->getOption('all')) {
$users = $this->userManager->search('');
@@ -114,6 +114,7 @@ class Scan extends Command {
if (is_object($user)) {
$user = $user->getUID();
}
+ $path = $inputPath ? $inputPath : '/' . $user;
if ($this->userManager->userExists($user)) {
$this->scanFiles($user, $path, $quiet, $output);
} else {
diff --git a/apps/files/controller/apicontroller.php b/apps/files/controller/apicontroller.php
index 072265d86d6..0cc222d7ce9 100644
--- a/apps/files/controller/apicontroller.php
+++ b/apps/files/controller/apicontroller.php
@@ -31,7 +31,6 @@ use OCP\AppFramework\Controller;
use OCP\IRequest;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\Http\DataDisplayResponse;
-use OCP\AppFramework\Http\DownloadResponse;
use OCA\Files\Service\TagService;
use OCP\IPreview;
@@ -93,7 +92,6 @@ class ApiController extends Controller {
* replace the actual tag selection.
*
* @NoAdminRequired
- * @CORS
*
* @param string $path path
* @param array|string $tags array of tags
@@ -127,7 +125,6 @@ class ApiController extends Controller {
* Returns a list of all files tagged with the given tag.
*
* @NoAdminRequired
- * @CORS
*
* @param array|string $tagName tag name to filter by
* @return DataResponse
diff --git a/apps/files/css/detailsView.css b/apps/files/css/detailsView.css
new file mode 100644
index 00000000000..76629cb790f
--- /dev/null
+++ b/apps/files/css/detailsView.css
@@ -0,0 +1,55 @@
+#app-sidebar .detailFileInfoContainer {
+ min-height: 50px;
+ padding: 15px;
+}
+
+#app-sidebar .detailFileInfoContainer > div {
+ clear: both;
+}
+
+#app-sidebar .mainFileInfoView {
+ margin-right: 20px; /* accomodate for close icon */
+}
+
+#app-sidebar .thumbnail {
+ width: 50px;
+ height: 50px;
+ float: left;
+ margin-right: 10px;
+ background-size: 50px;
+}
+
+#app-sidebar .ellipsis {
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+
+#app-sidebar .fileName {
+ font-size: 16px;
+ padding-top: 3px;
+}
+
+#app-sidebar .file-details {
+ margin-top: 3px;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+ opacity: .5;
+}
+#app-sidebar .action-favorite {
+ vertical-align: text-bottom;
+ padding: 10px;
+ margin: -10px;
+}
+
+#app-sidebar .detailList {
+ float: left;
+}
+
+#app-sidebar .close {
+ position: absolute;
+ top: 0;
+ right: 0;
+ padding: 15px;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+ opacity: .5;
+}
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index 455ccae3f96..26ba86b28c8 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -103,6 +103,10 @@
min-height: 100%;
}
+.app-files #app-content {
+ overflow-x: hidden;
+}
+
/* icons for sidebar */
.nav-icon-files {
background-image: url('../img/folder.svg');
@@ -143,6 +147,7 @@
#filestable tbody tr:active {
background-color: rgb(240,240,240);
}
+#filestable tbody tr.highlighted,
#filestable tbody tr.selected {
background-color: rgb(230,230,230);
}
@@ -244,8 +249,8 @@ table th.column-last, table td.column-last {
box-sizing: border-box;
position: relative;
/* this can not be just width, both need to be set … table styling */
- min-width: 176px;
- max-width: 176px;
+ min-width: 130px;
+ max-width: 130px;
}
/* Multiselect bar */
@@ -274,7 +279,16 @@ table.multiselect #headerName {
position: relative;
width: 9999px; /* when we use 100%, the styling breaks on mobile … table styling */
}
-table td.selection, table th.selection, table td.fileaction { width:32px; text-align:center; }
+table.multiselect #modified {
+ display: none;
+}
+
+table td.selection,
+table th.selection,
+table td.fileaction {
+ width: 32px;
+ text-align: center;
+}
table td.filename a.name {
position:relative; /* Firefox needs to explicitly have this default set … */
-moz-box-sizing: border-box;
@@ -312,14 +326,7 @@ table td.filename .nametext, .uploadtext, .modified, .column-last>span:first-chi
position: relative;
overflow: hidden;
text-overflow: ellipsis;
- width: 90%;
-}
-/* ellipsize long modified dates to make room for showing delete button */
-#fileList tr:hover .modified,
-#fileList tr:focus .modified,
-#fileList tr:hover .column-last>span:first-child,
-#fileList tr:focus .column-last>span:first-child {
- width: 75%;
+ width: 110px;
}
/* TODO fix usability bug (accidental file/folder selection) */
@@ -358,45 +365,27 @@ table td.filename .nametext .innernametext {
@media only screen and (min-width: 1366px) {
table td.filename .nametext .innernametext {
- max-width: 760px;
- }
-
- table tr:hover td.filename .nametext .innernametext,
- table tr:focus td.filename .nametext .innernametext {
- max-width: 480px;
+ max-width: 660px;
}
}
-
@media only screen and (min-width: 1200px) and (max-width: 1366px) {
table td.filename .nametext .innernametext {
- max-width: 600px;
- }
-
- table tr:hover td.filename .nametext .innernametext,
- table tr:focus td.filename .nametext .innernametext {
- max-width: 320px;
+ max-width: 500px;
}
}
-
-@media only screen and (min-width: 1000px) and (max-width: 1200px) {
+@media only screen and (min-width: 1100px) and (max-width: 1200px) {
table td.filename .nametext .innernametext {
max-width: 400px;
}
-
- table tr:hover td.filename .nametext .innernametext,
- table tr:focus td.filename .nametext .innernametext {
- max-width: 120px;
+}
+@media only screen and (min-width: 1000px) and (max-width: 1100px) {
+ table td.filename .nametext .innernametext {
+ max-width: 310px;
}
}
-
@media only screen and (min-width: 768px) and (max-width: 1000px) {
table td.filename .nametext .innernametext {
- max-width: 320px;
- }
-
- table tr:hover td.filename .nametext .innernametext,
- table tr:focus td.filename .nametext .innernametext {
- max-width: 40px;
+ max-width: 240px;
}
}
@@ -503,6 +492,23 @@ table td.filename .uploadtext {
font-size: 11px;
}
+.busy .fileactions, .busy .action {
+ visibility: hidden;
+}
+
+/* fix position of bubble pointer for Files app */
+.bubble,
+#app-navigation .app-navigation-entry-menu {
+ border-top-right-radius: 3px;
+}
+.bubble:after,
+#app-navigation .app-navigation-entry-menu:after {
+ right: 6px;
+}
+.bubble:before,
+#app-navigation .app-navigation-entry-menu:before {
+ right: 6px;
+}
/* force show the loading icon, not only on hover */
#fileList .icon-loading-small {
@@ -513,21 +519,15 @@ table td.filename .uploadtext {
}
#fileList img.move2trash { display:inline; margin:-8px 0; padding:16px 8px 16px 8px !important; float:right; }
-#fileList a.action.delete {
- position: absolute;
- right: 15px;
- padding: 17px 14px;
-}
#fileList .action.action-share-notification span, #fileList a.name {
cursor: default !important;
}
-a.action>img {
- max-height:16px;
- max-width:16px;
- vertical-align:text-bottom;
- margin-bottom: -1px;
+a.action > img {
+ max-height: 16px;
+ max-width: 16px;
+ vertical-align: text-bottom;
}
/* Actions for selected files */
@@ -564,22 +564,29 @@ a.action>img {
display:none;
}
-#fileList a.action[data-action="Rename"] {
- padding: 16px 14px 17px !important;
-}
-
.ie8 #fileList a.action img,
#fileList tr:hover a.action,
#fileList a.action.permanent,
#fileList tr:focus a.action,
-#fileList a.action.permanent
-/*#fileList .name:focus .action*/ {
+#fileList a.action.permanent,
+#fileList tr:hover a.action.no-permission:hover,
+#fileList tr:focus a.action.no-permission:focus,
+/*#fileList .name:focus .action,*/
+/* also enforce the low opacity for disabled links that are hovered/focused */
+.ie8 #fileList a.action.disabled:hover img,
+#fileList tr:hover a.action.disabled:hover,
+#fileList tr:focus a.action.disabled:focus,
+#fileList .name:focus a.action.disabled:focus,
+#fileList a.action.disabled img {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
filter: alpha(opacity=50);
opacity: .5;
display:inline;
}
.ie8 #fileList a.action:hover img,
+#fileList tr a.action.disabled.action-download,
+#fileList tr:hover a.action.disabled.action-download:hover,
+#fileList tr:focus a.action.disabled.action-download:focus,
#fileList tr:hover a.action:hover,
#fileList tr:focus a.action:focus,
#fileList .name:focus a.action:focus {
@@ -588,23 +595,36 @@ a.action>img {
opacity: 1;
display:inline;
}
+#fileList tr a.action.disabled {
+ background: none;
+}
+
+#selectedActionsList a.download.disabled,
+#fileList tr a.action.action-download.disabled {
+ color: #000000;
+}
+
+#fileList tr:hover a.action.disabled:hover * {
+ cursor: default;
+}
.summary {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
filter: alpha(opacity=30);
opacity: .3;
- height: 60px;
+ /* add whitespace to bottom of files list to correctly show dropdowns */
+ height: 300px;
}
-
.summary:hover,
.summary:focus,
.summary,
table tr.summary td {
background-color: transparent;
}
-
.summary td {
border-bottom: none;
+ vertical-align: top;
+ padding-top: 20px;
}
.summary .info {
margin-left: 40px;
@@ -655,3 +675,44 @@ table.dragshadow td.size {
.mask.transparent{
opacity: 0;
}
+
+.fileActionsMenu {
+ padding: 4px 12px;
+}
+.fileActionsMenu li {
+ padding: 5px 0;
+}
+#fileList .fileActionsMenu a.action img {
+ padding: initial;
+}
+#fileList .fileActionsMenu a.action {
+ padding: 10px;
+ margin: -10px;
+}
+
+.fileActionsMenu.hidden {
+ display: none;
+}
+
+#fileList .fileActionsMenu .action {
+ display: block;
+ line-height: 30px;
+ padding-left: 5px;
+ color: #000;
+ padding: 0;
+}
+
+.fileActionsMenu .action img,
+.fileActionsMenu .action .no-icon {
+ display: inline-block;
+ width: 16px;
+ margin-right: 5px;
+}
+
+.fileActionsMenu .action {
+ opacity: 0.5;
+}
+
+.fileActionsMenu li:hover .action {
+ opacity: 1;
+}
diff --git a/apps/files/css/mobile.css b/apps/files/css/mobile.css
index 4881f7c70e4..dd8244a2913 100644
--- a/apps/files/css/mobile.css
+++ b/apps/files/css/mobile.css
@@ -5,11 +5,6 @@
min-width: initial !important;
}
-/* do not show Deleted Files on mobile, not optimized yet and button too long */
-#controls #trash {
- display: none;
-}
-
/* hide size and date columns */
table th#headerSize,
table td.filesize,
@@ -38,7 +33,8 @@ table td.filename .nametext {
}
/* always show actions on mobile, not only on hover */
-#fileList a.action {
+#fileList a.action,
+#fileList a.action.action-menu.permanent {
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)" !important;
filter: alpha(opacity=20) !important;
opacity: .2 !important;
@@ -50,17 +46,19 @@ table td.filename .nametext {
filter: alpha(opacity=70) !important;
opacity: .7 !important;
}
-/* do not show Rename or Versions on mobile */
-#fileList .action.action-rename,
-#fileList .action.action-versions {
- display: none !important;
+#fileList a.action.action-menu img {
+ padding-left: 2px;
+}
+
+#fileList .fileActionsMenu {
+ margin-right: 5px;
}
/* some padding for better clickability */
#fileList a.action img {
padding: 0 6px 0 12px;
}
-/* hide text of the actions on mobile */
-#fileList a.action span {
+/* hide text of the share action on mobile */
+#fileList a.action-share span {
display: none;
}
diff --git a/apps/files/download.php b/apps/files/download.php
index c85051e0f4e..b0628e394be 100644
--- a/apps/files/download.php
+++ b/apps/files/download.php
@@ -1,5 +1,6 @@
<?php
/**
+ * @author Andreas Fischer <bantu@owncloud.com>
* @author Felix Moeller <mail@felixmoeller.de>
* @author Frank Karlitschek <frank@owncloud.org>
* @author Jakob Sack <mail@jakobsack.de>
diff --git a/apps/files/index.php b/apps/files/index.php
index ea0fd0ce2fe..a73caa50fbe 100644
--- a/apps/files/index.php
+++ b/apps/files/index.php
@@ -8,7 +8,6 @@
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <icewind@owncloud.com>
- * @author Robin McCorkell <rmccorkell@karoshi.org.uk>
* @author Roman Geber <rgeber@owncloudapps.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Vincent Petry <pvince81@owncloud.com>
@@ -29,7 +28,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
-use OCA\Files\Appinfo\Application;
// Check if we are a user
OCP\User::checkLoggedIn();
@@ -43,6 +41,7 @@ OCP\Util::addscript('files', 'file-upload');
OCP\Util::addscript('files', 'jquery.iframe-transport');
OCP\Util::addscript('files', 'jquery.fileupload');
OCP\Util::addscript('files', 'jquery-visibility');
+OCP\Util::addscript('files', 'fileinfomodel');
OCP\Util::addscript('files', 'filesummary');
OCP\Util::addscript('files', 'breadcrumb');
OCP\Util::addscript('files', 'filelist');
@@ -52,6 +51,12 @@ OCP\Util::addscript('files', 'search');
\OCP\Util::addScript('files', 'tagsplugin');
\OCP\Util::addScript('files', 'favoritesplugin');
+\OCP\Util::addScript('files', 'detailfileinfoview');
+\OCP\Util::addScript('files', 'detailtabview');
+\OCP\Util::addScript('files', 'mainfileinfodetailview');
+\OCP\Util::addScript('files', 'detailsview');
+\OCP\Util::addStyle('files', 'detailsView');
+
\OC_Util::addVendorScript('core', 'handlebars/handlebars');
OCP\App::setActiveNavigationEntry('files_index');
@@ -134,11 +139,17 @@ foreach ($navItems as $item) {
}
OCP\Util::addscript('files', 'fileactions');
+OCP\Util::addscript('files', 'fileactionsmenu');
OCP\Util::addscript('files', 'files');
OCP\Util::addscript('files', 'navigation');
OCP\Util::addscript('files', 'keyboardshortcuts');
+
+\OC::$server->getEventDispatcher()->dispatch('OCA\Files::loadAdditionalScripts');
+
$tmpl = new OCP\Template('files', 'index', 'user');
$tmpl->assign('usedSpacePercent', (int)$storageInfo['relative']);
+$tmpl->assign('owner', $storageInfo['owner']);
+$tmpl->assign('ownerDisplayName', $storageInfo['ownerDisplayName']);
$tmpl->assign('isPublic', false);
$tmpl->assign("mailNotificationEnabled", $config->getAppValue('core', 'shareapi_allow_mail_notification', 'no'));
$tmpl->assign("mailPublicNotificationEnabled", $config->getAppValue('core', 'shareapi_allow_public_notification', 'no'));
diff --git a/apps/files/js/detailfileinfoview.js b/apps/files/js/detailfileinfoview.js
new file mode 100644
index 00000000000..43595001212
--- /dev/null
+++ b/apps/files/js/detailfileinfoview.js
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2015
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+(function() {
+ /**
+ * @class OCA.Files.DetailFileInfoView
+ * @classdesc
+ *
+ * Displays a block of details about the file info.
+ *
+ */
+ var DetailFileInfoView = OC.Backbone.View.extend({
+ tagName: 'div',
+ className: 'detailFileInfoView',
+
+ _template: null,
+
+ /**
+ * returns the jQuery object for HTML output
+ *
+ * @returns {jQuery}
+ */
+ get$: function() {
+ return this.$el;
+ },
+
+ /**
+ * Sets the file info to be displayed in the view
+ *
+ * @param {OCA.Files.FileInfo} fileInfo file info to set
+ */
+ setFileInfo: function(fileInfo) {
+ this.model = fileInfo;
+ this.render();
+ },
+
+ /**
+ * Returns the file info.
+ *
+ * @return {OCA.Files.FileInfo} file info
+ */
+ getFileInfo: function() {
+ return this.model;
+ }
+ });
+
+ OCA.Files.DetailFileInfoView = DetailFileInfoView;
+})();
+
diff --git a/apps/files/js/detailsview.js b/apps/files/js/detailsview.js
new file mode 100644
index 00000000000..a4ebe90cd64
--- /dev/null
+++ b/apps/files/js/detailsview.js
@@ -0,0 +1,271 @@
+/*
+ * Copyright (c) 2015
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+(function() {
+ var TEMPLATE =
+ '<div>' +
+ ' <div class="detailFileInfoContainer">' +
+ ' </div>' +
+ ' <div>' +
+ ' {{#if tabHeaders}}' +
+ ' <ul class="tabHeaders">' +
+ ' {{#each tabHeaders}}' +
+ ' <li class="tabHeader" data-tabid="{{tabId}}" data-tabindex="{{tabIndex}}">' +
+ ' <a href="#">{{label}}</a>' +
+ ' </li>' +
+ ' {{/each}}' +
+ ' </ul>' +
+ ' {{/if}}' +
+ ' <div class="tabsContainer">' +
+ ' </div>' +
+ ' </div>' +
+ ' <a class="close icon-close" href="#" alt="{{closeLabel}}"></a>' +
+ '</div>';
+
+ /**
+ * @class OCA.Files.DetailsView
+ * @classdesc
+ *
+ * The details view show details about a selected file.
+ *
+ */
+ var DetailsView = OC.Backbone.View.extend({
+ id: 'app-sidebar',
+ tabName: 'div',
+ className: 'detailsView',
+
+ _template: null,
+
+ /**
+ * List of detail tab views
+ *
+ * @type Array<OCA.Files.DetailTabView>
+ */
+ _tabViews: [],
+
+ /**
+ * List of detail file info views
+ *
+ * @type Array<OCA.Files.DetailFileInfoView>
+ */
+ _detailFileInfoViews: [],
+
+ /**
+ * Id of the currently selected tab
+ *
+ * @type string
+ */
+ _currentTabId: null,
+
+ /**
+ * Dirty flag, whether the view needs to be rerendered
+ */
+ _dirty: false,
+
+ events: {
+ 'click a.close': '_onClose',
+ 'click .tabHeaders .tabHeader': '_onClickTab'
+ },
+
+ /**
+ * Initialize the details view
+ */
+ initialize: function() {
+ this._tabViews = [];
+ this._detailFileInfoViews = [];
+
+ this._dirty = true;
+
+ // uncomment to add some dummy tabs for testing
+ //this._addTestTabs();
+ },
+
+ _onClose: function(event) {
+ OC.Apps.hideAppSidebar();
+ event.preventDefault();
+ },
+
+ _onClickTab: function(e) {
+ var $target = $(e.target);
+ e.preventDefault();
+ if (!$target.hasClass('tabHeader')) {
+ $target = $target.closest('.tabHeader');
+ }
+ var tabId = $target.attr('data-tabid');
+ if (_.isUndefined(tabId)) {
+ return;
+ }
+
+ this.selectTab(tabId);
+ },
+
+ _addTestTabs: function() {
+ for (var j = 0; j < 2; j++) {
+ var testView = new OCA.Files.DetailTabView({id: 'testtab' + j});
+ testView.index = j;
+ testView.getLabel = function() { return 'Test tab ' + this.index; };
+ testView.render = function() {
+ this.$el.empty();
+ for (var i = 0; i < 100; i++) {
+ this.$el.append('<div>Test tab ' + this.index + ' row ' + i + '</div>');
+ }
+ };
+ this._tabViews.push(testView);
+ }
+ },
+
+ template: function(vars) {
+ if (!this._template) {
+ this._template = Handlebars.compile(TEMPLATE);
+ }
+ return this._template(vars);
+ },
+
+ /**
+ * Renders this details view
+ */
+ render: function() {
+ var templateVars = {
+ closeLabel: t('files', 'Close')
+ };
+
+ if (this._tabViews.length > 1) {
+ // only render headers if there is more than one available
+ templateVars.tabHeaders = _.map(this._tabViews, function(tabView, i) {
+ return {
+ tabId: tabView.id,
+ tabIndex: i,
+ label: tabView.getLabel()
+ };
+ });
+ }
+
+ this.$el.html(this.template(templateVars));
+
+ var $detailsContainer = this.$el.find('.detailFileInfoContainer');
+
+ // render details
+ _.each(this._detailFileInfoViews, function(detailView) {
+ $detailsContainer.append(detailView.get$());
+ });
+
+ if (!this._currentTabId && this._tabViews.length > 0) {
+ this._currentTabId = this._tabViews[0].id;
+ }
+
+ this.selectTab(this._currentTabId);
+
+ this._dirty = false;
+ },
+
+ /**
+ * Selects the given tab by id
+ *
+ * @param {string} tabId tab id
+ */
+ selectTab: function(tabId) {
+ if (!tabId) {
+ return;
+ }
+
+ var tabView = _.find(this._tabViews, function(tab) {
+ return tab.id === tabId;
+ });
+
+ if (!tabView) {
+ console.warn('Details view tab with id "' + tabId + '" not found');
+ return;
+ }
+
+ this._currentTabId = tabId;
+
+ var $tabsContainer = this.$el.find('.tabsContainer');
+ var $tabEl = $tabsContainer.find('#' + tabId);
+
+ // hide other tabs
+ $tabsContainer.find('.tab').addClass('hidden');
+
+ // tab already rendered ?
+ if (!$tabEl.length) {
+ // render tab
+ $tabsContainer.append(tabView.$el);
+ $tabEl = tabView.$el;
+ }
+
+ // this should trigger tab rendering
+ tabView.setFileInfo(this.model);
+
+ $tabEl.removeClass('hidden');
+
+ // update tab headers
+ var $tabHeaders = this.$el.find('.tabHeaders li');
+ $tabHeaders.removeClass('selected');
+ $tabHeaders.filterAttr('data-tabid', tabView.id).addClass('selected');
+ },
+
+ /**
+ * Sets the file info to be displayed in the view
+ *
+ * @param {OCA.Files.FileInfoModel} fileInfo file info to set
+ */
+ setFileInfo: function(fileInfo) {
+ this.model = fileInfo;
+
+ if (this._dirty) {
+ this.render();
+ }
+
+ if (this._currentTabId) {
+ // only update current tab, others will be updated on-demand
+ var tabId = this._currentTabId;
+ var tabView = _.find(this._tabViews, function(tab) {
+ return tab.id === tabId;
+ });
+ tabView.setFileInfo(fileInfo);
+ }
+
+ _.each(this._detailFileInfoViews, function(detailView) {
+ detailView.setFileInfo(fileInfo);
+ });
+ },
+
+ /**
+ * Returns the file info.
+ *
+ * @return {OCA.Files.FileInfoModel} file info
+ */
+ getFileInfo: function() {
+ return this.model;
+ },
+
+ /**
+ * Adds a tab in the tab view
+ *
+ * @param {OCA.Files.DetailTabView} tab view
+ */
+ addTabView: function(tabView) {
+ this._tabViews.push(tabView);
+ this._dirty = true;
+ },
+
+ /**
+ * Adds a detail view for file info.
+ *
+ * @param {OCA.Files.DetailFileInfoView} detail view
+ */
+ addDetailView: function(detailView) {
+ this._detailFileInfoViews.push(detailView);
+ this._dirty = true;
+ }
+ });
+
+ OCA.Files.DetailsView = DetailsView;
+})();
+
diff --git a/apps/files/js/detailtabview.js b/apps/files/js/detailtabview.js
new file mode 100644
index 00000000000..67f8b535abd
--- /dev/null
+++ b/apps/files/js/detailtabview.js
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2015
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+(function() {
+
+ /**
+ * @class OCA.Files.DetailTabView
+ * @classdesc
+ *
+ * Base class for tab views to display file information.
+ *
+ */
+ var DetailTabView = OC.Backbone.View.extend({
+ tag: 'div',
+
+ className: 'tab',
+
+ /**
+ * Tab label
+ */
+ _label: null,
+
+ _template: null,
+
+ initialize: function() {
+ if (!this.id) {
+ this.id = 'detailTabView' + DetailTabView._TAB_COUNT;
+ DetailTabView._TAB_COUNT++;
+ }
+ },
+
+ /**
+ * Returns the tab label
+ *
+ * @return {String} label
+ */
+ getLabel: function() {
+ return 'Tab ' + this.id;
+ },
+
+ /**
+ * returns the jQuery object for HTML output
+ *
+ * @returns {jQuery}
+ */
+ get$: function() {
+ return this.$el;
+ },
+
+ /**
+ * Renders this details view
+ *
+ * @abstract
+ */
+ render: function() {
+ // to be implemented in subclass
+ // FIXME: code is only for testing
+ this.$el.html('<div>Hello ' + this.id + '</div>');
+ },
+
+ /**
+ * Sets the file info to be displayed in the view
+ *
+ * @param {OCA.Files.FileInfoModel} fileInfo file info to set
+ */
+ setFileInfo: function(fileInfo) {
+ if (this.model !== fileInfo) {
+ this.model = fileInfo;
+ this.render();
+ }
+ },
+
+ /**
+ * Returns the file info.
+ *
+ * @return {OCA.Files.FileInfoModel} file info
+ */
+ getFileInfo: function() {
+ return this.model;
+ }
+ });
+ DetailTabView._TAB_COUNT = 0;
+
+ OCA.Files.DetailTabView = DetailTabView;
+})();
+
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index ce8127c9887..6b6acdb5e01 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -611,7 +611,7 @@ OC.Upload = {
var lastPos;
var checkInput = function () {
var filename = input.val();
- if (Files.isFileNameValid(filename)) {
+ if (!Files.isFileNameValid(filename)) {
// Files.isFileNameValid(filename) throws an exception itself
} else if (FileList.inList(filename)) {
throw t('files', '{new_name} already exists', {new_name: filename});
@@ -651,12 +651,6 @@ OC.Upload = {
FileList.lastAction();
}
var name = FileList.getUniqueName(newname);
- if (newname !== name) {
- FileList.checkName(name, newname, true);
- var hidden = true;
- } else {
- var hidden = false;
- }
switch(type) {
case 'file':
$.post(
@@ -667,7 +661,7 @@ OC.Upload = {
},
function(result) {
if (result.status === 'success') {
- FileList.add(result.data, {hidden: hidden, animate: true, scrollTo: true});
+ FileList.add(result.data, {animate: true, scrollTo: true});
} else {
OC.dialogs.alert(result.data.message, t('core', 'Could not create file'));
}
@@ -683,7 +677,7 @@ OC.Upload = {
},
function(result) {
if (result.status === 'success') {
- FileList.add(result.data, {hidden: hidden, animate: true, scrollTo: true});
+ FileList.add(result.data, {animate: true, scrollTo: true});
} else {
OC.dialogs.alert(result.data.message, t('core', 'Could not create folder'));
}
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js
index b335f1f6432..f3f137a0537 100644
--- a/apps/files/js/fileactions.js
+++ b/apps/files/js/fileactions.js
@@ -10,6 +10,12 @@
(function() {
+ var TEMPLATE_FILE_ACTION_TRIGGER =
+ '<a class="action action-{{nameLowerCase}}" href="#" data-action="{{name}}">' +
+ '{{#if icon}}<img class="svg" alt="{{altText}}" src="{{icon}}" />{{/if}}' +
+ '{{#if displayName}}<span> {{displayName}}</span>{{/if}}' +
+ '</a>';
+
/**
* Construct a new FileActions instance
* @constructs FileActions
@@ -18,11 +24,17 @@
var FileActions = function() {
this.initialize();
};
+ FileActions.TYPE_DROPDOWN = 0;
+ FileActions.TYPE_INLINE = 1;
FileActions.prototype = {
/** @lends FileActions.prototype */
actions: {},
defaults: {},
icons: {},
+
+ /**
+ * @deprecated
+ */
currentFile: null,
/**
@@ -38,6 +50,8 @@
*/
_updateListeners: {},
+ _fileActionTriggerTemplate: null,
+
/**
* @private
*/
@@ -46,6 +60,8 @@
// abusing jquery for events until we get a real event lib
this.$el = $('<div class="dummy-fileactions hidden"></div>');
$('body').append(this.$el);
+
+ this._showMenuClosure = _.bind(this._showMenu, this);
},
/**
@@ -111,6 +127,7 @@
displayName: displayName || name
});
},
+
/**
* Register action
*
@@ -125,15 +142,14 @@
displayName: action.displayName,
mime: mime,
icon: action.icon,
- permissions: action.permissions
+ permissions: action.permissions,
+ type: action.type || FileActions.TYPE_DROPDOWN
};
if (_.isUndefined(action.displayName)) {
actionSpec.displayName = t('files', name);
}
if (_.isFunction(action.render)) {
actionSpec.render = action.render;
- } else {
- actionSpec.render = _.bind(this._defaultRenderAction, this);
}
if (!this.actions[mime]) {
this.actions[mime] = {};
@@ -162,6 +178,16 @@
this.defaults[mime] = name;
this._notifyUpdateListeners('setDefault', {defaultAction: {mime: mime, name: name}});
},
+
+ /**
+ * Returns a map of file actions handlers matching the given conditions
+ *
+ * @param {string} mime mime type
+ * @param {string} type "dir" or "file"
+ * @param {int} permissions permissions
+ *
+ * @return {Object.<string,OCA.Files.FileActions~actionHandler>} map of action name to action spec
+ */
get: function (mime, type, permissions) {
var actions = this.getActions(mime, type, permissions);
var filteredActions = {};
@@ -170,6 +196,16 @@
});
return filteredActions;
},
+
+ /**
+ * Returns an array of file actions matching the given conditions
+ *
+ * @param {string} mime mime type
+ * @param {string} type "dir" or "file"
+ * @param {int} permissions permissions
+ *
+ * @return {Array.<OCA.Files.FileAction>} array of action specs
+ */
getActions: function (mime, type, permissions) {
var actions = {};
if (this.actions.all) {
@@ -197,7 +233,37 @@
});
return filteredActions;
},
+
+ /**
+ * Returns the default file action handler for the given conditions
+ *
+ * @param {string} mime mime type
+ * @param {string} type "dir" or "file"
+ * @param {int} permissions permissions
+ *
+ * @return {OCA.Files.FileActions~actionHandler} action handler
+ *
+ * @deprecated use getDefaultFileAction instead
+ */
getDefault: function (mime, type, permissions) {
+ var defaultActionSpec = this.getDefaultFileAction(mime, type, permissions);
+ if (defaultActionSpec) {
+ return defaultActionSpec.action;
+ }
+ return undefined;
+ },
+
+ /**
+ * Returns the default file action handler for the given conditions
+ *
+ * @param {string} mime mime type
+ * @param {string} type "dir" or "file"
+ * @param {int} permissions permissions
+ *
+ * @return {OCA.Files.FileActions~actionHandler} action handler
+ * @since 8.2
+ */
+ getDefaultFileAction: function(mime, type, permissions) {
var mimePart;
if (mime) {
mimePart = mime.substr(0, mime.indexOf('/'));
@@ -212,9 +278,10 @@
} else {
name = this.defaults.all;
}
- var actions = this.get(mime, type, permissions);
+ var actions = this.getActions(mime, type, permissions);
return actions[name];
},
+
/**
* Default function to render actions
*
@@ -224,81 +291,84 @@
* @param {OCA.Files.FileActionContext} context action context
*/
_defaultRenderAction: function(actionSpec, isDefault, context) {
- var name = actionSpec.name;
- if (name === 'Download' || !isDefault) {
- var $actionLink = this._makeActionLink(actionSpec, context);
+ if (!isDefault) {
+ var params = {
+ name: actionSpec.name,
+ nameLowerCase: actionSpec.name.toLowerCase(),
+ displayName: actionSpec.displayName,
+ icon: actionSpec.icon,
+ altText: actionSpec.altText,
+ };
+ if (_.isFunction(actionSpec.icon)) {
+ params.icon = actionSpec.icon(context.$file.attr('data-file'));
+ }
+
+ var $actionLink = this._makeActionLink(params, context);
context.$file.find('a.name>span.fileactions').append($actionLink);
+ $actionLink.addClass('permanent');
return $actionLink;
}
},
+
/**
* Renders the action link element
*
- * @param {OCA.Files.FileAction} actionSpec action object
- * @param {OCA.Files.FileActionContext} context action context
+ * @param {Object} params action params
*/
- _makeActionLink: function(actionSpec, context) {
- var img = actionSpec.icon;
- if (img && img.call) {
- img = img(context.$file.attr('data-file'));
- }
- var html = '<a href="#">';
- if (img) {
- html += '<img class="svg" alt="" src="' + img + '" />';
- }
- if (actionSpec.displayName) {
- html += '<span> ' + actionSpec.displayName + '</span>';
+ _makeActionLink: function(params) {
+ if (!this._fileActionTriggerTemplate) {
+ this._fileActionTriggerTemplate = Handlebars.compile(TEMPLATE_FILE_ACTION_TRIGGER);
}
- html += '</a>';
- return $(html);
+ return $(this._fileActionTriggerTemplate(params));
},
+
/**
- * Custom renderer for the "Rename" action.
- * Displays the rename action as an icon behind the file name.
+ * Displays the file actions dropdown menu
*
- * @param {OCA.Files.FileAction} actionSpec file action to render
- * @param {boolean} isDefault true if the action is a default action,
- * false otherwise
- * @param {OCAFiles.FileActionContext} context rendering context
+ * @param {string} fileName file name
+ * @param {OCA.Files.FileActionContext} context rendering context
*/
- _renderRenameAction: function(actionSpec, isDefault, context) {
- var $actionEl = this._makeActionLink(actionSpec, context);
- var $container = context.$file.find('a.name span.nametext');
- $actionEl.find('img').attr('alt', t('files', 'Rename'));
- $container.find('.action-rename').remove();
- $container.append($actionEl);
- return $actionEl;
+ _showMenu: function(fileName, context) {
+ var menu;
+ var $trigger = context.$file.closest('tr').find('.fileactions .action-menu');
+ $trigger.addClass('open');
+
+ menu = new OCA.Files.FileActionsMenu();
+
+ context.$file.find('td.filename').append(menu.$el);
+
+ menu.$el.on('afterHide', function() {
+ context.$file.removeClass('mouseOver');
+ $trigger.removeClass('open');
+ menu.remove();
+ });
+
+ context.$file.addClass('mouseOver');
+ menu.show(context);
},
+
/**
- * Custom renderer for the "Delete" action.
- * Displays the "Delete" action as a trash icon at the end of
- * the table row.
- *
- * @param {OCA.Files.FileAction} actionSpec file action to render
- * @param {boolean} isDefault true if the action is a default action,
- * false otherwise
- * @param {OCAFiles.FileActionContext} context rendering context
+ * Renders the menu trigger on the given file list row
+ *
+ * @param {Object} $tr file list row element
+ * @param {OCA.Files.FileActionContext} context rendering context
*/
- _renderDeleteAction: function(actionSpec, isDefault, context) {
- var mountType = context.$file.attr('data-mounttype');
- var deleteTitle = t('files', 'Delete');
- if (mountType === 'external-root') {
- deleteTitle = t('files', 'Disconnect storage');
- } else if (mountType === 'shared-root') {
- deleteTitle = t('files', 'Unshare');
- }
- var $actionLink = $('<a href="#" original-title="' +
- escapeHTML(deleteTitle) +
- '" class="action delete icon-delete">' +
- '<span class="hidden-visually">' + escapeHTML(deleteTitle) + '</span>' +
- '</a>'
- );
- var $container = context.$file.find('td:last');
- $container.find('.delete').remove();
- $container.append($actionLink);
- return $actionLink;
+ _renderMenuTrigger: function($tr, context) {
+ // remove previous
+ $tr.find('.action-menu').remove();
+
+ var $el = this._renderInlineAction({
+ name: 'menu',
+ displayName: '',
+ icon: OC.imagePath('core', 'actions/more'),
+ altText: t('files', 'Actions'),
+ action: this._showMenuClosure
+ }, false, context);
+
+ $el.addClass('permanent');
},
+
/**
* Renders the action element by calling actionSpec.render() and
* registers the click event to process the action.
@@ -306,40 +376,117 @@
* @param {OCA.Files.FileAction} actionSpec file action to render
* @param {boolean} isDefault true if the action is a default action,
* false otherwise
- * @param {OCAFiles.FileActionContext} context rendering context
+ * @param {OCA.Files.FileActionContext} context rendering context
*/
- _renderAction: function(actionSpec, isDefault, context) {
- var $actionEl = actionSpec.render(actionSpec, isDefault, context);
+ _renderInlineAction: function(actionSpec, isDefault, context) {
+ var renderFunc = actionSpec.render || _.bind(this._defaultRenderAction, this);
+ var $actionEl = renderFunc(actionSpec, isDefault, context);
if (!$actionEl || !$actionEl.length) {
return;
}
- $actionEl.addClass('action action-' + actionSpec.name.toLowerCase());
- $actionEl.attr('data-action', actionSpec.name);
$actionEl.on(
'click', {
a: null
},
function(event) {
+ event.stopPropagation();
+ event.preventDefault();
+
+ if ($actionEl.hasClass('open')) {
+ return;
+ }
+
var $file = $(event.target).closest('tr');
+ if ($file.hasClass('busy')) {
+ return;
+ }
var currentFile = $file.find('td.filename');
var fileName = $file.attr('data-file');
- event.stopPropagation();
- event.preventDefault();
context.fileActions.currentFile = currentFile;
// also set on global object for legacy apps
window.FileActions.currentFile = currentFile;
+ var callContext = _.extend({}, context);
+
+ if (!context.dir && context.fileList) {
+ callContext.dir = $file.attr('data-path') || context.fileList.getCurrentDirectory();
+ }
+
+ if (!context.fileInfoModel && context.fileList) {
+ callContext.fileInfoModel = context.fileList.getModelForFile(fileName);
+ if (!callContext.fileInfoModel) {
+ console.warn('No file info model found for file "' + fileName + '"');
+ }
+ }
+
actionSpec.action(
fileName,
- _.extend(context, {
- dir: $file.attr('data-path') || context.fileList.getCurrentDirectory()
- })
+ callContext
);
}
);
+ $actionEl.tooltip({placement:'top'});
return $actionEl;
},
+
+ /**
+ * Trigger the given action on the given file.
+ *
+ * @param {string} actionName action name
+ * @param {OCA.Files.FileInfoModel} fileInfoModel file info model
+ * @param {OCA.Files.FileList} [fileList] file list, for compatibility with older action handlers [DEPRECATED]
+ *
+ * @return {boolean} true if the action handler was called, false otherwise
+ *
+ * @since 8.2
+ */
+ triggerAction: function(actionName, fileInfoModel, fileList) {
+ var actionFunc;
+ var actions = this.get(
+ fileInfoModel.get('mimetype'),
+ fileInfoModel.isDirectory() ? 'dir' : 'file',
+ fileInfoModel.get('permissions')
+ );
+
+ if (actionName) {
+ actionFunc = actions[actionName];
+ } else {
+ actionFunc = this.getDefault(
+ fileInfoModel.get('mimetype'),
+ fileInfoModel.isDirectory() ? 'dir' : 'file',
+ fileInfoModel.get('permissions')
+ );
+ }
+
+ if (!actionFunc) {
+ actionFunc = actions['Download'];
+ }
+
+ if (!actionFunc) {
+ return false;
+ }
+
+ var context = {
+ fileActions: this,
+ fileInfoModel: fileInfoModel,
+ dir: fileInfoModel.get('path')
+ };
+
+ var fileName = fileInfoModel.get('name');
+ this.currentFile = fileName;
+ // also set on global object for legacy apps
+ window.FileActions.currentFile = fileName;
+
+ if (fileList) {
+ // compatibility with action handlers that expect these
+ context.fileList = fileList;
+ context.$file = fileList.findFileEl(fileName);
+ }
+
+ actionFunc(fileName, context);
+ },
+
/**
* Display file actions for the given element
* @param parent "td" element of the file for which to display actions
@@ -370,36 +517,29 @@
nameLinks = parent.children('a.name');
nameLinks.find('.fileactions, .nametext .action').remove();
nameLinks.append('<span class="fileactions" />');
- var defaultAction = this.getDefault(
+ var defaultAction = this.getDefaultFileAction(
this.getCurrentMimeType(),
this.getCurrentType(),
this.getCurrentPermissions()
);
+ var context = {
+ $file: $tr,
+ fileActions: this,
+ fileList: fileList
+ };
+
$.each(actions, function (name, actionSpec) {
- if (name !== 'Share') {
- self._renderAction(
+ if (actionSpec.type === FileActions.TYPE_INLINE) {
+ self._renderInlineAction(
actionSpec,
- actionSpec.action === defaultAction, {
- $file: $tr,
- fileActions: this,
- fileList : fileList
- }
+ defaultAction && actionSpec.name === defaultAction.name,
+ context
);
}
});
- // added here to make sure it's always the last action
- var shareActionSpec = actions.Share;
- if (shareActionSpec){
- this._renderAction(
- shareActionSpec,
- shareActionSpec.action === defaultAction, {
- $file: $tr,
- fileActions: this,
- fileList: fileList
- }
- );
- }
+
+ this._renderMenuTrigger($tr, context);
if (triggerEvent){
fileList.$fileList.trigger(jQuery.Event("fileActionsReady", {fileList: fileList, $files: $tr}));
@@ -423,30 +563,42 @@
*/
registerDefaultActions: function() {
this.registerAction({
- name: 'Delete',
- displayName: '',
+ name: 'Download',
+ displayName: t('files', 'Download'),
mime: 'all',
- permissions: OC.PERMISSION_DELETE,
- icon: function() {
- return OC.imagePath('core', 'actions/delete');
+ permissions: OC.PERMISSION_READ,
+ icon: function () {
+ return OC.imagePath('core', 'actions/download');
},
- render: _.bind(this._renderDeleteAction, this),
- actionHandler: function(fileName, context) {
- context.fileList.do_delete(fileName, context.dir);
- $('.tipsy').remove();
+ actionHandler: function (filename, context) {
+ var dir = context.dir || context.fileList.getCurrentDirectory();
+ var url = context.fileList.getDownloadUrl(filename, dir);
+
+ var downloadFileaction = $(context.$file).find('.fileactions .action-download');
+
+ // don't allow a second click on the download action
+ if(downloadFileaction.hasClass('disabled')) {
+ return;
+ }
+
+ if (url) {
+ var disableLoadingState = function() {
+ context.fileList.showFileBusyState(filename, false);
+ };
+
+ context.fileList.showFileBusyState(downloadFileaction, true);
+ OCA.Files.Files.handleDownload(url, disableLoadingState);
+ }
}
});
- // t('files', 'Rename')
this.registerAction({
name: 'Rename',
- displayName: '',
mime: 'all',
permissions: OC.PERMISSION_UPDATE,
icon: function() {
return OC.imagePath('core', 'actions/rename');
},
- render: _.bind(this._renderRenameAction, this),
actionHandler: function (filename, context) {
context.fileList.rename(filename);
}
@@ -460,23 +612,51 @@
context.fileList.changeDirectory(dir + filename);
});
- this.setDefault('dir', 'Open');
-
- this.register('all', 'Download', OC.PERMISSION_READ, function () {
- return OC.imagePath('core', 'actions/download');
- }, function (filename, context) {
- var dir = context.dir || context.fileList.getCurrentDirectory();
- var url = context.fileList.getDownloadUrl(filename, dir);
- if (url) {
- OC.redirect(url);
+ this.registerAction({
+ name: 'Delete',
+ mime: 'all',
+ // permission is READ because we show a hint instead if there is no permission
+ permissions: OC.PERMISSION_DELETE,
+ icon: function() {
+ return OC.imagePath('core', 'actions/delete');
+ },
+ actionHandler: function(fileName, context) {
+ // if there is no permission to delete do nothing
+ if((context.$file.data('permissions') & OC.PERMISSION_DELETE) === 0) {
+ return;
+ }
+ context.fileList.do_delete(fileName, context.dir);
+ $('.tipsy').remove();
}
- }, t('files', 'Download'));
+ });
+
+ this.setDefault('dir', 'Open');
}
};
OCA.Files.FileActions = FileActions;
/**
+ * Replaces the download icon with a loading spinner and vice versa
+ * - also adds the class disabled to the passed in element
+ *
+ * @param downloadButtonElement download fileaction
+ * @param {boolean} showIt whether to show the spinner(true) or to hide it(false)
+ */
+ OCA.Files.FileActions.updateFileActionSpinner = function(downloadButtonElement, showIt) {
+ var icon = downloadButtonElement.find('img'),
+ sourceImage = icon.attr('src');
+
+ if(showIt) {
+ downloadButtonElement.addClass('disabled');
+ icon.attr('src', sourceImage.replace('actions/download.svg', 'loading-small.gif'));
+ } else {
+ downloadButtonElement.removeClass('disabled');
+ icon.attr('src', sourceImage.replace('loading-small.gif', 'actions/download.svg'));
+ }
+ };
+
+ /**
* File action attributes.
*
* @todo make this a real class in the future
@@ -521,11 +701,12 @@
* Action handler function for file actions
*
* @callback OCA.Files.FileActions~actionHandler
- * @param {String} fileName name of the clicked file
+ * @param {String} fileName name of the file on which the action must be performed
* @param context context
* @param {String} context.dir directory of the file
- * @param context.$file jQuery element of the file
- * @param {OCA.Files.FileList} context.fileList the FileList instance on which the action occurred
+ * @param {OCA.Files.FileInfoModel} fileInfoModel file info model
+ * @param {Object} [context.$file] jQuery element of the file [DEPRECATED]
+ * @param {OCA.Files.FileList} [context.fileList] the FileList instance on which the action occurred [DEPRECATED]
* @param {OCA.Files.FileActions} context.fileActions the FileActions instance on which the action occurred
*/
diff --git a/apps/files/js/fileactionsmenu.js b/apps/files/js/fileactionsmenu.js
new file mode 100644
index 00000000000..623ebde5442
--- /dev/null
+++ b/apps/files/js/fileactionsmenu.js
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2014
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+(function() {
+
+ var TEMPLATE_MENU =
+ '<ul>' +
+ '{{#each items}}' +
+ '<li>' +
+ '<a href="#" class="action action-{{nameLowerCase}} permanent" data-action="{{name}}">{{#if icon}}<img src="{{icon}}"/>{{else}}<span class="no-icon"></span>{{/if}}<span>{{displayName}}</span></a>' +
+ '</li>' +
+ '{{/each}}' +
+ '</ul>';
+
+ /**
+ * Construct a new FileActionsMenu instance
+ * @constructs FileActionsMenu
+ * @memberof OCA.Files
+ */
+ var FileActionsMenu = OC.Backbone.View.extend({
+ tagName: 'div',
+ className: 'fileActionsMenu bubble hidden open menu',
+
+ /**
+ * Current context
+ *
+ * @type OCA.Files.FileActionContext
+ */
+ _context: null,
+
+ events: {
+ 'click a.action': '_onClickAction'
+ },
+
+ template: function(data) {
+ if (!OCA.Files.FileActionsMenu._TEMPLATE) {
+ OCA.Files.FileActionsMenu._TEMPLATE = Handlebars.compile(TEMPLATE_MENU);
+ }
+ return OCA.Files.FileActionsMenu._TEMPLATE(data);
+ },
+
+ /**
+ * Event handler whenever an action has been clicked within the menu
+ *
+ * @param {Object} event event object
+ */
+ _onClickAction: function(event) {
+ var $target = $(event.target);
+ if (!$target.is('a')) {
+ $target = $target.closest('a');
+ }
+ var fileActions = this._context.fileActions;
+ var actionName = $target.attr('data-action');
+ var actions = fileActions.getActions(
+ fileActions.getCurrentMimeType(),
+ fileActions.getCurrentType(),
+ fileActions.getCurrentPermissions()
+ );
+ var actionSpec = actions[actionName];
+ var fileName = this._context.$file.attr('data-file');
+
+ event.stopPropagation();
+ event.preventDefault();
+
+ OC.hideMenus();
+
+ actionSpec.action(
+ fileName,
+ this._context
+ );
+ },
+
+ /**
+ * Renders the menu with the currently set items
+ */
+ render: function() {
+ var fileActions = this._context.fileActions;
+ var actions = fileActions.getActions(
+ fileActions.getCurrentMimeType(),
+ fileActions.getCurrentType(),
+ fileActions.getCurrentPermissions()
+ );
+
+ var defaultAction = fileActions.getDefaultFileAction(
+ fileActions.getCurrentMimeType(),
+ fileActions.getCurrentType(),
+ fileActions.getCurrentPermissions()
+ );
+
+ var items = _.filter(actions, function(actionSpec) {
+ return (
+ actionSpec.type === OCA.Files.FileActions.TYPE_DROPDOWN &&
+ (!defaultAction || actionSpec.name !== defaultAction.name)
+ );
+ });
+ items = _.map(items, function(item) {
+ item.nameLowerCase = item.name.toLowerCase();
+ return item;
+ });
+
+ this.$el.html(this.template({
+ items: items
+ }));
+ },
+
+ /**
+ * Displays the menu under the given element
+ *
+ * @param {OCA.Files.FileActionContext} context context
+ * @param {Object} $trigger trigger element
+ */
+ show: function(context) {
+ this._context = context;
+
+ this.render();
+ this.$el.removeClass('hidden');
+
+ OC.showMenu(null, this.$el);
+ }
+ });
+
+ OCA.Files.FileActionsMenu = FileActionsMenu;
+
+})();
+
diff --git a/apps/files/js/fileinfomodel.js b/apps/files/js/fileinfomodel.js
new file mode 100644
index 00000000000..05060854fba
--- /dev/null
+++ b/apps/files/js/fileinfomodel.js
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2015
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+(function(OC, OCA) {
+
+ /**
+ * @class OC.Files.FileInfo
+ * @classdesc File information
+ *
+ * @param {Object} attributes file data
+ * @param {int} attributes.id file id
+ * @param {string} attributes.name file name
+ * @param {string} attributes.path path leading to the file,
+ * without the file name and with a leading slash
+ * @param {int} attributes.size size
+ * @param {string} attributes.mimetype mime type
+ * @param {string} attributes.icon icon URL
+ * @param {int} attributes.permissions permissions
+ * @param {Date} attributes.mtime modification time
+ * @param {string} attributes.etag etag
+ * @param {string} mountType mount type
+ *
+ * @since 8.2
+ */
+ var FileInfoModel = OC.Backbone.Model.extend({
+
+ initialize: function(data) {
+ if (!_.isUndefined(data.id)) {
+ data.id = parseInt(data.id, 10);
+ }
+
+ // TODO: normalize path
+ data.path = data.path || '';
+ data.name = data.name;
+
+ data.mimetype = data.mimetype || 'application/octet-stream';
+ },
+
+ /**
+ * Returns whether this file is a directory
+ *
+ * @return {boolean} true if this is a directory, false otherwise
+ */
+ isDirectory: function() {
+ return this.get('mimetype') === 'httpd/unix-directory';
+ },
+
+ /**
+ * Returns the full path to this file
+ *
+ * @return {string} full path
+ */
+ getFullPath: function() {
+ return OC.joinPaths(this.get('path'), this.get('name'));
+ }
+ });
+
+ if (!OCA.Files) {
+ OCA.Files = {};
+ }
+ OCA.Files.FileInfoModel = FileInfoModel;
+
+})(OC, OCA);
+
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 9d60e77b0ac..e7becb01207 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -23,6 +23,7 @@
* @param [options.scrollContainer] scrollable container, defaults to $(window)
* @param [options.dragOptions] drag options, disabled by default
* @param [options.folderDropOptions] folder drop options, disabled by default
+ * @param [options.detailsViewEnabled=true] whether to enable details view
*/
var FileList = function($el, options) {
this.initialize($el, options);
@@ -65,6 +66,11 @@
fileSummary: null,
/**
+ * @type OCA.Files.DetailsView
+ */
+ _detailsView: null,
+
+ /**
* Whether the file list was initialized already.
* @type boolean
*/
@@ -205,6 +211,13 @@
}
this.breadcrumb = new OCA.Files.BreadCrumb(breadcrumbOptions);
+ if (_.isUndefined(options.detailsViewEnabled) || options.detailsViewEnabled) {
+ this._detailsView = new OCA.Files.DetailsView();
+ this._detailsView.addDetailView(new OCA.Files.MainFileInfoDetailView({fileList: this, fileActions: this.fileActions}));
+ this._detailsView.$el.insertBefore(this.$el);
+ this._detailsView.$el.addClass('disappear');
+ }
+
this.$el.find('#controls').prepend(this.breadcrumb.$el);
this.$el.find('thead th .columntitle').click(_.bind(this._onClickHeader, this));
@@ -216,6 +229,13 @@
this.updateSearch();
+ this.$el.on('click', function(event) {
+ var $target = $(event.target);
+ // click outside file row ?
+ if (!$target.closest('tbody').length && !$target.closest('#app-sidebar').length) {
+ self._updateDetailsView(null);
+ }
+ });
this.$fileList.on('click','td.filename>a.name', _.bind(this._onClickFile, this));
this.$fileList.on('change', 'td.filename>.selectCheckBox', _.bind(this._onClickFileCheckbox, this));
this.$el.on('urlChanged', _.bind(this._onUrlChanged, this));
@@ -223,6 +243,8 @@
this.$el.find('.download').click(_.bind(this._onClickDownloadSelected, this));
this.$el.find('.delete-selected').click(_.bind(this._onClickDeleteSelected, this));
+ this.$el.find('.selectedActions a').tooltip({placement:'top'});
+
this.setupUploadEvents();
this.$container.on('scroll', _.bind(this._onScroll, this));
@@ -263,6 +285,79 @@
},
/**
+ * Returns a unique model for the given file name.
+ *
+ * @param {string|object} fileName file name or jquery row
+ * @return {OCA.Files.FileInfoModel} file info model
+ */
+ getModelForFile: function(fileName) {
+ var $tr;
+ // jQuery object ?
+ if (fileName.is) {
+ $tr = fileName;
+ fileName = $tr.attr('data-file');
+ } else {
+ $tr = this.findFileEl(fileName);
+ }
+
+ if (!$tr || !$tr.length) {
+ return null;
+ }
+
+ // if requesting the selected model, return it
+ if (this._currentFileModel && this._currentFileModel.get('name') === fileName) {
+ return this._currentFileModel;
+ }
+
+ // TODO: note, this is a temporary model required for synchronising
+ // state between different views.
+ // In the future the FileList should work with Backbone.Collection
+ // and contain existing models that can be used.
+ // This method would in the future simply retrieve the matching model from the collection.
+ var model = new OCA.Files.FileInfoModel(this.elementToFile($tr));
+ if (!model.has('path')) {
+ model.set('path', this.getCurrentDirectory(), {silent: true});
+ }
+ return model;
+ },
+
+ /**
+ * Update the details view to display the given file
+ *
+ * @param {string} fileName file name from the current list
+ */
+ _updateDetailsView: function(fileName) {
+ if (!this._detailsView) {
+ return;
+ }
+
+ var oldFileInfo = this._detailsView.getFileInfo();
+ if (oldFileInfo) {
+ // TODO: use more efficient way, maybe track the highlight
+ this.$fileList.children().filterAttr('data-id', '' + oldFileInfo.get('id')).removeClass('highlighted');
+ oldFileInfo.off('change', this._onSelectedModelChanged, this);
+ }
+
+ if (!fileName) {
+ OC.Apps.hideAppSidebar();
+ this._detailsView.setFileInfo(null);
+ this._currentFileModel = null;
+ return;
+ }
+
+ var $tr = this.findFileEl(fileName);
+ var model = this.getModelForFile($tr);
+
+ this._currentFileModel = model;
+
+ $tr.addClass('highlighted');
+
+ this._detailsView.setFileInfo(model);
+ this._detailsView.$el.scrollTop(0);
+ _.defer(OC.Apps.showAppSidebar);
+ },
+
+ /**
* Event handler for when the window size changed
*/
_onResize: function() {
@@ -315,6 +410,12 @@
delete this._selectedFiles[$tr.data('id')];
this._selectionSummary.remove(data);
}
+ if (this._selectionSummary.getTotal() === 1) {
+ this._updateDetailsView(_.values(this._selectedFiles)[0].name);
+ } else {
+ // show nothing when multiple files are selected
+ this._updateDetailsView(null);
+ }
this.$el.find('.select-all').prop('checked', this._selectionSummary.getTotal() === this.files.length);
},
@@ -350,27 +451,33 @@
this._selectFileEl($tr, !$checkbox.prop('checked'));
this.updateSelectionSummary();
} else {
- var filename = $tr.attr('data-file');
- var renaming = $tr.data('renaming');
- if (!renaming) {
- this.fileActions.currentFile = $tr.find('td');
- var mime = this.fileActions.getCurrentMimeType();
- var type = this.fileActions.getCurrentType();
- var permissions = this.fileActions.getCurrentPermissions();
- var action = this.fileActions.getDefault(mime,type, permissions);
- if (action) {
- event.preventDefault();
- // also set on global object for legacy apps
- window.FileActions.currentFile = this.fileActions.currentFile;
- action(filename, {
- $file: $tr,
- fileList: this,
- fileActions: this.fileActions,
- dir: $tr.attr('data-path') || this.getCurrentDirectory()
- });
+ // clicked directly on the name
+ if (!this._detailsView || $(event.target).is('.nametext') || $(event.target).closest('.nametext').length) {
+ var filename = $tr.attr('data-file');
+ var renaming = $tr.data('renaming');
+ if (!renaming) {
+ this.fileActions.currentFile = $tr.find('td');
+ var mime = this.fileActions.getCurrentMimeType();
+ var type = this.fileActions.getCurrentType();
+ var permissions = this.fileActions.getCurrentPermissions();
+ var action = this.fileActions.getDefault(mime,type, permissions);
+ if (action) {
+ event.preventDefault();
+ // also set on global object for legacy apps
+ window.FileActions.currentFile = this.fileActions.currentFile;
+ action(filename, {
+ $file: $tr,
+ fileList: this,
+ fileActions: this.fileActions,
+ dir: $tr.attr('data-path') || this.getCurrentDirectory()
+ });
+ }
+ // deselect row
+ $(event.target).closest('a').blur();
}
- // deselect row
- $(event.target).closest('a').blur();
+ } else {
+ this._updateDetailsView($tr.attr('data-file'));
+ event.preventDefault();
}
}
},
@@ -417,7 +524,21 @@
else {
files = _.pluck(this.getSelectedFiles(), 'name');
}
- OC.redirect(this.getDownloadUrl(files, dir));
+
+ var downloadFileaction = $('#selectedActionsList').find('.download');
+
+ // don't allow a second click on the download action
+ if(downloadFileaction.hasClass('disabled')) {
+ event.preventDefault();
+ return;
+ }
+
+ var disableLoadingState = function(){
+ OCA.Files.FileActions.updateFileActionSpinner(downloadFileaction, false);
+ };
+
+ OCA.Files.FileActions.updateFileActionSpinner(downloadFileaction, true);
+ OCA.Files.Files.handleDownload(this.getDownloadUrl(files, dir), disableLoadingState);
return false;
},
@@ -670,7 +791,7 @@
*/
_createRow: function(fileData, options) {
var td, simpleSize, basename, extension, sizeColor,
- icon = OC.Util.replaceSVGIcon(fileData.icon),
+ icon = OC.MimeType.getIconUrl(fileData.mimetype),
name = fileData.name,
type = fileData.type || 'file',
mtime = parseInt(fileData.mtime, 10),
@@ -685,6 +806,10 @@
if (type === 'dir') {
mime = mime || 'httpd/unix-directory';
+
+ if (fileData.mountType && fileData.mountType.indexOf('external') === 0) {
+ icon = OC.MimeType.getIconUrl('dir-external');
+ }
}
//containing tr
@@ -772,6 +897,7 @@
fileData.extraData = fileData.extraData.substr(1);
}
nameSpan.addClass('extra-data').attr('title', fileData.extraData);
+ nameSpan.tooltip({placement: 'right'});
}
// dirs can show the number of uploaded files
if (type === 'dir') {
@@ -807,7 +933,7 @@
var formatted;
var text;
if (mtime > 0) {
- formatted = formatDate(mtime);
+ formatted = OC.Util.formatDate(mtime);
text = OC.Util.relativeModifiedDate(mtime);
} else {
formatted = t('files', 'Unable to determine date');
@@ -818,7 +944,9 @@
"class": "modified",
"title": formatted,
"style": 'color:rgb('+modifiedColor+','+modifiedColor+','+modifiedColor+')'
- }).text(text));
+ }).text(text)
+ .tooltip({placement: 'top'})
+ );
tr.find('.filesize').text(simpleSize);
tr.append(td);
return tr;
@@ -950,7 +1078,8 @@
if (fileData.isPreviewAvailable) {
var iconDiv = filenameTd.find('.thumbnail');
// lazy load / newly inserted td ?
- if (options.animate) {
+ // the typeof check ensures that the default value of animate is true
+ if (typeof(options.animate) === 'undefined' || !!options.animate) {
this.lazyLoadPreview({
path: path + '/' + fileData.name,
mime: mime,
@@ -1103,6 +1232,8 @@
sortdirection: this._sortDirection
}
});
+ // close sidebar
+ this._updateDetailsView(null);
var callBack = this.reloadCallback.bind(this);
return this._reloadCall.then(callBack, callBack);
},
@@ -1122,6 +1253,22 @@
return false;
}
+ // Firewall Blocked request?
+ if (result.status === 403) {
+ // Go home
+ this.changeDirectory('/');
+ OC.Notification.show(t('files', 'This operation is forbidden'));
+ return false;
+ }
+
+ // Did share service die or something else fail?
+ if (result.status === 500) {
+ // Go home
+ this.changeDirectory('/');
+ OC.Notification.show(t('files', 'This directory is unavailable, please check the logs or contact the administrator'));
+ return false;
+ }
+
if (result.status === 404) {
// go back home
this.changeDirectory('/');
@@ -1172,8 +1319,10 @@
if (!urlSpec.y) {
urlSpec.y = this.$table.data('preview-y') || 36;
}
- urlSpec.y *= window.devicePixelRatio;
urlSpec.x *= window.devicePixelRatio;
+ urlSpec.y *= window.devicePixelRatio;
+ urlSpec.x = Math.floor(urlSpec.x);
+ urlSpec.y = Math.floor(urlSpec.y);
urlSpec.forceIcon = 0;
return OC.generateUrl('/core/preview.png?') + $.param(urlSpec);
},
@@ -1194,36 +1343,40 @@
var etag = options.etag;
// get mime icon url
- OCA.Files.Files.getMimeIcon(mime, function(iconURL) {
- var previewURL,
- urlSpec = {};
- ready(iconURL); // set mimeicon URL
+ var iconURL = OC.MimeType.getIconUrl(mime);
+ var previewURL,
+ urlSpec = {};
+ ready(iconURL); // set mimeicon URL
- urlSpec.file = OCA.Files.Files.fixPath(path);
+ urlSpec.file = OCA.Files.Files.fixPath(path);
+ if (options.x) {
+ urlSpec.x = options.x;
+ }
+ if (options.y) {
+ urlSpec.y = options.y;
+ }
- if (etag){
- // use etag as cache buster
- urlSpec.c = etag;
- }
- else {
- console.warn('OCA.Files.FileList.lazyLoadPreview(): missing etag argument');
- }
+ if (etag){
+ // use etag as cache buster
+ urlSpec.c = etag;
+ } else {
+ console.warn('OCA.Files.FileList.lazyLoadPreview(): missing etag argument');
+ }
- previewURL = self.generatePreviewUrl(urlSpec);
- previewURL = previewURL.replace('(', '%28');
- previewURL = previewURL.replace(')', '%29');
-
- // preload image to prevent delay
- // this will make the browser cache the image
- var img = new Image();
- img.onload = function(){
- // if loading the preview image failed (no preview for the mimetype) then img.width will < 5
- if (img.width > 5) {
- ready(previewURL);
- }
- };
- img.src = previewURL;
- });
+ previewURL = self.generatePreviewUrl(urlSpec);
+ previewURL = previewURL.replace('(', '%28');
+ previewURL = previewURL.replace(')', '%29');
+
+ // preload image to prevent delay
+ // this will make the browser cache the image
+ var img = new Image();
+ img.onload = function(){
+ // if loading the preview image failed (no preview for the mimetype) then img.width will < 5
+ if (img.width > 5) {
+ ready(previewURL);
+ }
+ };
+ img.src = previewURL;
},
setDirectoryPermissions: function(permissions) {
@@ -1337,9 +1490,7 @@
}
_.each(fileNames, function(fileName) {
var $tr = self.findFileEl(fileName);
- var $thumbEl = $tr.find('.thumbnail');
- var oldBackgroundImage = $thumbEl.css('background-image');
- $thumbEl.css('background-image', 'url('+ OC.imagePath('core', 'loading.gif') + ')');
+ self.showFileBusyState($tr, true);
// TODO: improve performance by sending all file names in a single call
$.post(
OC.filePath('files', 'ajax', 'move.php'),
@@ -1381,7 +1532,7 @@
} else {
OC.dialogs.alert(t('files', 'Error moving file'), t('files', 'Error'));
}
- $thumbEl.css('background-image', oldBackgroundImage);
+ self.showFileBusyState($tr, false);
}
);
});
@@ -1427,7 +1578,7 @@
};
function restore() {
- input.tipsy('hide');
+ input.tooltip('hide');
tr.data('renaming',false);
form.remove();
td.children('a.name').show();
@@ -1442,14 +1593,13 @@
try {
var newName = input.val();
- var $thumbEl = tr.find('.thumbnail');
- input.tipsy('hide');
+ input.tooltip('hide');
form.remove();
if (newName !== oldname) {
checkInput();
// mark as loading (temp element)
- $thumbEl.css('background-image', 'url('+ OC.imagePath('core', 'loading.gif') + ')');
+ self.showFileBusyState(tr, true);
tr.attr('data-file', newName);
var basename = newName;
if (newName.indexOf('.') > 0 && tr.data('type') !== 'dir') {
@@ -1457,7 +1607,6 @@
}
td.find('a.name span.nametext').text(basename);
td.children('a.name').show();
- tr.find('.fileactions, .action').addClass('hidden');
$.ajax({
url: OC.filePath('files','ajax','rename.php'),
@@ -1484,6 +1633,7 @@
tr.remove();
tr = self.add(fileInfo, {updateSummary: false, silent: true});
self.$fileList.trigger($.Event('fileActionsReady', {fileList: self, $files: $(tr)}));
+ self._updateDetailsView(fileInfo.name);
}
});
} else {
@@ -1495,8 +1645,8 @@
}
} catch (error) {
input.attr('title', error);
- input.tipsy({gravity: 'w', trigger: 'manual'});
- input.tipsy('show');
+ input.tooltip({placement: 'left', trigger: 'manual'});
+ input.tooltip('show');
input.addClass('error');
}
return false;
@@ -1505,12 +1655,12 @@
// verify filename on typing
try {
checkInput();
- input.tipsy('hide');
+ input.tooltip('hide');
input.removeClass('error');
} catch (error) {
input.attr('title', error);
- input.tipsy({gravity: 'w', trigger: 'manual'});
- input.tipsy('show');
+ input.tooltip({placement: 'left', trigger: 'manual'});
+ input.tooltip('show');
input.addClass('error');
}
if (event.keyCode === 27) {
@@ -1528,6 +1678,44 @@
inList:function(file) {
return this.findFileEl(file).length;
},
+
+ /**
+ * Shows busy state on a given file row or multiple
+ *
+ * @param {string|Array.<string>} files file name or array of file names
+ * @param {bool} [busy=true] busy state, true for busy, false to remove busy state
+ *
+ * @since 8.2
+ */
+ showFileBusyState: function(files, state) {
+ var self = this;
+ if (!_.isArray(files)) {
+ files = [files];
+ }
+
+ if (_.isUndefined(state)) {
+ state = true;
+ }
+
+ _.each(files, function($tr) {
+ // jquery element already ?
+ if (!$tr.is) {
+ $tr = self.findFileEl($tr);
+ }
+
+ var $thumbEl = $tr.find('.thumbnail');
+ $tr.toggleClass('busy', state);
+
+ if (state) {
+ $thumbEl.attr('data-oldimage', $thumbEl.css('background-image'));
+ $thumbEl.css('background-image', 'url('+ OC.imagePath('core', 'loading.gif') + ')');
+ } else {
+ $thumbEl.css('background-image', $thumbEl.attr('data-oldimage'));
+ $thumbEl.removeAttr('data-oldimage');
+ }
+ });
+ },
+
/**
* Delete the given files from the given dir
* @param files file names list (without path)
@@ -1541,9 +1729,8 @@
files=[files];
}
if (files) {
+ this.showFileBusyState(files, true);
for (var i=0; i<files.length; i++) {
- var deleteAction = this.findFileEl(files[i]).children("td.date").children(".action.delete");
- deleteAction.removeClass('icon-delete').addClass('icon-loading-small');
}
}
// Finish any existing actions
@@ -1561,7 +1748,7 @@
// no files passed, delete all in current dir
params.allfiles = true;
// show spinner for all files
- this.$fileList.find('tr>td.date .action.delete').removeClass('icon-delete').addClass('icon-loading-small');
+ this.$fileList.find('tr').addClass('busy');
}
$.post(OC.filePath('files', 'ajax', 'delete.php'),
@@ -1604,8 +1791,7 @@
}
else {
$.each(files,function(index,file) {
- var deleteAction = self.findFileEl(file).find('.action.delete');
- deleteAction.removeClass('icon-loading-small').addClass('icon-delete');
+ self.$fileList.find('tr').removeClass('busy');
});
}
}
@@ -1623,7 +1809,8 @@
updateEmptyContent: function() {
var permissions = this.getDirectoryPermissions();
var isCreatable = (permissions & OC.PERMISSION_CREATE) !== 0;
- this.$el.find('#emptycontent').toggleClass('hidden', !isCreatable || !this.isEmpty);
+ this.$el.find('#emptycontent').toggleClass('hidden', !this.isEmpty);
+ this.$el.find('#emptycontent .uploadmessage').toggleClass('hidden', !isCreatable || !this.isEmpty);
this.$el.find('#filestable thead th').toggleClass('hidden', this.isEmpty);
},
/**
@@ -1639,6 +1826,7 @@
}
this.$table.addClass('hidden');
+ this.$el.find('#emptycontent').addClass('hidden');
$mask = $('<div class="mask transparent"></div>');
@@ -1704,11 +1892,13 @@
if (this._filter && this.fileSummary.summary.totalDirs + this.fileSummary.summary.totalFiles === 0) {
this.$el.find('#filestable thead th').addClass('hidden');
this.$el.find('#emptycontent').addClass('hidden');
+ $('#searchresults').addClass('filter-empty');
if ( $('#searchresults').length === 0 || $('#searchresults').hasClass('hidden') ) {
this.$el.find('.nofilterresults').removeClass('hidden').
find('p').text(t('files', "No entries in this folder match '{filter}'", {filter:this._filter}, null, {'escape': false}));
}
} else {
+ $('#searchresults').removeClass('filter-empty');
this.$el.find('#filestable thead th').toggleClass('hidden', this.isEmpty);
if (!this.$el.find('.mask').exists()) {
this.$el.find('#emptycontent').toggleClass('hidden', !this.isEmpty);
@@ -1740,6 +1930,8 @@
updateSelectionSummary: function() {
var summary = this._selectionSummary.summary;
var canDelete;
+ var selection;
+
if (summary.totalFiles === 0 && summary.totalDirs === 0) {
this.$el.find('#headerName a.name>span:first').text(t('files','Name'));
this.$el.find('#headerSize a>span:first').text(t('files','Size'));
@@ -1751,16 +1943,22 @@
canDelete = (this.getDirectoryPermissions() & OC.PERMISSION_DELETE) && this.isSelectedDeletable();
this.$el.find('.selectedActions').removeClass('hidden');
this.$el.find('#headerSize a>span:first').text(OC.Util.humanFileSize(summary.totalSize));
- var selection = '';
- if (summary.totalDirs > 0) {
- selection += n('files', '%n folder', '%n folders', summary.totalDirs);
- if (summary.totalFiles > 0) {
- selection += ' & ';
- }
- }
- if (summary.totalFiles > 0) {
- selection += n('files', '%n file', '%n files', summary.totalFiles);
+
+ var directoryInfo = n('files', '%n folder', '%n folders', summary.totalDirs);
+ var fileInfo = n('files', '%n file', '%n files', summary.totalFiles);
+
+ if (summary.totalDirs > 0 && summary.totalFiles > 0) {
+ var selectionVars = {
+ dirs: directoryInfo,
+ files: fileInfo
+ };
+ selection = t('files', '{dirs} and {files}', selectionVars);
+ } else if (summary.totalDirs > 0) {
+ selection = directoryInfo;
+ } else {
+ selection = fileInfo;
}
+
this.$el.find('#headerName a.name>span:first').text(selection);
this.$el.find('#modified a>span:first').text('');
this.$el.find('table').addClass('multiselect');
@@ -2136,6 +2334,20 @@
}
});
+ },
+
+ /**
+ * Register a tab view to be added to all views
+ */
+ registerTabView: function(tabView) {
+ this._detailsView.addTabView(tabView);
+ },
+
+ /**
+ * Register a detail view to be added to all views
+ */
+ registerDetailView: function(detailView) {
+ this._detailsView.addDetailView(detailView);
}
};
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 68e9315954f..55fdb96ebda 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -61,8 +61,10 @@
if (response.data !== undefined && response.data.uploadMaxFilesize !== undefined) {
$('#max_upload').val(response.data.uploadMaxFilesize);
$('#free_space').val(response.data.freeSpace);
- $('#upload.button').attr('original-title', response.data.maxHumanFilesize);
+ $('#upload.button').attr('data-original-title', response.data.maxHumanFilesize);
$('#usedSpacePercent').val(response.data.usedSpacePercent);
+ $('#owner').val(response.data.owner);
+ $('#ownerDisplayName').val(response.data.ownerDisplayName);
Files.displayStorageWarnings();
}
if (response[0] === undefined) {
@@ -70,7 +72,7 @@
}
if (response[0].uploadMaxFilesize !== undefined) {
$('#max_upload').val(response[0].uploadMaxFilesize);
- $('#upload.button').attr('original-title', response[0].maxHumanFilesize);
+ $('#upload.button').attr('data-original-title', response[0].maxHumanFilesize);
$('#usedSpacePercent').val(response[0].usedSpacePercent);
Files.displayStorageWarnings();
}
@@ -109,12 +111,24 @@
return;
}
- var usedSpacePercent = $('#usedSpacePercent').val();
+ var usedSpacePercent = $('#usedSpacePercent').val(),
+ owner = $('#owner').val(),
+ ownerDisplayName = $('#ownerDisplayName').val();
if (usedSpacePercent > 98) {
+ if (owner !== oc_current_user) {
+ OC.Notification.showTemporary(t('files', 'Storage of {owner} is full, files can not be updated or synced anymore!',
+ { owner: ownerDisplayName }));
+ return;
+ }
OC.Notification.show(t('files', 'Your storage is full, files can not be updated or synced anymore!'));
return;
}
if (usedSpacePercent > 90) {
+ if (owner !== oc_current_user) {
+ OC.Notification.showTemporary(t('files', 'Storage of {owner} is almost full ({usedSpacePercent}%)',
+ { usedSpacePercent: usedSpacePercent, owner: ownerDisplayName }));
+ return;
+ }
OC.Notification.show(t('files', 'Your storage is almost full ({usedSpacePercent}%)',
{usedSpacePercent: usedSpacePercent}));
}
@@ -149,18 +163,14 @@
return OC.filePath('files', 'ajax', action + '.php') + q;
},
+ /**
+ * Fetch the icon url for the mimetype
+ * @param {string} mime The mimetype
+ * @param {Files~mimeicon} ready Function to call when mimetype is retrieved
+ * @deprecated use OC.MimeType.getIconUrl(mime)
+ */
getMimeIcon: function(mime, ready) {
- if (Files.getMimeIcon.cache[mime]) {
- ready(Files.getMimeIcon.cache[mime]);
- } else {
- $.get( OC.filePath('files','ajax','mimeicon.php'), {mime: mime}, function(path) {
- if(OC.Util.hasSVGSupport()){
- path = path.substr(0, path.length-4) + '.svg';
- }
- Files.getMimeIcon.cache[mime]=path;
- ready(Files.getMimeIcon.cache[mime]);
- });
- }
+ ready(OC.MimeType.getIconUrl(mime));
},
/**
@@ -197,7 +207,6 @@
* Initialize the files view
*/
initialize: function() {
- Files.getMimeIcon.cache = {};
Files.bindKeyboardShortcuts(document, $);
// TODO: move file list related code (upload) to OCA.Files.FileList
@@ -225,7 +234,6 @@
// display storage warnings
setTimeout(Files.displayStorageWarnings, 100);
- OC.Notification.setDefault(Files.displayStorageWarnings);
// only possible at the moment if user is logged in or the files app is loaded
if (OC.currentUser && OCA.Files.App) {
@@ -256,14 +264,41 @@
$('#webdavurl').select();
});
+ $('#upload').tooltip({placement:'right'});
+
//FIXME scroll to and highlight preselected file
/*
if (getURLParameter('scrollto')) {
FileList.scrollTo(getURLParameter('scrollto'));
}
*/
+ },
+
+ /**
+ * Handles the download and calls the callback function once the download has started
+ * - browser sends download request and adds parameter with a token
+ * - server notices this token and adds a set cookie to the download response
+ * - browser now adds this cookie for the domain
+ * - JS periodically checks for this cookie and then knows when the download has started to call the callback
+ *
+ * @param {string} url download URL
+ * @param {function} callback function to call once the download has started
+ */
+ handleDownload: function(url, callback) {
+ var randomToken = Math.random().toString(36).substring(2),
+ checkForDownloadCookie = function() {
+ if (!OC.Util.isCookieSetToValue('ocDownloadStarted', randomToken)){
+ return false;
+ } else {
+ callback();
+ return true;
+ }
+ };
+
+ OC.redirect(url + '&downloadStartSecret=' + randomToken);
+ OC.Util.waitFor(checkForDownloadCookie, 500);
}
- }
+ };
Files._updateStorageStatisticsDebounced = _.debounce(Files._updateStorageStatistics, 250);
OCA.Files.Files = Files;
diff --git a/apps/files/js/mainfileinfodetailview.js b/apps/files/js/mainfileinfodetailview.js
new file mode 100644
index 00000000000..6910e5f2be5
--- /dev/null
+++ b/apps/files/js/mainfileinfodetailview.js
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2015
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+(function() {
+ var TEMPLATE =
+ '<a href="#" class="thumbnail action-default"></a><div title="{{name}}" class="fileName ellipsis">{{name}}</div>' +
+ '<div class="file-details ellipsis">' +
+ ' <a href="#" ' +
+ ' alt="{{starAltText}}"' +
+ ' class="action action-favorite favorite">' +
+ ' <img class="svg" src="{{starIcon}}" />' +
+ ' </a>' +
+ ' <span class="size" title="{{altSize}}">{{size}}</span>, <span class="date" title="{{altDate}}">{{date}}</span>' +
+ '</div>';
+
+ /**
+ * @class OCA.Files.MainFileInfoDetailView
+ * @classdesc
+ *
+ * Displays main details about a file
+ *
+ */
+ var MainFileInfoDetailView = OCA.Files.DetailFileInfoView.extend(
+ /** @lends OCA.Files.MainFileInfoDetailView.prototype */ {
+
+ className: 'mainFileInfoView',
+
+ /**
+ * Associated file list instance, for file actions
+ *
+ * @type {OCA.Files.FileList}
+ */
+ _fileList: null,
+
+ /**
+ * File actions
+ *
+ * @type {OCA.Files.FileActions}
+ */
+ _fileActions: null,
+
+ events: {
+ 'click a.action-favorite': '_onClickFavorite',
+ 'click a.action-default': '_onClickDefaultAction'
+ },
+
+ template: function(data) {
+ if (!this._template) {
+ this._template = Handlebars.compile(TEMPLATE);
+ }
+ return this._template(data);
+ },
+
+ initialize: function(options) {
+ options = options || {};
+ this._fileList = options.fileList;
+ this._fileActions = options.fileActions;
+ if (!this._fileList) {
+ throw 'Missing requird parameter "fileList"';
+ }
+ if (!this._fileActions) {
+ throw 'Missing requird parameter "fileActions"';
+ }
+ },
+
+ _onClickFavorite: function(event) {
+ event.preventDefault();
+ this._fileActions.triggerAction('Favorite', this.model, this._fileList);
+ },
+
+ _onClickDefaultAction: function(event) {
+ event.preventDefault();
+ this._fileActions.triggerAction(null, this.model, this._fileList);
+ },
+
+ _onModelChanged: function() {
+ // simply re-render
+ this.render();
+ },
+
+ setFileInfo: function(fileInfo) {
+ if (this.model) {
+ this.model.off('change', this._onModelChanged, this);
+ }
+ this.model = fileInfo;
+ if (this.model) {
+ this.model.on('change', this._onModelChanged, this);
+ }
+ this.render();
+ },
+
+ /**
+ * Renders this details view
+ */
+ render: function() {
+ if (this.model) {
+ var isFavorite = (this.model.get('tags') || []).indexOf(OC.TAG_FAVORITE) >= 0;
+ this.$el.html(this.template({
+ nameLabel: t('files', 'Name'),
+ name: this.model.get('name'),
+ pathLabel: t('files', 'Path'),
+ path: this.model.get('path'),
+ sizeLabel: t('files', 'Size'),
+ size: OC.Util.humanFileSize(this.model.get('size'), true),
+ altSize: n('files', '%n byte', '%n bytes', this.model.get('size')),
+ dateLabel: t('files', 'Modified'),
+ altDate: OC.Util.formatDate(this.model.get('mtime')),
+ date: OC.Util.relativeModifiedDate(this.model.get('mtime')),
+ starAltText: isFavorite ? t('files', 'Favorited') : t('files', 'Favorite'),
+ starIcon: OC.imagePath('core', isFavorite ? 'actions/starred' : 'actions/star')
+ }));
+
+ // TODO: we really need OC.Previews
+ var $iconDiv = this.$el.find('.thumbnail');
+ if (!this.model.isDirectory()) {
+ // TODO: inject utility class?
+ FileList.lazyLoadPreview({
+ path: this.model.getFullPath(),
+ mime: this.model.get('mimetype'),
+ etag: this.model.get('etag'),
+ x: 50,
+ y: 50,
+ callback: function(previewUrl) {
+ $iconDiv.css('background-image', 'url("' + previewUrl + '")');
+ }
+ });
+ } else {
+ // TODO: special icons / shared / external
+ $iconDiv.css('background-image', 'url("' + OC.MimeType.getIconUrl('dir') + '")');
+ }
+ this.$el.find('[title]').tooltip({placement: 'bottom'});
+ } else {
+ this.$el.empty();
+ }
+ this.delegateEvents();
+ }
+ });
+
+ OCA.Files.MainFileInfoDetailView = MainFileInfoDetailView;
+})();
diff --git a/apps/files/js/navigation.js b/apps/files/js/navigation.js
index be385f21f50..83cd556c89a 100644
--- a/apps/files/js/navigation.js
+++ b/apps/files/js/navigation.js
@@ -124,7 +124,7 @@
var $target = $(ev.target);
var itemId = $target.closest('li').attr('data-id');
this.setActiveItem(itemId);
- return false;
+ ev.preventDefault();
}
};
diff --git a/apps/files/js/tagsplugin.js b/apps/files/js/tagsplugin.js
index 293e25176f3..ed1105a1706 100644
--- a/apps/files/js/tagsplugin.js
+++ b/apps/files/js/tagsplugin.js
@@ -77,10 +77,11 @@
var self = this;
// register "star" action
fileActions.registerAction({
- name: 'favorite',
+ name: 'Favorite',
displayName: 'Favorite',
mime: 'all',
permissions: OC.PERMISSION_READ,
+ type: OCA.Files.FileActions.TYPE_INLINE,
render: function(actionSpec, isDefault, context) {
var $file = context.$file;
var isFavorite = $file.data('favorite') === true;
@@ -107,6 +108,8 @@
}
toggleStar($actionEl, !isFavorite);
+ context.fileInfoModel.set('tags', tags);
+
self.applyFileTags(
dir + '/' + fileName,
tags,
@@ -144,6 +147,12 @@
$tr.find('td:first').prepend('<div class="favorite"></div>');
return $tr;
};
+ var oldElementToFile = fileList.elementToFile;
+ fileList.elementToFile = function($el) {
+ var fileInfo = oldElementToFile.apply(this, arguments);
+ fileInfo.tags = $el.attr('data-tags') || [];
+ return fileInfo;
+ };
},
attach: function(fileList) {
diff --git a/apps/files/l10n/ar.js b/apps/files/l10n/ar.js
index 72f82795ea2..412f339a4b3 100644
--- a/apps/files/l10n/ar.js
+++ b/apps/files/l10n/ar.js
@@ -42,9 +42,6 @@ OC.L10N.register(
"File name cannot be empty." : "اسم الملف لا يجوز أن يكون فارغا",
"Your storage is full, files can not be updated or synced anymore!" : "مساحتك التخزينية ممتلئة, لا يمكم تحديث ملفاتك أو مزامنتها بعد الآن !",
"Your storage is almost full ({usedSpacePercent}%)" : "مساحتك التخزينية امتلأت تقريبا ",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "تم تمكين تشفير البرامج لكن لم يتم تهيئة المفاتيح لذا يرجى تسجيل الخروج ثم تسجيل الدخول مرة آخرى.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "المفتاح الخاص بتشفير التطبيقات غير صالح. يرجى تحديث كلمة السر الخاصة بالمفتاح الخاص من الإعدادت الشخصية حتى تتمكن من الوصول للملفات المشفرة.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "تم تعطيل التشفير لكن ملفاتك لا تزال مشفرة. فضلا اذهب إلى الإعدادات الشخصية لإزالة التشفير عن ملفاتك.",
"{dirs} and {files}" : "{dirs} و {files}",
"Favorite" : "المفضلة",
"A new file or folder has been <strong>created</strong>" : "تم <strong> إنشاء</strong> ملف جديد أو مجلد ",
diff --git a/apps/files/l10n/ar.json b/apps/files/l10n/ar.json
index c1f448e7a88..812769a4fb2 100644
--- a/apps/files/l10n/ar.json
+++ b/apps/files/l10n/ar.json
@@ -40,9 +40,6 @@
"File name cannot be empty." : "اسم الملف لا يجوز أن يكون فارغا",
"Your storage is full, files can not be updated or synced anymore!" : "مساحتك التخزينية ممتلئة, لا يمكم تحديث ملفاتك أو مزامنتها بعد الآن !",
"Your storage is almost full ({usedSpacePercent}%)" : "مساحتك التخزينية امتلأت تقريبا ",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "تم تمكين تشفير البرامج لكن لم يتم تهيئة المفاتيح لذا يرجى تسجيل الخروج ثم تسجيل الدخول مرة آخرى.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "المفتاح الخاص بتشفير التطبيقات غير صالح. يرجى تحديث كلمة السر الخاصة بالمفتاح الخاص من الإعدادت الشخصية حتى تتمكن من الوصول للملفات المشفرة.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "تم تعطيل التشفير لكن ملفاتك لا تزال مشفرة. فضلا اذهب إلى الإعدادات الشخصية لإزالة التشفير عن ملفاتك.",
"{dirs} and {files}" : "{dirs} و {files}",
"Favorite" : "المفضلة",
"A new file or folder has been <strong>created</strong>" : "تم <strong> إنشاء</strong> ملف جديد أو مجلد ",
diff --git a/apps/files/l10n/ast.js b/apps/files/l10n/ast.js
index 980e1275ffd..297ebd60484 100644
--- a/apps/files/l10n/ast.js
+++ b/apps/files/l10n/ast.js
@@ -42,8 +42,12 @@ OC.L10N.register(
"Delete" : "Desaniciar",
"Disconnect storage" : "Desconeutar almacenamientu",
"Unshare" : "Dexar de compartir",
+ "No permission to delete" : "Ensin permisos pa desaniciar",
"Download" : "Descargar",
+ "Select" : "Esbillar",
"Pending" : "Pendiente",
+ "Unable to determine date" : "Imposible determinar la fecha",
+ "This operation is forbidden" : "La operación ta prohibida",
"Error moving file." : "Fallu moviendo'l ficheru.",
"Error moving file" : "Fallu moviendo'l ficheru",
"Error" : "Fallu",
@@ -60,9 +64,6 @@ OC.L10N.register(
"File name cannot be empty." : "El nome de ficheru nun pue quedar baleru.",
"Your storage is full, files can not be updated or synced anymore!" : "L'almacenamientu ta completu, ¡yá nun se pueden anovar o sincronizar ficheros!",
"Your storage is almost full ({usedSpacePercent}%)" : "L'almacenamientu ta casi completu ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicación Encryption ta habilitada pero les tos claves nun s'aniciaron, por favor zarra sesión y aníciala de nueves",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Clave privada non válida pa Encryption. Por favor, anueva la to contraseña de clave nos tos axustes personales pa recuperar l'accesu a los tos ficheros cifraos.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Deshabilitose'l cifráu pero los tos ficheros tovía tán cifraos. Por favor, vete a los axustes personales pa descrifrar los tos ficheros.",
"{dirs} and {files}" : "{dirs} y {files}",
"Favorite" : "Favoritu",
"A new file or folder has been <strong>created</strong>" : "<strong>Creóse</strong> un ficheru o carpeta nuevos",
diff --git a/apps/files/l10n/ast.json b/apps/files/l10n/ast.json
index afc7963cee3..b242d62a521 100644
--- a/apps/files/l10n/ast.json
+++ b/apps/files/l10n/ast.json
@@ -40,8 +40,12 @@
"Delete" : "Desaniciar",
"Disconnect storage" : "Desconeutar almacenamientu",
"Unshare" : "Dexar de compartir",
+ "No permission to delete" : "Ensin permisos pa desaniciar",
"Download" : "Descargar",
+ "Select" : "Esbillar",
"Pending" : "Pendiente",
+ "Unable to determine date" : "Imposible determinar la fecha",
+ "This operation is forbidden" : "La operación ta prohibida",
"Error moving file." : "Fallu moviendo'l ficheru.",
"Error moving file" : "Fallu moviendo'l ficheru",
"Error" : "Fallu",
@@ -58,9 +62,6 @@
"File name cannot be empty." : "El nome de ficheru nun pue quedar baleru.",
"Your storage is full, files can not be updated or synced anymore!" : "L'almacenamientu ta completu, ¡yá nun se pueden anovar o sincronizar ficheros!",
"Your storage is almost full ({usedSpacePercent}%)" : "L'almacenamientu ta casi completu ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicación Encryption ta habilitada pero les tos claves nun s'aniciaron, por favor zarra sesión y aníciala de nueves",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Clave privada non válida pa Encryption. Por favor, anueva la to contraseña de clave nos tos axustes personales pa recuperar l'accesu a los tos ficheros cifraos.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Deshabilitose'l cifráu pero los tos ficheros tovía tán cifraos. Por favor, vete a los axustes personales pa descrifrar los tos ficheros.",
"{dirs} and {files}" : "{dirs} y {files}",
"Favorite" : "Favoritu",
"A new file or folder has been <strong>created</strong>" : "<strong>Creóse</strong> un ficheru o carpeta nuevos",
diff --git a/apps/files/l10n/az.js b/apps/files/l10n/az.js
index 60f4a8d0f87..3f76fd9a328 100644
--- a/apps/files/l10n/az.js
+++ b/apps/files/l10n/az.js
@@ -42,6 +42,7 @@ OC.L10N.register(
"Delete" : "Sil",
"Disconnect storage" : "Daşıyıcını ayır",
"Unshare" : "Paylaşımı durdur",
+ "No permission to delete" : "Silmək üçün yetki yoxdur",
"Download" : "Yüklə",
"Select" : "Seç",
"Pending" : "Gözləmə",
@@ -63,9 +64,6 @@ OC.L10N.register(
"File name cannot be empty." : "Faylın adı boş ola bilməz.",
"Your storage is full, files can not be updated or synced anymore!" : "Sizin deponuz doludur, fayllar artıq yenilənə və sinxronizasiya edilə bilməz!",
"Your storage is almost full ({usedSpacePercent}%)" : "Sizin depo depo demək olar ki, doludur ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Proqram şifrələnməsi işə salınıb ancaq, sizin açarlar inisializasiya edilməyib. Xahiş edilir çıxıb yenidən daxil olasınız",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifrələnmə proqramı üçün yalnış şəxsi açar. Xahiş olunur öz şəxsi quraşdırmalarınızda şəxsi açarınızı yeniləyəsiniz ki, şifrələnmiş fayllara yetki ala biləsiniz. ",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Şifrələnmə söndürülüb ancaq, sizin fayllar hələdə şifrələnmiş vəziyyətdədir. Deşifrə etmək üçün xahiş olunur, şəxsi quraşdırılmalarınıza baxasınız.",
"_matches '{filter}'_::_match '{filter}'_" : ["uyğun '{filter}'","uyğun '{filter}'"],
"{dirs} and {files}" : "{dirs} və {files}",
"Favorited" : "İstəkləndi",
@@ -73,6 +71,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "Qeydlərin yenilənməsi müddətində səhv baş verdi ",
"A new file or folder has been <strong>created</strong>" : "Yeni fayl və ya direktoriya <strong>yaradılmışdır</strong>",
"A file or folder has been <strong>changed</strong>" : "Fayl və ya direktoriya <strong>dəyişdirilib</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>sevimli faylların</strong> yaradılması və silinməsi haqqında olan xəbərdarlıqları limitlə <em>(Yalnız axınlar)</em>",
"A file or folder has been <strong>deleted</strong>" : "Fayl və ya direktoriya <strong>silinib</strong>",
"A file or folder has been <strong>restored</strong>" : "Fayl yada qovluq geriyə <strong>qaytarıldı</strong>",
"You created %1$s" : "Siz yaratdınız %1$s",
diff --git a/apps/files/l10n/az.json b/apps/files/l10n/az.json
index d6bac687732..ec7c41a00f9 100644
--- a/apps/files/l10n/az.json
+++ b/apps/files/l10n/az.json
@@ -40,6 +40,7 @@
"Delete" : "Sil",
"Disconnect storage" : "Daşıyıcını ayır",
"Unshare" : "Paylaşımı durdur",
+ "No permission to delete" : "Silmək üçün yetki yoxdur",
"Download" : "Yüklə",
"Select" : "Seç",
"Pending" : "Gözləmə",
@@ -61,9 +62,6 @@
"File name cannot be empty." : "Faylın adı boş ola bilməz.",
"Your storage is full, files can not be updated or synced anymore!" : "Sizin deponuz doludur, fayllar artıq yenilənə və sinxronizasiya edilə bilməz!",
"Your storage is almost full ({usedSpacePercent}%)" : "Sizin depo depo demək olar ki, doludur ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Proqram şifrələnməsi işə salınıb ancaq, sizin açarlar inisializasiya edilməyib. Xahiş edilir çıxıb yenidən daxil olasınız",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifrələnmə proqramı üçün yalnış şəxsi açar. Xahiş olunur öz şəxsi quraşdırmalarınızda şəxsi açarınızı yeniləyəsiniz ki, şifrələnmiş fayllara yetki ala biləsiniz. ",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Şifrələnmə söndürülüb ancaq, sizin fayllar hələdə şifrələnmiş vəziyyətdədir. Deşifrə etmək üçün xahiş olunur, şəxsi quraşdırılmalarınıza baxasınız.",
"_matches '{filter}'_::_match '{filter}'_" : ["uyğun '{filter}'","uyğun '{filter}'"],
"{dirs} and {files}" : "{dirs} və {files}",
"Favorited" : "İstəkləndi",
@@ -71,6 +69,7 @@
"An error occurred while trying to update the tags" : "Qeydlərin yenilənməsi müddətində səhv baş verdi ",
"A new file or folder has been <strong>created</strong>" : "Yeni fayl və ya direktoriya <strong>yaradılmışdır</strong>",
"A file or folder has been <strong>changed</strong>" : "Fayl və ya direktoriya <strong>dəyişdirilib</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>sevimli faylların</strong> yaradılması və silinməsi haqqında olan xəbərdarlıqları limitlə <em>(Yalnız axınlar)</em>",
"A file or folder has been <strong>deleted</strong>" : "Fayl və ya direktoriya <strong>silinib</strong>",
"A file or folder has been <strong>restored</strong>" : "Fayl yada qovluq geriyə <strong>qaytarıldı</strong>",
"You created %1$s" : "Siz yaratdınız %1$s",
diff --git a/apps/files/l10n/be.js b/apps/files/l10n/be.js
index aa9352c2f18..77e9a4d6071 100644
--- a/apps/files/l10n/be.js
+++ b/apps/files/l10n/be.js
@@ -4,4 +4,4 @@ OC.L10N.register(
"Error" : "Памылка",
"Settings" : "Налады"
},
-"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
+"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
diff --git a/apps/files/l10n/be.json b/apps/files/l10n/be.json
index 27397b9da24..27c2988b703 100644
--- a/apps/files/l10n/be.json
+++ b/apps/files/l10n/be.json
@@ -1,5 +1,5 @@
{ "translations": {
"Error" : "Памылка",
"Settings" : "Налады"
-},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
+},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/files/l10n/bg_BG.js b/apps/files/l10n/bg_BG.js
index ea6adc66004..b43dced5cf8 100644
--- a/apps/files/l10n/bg_BG.js
+++ b/apps/files/l10n/bg_BG.js
@@ -63,9 +63,6 @@ OC.L10N.register(
"File name cannot be empty." : "Името на файла не може да бъде оставено празно.",
"Your storage is full, files can not be updated or synced anymore!" : "Заделеното място е запълнено, повече файлове не могат да бъдат синхронизирани или опреснени!",
"Your storage is almost full ({usedSpacePercent}%)" : "Заделеното място е почити запълнено ({usedSpacePercent}%).",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Програмата за криптиране е включена, но твоите ключове не са зададени, моля отпиши си и се впиши отново.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Невалиден личен ключ за Криптиращата Програма. Моля, обнови личния си ключ в Лични настройки, за да възстановиш достъпа до криптираните си файловете.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Криптирането е изключено, но файлове ти са все още защитени. Моля, отиди на лични найстройки, за да разшфроваш файловете.",
"_matches '{filter}'_::_match '{filter}'_" : ["пасва на '{filter}'","пасват на '{filter}'\n "],
"{dirs} and {files}" : "{dirs} и {files}",
"Favorited" : "Отбелязано в любими",
diff --git a/apps/files/l10n/bg_BG.json b/apps/files/l10n/bg_BG.json
index d8f205bea6d..266f4f08cdf 100644
--- a/apps/files/l10n/bg_BG.json
+++ b/apps/files/l10n/bg_BG.json
@@ -61,9 +61,6 @@
"File name cannot be empty." : "Името на файла не може да бъде оставено празно.",
"Your storage is full, files can not be updated or synced anymore!" : "Заделеното място е запълнено, повече файлове не могат да бъдат синхронизирани или опреснени!",
"Your storage is almost full ({usedSpacePercent}%)" : "Заделеното място е почити запълнено ({usedSpacePercent}%).",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Програмата за криптиране е включена, но твоите ключове не са зададени, моля отпиши си и се впиши отново.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Невалиден личен ключ за Криптиращата Програма. Моля, обнови личния си ключ в Лични настройки, за да възстановиш достъпа до криптираните си файловете.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Криптирането е изключено, но файлове ти са все още защитени. Моля, отиди на лични найстройки, за да разшфроваш файловете.",
"_matches '{filter}'_::_match '{filter}'_" : ["пасва на '{filter}'","пасват на '{filter}'\n "],
"{dirs} and {files}" : "{dirs} и {files}",
"Favorited" : "Отбелязано в любими",
diff --git a/apps/files/l10n/bs.js b/apps/files/l10n/bs.js
index 4063e10f41e..8856725072c 100644
--- a/apps/files/l10n/bs.js
+++ b/apps/files/l10n/bs.js
@@ -62,9 +62,6 @@ OC.L10N.register(
"File name cannot be empty." : "Naziv datoteke ne može biti prazan",
"Your storage is full, files can not be updated or synced anymore!" : "Vaša pohrana je puna, datoteke više nije moguće ažurirati niti sinhronizirati!",
"Your storage is almost full ({usedSpacePercent}%)" : "Vaš prostor za pohranu je skoro pun ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je uključena, ali vaši ključevi nisu inicializirani, molim odjavite se i ponovno prijavite",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za šifriranje. Molim ažurirajte lozinku svoga privatnog ključa u svojim osobnim postavkama da biste obnovili pristup svojim šifriranim datotekama.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifriranje je onemogućeno, ali vaše su datoteke još uvijek šifrirane. Molimo, odite u osobne postavke da biste dešifrirali svoje datoteke.",
"{dirs} and {files}" : "{dirs} i {files}",
"Favorited" : "Favorizovano",
"Favorite" : "Favorit",
diff --git a/apps/files/l10n/bs.json b/apps/files/l10n/bs.json
index d4bf9ea3721..30a38102a69 100644
--- a/apps/files/l10n/bs.json
+++ b/apps/files/l10n/bs.json
@@ -60,9 +60,6 @@
"File name cannot be empty." : "Naziv datoteke ne može biti prazan",
"Your storage is full, files can not be updated or synced anymore!" : "Vaša pohrana je puna, datoteke više nije moguće ažurirati niti sinhronizirati!",
"Your storage is almost full ({usedSpacePercent}%)" : "Vaš prostor za pohranu je skoro pun ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je uključena, ali vaši ključevi nisu inicializirani, molim odjavite se i ponovno prijavite",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za šifriranje. Molim ažurirajte lozinku svoga privatnog ključa u svojim osobnim postavkama da biste obnovili pristup svojim šifriranim datotekama.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifriranje je onemogućeno, ali vaše su datoteke još uvijek šifrirane. Molimo, odite u osobne postavke da biste dešifrirali svoje datoteke.",
"{dirs} and {files}" : "{dirs} i {files}",
"Favorited" : "Favorizovano",
"Favorite" : "Favorit",
diff --git a/apps/files/l10n/ca.js b/apps/files/l10n/ca.js
index 4f9bb23032e..fc207dd6bb2 100644
--- a/apps/files/l10n/ca.js
+++ b/apps/files/l10n/ca.js
@@ -42,14 +42,17 @@ OC.L10N.register(
"Delete" : "Esborra",
"Disconnect storage" : "Desonnecta l'emmagatzematge",
"Unshare" : "Deixa de compartir",
+ "No permission to delete" : "Sense permís per esborrar",
"Download" : "Baixa",
"Select" : "Selecciona",
"Pending" : "Pendent",
+ "Unable to determine date" : "No s'ha pogut determinar la data",
"Error moving file." : "Error en moure el fitxer.",
"Error moving file" : "Error en moure el fitxer",
"Error" : "Error",
"Could not rename file" : "No es pot canviar el nom de fitxer",
"Error deleting file." : "Error en esborrar el fitxer.",
+ "No entries in this folder match '{filter}'" : "No hi ha resultats que coincideixin amb '{filter}'",
"Name" : "Nom",
"Size" : "Mida",
"Modified" : "Modificat",
@@ -59,15 +62,18 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["Pujant %n fitxer","Pujant %n fitxers"],
"\"{name}\" is an invalid file name." : "\"{name}\" no es un fitxer vàlid.",
"File name cannot be empty." : "El nom del fitxer no pot ser buit.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'emmagatzematge de {owner} està ple, els arxius no es poden actualitzar o sincronitzar més!",
"Your storage is full, files can not be updated or synced anymore!" : "El vostre espai d'emmagatzemament és ple, els fitxers ja no es poden actualitzar o sincronitzar!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Emmagatzematge de {owner} està gairebé ple ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "El vostre espai d'emmagatzemament és gairebé ple ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació d'encriptació està activada però les claus no estan inicialitzades, sortiu i acrediteu-vos de nou.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clau privada de l'aplicació d'encriptació no és vàlida! Actualitzeu la contrasenya de la clau privada a l'arranjament personal per recuperar els fitxers encriptats.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "L'encriptació s'ha desactivat però els vostres fitxers segueixen encriptats. Aneu a la vostra configuració personal per desencriptar els vostres fitxers.",
+ "_matches '{filter}'_::_match '{filter}'_" : ["coincidències '{filter}'","coincidència '{filter}'"],
"{dirs} and {files}" : "{dirs} i {files}",
+ "Favorited" : "Agregat a favorits",
"Favorite" : "Preferits",
+ "An error occurred while trying to update the tags" : "S'ha produït un error en tractar d'actualitzar les etiquetes",
"A new file or folder has been <strong>created</strong>" : "S'ha <strong>creat</strong> un nou fitxer o una nova carpeta",
"A file or folder has been <strong>changed</strong>" : "S'ha <strong>canviat</strong> un fitxer o una carpeta",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitar les notificacions sobre la creació i canvis dels seus <strong>arxius favorits</strong><em>(solament Stream)</em>",
"A file or folder has been <strong>deleted</strong>" : "S'ha <strong>elminiat</strong> un fitxer o una carpeta",
"A file or folder has been <strong>restored</strong>" : "S'ha <strong>restaurat</strong> un fitxer o una carpeta",
"You created %1$s" : "Has creat %1$s",
@@ -86,6 +92,7 @@ OC.L10N.register(
"Maximum upload size" : "Mida màxima de pujada",
"max. possible: " : "màxim possible:",
"Save" : "Desa",
+ "Can not be edited from here due to insufficient permissions." : "No es pot editar des d'aquí per permisos insuficients.",
"Settings" : "Arranjament",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Useu aquesta adreça per <a href=\"%s\" target=\"_blank\">accedir als fitxers via WebDAV</a>",
@@ -96,9 +103,15 @@ OC.L10N.register(
"Folder" : "Carpeta",
"Upload" : "Puja",
"Cancel upload" : "Cancel·la la pujada",
+ "No files in here" : "No hi ha arxius",
+ "Upload some content or sync with your devices!" : "Pugi continguts o sincronitzi els seus dispositius.",
+ "No entries found in this folder" : "No hi ha entrades en aquesta carpeta",
+ "Select all" : "Seleccionar tot",
"Upload too large" : "La pujada és massa gran",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada del servidor",
"Files are being scanned, please wait." : "S'estan escanejant els fitxers, espereu",
- "Currently scanning" : "Actualment escanejant"
+ "Currently scanning" : "Actualment escanejant",
+ "No favorites" : "No hi ha favorits",
+ "Files and folders you mark as favorite will show up here" : "Aquí apareixeran els arxius i carpetes que vostè marqui com favorits"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/ca.json b/apps/files/l10n/ca.json
index 24b7321f118..052e9ecb21b 100644
--- a/apps/files/l10n/ca.json
+++ b/apps/files/l10n/ca.json
@@ -40,14 +40,17 @@
"Delete" : "Esborra",
"Disconnect storage" : "Desonnecta l'emmagatzematge",
"Unshare" : "Deixa de compartir",
+ "No permission to delete" : "Sense permís per esborrar",
"Download" : "Baixa",
"Select" : "Selecciona",
"Pending" : "Pendent",
+ "Unable to determine date" : "No s'ha pogut determinar la data",
"Error moving file." : "Error en moure el fitxer.",
"Error moving file" : "Error en moure el fitxer",
"Error" : "Error",
"Could not rename file" : "No es pot canviar el nom de fitxer",
"Error deleting file." : "Error en esborrar el fitxer.",
+ "No entries in this folder match '{filter}'" : "No hi ha resultats que coincideixin amb '{filter}'",
"Name" : "Nom",
"Size" : "Mida",
"Modified" : "Modificat",
@@ -57,15 +60,18 @@
"_Uploading %n file_::_Uploading %n files_" : ["Pujant %n fitxer","Pujant %n fitxers"],
"\"{name}\" is an invalid file name." : "\"{name}\" no es un fitxer vàlid.",
"File name cannot be empty." : "El nom del fitxer no pot ser buit.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'emmagatzematge de {owner} està ple, els arxius no es poden actualitzar o sincronitzar més!",
"Your storage is full, files can not be updated or synced anymore!" : "El vostre espai d'emmagatzemament és ple, els fitxers ja no es poden actualitzar o sincronitzar!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Emmagatzematge de {owner} està gairebé ple ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "El vostre espai d'emmagatzemament és gairebé ple ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació d'encriptació està activada però les claus no estan inicialitzades, sortiu i acrediteu-vos de nou.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clau privada de l'aplicació d'encriptació no és vàlida! Actualitzeu la contrasenya de la clau privada a l'arranjament personal per recuperar els fitxers encriptats.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "L'encriptació s'ha desactivat però els vostres fitxers segueixen encriptats. Aneu a la vostra configuració personal per desencriptar els vostres fitxers.",
+ "_matches '{filter}'_::_match '{filter}'_" : ["coincidències '{filter}'","coincidència '{filter}'"],
"{dirs} and {files}" : "{dirs} i {files}",
+ "Favorited" : "Agregat a favorits",
"Favorite" : "Preferits",
+ "An error occurred while trying to update the tags" : "S'ha produït un error en tractar d'actualitzar les etiquetes",
"A new file or folder has been <strong>created</strong>" : "S'ha <strong>creat</strong> un nou fitxer o una nova carpeta",
"A file or folder has been <strong>changed</strong>" : "S'ha <strong>canviat</strong> un fitxer o una carpeta",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitar les notificacions sobre la creació i canvis dels seus <strong>arxius favorits</strong><em>(solament Stream)</em>",
"A file or folder has been <strong>deleted</strong>" : "S'ha <strong>elminiat</strong> un fitxer o una carpeta",
"A file or folder has been <strong>restored</strong>" : "S'ha <strong>restaurat</strong> un fitxer o una carpeta",
"You created %1$s" : "Has creat %1$s",
@@ -84,6 +90,7 @@
"Maximum upload size" : "Mida màxima de pujada",
"max. possible: " : "màxim possible:",
"Save" : "Desa",
+ "Can not be edited from here due to insufficient permissions." : "No es pot editar des d'aquí per permisos insuficients.",
"Settings" : "Arranjament",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Useu aquesta adreça per <a href=\"%s\" target=\"_blank\">accedir als fitxers via WebDAV</a>",
@@ -94,9 +101,15 @@
"Folder" : "Carpeta",
"Upload" : "Puja",
"Cancel upload" : "Cancel·la la pujada",
+ "No files in here" : "No hi ha arxius",
+ "Upload some content or sync with your devices!" : "Pugi continguts o sincronitzi els seus dispositius.",
+ "No entries found in this folder" : "No hi ha entrades en aquesta carpeta",
+ "Select all" : "Seleccionar tot",
"Upload too large" : "La pujada és massa gran",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada del servidor",
"Files are being scanned, please wait." : "S'estan escanejant els fitxers, espereu",
- "Currently scanning" : "Actualment escanejant"
+ "Currently scanning" : "Actualment escanejant",
+ "No favorites" : "No hi ha favorits",
+ "Files and folders you mark as favorite will show up here" : "Aquí apareixeran els arxius i carpetes que vostè marqui com favorits"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/cs_CZ.js b/apps/files/l10n/cs_CZ.js
index 7eab30b25e4..39f0a9e6958 100644
--- a/apps/files/l10n/cs_CZ.js
+++ b/apps/files/l10n/cs_CZ.js
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "Smazat",
"Disconnect storage" : "Odpojit úložiště",
"Unshare" : "Zrušit sdílení",
+ "No permission to delete" : "Chybí oprávnění mazat",
"Download" : "Stáhnout",
"Select" : "Vybrat",
"Pending" : "Nevyřízené",
"Unable to determine date" : "Nelze určit datum",
+ "This operation is forbidden" : "Tato operace je zakázána",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Tento adresář není dostupný, zkontrolujte prosím logy nebo kontaktujte svého správce systému",
"Error moving file." : "Chyba při přesunu souboru.",
"Error moving file" : "Chyba při přesunu souboru",
"Error" : "Chyba",
@@ -61,11 +64,10 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["Nahrávám %n soubor","Nahrávám %n soubory","Nahrávám %n souborů"],
"\"{name}\" is an invalid file name." : "\"{name}\" je neplatným názvem souboru.",
"File name cannot be empty." : "Název souboru nemůže být prázdný řetězec.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Úložiště uživatele {owner} je zaplněné, soubory nelze aktualizovat a synchronizovat!",
"Your storage is full, files can not be updated or synced anymore!" : "Vaše úložiště je plné, nelze aktualizovat ani synchronizovat soubory.",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Úložiště uživatele {owner} je téměř plné ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Vaše úložiště je téměř plné ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče ve vašem osobním nastavení, abyste znovu získali přístup k vašim zašifrovaným souborům.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifrování bylo vypnuto, vaše soubory jsou však stále zašifrované. Běžte prosím do osobního nastavení, kde soubory odšifrujete.",
"_matches '{filter}'_::_match '{filter}'_" : ["odpovídá '{filter}'","odpovídá '{filter}'","odpovídá '{filter}'"],
"{dirs} and {files}" : "{dirs} a {files}",
"Favorited" : "Přidáno k oblíbeným",
@@ -73,6 +75,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "Při pokusu o úpravu tagů nastala chyba",
"A new file or folder has been <strong>created</strong>" : "Byl <strong>vytvořen</strong> nový soubor nebo složka",
"A file or folder has been <strong>changed</strong>" : "Soubor nebo složka byla <strong>změněna</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limit oznámení o tvorbě a změnách vašich <strong>oblíbených souborů</strong> <em>(Pouze streamovat)</em>",
"A file or folder has been <strong>deleted</strong>" : "Soubor nebo složka byla <strong>smazána</strong>",
"A file or folder has been <strong>restored</strong>" : "Soubor nebo složka byla <strong>obnovena</strong>",
"You created %1$s" : "Vytvořili jste %1$s",
diff --git a/apps/files/l10n/cs_CZ.json b/apps/files/l10n/cs_CZ.json
index 2458195469b..8742662c1da 100644
--- a/apps/files/l10n/cs_CZ.json
+++ b/apps/files/l10n/cs_CZ.json
@@ -40,10 +40,13 @@
"Delete" : "Smazat",
"Disconnect storage" : "Odpojit úložiště",
"Unshare" : "Zrušit sdílení",
+ "No permission to delete" : "Chybí oprávnění mazat",
"Download" : "Stáhnout",
"Select" : "Vybrat",
"Pending" : "Nevyřízené",
"Unable to determine date" : "Nelze určit datum",
+ "This operation is forbidden" : "Tato operace je zakázána",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Tento adresář není dostupný, zkontrolujte prosím logy nebo kontaktujte svého správce systému",
"Error moving file." : "Chyba při přesunu souboru.",
"Error moving file" : "Chyba při přesunu souboru",
"Error" : "Chyba",
@@ -59,11 +62,10 @@
"_Uploading %n file_::_Uploading %n files_" : ["Nahrávám %n soubor","Nahrávám %n soubory","Nahrávám %n souborů"],
"\"{name}\" is an invalid file name." : "\"{name}\" je neplatným názvem souboru.",
"File name cannot be empty." : "Název souboru nemůže být prázdný řetězec.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Úložiště uživatele {owner} je zaplněné, soubory nelze aktualizovat a synchronizovat!",
"Your storage is full, files can not be updated or synced anymore!" : "Vaše úložiště je plné, nelze aktualizovat ani synchronizovat soubory.",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Úložiště uživatele {owner} je téměř plné ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Vaše úložiště je téměř plné ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče ve vašem osobním nastavení, abyste znovu získali přístup k vašim zašifrovaným souborům.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifrování bylo vypnuto, vaše soubory jsou však stále zašifrované. Běžte prosím do osobního nastavení, kde soubory odšifrujete.",
"_matches '{filter}'_::_match '{filter}'_" : ["odpovídá '{filter}'","odpovídá '{filter}'","odpovídá '{filter}'"],
"{dirs} and {files}" : "{dirs} a {files}",
"Favorited" : "Přidáno k oblíbeným",
@@ -71,6 +73,7 @@
"An error occurred while trying to update the tags" : "Při pokusu o úpravu tagů nastala chyba",
"A new file or folder has been <strong>created</strong>" : "Byl <strong>vytvořen</strong> nový soubor nebo složka",
"A file or folder has been <strong>changed</strong>" : "Soubor nebo složka byla <strong>změněna</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limit oznámení o tvorbě a změnách vašich <strong>oblíbených souborů</strong> <em>(Pouze streamovat)</em>",
"A file or folder has been <strong>deleted</strong>" : "Soubor nebo složka byla <strong>smazána</strong>",
"A file or folder has been <strong>restored</strong>" : "Soubor nebo složka byla <strong>obnovena</strong>",
"You created %1$s" : "Vytvořili jste %1$s",
diff --git a/apps/files/l10n/da.js b/apps/files/l10n/da.js
index b9dfbe23ab2..e039bddf6a7 100644
--- a/apps/files/l10n/da.js
+++ b/apps/files/l10n/da.js
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "Slet",
"Disconnect storage" : "Frakobl lager",
"Unshare" : "Fjern deling",
+ "No permission to delete" : "Ingen rettigheder at slette",
"Download" : "Download",
"Select" : "Vælg",
"Pending" : "Afventer",
"Unable to determine date" : "Kan ikke fastslå datoen",
+ "This operation is forbidden" : "Denne operation er forbudt",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Denne mappe er utilgængelig - tjek venligst loggene eller kontakt administratoren",
"Error moving file." : "Fejl ved flytning af fil",
"Error moving file" : "Fejl ved flytning af fil",
"Error" : "Fejl",
@@ -61,11 +64,10 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["Uploader %n fil","Uploader %n filer"],
"\"{name}\" is an invalid file name." : "'{name}' er et ugyldigt filnavn.",
"File name cannot be empty." : "Filnavnet kan ikke stå tomt.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Opbevaringspladsen tilhørende {owner} er fyldt op - filer kan ikke længere opdateres eller synkroniseres!",
"Your storage is full, files can not be updated or synced anymore!" : "Din opbevaringsplads er fyldt op, filer kan ikke opdateres eller synkroniseres længere!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Opbevaringspladsen tilhørende {owner} er næsten fyldt op ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Din opbevaringsplads er næsten fyldt op ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret, men din nøgle er ikke igangsat. Log venligst ud og ind igen.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøgle for krypteringsprogrammet. Opdater venligst dit kodeord for den private nøgle i dine personlige indstillinger. Det kræves for at få adgang til dine krypterede filer.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Krypteringen blev deaktiveret, men dine filer er stadig krypteret. Gå venligst til dine personlige indstillinger for at dekryptere dine filer. ",
"_matches '{filter}'_::_match '{filter}'_" : ["match '{filter}'","match '{filter}'"],
"{dirs} and {files}" : "{dirs} og {files}",
"Favorited" : "Gjort til foretrukken",
@@ -73,6 +75,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "Der opstod en fejl under forsøg på at opdatere mærkerne",
"A new file or folder has been <strong>created</strong>" : "En ny fil eller mapper er blevet <strong>oprettet</strong>",
"A file or folder has been <strong>changed</strong>" : "En fil eller mappe er blevet <strong>ændret</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Begræns noter om oprettelse og ændringer af dine <strong>favorit filer</strong> <em>(Kun streaming)</em>",
"A file or folder has been <strong>deleted</strong>" : "En fil eller mappe er blevet <strong>slettet</strong>",
"A file or folder has been <strong>restored</strong>" : "En fil eller mappe er blevet <strong>gendannet</strong>",
"You created %1$s" : "Du oprettede %1$s ",
diff --git a/apps/files/l10n/da.json b/apps/files/l10n/da.json
index 3ba0f9abbd8..f8e5b4af457 100644
--- a/apps/files/l10n/da.json
+++ b/apps/files/l10n/da.json
@@ -40,10 +40,13 @@
"Delete" : "Slet",
"Disconnect storage" : "Frakobl lager",
"Unshare" : "Fjern deling",
+ "No permission to delete" : "Ingen rettigheder at slette",
"Download" : "Download",
"Select" : "Vælg",
"Pending" : "Afventer",
"Unable to determine date" : "Kan ikke fastslå datoen",
+ "This operation is forbidden" : "Denne operation er forbudt",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Denne mappe er utilgængelig - tjek venligst loggene eller kontakt administratoren",
"Error moving file." : "Fejl ved flytning af fil",
"Error moving file" : "Fejl ved flytning af fil",
"Error" : "Fejl",
@@ -59,11 +62,10 @@
"_Uploading %n file_::_Uploading %n files_" : ["Uploader %n fil","Uploader %n filer"],
"\"{name}\" is an invalid file name." : "'{name}' er et ugyldigt filnavn.",
"File name cannot be empty." : "Filnavnet kan ikke stå tomt.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Opbevaringspladsen tilhørende {owner} er fyldt op - filer kan ikke længere opdateres eller synkroniseres!",
"Your storage is full, files can not be updated or synced anymore!" : "Din opbevaringsplads er fyldt op, filer kan ikke opdateres eller synkroniseres længere!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Opbevaringspladsen tilhørende {owner} er næsten fyldt op ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Din opbevaringsplads er næsten fyldt op ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret, men din nøgle er ikke igangsat. Log venligst ud og ind igen.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøgle for krypteringsprogrammet. Opdater venligst dit kodeord for den private nøgle i dine personlige indstillinger. Det kræves for at få adgang til dine krypterede filer.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Krypteringen blev deaktiveret, men dine filer er stadig krypteret. Gå venligst til dine personlige indstillinger for at dekryptere dine filer. ",
"_matches '{filter}'_::_match '{filter}'_" : ["match '{filter}'","match '{filter}'"],
"{dirs} and {files}" : "{dirs} og {files}",
"Favorited" : "Gjort til foretrukken",
@@ -71,6 +73,7 @@
"An error occurred while trying to update the tags" : "Der opstod en fejl under forsøg på at opdatere mærkerne",
"A new file or folder has been <strong>created</strong>" : "En ny fil eller mapper er blevet <strong>oprettet</strong>",
"A file or folder has been <strong>changed</strong>" : "En fil eller mappe er blevet <strong>ændret</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Begræns noter om oprettelse og ændringer af dine <strong>favorit filer</strong> <em>(Kun streaming)</em>",
"A file or folder has been <strong>deleted</strong>" : "En fil eller mappe er blevet <strong>slettet</strong>",
"A file or folder has been <strong>restored</strong>" : "En fil eller mappe er blevet <strong>gendannet</strong>",
"You created %1$s" : "Du oprettede %1$s ",
diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js
index 9d49c783e62..00d88d52918 100644
--- a/apps/files/l10n/de.js
+++ b/apps/files/l10n/de.js
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "Löschen",
"Disconnect storage" : "Speicher trennen",
"Unshare" : "Freigabe aufheben",
+ "No permission to delete" : "Keine Berechtigung zum Löschen",
"Download" : "Herunterladen",
"Select" : "Auswählen",
"Pending" : "Ausstehend",
"Unable to determine date" : "Datum konnte nicht ermittelt werden",
+ "This operation is forbidden" : "Diese Operation ist nicht erlaubt",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Dieses Verzeichnis ist nicht verfügbar, bitte überprüfe die Logdateien oder kontaktiere den Administrator",
"Error moving file." : "Fehler beim Verschieben der Datei.",
"Error moving file" : "Fehler beim Verschieben der Datei",
"Error" : "Fehler",
@@ -61,11 +64,10 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["%n Datei wird hochgeladen","%n Dateien werden hochgeladen"],
"\"{name}\" is an invalid file name." : "»{name}« ist kein gültiger Dateiname.",
"File name cannot be empty." : "Der Dateiname darf nicht leer sein.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Der Speicher von {owner} ist voll, Dateien können nicht mehr aktualisiert oder synchronisiert werden!",
"Your storage is full, files can not be updated or synced anymore!" : "Dein Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Der Speicher von {owner} ist beinahe voll ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Dein Speicher ist fast voll ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Die Verschlüsselung-App ist aktiviert, aber Deine Schlüssel sind nicht initialisiert. Bitte melden Dich nochmals ab und wieder an.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte aktualisiere Dein privates Schlüssel-Passwort, um den Zugriff auf Deine verschlüsselten Dateien wiederherzustellen.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Die Verschlüsselung wurde deaktiviert, jedoch sind Deine Dateien nach wie vor verschlüsselt. Bitte gehe zu Deinen persönlichen Einstellungen, um Deine Dateien zu entschlüsseln.",
"_matches '{filter}'_::_match '{filter}'_" : ["stimmt mit '{filter}' überein","stimmen mit '{filter}' überein"],
"{dirs} and {files}" : "{dirs} und {files}",
"Favorited" : "Favorisiert",
@@ -73,6 +75,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten",
"A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>",
"A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner wurde <strong>geändert</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen auf Deine <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>",
"A file or folder has been <strong>deleted</strong>" : "Eine Datei oder ein Ordner wurde <strong>gelöscht</strong>",
"A file or folder has been <strong>restored</strong>" : "Eine Datei oder ein Ordner wurde <strong>wiederhergestellt</strong>",
"You created %1$s" : "Du hast %1$s erstellt",
diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json
index 2ff4fae237b..7d75fb70ead 100644
--- a/apps/files/l10n/de.json
+++ b/apps/files/l10n/de.json
@@ -40,10 +40,13 @@
"Delete" : "Löschen",
"Disconnect storage" : "Speicher trennen",
"Unshare" : "Freigabe aufheben",
+ "No permission to delete" : "Keine Berechtigung zum Löschen",
"Download" : "Herunterladen",
"Select" : "Auswählen",
"Pending" : "Ausstehend",
"Unable to determine date" : "Datum konnte nicht ermittelt werden",
+ "This operation is forbidden" : "Diese Operation ist nicht erlaubt",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Dieses Verzeichnis ist nicht verfügbar, bitte überprüfe die Logdateien oder kontaktiere den Administrator",
"Error moving file." : "Fehler beim Verschieben der Datei.",
"Error moving file" : "Fehler beim Verschieben der Datei",
"Error" : "Fehler",
@@ -59,11 +62,10 @@
"_Uploading %n file_::_Uploading %n files_" : ["%n Datei wird hochgeladen","%n Dateien werden hochgeladen"],
"\"{name}\" is an invalid file name." : "»{name}« ist kein gültiger Dateiname.",
"File name cannot be empty." : "Der Dateiname darf nicht leer sein.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Der Speicher von {owner} ist voll, Dateien können nicht mehr aktualisiert oder synchronisiert werden!",
"Your storage is full, files can not be updated or synced anymore!" : "Dein Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Der Speicher von {owner} ist beinahe voll ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Dein Speicher ist fast voll ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Die Verschlüsselung-App ist aktiviert, aber Deine Schlüssel sind nicht initialisiert. Bitte melden Dich nochmals ab und wieder an.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte aktualisiere Dein privates Schlüssel-Passwort, um den Zugriff auf Deine verschlüsselten Dateien wiederherzustellen.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Die Verschlüsselung wurde deaktiviert, jedoch sind Deine Dateien nach wie vor verschlüsselt. Bitte gehe zu Deinen persönlichen Einstellungen, um Deine Dateien zu entschlüsseln.",
"_matches '{filter}'_::_match '{filter}'_" : ["stimmt mit '{filter}' überein","stimmen mit '{filter}' überein"],
"{dirs} and {files}" : "{dirs} und {files}",
"Favorited" : "Favorisiert",
@@ -71,6 +73,7 @@
"An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten",
"A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>",
"A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner wurde <strong>geändert</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen auf Deine <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>",
"A file or folder has been <strong>deleted</strong>" : "Eine Datei oder ein Ordner wurde <strong>gelöscht</strong>",
"A file or folder has been <strong>restored</strong>" : "Eine Datei oder ein Ordner wurde <strong>wiederhergestellt</strong>",
"You created %1$s" : "Du hast %1$s erstellt",
diff --git a/apps/files/l10n/de_AT.js b/apps/files/l10n/de_AT.js
index a94d0486f4b..046e993f7f6 100644
--- a/apps/files/l10n/de_AT.js
+++ b/apps/files/l10n/de_AT.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"files",
{
+ "Unknown error" : "Unbekannter Fehler",
"Files" : "Dateien",
"Delete" : "Löschen",
"Unshare" : "Teilung zurücknehmen",
@@ -16,6 +17,9 @@ OC.L10N.register(
"You deleted %1$s" : "Du hast %1$s gelöscht",
"%2$s deleted %1$s" : "%2$s löschte %1$s",
"Save" : "Speichern",
- "Settings" : "Einstellungen"
+ "Settings" : "Einstellungen",
+ "New folder" : "Neuer Ordner",
+ "Upload" : "Hochladen",
+ "Cancel upload" : "Hochladen abbrechen"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/de_AT.json b/apps/files/l10n/de_AT.json
index 89b99b5d001..b31eb12c490 100644
--- a/apps/files/l10n/de_AT.json
+++ b/apps/files/l10n/de_AT.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Unknown error" : "Unbekannter Fehler",
"Files" : "Dateien",
"Delete" : "Löschen",
"Unshare" : "Teilung zurücknehmen",
@@ -14,6 +15,9 @@
"You deleted %1$s" : "Du hast %1$s gelöscht",
"%2$s deleted %1$s" : "%2$s löschte %1$s",
"Save" : "Speichern",
- "Settings" : "Einstellungen"
+ "Settings" : "Einstellungen",
+ "New folder" : "Neuer Ordner",
+ "Upload" : "Hochladen",
+ "Cancel upload" : "Hochladen abbrechen"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js
index 0dab592ae92..69699135b8f 100644
--- a/apps/files/l10n/de_DE.js
+++ b/apps/files/l10n/de_DE.js
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "Löschen",
"Disconnect storage" : "Speicher trennen",
"Unshare" : "Freigabe aufheben",
+ "No permission to delete" : "Keine Berechtigung zum Löschen",
"Download" : "Herunterladen",
"Select" : "Auswählen",
"Pending" : "Ausstehend",
"Unable to determine date" : "Datum konnte nicht ermittelt werden",
+ "This operation is forbidden" : "Diese Operation ist nicht erlaubt",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Dieses Verzeichnis ist nicht verfügbar, bitte überprüfen Sie die Logdateien oder kontaktieren Sie den Administrator",
"Error moving file." : "Fehler beim Verschieben der Datei.",
"Error moving file" : "Fehler beim Verschieben der Datei",
"Error" : "Fehler",
@@ -61,11 +64,10 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["%n Datei wird hoch geladen","%n Dateien werden hoch geladen"],
"\"{name}\" is an invalid file name." : "„{name}“ ist kein gültiger Dateiname.",
"File name cannot be empty." : "Der Dateiname darf nicht leer sein.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Der Speicher von {owner} ist voll, Dateien können nicht mehr aktualisiert oder synchronisiert werden!",
"Your storage is full, files can not be updated or synced anymore!" : "Ihr Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Der Speicher von {owner} ist beinahe voll ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Ihr Speicher ist fast voll ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte melden Sie sich nochmals ab und wieder an.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselungs-App. Bitte aktualisieren Sie Ihr privates Schlüsselpasswort, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Die Verschlüsselung wurde deaktiviert, jedoch sind Ihre Dateien nach wie vor verschlüsselt. Bitte gehen Sie zu Ihren persönlichen Einstellungen, um Ihre Dateien zu entschlüsseln.",
"_matches '{filter}'_::_match '{filter}'_" : ["stimmt mit '{filter}' überein","stimmen mit '{filter}' überein"],
"{dirs} and {files}" : "{dirs} und {files}",
"Favorited" : "Favorisiert",
@@ -73,6 +75,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten",
"A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>",
"A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner wurde <strong>geändert</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen auf Ihre <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>",
"A file or folder has been <strong>deleted</strong>" : "Eine Datei oder ein Ordner wurde <strong>gelöscht</strong>",
"A file or folder has been <strong>restored</strong>" : "Eine Datei oder ein Ordner wurde <strong>wiederhergestellt</strong>",
"You created %1$s" : "Sie haben %1$s erstellt",
diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json
index cad25b15f5c..2a1e548ec5f 100644
--- a/apps/files/l10n/de_DE.json
+++ b/apps/files/l10n/de_DE.json
@@ -40,10 +40,13 @@
"Delete" : "Löschen",
"Disconnect storage" : "Speicher trennen",
"Unshare" : "Freigabe aufheben",
+ "No permission to delete" : "Keine Berechtigung zum Löschen",
"Download" : "Herunterladen",
"Select" : "Auswählen",
"Pending" : "Ausstehend",
"Unable to determine date" : "Datum konnte nicht ermittelt werden",
+ "This operation is forbidden" : "Diese Operation ist nicht erlaubt",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Dieses Verzeichnis ist nicht verfügbar, bitte überprüfen Sie die Logdateien oder kontaktieren Sie den Administrator",
"Error moving file." : "Fehler beim Verschieben der Datei.",
"Error moving file" : "Fehler beim Verschieben der Datei",
"Error" : "Fehler",
@@ -59,11 +62,10 @@
"_Uploading %n file_::_Uploading %n files_" : ["%n Datei wird hoch geladen","%n Dateien werden hoch geladen"],
"\"{name}\" is an invalid file name." : "„{name}“ ist kein gültiger Dateiname.",
"File name cannot be empty." : "Der Dateiname darf nicht leer sein.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Der Speicher von {owner} ist voll, Dateien können nicht mehr aktualisiert oder synchronisiert werden!",
"Your storage is full, files can not be updated or synced anymore!" : "Ihr Speicher ist voll, daher können keine Dateien mehr aktualisiert oder synchronisiert werden!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Der Speicher von {owner} ist beinahe voll ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Ihr Speicher ist fast voll ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte melden Sie sich nochmals ab und wieder an.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselungs-App. Bitte aktualisieren Sie Ihr privates Schlüsselpasswort, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Die Verschlüsselung wurde deaktiviert, jedoch sind Ihre Dateien nach wie vor verschlüsselt. Bitte gehen Sie zu Ihren persönlichen Einstellungen, um Ihre Dateien zu entschlüsseln.",
"_matches '{filter}'_::_match '{filter}'_" : ["stimmt mit '{filter}' überein","stimmen mit '{filter}' überein"],
"{dirs} and {files}" : "{dirs} und {files}",
"Favorited" : "Favorisiert",
@@ -71,6 +73,7 @@
"An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten",
"A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>",
"A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner wurde <strong>geändert</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen auf Ihre <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>",
"A file or folder has been <strong>deleted</strong>" : "Eine Datei oder ein Ordner wurde <strong>gelöscht</strong>",
"A file or folder has been <strong>restored</strong>" : "Eine Datei oder ein Ordner wurde <strong>wiederhergestellt</strong>",
"You created %1$s" : "Sie haben %1$s erstellt",
diff --git a/apps/files/l10n/el.js b/apps/files/l10n/el.js
index f86e86fcc84..255f70f29e5 100644
--- a/apps/files/l10n/el.js
+++ b/apps/files/l10n/el.js
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "Διαγραφή",
"Disconnect storage" : "Αποσυνδεδεμένος αποθηκευτικός χώρος",
"Unshare" : "Διακοπή διαμοιρασμού",
+ "No permission to delete" : "Δεν έχετε άδεια να το διαγράψετε",
"Download" : "Λήψη",
"Select" : "Επιλογή",
"Pending" : "Εκκρεμεί",
"Unable to determine date" : "Αδυναμία προσδιορισμού ημερομηνίας ",
+ "This operation is forbidden" : "Αυτή η ενέργεια απαγορεύεται",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Ο κατάλογος δεν είναι διαθέσιμος, παρακαλώ ελέγξτε τα αρχεία καταγραφής ή επικοινωνήστε με το διαχειριστή",
"Error moving file." : "Σφάλμα κατά τη μετακίνηση του αρχείου.",
"Error moving file" : "Σφάλμα κατά τη μετακίνηση του αρχείου",
"Error" : "Σφάλμα",
@@ -61,11 +64,10 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["Ανέβασμα %n αρχείου","Ανέβασμα %n αρχείων"],
"\"{name}\" is an invalid file name." : "Το \"{name}\" είναι μη έγκυρο όνομα αρχείου.",
"File name cannot be empty." : "Το όνομα αρχείου δεν μπορεί να είναι κενό.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Ο αποθηκευτικός χώρος του {owner} είναι πλήρης, τα αρχεία δεν δύναται να ενημερωθούν ή να συγχρονίσουν!",
"Your storage is full, files can not be updated or synced anymore!" : "Ο αποθηκευτικός σας χώρος είναι γεμάτος, τα αρχεία δεν μπορούν να ενημερωθούν ή να συγχρονιστούν πια!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Ο αποθηκευτικός χώρος του {owner} είναι σχεδόν πλήρης ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Ο αποθηκευτικός χώρος είναι σχεδόν γεμάτος ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Άκυρο προσωπικό κλειδί για την εφαρμογή κρυπτογράφησης. Παρακαλώ ενημερώστε τον κωδικό του προσωπικού κλειδίου σας στις προσωπικές ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Η κρυπτογράφηση απενεργοποιήθηκε, αλλά τα αρχεία σας είναι ακόμα κρυπτογραφημένα. Παρακαλούμε απενεργοποιήσετε την κρυπτογράφηση αρχείων από τις προσωπικές σας ρυθμίσεις",
"_matches '{filter}'_::_match '{filter}'_" : ["ταιριάζουν '{filter}' ","ταιριάζουν '{filter}'"],
"{dirs} and {files}" : "{Κατάλογοι αρχείων} και {αρχεία}",
"Favorited" : "Προτιμώμενα",
@@ -73,6 +75,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "Ένα σφάλμα προέκυψε κατά τη διάρκεια ενημέρωσης των ετικετών",
"A new file or folder has been <strong>created</strong>" : "Ένα νέο αρχείο ή κατάλογος έχουν <strong>δημιουργηθεί</strong>",
"A file or folder has been <strong>changed</strong>" : "Ένα αρχείο ή κατάλογος έχουν <strong>αλλάξει</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Βάλτε όριο στις ειδοποιήσεις για τη δημιουργία και αλλαγές στα <strong>αγαπημένα σας αρχεία</strong> <em>(Μόνο Stream)</em>",
"A file or folder has been <strong>deleted</strong>" : "Ένα αρχείο ή κατάλογος έχουν <strong>διαγραφεί</strong>",
"A file or folder has been <strong>restored</strong>" : "Ένα αρχείο ή φάκελος <strong>επαναφέρθηκε</ strong>",
"You created %1$s" : "Δημιουργήσατε %1$s",
diff --git a/apps/files/l10n/el.json b/apps/files/l10n/el.json
index b864d5e3276..2b72213e533 100644
--- a/apps/files/l10n/el.json
+++ b/apps/files/l10n/el.json
@@ -40,10 +40,13 @@
"Delete" : "Διαγραφή",
"Disconnect storage" : "Αποσυνδεδεμένος αποθηκευτικός χώρος",
"Unshare" : "Διακοπή διαμοιρασμού",
+ "No permission to delete" : "Δεν έχετε άδεια να το διαγράψετε",
"Download" : "Λήψη",
"Select" : "Επιλογή",
"Pending" : "Εκκρεμεί",
"Unable to determine date" : "Αδυναμία προσδιορισμού ημερομηνίας ",
+ "This operation is forbidden" : "Αυτή η ενέργεια απαγορεύεται",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Ο κατάλογος δεν είναι διαθέσιμος, παρακαλώ ελέγξτε τα αρχεία καταγραφής ή επικοινωνήστε με το διαχειριστή",
"Error moving file." : "Σφάλμα κατά τη μετακίνηση του αρχείου.",
"Error moving file" : "Σφάλμα κατά τη μετακίνηση του αρχείου",
"Error" : "Σφάλμα",
@@ -59,11 +62,10 @@
"_Uploading %n file_::_Uploading %n files_" : ["Ανέβασμα %n αρχείου","Ανέβασμα %n αρχείων"],
"\"{name}\" is an invalid file name." : "Το \"{name}\" είναι μη έγκυρο όνομα αρχείου.",
"File name cannot be empty." : "Το όνομα αρχείου δεν μπορεί να είναι κενό.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Ο αποθηκευτικός χώρος του {owner} είναι πλήρης, τα αρχεία δεν δύναται να ενημερωθούν ή να συγχρονίσουν!",
"Your storage is full, files can not be updated or synced anymore!" : "Ο αποθηκευτικός σας χώρος είναι γεμάτος, τα αρχεία δεν μπορούν να ενημερωθούν ή να συγχρονιστούν πια!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Ο αποθηκευτικός χώρος του {owner} είναι σχεδόν πλήρης ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Ο αποθηκευτικός χώρος είναι σχεδόν γεμάτος ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Άκυρο προσωπικό κλειδί για την εφαρμογή κρυπτογράφησης. Παρακαλώ ενημερώστε τον κωδικό του προσωπικού κλειδίου σας στις προσωπικές ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Η κρυπτογράφηση απενεργοποιήθηκε, αλλά τα αρχεία σας είναι ακόμα κρυπτογραφημένα. Παρακαλούμε απενεργοποιήσετε την κρυπτογράφηση αρχείων από τις προσωπικές σας ρυθμίσεις",
"_matches '{filter}'_::_match '{filter}'_" : ["ταιριάζουν '{filter}' ","ταιριάζουν '{filter}'"],
"{dirs} and {files}" : "{Κατάλογοι αρχείων} και {αρχεία}",
"Favorited" : "Προτιμώμενα",
@@ -71,6 +73,7 @@
"An error occurred while trying to update the tags" : "Ένα σφάλμα προέκυψε κατά τη διάρκεια ενημέρωσης των ετικετών",
"A new file or folder has been <strong>created</strong>" : "Ένα νέο αρχείο ή κατάλογος έχουν <strong>δημιουργηθεί</strong>",
"A file or folder has been <strong>changed</strong>" : "Ένα αρχείο ή κατάλογος έχουν <strong>αλλάξει</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Βάλτε όριο στις ειδοποιήσεις για τη δημιουργία και αλλαγές στα <strong>αγαπημένα σας αρχεία</strong> <em>(Μόνο Stream)</em>",
"A file or folder has been <strong>deleted</strong>" : "Ένα αρχείο ή κατάλογος έχουν <strong>διαγραφεί</strong>",
"A file or folder has been <strong>restored</strong>" : "Ένα αρχείο ή φάκελος <strong>επαναφέρθηκε</ strong>",
"You created %1$s" : "Δημιουργήσατε %1$s",
diff --git a/apps/files/l10n/en_GB.js b/apps/files/l10n/en_GB.js
index d2f563d1568..4fa680b5c7f 100644
--- a/apps/files/l10n/en_GB.js
+++ b/apps/files/l10n/en_GB.js
@@ -42,6 +42,7 @@ OC.L10N.register(
"Delete" : "Delete",
"Disconnect storage" : "Disconnect storage",
"Unshare" : "Unshare",
+ "No permission to delete" : "No permission to delete",
"Download" : "Download",
"Select" : "Select",
"Pending" : "Pending",
@@ -63,9 +64,6 @@ OC.L10N.register(
"File name cannot be empty." : "File name cannot be empty.",
"Your storage is full, files can not be updated or synced anymore!" : "Your storage is full, files can not be updated or synced anymore!",
"Your storage is almost full ({usedSpacePercent}%)" : "Your storage is almost full ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Encryption App is enabled but your keys are not initialised, please log-out and log-in again",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files.",
"_matches '{filter}'_::_match '{filter}'_" : ["matches '{filter}'","match '{filter}'"],
"{dirs} and {files}" : "{dirs} and {files}",
"Favorited" : "Favourited",
@@ -73,6 +71,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "An error occurred whilst trying to update the tags",
"A new file or folder has been <strong>created</strong>" : "A new file or folder has been <strong>created</strong>",
"A file or folder has been <strong>changed</strong>" : "A file or folder has been <strong>changed</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limit notifications about creation and changes to your <strong>favourite files</strong> <em>(Stream only)</em>",
"A file or folder has been <strong>deleted</strong>" : "A file or folder has been <strong>deleted</strong>",
"A file or folder has been <strong>restored</strong>" : "A file or folder has been <strong>restored</strong>",
"You created %1$s" : "You created %1$s",
@@ -102,6 +101,7 @@ OC.L10N.register(
"Folder" : "Folder",
"Upload" : "Upload",
"Cancel upload" : "Cancel upload",
+ "No files in here" : "No files in here",
"Upload some content or sync with your devices!" : "Upload some content or sync with your devices!",
"No entries found in this folder" : "No entries found in this folder",
"Select all" : "Select all",
diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json
index 7ee7b36d2e5..417272a5cdb 100644
--- a/apps/files/l10n/en_GB.json
+++ b/apps/files/l10n/en_GB.json
@@ -40,6 +40,7 @@
"Delete" : "Delete",
"Disconnect storage" : "Disconnect storage",
"Unshare" : "Unshare",
+ "No permission to delete" : "No permission to delete",
"Download" : "Download",
"Select" : "Select",
"Pending" : "Pending",
@@ -61,9 +62,6 @@
"File name cannot be empty." : "File name cannot be empty.",
"Your storage is full, files can not be updated or synced anymore!" : "Your storage is full, files can not be updated or synced anymore!",
"Your storage is almost full ({usedSpacePercent}%)" : "Your storage is almost full ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Encryption App is enabled but your keys are not initialised, please log-out and log-in again",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files.",
"_matches '{filter}'_::_match '{filter}'_" : ["matches '{filter}'","match '{filter}'"],
"{dirs} and {files}" : "{dirs} and {files}",
"Favorited" : "Favourited",
@@ -71,6 +69,7 @@
"An error occurred while trying to update the tags" : "An error occurred whilst trying to update the tags",
"A new file or folder has been <strong>created</strong>" : "A new file or folder has been <strong>created</strong>",
"A file or folder has been <strong>changed</strong>" : "A file or folder has been <strong>changed</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limit notifications about creation and changes to your <strong>favourite files</strong> <em>(Stream only)</em>",
"A file or folder has been <strong>deleted</strong>" : "A file or folder has been <strong>deleted</strong>",
"A file or folder has been <strong>restored</strong>" : "A file or folder has been <strong>restored</strong>",
"You created %1$s" : "You created %1$s",
@@ -100,6 +99,7 @@
"Folder" : "Folder",
"Upload" : "Upload",
"Cancel upload" : "Cancel upload",
+ "No files in here" : "No files in here",
"Upload some content or sync with your devices!" : "Upload some content or sync with your devices!",
"No entries found in this folder" : "No entries found in this folder",
"Select all" : "Select all",
diff --git a/apps/files/l10n/eo.js b/apps/files/l10n/eo.js
index a7523c14ced..56c4d23d903 100644
--- a/apps/files/l10n/eo.js
+++ b/apps/files/l10n/eo.js
@@ -21,6 +21,7 @@ OC.L10N.register(
"Upload failed. Could not get file info." : "La alŝuto malsukcesis. Ne povis ekhaviĝi informo pri dosiero.",
"Invalid directory." : "Nevalida dosierujo.",
"Files" : "Dosieroj",
+ "All files" : "Ĉiuj dosieroj",
"Favorites" : "Favoratoj",
"Home" : "Hejmo",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Ne povis alŝutiĝi {filename} ĉar ĝi estas dosierujo aŭ ĝi havas 0 duumokojn",
@@ -53,10 +54,12 @@ OC.L10N.register(
"Favorite" : "Favorato",
"You created %1$s" : "Vi kreis %1$s",
"%2$s created %1$s" : "%2$s kreis %1$s",
+ "%1$s was created in a public folder" : "%1$s kreiĝis en publika dosierujo",
"You changed %1$s" : "Vi ŝanĝis %1$s",
"%2$s changed %1$s" : "%2$s ŝanĝis %1$s",
"You deleted %1$s" : "Vi forigis %1$s",
"%2$s deleted %1$s" : "%2$s forigis %1$s",
+ "%s could not be renamed as it has been deleted" : "%s ne povis alinomiĝi ĉar ĝi forigitis",
"%s could not be renamed" : "%s ne povis alinomiĝi",
"Upload (max. %s)" : "Alŝuti (maks. %s)",
"File handling" : "Dosieradministro",
@@ -65,12 +68,16 @@ OC.L10N.register(
"Save" : "Konservi",
"Settings" : "Agordo",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Uzu ĉi tiun adreson por <a href=\"%s\" target=\"_blank\">aliri viajn Dosierojn per WebDAV</a>",
"New" : "Nova",
+ "New text file" : "Nova tekstodosiero",
"Text file" : "Tekstodosiero",
"New folder" : "Nova dosierujo",
"Folder" : "Dosierujo",
"Upload" : "Alŝuti",
"Cancel upload" : "Nuligi alŝuton",
+ "No files in here" : "Neniu dosiero estas ĉi tie",
+ "Select all" : "Elekti ĉion",
"Upload too large" : "Alŝuto tro larĝa",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "La dosieroj, kiujn vi provas alŝuti, transpasas la maksimuman grandon por dosieralŝutoj en ĉi tiu servilo.",
"Files are being scanned, please wait." : "Dosieroj estas skanataj, bonvolu atendi."
diff --git a/apps/files/l10n/eo.json b/apps/files/l10n/eo.json
index ccde2ad6be1..e3cebced2f1 100644
--- a/apps/files/l10n/eo.json
+++ b/apps/files/l10n/eo.json
@@ -19,6 +19,7 @@
"Upload failed. Could not get file info." : "La alŝuto malsukcesis. Ne povis ekhaviĝi informo pri dosiero.",
"Invalid directory." : "Nevalida dosierujo.",
"Files" : "Dosieroj",
+ "All files" : "Ĉiuj dosieroj",
"Favorites" : "Favoratoj",
"Home" : "Hejmo",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Ne povis alŝutiĝi {filename} ĉar ĝi estas dosierujo aŭ ĝi havas 0 duumokojn",
@@ -51,10 +52,12 @@
"Favorite" : "Favorato",
"You created %1$s" : "Vi kreis %1$s",
"%2$s created %1$s" : "%2$s kreis %1$s",
+ "%1$s was created in a public folder" : "%1$s kreiĝis en publika dosierujo",
"You changed %1$s" : "Vi ŝanĝis %1$s",
"%2$s changed %1$s" : "%2$s ŝanĝis %1$s",
"You deleted %1$s" : "Vi forigis %1$s",
"%2$s deleted %1$s" : "%2$s forigis %1$s",
+ "%s could not be renamed as it has been deleted" : "%s ne povis alinomiĝi ĉar ĝi forigitis",
"%s could not be renamed" : "%s ne povis alinomiĝi",
"Upload (max. %s)" : "Alŝuti (maks. %s)",
"File handling" : "Dosieradministro",
@@ -63,12 +66,16 @@
"Save" : "Konservi",
"Settings" : "Agordo",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Uzu ĉi tiun adreson por <a href=\"%s\" target=\"_blank\">aliri viajn Dosierojn per WebDAV</a>",
"New" : "Nova",
+ "New text file" : "Nova tekstodosiero",
"Text file" : "Tekstodosiero",
"New folder" : "Nova dosierujo",
"Folder" : "Dosierujo",
"Upload" : "Alŝuti",
"Cancel upload" : "Nuligi alŝuton",
+ "No files in here" : "Neniu dosiero estas ĉi tie",
+ "Select all" : "Elekti ĉion",
"Upload too large" : "Alŝuto tro larĝa",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "La dosieroj, kiujn vi provas alŝuti, transpasas la maksimuman grandon por dosieralŝutoj en ĉi tiu servilo.",
"Files are being scanned, please wait." : "Dosieroj estas skanataj, bonvolu atendi."
diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js
index 37e523529f5..c7409a25df4 100644
--- a/apps/files/l10n/es.js
+++ b/apps/files/l10n/es.js
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "Eliminar",
"Disconnect storage" : "Desconectar almacenamiento",
"Unshare" : "Dejar de compartir",
+ "No permission to delete" : "Permisos insuficientes para borrar",
"Download" : "Descargar",
"Select" : "Seleccionar",
"Pending" : "Pendiente",
"Unable to determine date" : "No se pudo determinar la fecha",
+ "This operation is forbidden" : "Esta operación está prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Esta carpeta no está disponible, por favor verifique los registros o contáctese con el administrador",
"Error moving file." : "Error al mover el archivo.",
"Error moving file" : "Error moviendo archivo",
"Error" : "Error",
@@ -61,18 +64,18 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Subiendo %n archivos"],
"\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo inválido.",
"File name cannot be empty." : "El nombre de archivo no puede estar vacío.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "El almacén de {owner} está repleto, ¡los archivos no se actualizarán ni sincronizarán más!",
"Your storage is full, files can not be updated or synced anymore!" : "Su almacenamiento está lleno, ¡los archivos no se actualizarán ni sincronizarán más!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "El almacén de {owner} está casi lleno en un ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Su almacenamiento está casi lleno ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la app de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "El cifrado ha sido deshabilitado pero tus archivos permanecen cifrados. Por favor, ve a tus ajustes personales para descifrar tus archivos.",
"_matches '{filter}'_::_match '{filter}'_" : ["coincidencias '{filter}'","coincidencia '{filter}'"],
"{dirs} and {files}" : "{dirs} y {files}",
- "Favorited" : "Agregado a favoritos",
+ "Favorited" : "Agregado a Favoritos",
"Favorite" : "Favorito",
"An error occurred while trying to update the tags" : "Se produjo un error al tratar de actualizar las etiquetas",
"A new file or folder has been <strong>created</strong>" : "Se ha <strong>creado</strong> un nuevo archivo o carpeta",
"A file or folder has been <strong>changed</strong>" : "Se ha <strong>modificado</strong> un archivo o carpeta",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitar las notificaiones acerca de la creación y cambios de sus <strong>archivos favoritos</strong><em>(Stream only)</em>",
"A file or folder has been <strong>deleted</strong>" : "Se ha <strong>eliminado</strong> un archivo o carpeta",
"A file or folder has been <strong>restored</strong>" : "Se ha <strong>restaurado</strong> un archivo o carpeta",
"You created %1$s" : "Ha creado %1$s",
diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json
index 76226b54948..fc7a12fdf04 100644
--- a/apps/files/l10n/es.json
+++ b/apps/files/l10n/es.json
@@ -40,10 +40,13 @@
"Delete" : "Eliminar",
"Disconnect storage" : "Desconectar almacenamiento",
"Unshare" : "Dejar de compartir",
+ "No permission to delete" : "Permisos insuficientes para borrar",
"Download" : "Descargar",
"Select" : "Seleccionar",
"Pending" : "Pendiente",
"Unable to determine date" : "No se pudo determinar la fecha",
+ "This operation is forbidden" : "Esta operación está prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Esta carpeta no está disponible, por favor verifique los registros o contáctese con el administrador",
"Error moving file." : "Error al mover el archivo.",
"Error moving file" : "Error moviendo archivo",
"Error" : "Error",
@@ -59,18 +62,18 @@
"_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Subiendo %n archivos"],
"\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo inválido.",
"File name cannot be empty." : "El nombre de archivo no puede estar vacío.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "El almacén de {owner} está repleto, ¡los archivos no se actualizarán ni sincronizarán más!",
"Your storage is full, files can not be updated or synced anymore!" : "Su almacenamiento está lleno, ¡los archivos no se actualizarán ni sincronizarán más!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "El almacén de {owner} está casi lleno en un ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Su almacenamiento está casi lleno ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la app de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "El cifrado ha sido deshabilitado pero tus archivos permanecen cifrados. Por favor, ve a tus ajustes personales para descifrar tus archivos.",
"_matches '{filter}'_::_match '{filter}'_" : ["coincidencias '{filter}'","coincidencia '{filter}'"],
"{dirs} and {files}" : "{dirs} y {files}",
- "Favorited" : "Agregado a favoritos",
+ "Favorited" : "Agregado a Favoritos",
"Favorite" : "Favorito",
"An error occurred while trying to update the tags" : "Se produjo un error al tratar de actualizar las etiquetas",
"A new file or folder has been <strong>created</strong>" : "Se ha <strong>creado</strong> un nuevo archivo o carpeta",
"A file or folder has been <strong>changed</strong>" : "Se ha <strong>modificado</strong> un archivo o carpeta",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitar las notificaiones acerca de la creación y cambios de sus <strong>archivos favoritos</strong><em>(Stream only)</em>",
"A file or folder has been <strong>deleted</strong>" : "Se ha <strong>eliminado</strong> un archivo o carpeta",
"A file or folder has been <strong>restored</strong>" : "Se ha <strong>restaurado</strong> un archivo o carpeta",
"You created %1$s" : "Ha creado %1$s",
diff --git a/apps/files/l10n/es_AR.js b/apps/files/l10n/es_AR.js
index ea56123f11d..f4d74e553ae 100644
--- a/apps/files/l10n/es_AR.js
+++ b/apps/files/l10n/es_AR.js
@@ -51,9 +51,6 @@ OC.L10N.register(
"File name cannot be empty." : "El nombre del archivo no puede quedar vacío.",
"Your storage is full, files can not be updated or synced anymore!" : "El almacenamiento está lleno, los archivos no se pueden seguir actualizando ni sincronizando",
"Your storage is almost full ({usedSpacePercent}%)" : "El almacenamiento está casi lleno ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encriptación está habilitada pero las llaves no fueron inicializadas, por favor termine y vuelva a iniciar la sesión",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Llave privada inválida para la aplicación de encriptación. Por favor actualice la clave de la llave privada en las configuraciones personales para recobrar el acceso a sus archivos encriptados.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "El proceso de cifrado se ha desactivado, pero los archivos aún están encriptados. Por favor, vaya a la configuración personal para descifrar los archivos.",
"{dirs} and {files}" : "{carpetas} y {archivos}",
"Favorite" : "Favorito",
"A new file or folder has been <strong>created</strong>" : "Un archivo o carpeta ha sido <strong>creado</strong>",
diff --git a/apps/files/l10n/es_AR.json b/apps/files/l10n/es_AR.json
index 33df652d756..376f24e3636 100644
--- a/apps/files/l10n/es_AR.json
+++ b/apps/files/l10n/es_AR.json
@@ -49,9 +49,6 @@
"File name cannot be empty." : "El nombre del archivo no puede quedar vacío.",
"Your storage is full, files can not be updated or synced anymore!" : "El almacenamiento está lleno, los archivos no se pueden seguir actualizando ni sincronizando",
"Your storage is almost full ({usedSpacePercent}%)" : "El almacenamiento está casi lleno ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encriptación está habilitada pero las llaves no fueron inicializadas, por favor termine y vuelva a iniciar la sesión",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Llave privada inválida para la aplicación de encriptación. Por favor actualice la clave de la llave privada en las configuraciones personales para recobrar el acceso a sus archivos encriptados.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "El proceso de cifrado se ha desactivado, pero los archivos aún están encriptados. Por favor, vaya a la configuración personal para descifrar los archivos.",
"{dirs} and {files}" : "{carpetas} y {archivos}",
"Favorite" : "Favorito",
"A new file or folder has been <strong>created</strong>" : "Un archivo o carpeta ha sido <strong>creado</strong>",
diff --git a/apps/files/l10n/es_MX.js b/apps/files/l10n/es_MX.js
index 4ada37134ab..c621aa33290 100644
--- a/apps/files/l10n/es_MX.js
+++ b/apps/files/l10n/es_MX.js
@@ -50,9 +50,6 @@ OC.L10N.register(
"File name cannot be empty." : "El nombre de archivo no puede estar vacío.",
"Your storage is full, files can not be updated or synced anymore!" : "Su almacenamiento está lleno, ¡los archivos no se actualizarán ni sincronizarán más!",
"Your storage is almost full ({usedSpacePercent}%)" : "Su almacenamiento está casi lleno ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la aplicación de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "El cifrado ha sido deshabilitado pero tus archivos permanecen cifrados. Por favor, ve a tus ajustes personales para descifrar tus archivos.",
"{dirs} and {files}" : "{dirs} y {files}",
"Favorite" : "Favorito",
"%s could not be renamed" : "%s no pudo ser renombrado",
diff --git a/apps/files/l10n/es_MX.json b/apps/files/l10n/es_MX.json
index 760fc042998..ae5c152af2d 100644
--- a/apps/files/l10n/es_MX.json
+++ b/apps/files/l10n/es_MX.json
@@ -48,9 +48,6 @@
"File name cannot be empty." : "El nombre de archivo no puede estar vacío.",
"Your storage is full, files can not be updated or synced anymore!" : "Su almacenamiento está lleno, ¡los archivos no se actualizarán ni sincronizarán más!",
"Your storage is almost full ({usedSpacePercent}%)" : "Su almacenamiento está casi lleno ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la aplicación de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "El cifrado ha sido deshabilitado pero tus archivos permanecen cifrados. Por favor, ve a tus ajustes personales para descifrar tus archivos.",
"{dirs} and {files}" : "{dirs} y {files}",
"Favorite" : "Favorito",
"%s could not be renamed" : "%s no pudo ser renombrado",
diff --git a/apps/files/l10n/et_EE.js b/apps/files/l10n/et_EE.js
index 895b3812f0e..bf9e8574c28 100644
--- a/apps/files/l10n/et_EE.js
+++ b/apps/files/l10n/et_EE.js
@@ -42,9 +42,13 @@ OC.L10N.register(
"Delete" : "Kustuta",
"Disconnect storage" : "Ühenda andmehoidla lahti.",
"Unshare" : "Lõpeta jagamine",
+ "No permission to delete" : "Kustutamiseks pole õigusi",
"Download" : "Lae alla",
"Select" : "Vali",
"Pending" : "Ootel",
+ "Unable to determine date" : "Kuupäeva tuvastamine ei õnnestunud",
+ "This operation is forbidden" : "See toiming on keelatud",
+ "This directory is unavailable, please check the logs or contact the administrator" : "See kaust pole saadaval. Palun kontrolli logifaile või võta ühendust administraatoriga",
"Error moving file." : "Viga faili liigutamisel.",
"Error moving file" : "Viga faili eemaldamisel",
"Error" : "Viga",
@@ -59,13 +63,13 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["Laadin üles %n faili","Laadin üles %n faili"],
"\"{name}\" is an invalid file name." : "\"{name}\" on vigane failinimi.",
"File name cannot be empty." : "Faili nimi ei saa olla tühi.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} andmemaht on täis! Faile ei uuendata ega sünkroniseerita!",
"Your storage is full, files can not be updated or synced anymore!" : "Sinu andmemaht on täis! Faile ei uuendata ega sünkroniseerita!",
"Your storage is almost full ({usedSpacePercent}%)" : "Su andmemaht on peaaegu täis ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krüpteerimisrakend on lubatud, kuid võtmeid pole lähtestatud. Palun logi välja ning uuesti sisse.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Vigane Krüpteerimisrakendi privaatvõti . Palun uuenda oma privaatse võtme parool oma personaasete seadete all taastamaks ligipääsu oma krüpteeritud failidele.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Krüpteering on keelatud, kuid sinu failid on endiselt krüpteeritud. Palun vaata oma personaalseid seadeid oma failide dekrüpteerimiseks.",
"{dirs} and {files}" : "{dirs} ja {files}",
+ "Favorited" : "Lemmikud",
"Favorite" : "Lemmik",
+ "An error occurred while trying to update the tags" : "Siltide uuendamisel tekkis tõrge",
"A new file or folder has been <strong>created</strong>" : "Uus fail või kataloog on <strong>loodud</strong>",
"A file or folder has been <strong>changed</strong>" : "Fail või kataloog on <strong>muudetud</strong>",
"A file or folder has been <strong>deleted</strong>" : "Fail või kataloog on <strong>kustutatud</strong>",
@@ -86,6 +90,7 @@ OC.L10N.register(
"Maximum upload size" : "Maksimaalne üleslaadimise suurus",
"max. possible: " : "maks. võimalik: ",
"Save" : "Salvesta",
+ "Can not be edited from here due to insufficient permissions." : "Ei saa õiguste puudumise tõttu muuta.",
"Settings" : "Seaded",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Kasuta seda aadressi <a href=\"%s\" target=\"_blank\">oma failidele ligipääsuks WebDAV kaudu</a>",
@@ -96,9 +101,15 @@ OC.L10N.register(
"Folder" : "Kaust",
"Upload" : "Lae üles",
"Cancel upload" : "Tühista üleslaadimine",
+ "No files in here" : "Siin ei ole faile",
+ "Upload some content or sync with your devices!" : "Laadi sisu üles või süngi oma seadmetega!",
+ "No entries found in this folder" : "Selles kaustas ei leitud kirjeid",
+ "Select all" : "Vali kõik",
"Upload too large" : "Üleslaadimine on liiga suur",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Failid, mida sa proovid üles laadida, ületab serveri poolt üleslaetavatele failidele määratud maksimaalse suuruse.",
"Files are being scanned, please wait." : "Faile skannitakse, palun oota.",
- "Currently scanning" : "Praegu skännimisel"
+ "Currently scanning" : "Praegu skännimisel",
+ "No favorites" : "Lemmikuid pole",
+ "Files and folders you mark as favorite will show up here" : "Siin kuvatakse faile ja kaustasid, mille oled märkinud lemmikuteks"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/et_EE.json b/apps/files/l10n/et_EE.json
index 3ff409f1f72..40fa7efca6b 100644
--- a/apps/files/l10n/et_EE.json
+++ b/apps/files/l10n/et_EE.json
@@ -40,9 +40,13 @@
"Delete" : "Kustuta",
"Disconnect storage" : "Ühenda andmehoidla lahti.",
"Unshare" : "Lõpeta jagamine",
+ "No permission to delete" : "Kustutamiseks pole õigusi",
"Download" : "Lae alla",
"Select" : "Vali",
"Pending" : "Ootel",
+ "Unable to determine date" : "Kuupäeva tuvastamine ei õnnestunud",
+ "This operation is forbidden" : "See toiming on keelatud",
+ "This directory is unavailable, please check the logs or contact the administrator" : "See kaust pole saadaval. Palun kontrolli logifaile või võta ühendust administraatoriga",
"Error moving file." : "Viga faili liigutamisel.",
"Error moving file" : "Viga faili eemaldamisel",
"Error" : "Viga",
@@ -57,13 +61,13 @@
"_Uploading %n file_::_Uploading %n files_" : ["Laadin üles %n faili","Laadin üles %n faili"],
"\"{name}\" is an invalid file name." : "\"{name}\" on vigane failinimi.",
"File name cannot be empty." : "Faili nimi ei saa olla tühi.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} andmemaht on täis! Faile ei uuendata ega sünkroniseerita!",
"Your storage is full, files can not be updated or synced anymore!" : "Sinu andmemaht on täis! Faile ei uuendata ega sünkroniseerita!",
"Your storage is almost full ({usedSpacePercent}%)" : "Su andmemaht on peaaegu täis ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krüpteerimisrakend on lubatud, kuid võtmeid pole lähtestatud. Palun logi välja ning uuesti sisse.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Vigane Krüpteerimisrakendi privaatvõti . Palun uuenda oma privaatse võtme parool oma personaasete seadete all taastamaks ligipääsu oma krüpteeritud failidele.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Krüpteering on keelatud, kuid sinu failid on endiselt krüpteeritud. Palun vaata oma personaalseid seadeid oma failide dekrüpteerimiseks.",
"{dirs} and {files}" : "{dirs} ja {files}",
+ "Favorited" : "Lemmikud",
"Favorite" : "Lemmik",
+ "An error occurred while trying to update the tags" : "Siltide uuendamisel tekkis tõrge",
"A new file or folder has been <strong>created</strong>" : "Uus fail või kataloog on <strong>loodud</strong>",
"A file or folder has been <strong>changed</strong>" : "Fail või kataloog on <strong>muudetud</strong>",
"A file or folder has been <strong>deleted</strong>" : "Fail või kataloog on <strong>kustutatud</strong>",
@@ -84,6 +88,7 @@
"Maximum upload size" : "Maksimaalne üleslaadimise suurus",
"max. possible: " : "maks. võimalik: ",
"Save" : "Salvesta",
+ "Can not be edited from here due to insufficient permissions." : "Ei saa õiguste puudumise tõttu muuta.",
"Settings" : "Seaded",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Kasuta seda aadressi <a href=\"%s\" target=\"_blank\">oma failidele ligipääsuks WebDAV kaudu</a>",
@@ -94,9 +99,15 @@
"Folder" : "Kaust",
"Upload" : "Lae üles",
"Cancel upload" : "Tühista üleslaadimine",
+ "No files in here" : "Siin ei ole faile",
+ "Upload some content or sync with your devices!" : "Laadi sisu üles või süngi oma seadmetega!",
+ "No entries found in this folder" : "Selles kaustas ei leitud kirjeid",
+ "Select all" : "Vali kõik",
"Upload too large" : "Üleslaadimine on liiga suur",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Failid, mida sa proovid üles laadida, ületab serveri poolt üleslaetavatele failidele määratud maksimaalse suuruse.",
"Files are being scanned, please wait." : "Faile skannitakse, palun oota.",
- "Currently scanning" : "Praegu skännimisel"
+ "Currently scanning" : "Praegu skännimisel",
+ "No favorites" : "Lemmikuid pole",
+ "Files and folders you mark as favorite will show up here" : "Siin kuvatakse faile ja kaustasid, mille oled märkinud lemmikuteks"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/eu.js b/apps/files/l10n/eu.js
index 899f4f604f5..f54385bd3c6 100644
--- a/apps/files/l10n/eu.js
+++ b/apps/files/l10n/eu.js
@@ -63,9 +63,6 @@ OC.L10N.register(
"File name cannot be empty." : "Fitxategi izena ezin da hutsa izan.",
"Your storage is full, files can not be updated or synced anymore!" : "Zure biltegiratzea beterik dago, ezingo duzu aurrerantzean fitxategirik igo edo sinkronizatu!",
"Your storage is almost full ({usedSpacePercent}%)" : "Zure biltegiratzea nahiko beterik dago (%{usedSpacePercent})",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio aplikazioa gaituta dago baina zure gakoak ez daude konfiguratuta, mesedez saioa bukatu eta berriro hasi",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Enkriptazio aplikaziorako gako pribatu okerra. Mesedez eguneratu zure gako pribatuaren pasahitza zure ezarpen pertsonaletan zure enkriptatuko fitxategietarako sarrera berreskuratzeko.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Enkriptazioa desgaitua izan da baina zure fitxategiak oraindik enkriptatuta daude. Mesedez jo zure ezarpen pertsonaletara zure fitxategiak dekodifikatzeko.",
"{dirs} and {files}" : "{dirs} eta {files}",
"Favorited" : "Gogokoa",
"Favorite" : "Gogokoa",
diff --git a/apps/files/l10n/eu.json b/apps/files/l10n/eu.json
index b798e9032a8..5eb3ede3e1f 100644
--- a/apps/files/l10n/eu.json
+++ b/apps/files/l10n/eu.json
@@ -61,9 +61,6 @@
"File name cannot be empty." : "Fitxategi izena ezin da hutsa izan.",
"Your storage is full, files can not be updated or synced anymore!" : "Zure biltegiratzea beterik dago, ezingo duzu aurrerantzean fitxategirik igo edo sinkronizatu!",
"Your storage is almost full ({usedSpacePercent}%)" : "Zure biltegiratzea nahiko beterik dago (%{usedSpacePercent})",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio aplikazioa gaituta dago baina zure gakoak ez daude konfiguratuta, mesedez saioa bukatu eta berriro hasi",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Enkriptazio aplikaziorako gako pribatu okerra. Mesedez eguneratu zure gako pribatuaren pasahitza zure ezarpen pertsonaletan zure enkriptatuko fitxategietarako sarrera berreskuratzeko.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Enkriptazioa desgaitua izan da baina zure fitxategiak oraindik enkriptatuta daude. Mesedez jo zure ezarpen pertsonaletara zure fitxategiak dekodifikatzeko.",
"{dirs} and {files}" : "{dirs} eta {files}",
"Favorited" : "Gogokoa",
"Favorite" : "Gogokoa",
diff --git a/apps/files/l10n/fi_FI.js b/apps/files/l10n/fi_FI.js
index 66c0f37ab65..abeb0b26b23 100644
--- a/apps/files/l10n/fi_FI.js
+++ b/apps/files/l10n/fi_FI.js
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "Poista",
"Disconnect storage" : "Katkaise yhteys tallennustilaan",
"Unshare" : "Peru jakaminen",
+ "No permission to delete" : "Ei oikeutta poistaa",
"Download" : "Lataa",
"Select" : "Valitse",
"Pending" : "Odottaa",
"Unable to determine date" : "Päivämäärän määrittäminen epäonnistui",
+ "This operation is forbidden" : "Tämä toiminto on kielletty",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Hakemisto ei ole käytettävissä. Tarkista lokit tai ole yhteydessä ylläpitoon.",
"Error moving file." : "Virhe tiedostoa siirrettäessä.",
"Error moving file" : "Virhe tiedostoa siirrettäessä",
"Error" : "Virhe",
@@ -61,11 +64,10 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["Lähetetään %n tiedosto","Lähetetään %n tiedostoa"],
"\"{name}\" is an invalid file name." : "\"{name}\" on virheellinen tiedostonimi.",
"File name cannot be empty." : "Tiedoston nimi ei voi olla tyhjä.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Käyttäjän {owner} tallennustila on täynnä, tiedostoja ei voi enää päivittää tai synkronoida!",
"Your storage is full, files can not be updated or synced anymore!" : "Tallennustila on loppu, tiedostoja ei voi enää päivittää tai synkronoida!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Käyttäjän {owner} tallennustila on melkein täynnä ({usedSpacePercent} %)",
"Your storage is almost full ({usedSpacePercent}%)" : "Tallennustila on melkein loppu ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on käytössä, mutta salausavaimia ei ole alustettu. Ole hyvä ja kirjaudu sisään uudelleen.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Salaussovelluksen salausavain on virheellinen. Ole hyvä ja päivitä salausavain henkilökohtaisissa asetuksissasi jotta voit taas avata salatuskirjoitetut tiedostosi.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Salaus poistettiin käytöstä, mutta tiedostosi ovat edelleen salattuina. Siirry henkilökohtaisiin asetuksiin avataksesi tiedostojesi salauksen.",
"_matches '{filter}'_::_match '{filter}'_" : ["vastaa '{filter}'","vastaa '{filter}'"],
"{dirs} and {files}" : "{dirs} ja {files}",
"Favorited" : "Lisätty suosikkeihin",
@@ -73,6 +75,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "Tunnisteiden päivitystä yrittäessä tapahtui virhe",
"A new file or folder has been <strong>created</strong>" : "Uusi tiedosto tai kansio on <strong>luotu</strong>",
"A file or folder has been <strong>changed</strong>" : "Tiedostoa tai kansiota on <strong>muutettu</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Rajoita luomis- ja muutosilmoitukset <strong>omiin suosikkitiedostoihin</strong> <em>(Vain listaus)</em>",
"A file or folder has been <strong>deleted</strong>" : "Tiedosto tai kansio on <strong>poistettu</strong>",
"A file or folder has been <strong>restored</strong>" : "Tiedosto tai kansio on <strong>palautettu</strong>",
"You created %1$s" : "Loit kohteen %1$s",
diff --git a/apps/files/l10n/fi_FI.json b/apps/files/l10n/fi_FI.json
index 1f7c353c7e8..f67505268c7 100644
--- a/apps/files/l10n/fi_FI.json
+++ b/apps/files/l10n/fi_FI.json
@@ -40,10 +40,13 @@
"Delete" : "Poista",
"Disconnect storage" : "Katkaise yhteys tallennustilaan",
"Unshare" : "Peru jakaminen",
+ "No permission to delete" : "Ei oikeutta poistaa",
"Download" : "Lataa",
"Select" : "Valitse",
"Pending" : "Odottaa",
"Unable to determine date" : "Päivämäärän määrittäminen epäonnistui",
+ "This operation is forbidden" : "Tämä toiminto on kielletty",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Hakemisto ei ole käytettävissä. Tarkista lokit tai ole yhteydessä ylläpitoon.",
"Error moving file." : "Virhe tiedostoa siirrettäessä.",
"Error moving file" : "Virhe tiedostoa siirrettäessä",
"Error" : "Virhe",
@@ -59,11 +62,10 @@
"_Uploading %n file_::_Uploading %n files_" : ["Lähetetään %n tiedosto","Lähetetään %n tiedostoa"],
"\"{name}\" is an invalid file name." : "\"{name}\" on virheellinen tiedostonimi.",
"File name cannot be empty." : "Tiedoston nimi ei voi olla tyhjä.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Käyttäjän {owner} tallennustila on täynnä, tiedostoja ei voi enää päivittää tai synkronoida!",
"Your storage is full, files can not be updated or synced anymore!" : "Tallennustila on loppu, tiedostoja ei voi enää päivittää tai synkronoida!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Käyttäjän {owner} tallennustila on melkein täynnä ({usedSpacePercent} %)",
"Your storage is almost full ({usedSpacePercent}%)" : "Tallennustila on melkein loppu ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on käytössä, mutta salausavaimia ei ole alustettu. Ole hyvä ja kirjaudu sisään uudelleen.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Salaussovelluksen salausavain on virheellinen. Ole hyvä ja päivitä salausavain henkilökohtaisissa asetuksissasi jotta voit taas avata salatuskirjoitetut tiedostosi.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Salaus poistettiin käytöstä, mutta tiedostosi ovat edelleen salattuina. Siirry henkilökohtaisiin asetuksiin avataksesi tiedostojesi salauksen.",
"_matches '{filter}'_::_match '{filter}'_" : ["vastaa '{filter}'","vastaa '{filter}'"],
"{dirs} and {files}" : "{dirs} ja {files}",
"Favorited" : "Lisätty suosikkeihin",
@@ -71,6 +73,7 @@
"An error occurred while trying to update the tags" : "Tunnisteiden päivitystä yrittäessä tapahtui virhe",
"A new file or folder has been <strong>created</strong>" : "Uusi tiedosto tai kansio on <strong>luotu</strong>",
"A file or folder has been <strong>changed</strong>" : "Tiedostoa tai kansiota on <strong>muutettu</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Rajoita luomis- ja muutosilmoitukset <strong>omiin suosikkitiedostoihin</strong> <em>(Vain listaus)</em>",
"A file or folder has been <strong>deleted</strong>" : "Tiedosto tai kansio on <strong>poistettu</strong>",
"A file or folder has been <strong>restored</strong>" : "Tiedosto tai kansio on <strong>palautettu</strong>",
"You created %1$s" : "Loit kohteen %1$s",
diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js
index 242f2ad4d76..1d57bb79d07 100644
--- a/apps/files/l10n/fr.js
+++ b/apps/files/l10n/fr.js
@@ -16,7 +16,7 @@ OC.L10N.register(
"No file was uploaded. Unknown error" : "Aucun fichier n'a été envoyé. Erreur inconnue",
"There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Le fichier envoyé dépasse l'instruction upload_max_filesize située dans le fichier php.ini :",
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier envoyé dépasse la valeur MAX_FILE_SIZE qui est spécifiée dans le formulaire HTML.",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier envoyé dépasse la valeur MAX_FILE_SIZE qui était spécifiée dans le formulaire HTML.",
"The uploaded file was only partially uploaded" : "Le fichier n'a été que partiellement envoyé.",
"No file was uploaded" : "Pas de fichier envoyé.",
"Missing a temporary folder" : "Absence de dossier temporaire",
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "Supprimer",
"Disconnect storage" : "Déconnecter ce support de stockage",
"Unshare" : "Ne plus partager",
+ "No permission to delete" : "Pas de permission de suppression",
"Download" : "Télécharger",
"Select" : "Sélectionner",
"Pending" : "En attente",
"Unable to determine date" : "Impossible de déterminer la date",
+ "This operation is forbidden" : "Cette opération est interdite",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Ce répertoire n'est pas disponible. Consultez les logs ou contactez votre administrateur",
"Error moving file." : "Erreur lors du déplacement du fichier.",
"Error moving file" : "Erreur lors du déplacement du fichier",
"Error" : "Erreur",
@@ -61,20 +64,20 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["Téléversement de %n fichier","Téléversement de %n fichiers"],
"\"{name}\" is an invalid file name." : "\"{name}\" n'est pas un nom de fichier valide.",
"File name cannot be empty." : "Le nom de fichier ne peut être vide.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ou synchronisés!",
"Your storage is full, files can not be updated or synced anymore!" : "Votre espage de stockage est plein, les fichiers ne peuvent plus être ajoutés ou synchronisés !",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "L'espace de stockage de {owner} est presque plein ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Votre espace de stockage est presque plein ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Le chiffrement est activé, mais vos clés ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée pour le chiffrement n'est pas valide ! Veuillez mettre à jour le mot de passe de votre clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers chiffrés.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Le chiffrement a été désactivé mais vos fichiers sont toujours chiffrés. Veuillez vous rendre sur vos paramètres personnels pour déchiffrer vos fichiers.",
"_matches '{filter}'_::_match '{filter}'_" : ["correspond à '{filter}'","correspondent à '{filter}'"],
"{dirs} and {files}" : "{dirs} et {files}",
"Favorited" : "Marqué comme favori",
"Favorite" : "Favoris",
- "An error occurred while trying to update the tags" : "Une erreur est survenue lors de la tentative de mise à jour des étiquettes",
+ "An error occurred while trying to update the tags" : "Une erreur est survenue lors de la mise à jour des étiquettes",
"A new file or folder has been <strong>created</strong>" : "Un nouveau fichier ou répertoire a été <strong>créé</strong>",
"A file or folder has been <strong>changed</strong>" : "Un fichier ou un répertoire a été <strong>modifié</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limiter les notifications à ce qui concerne la création et la modification de vos <strong>fichiers favoris</strong> <em>(Flux uniquement)</em>",
"A file or folder has been <strong>deleted</strong>" : "Un fichier ou un répertoire a été <strong>supprimé</strong>",
- "A file or folder has been <strong>restored</strong>" : "Un fichier ou répertoire a été <strong>restauré</strong>",
+ "A file or folder has been <strong>restored</strong>" : "Un fichier ou un répertoire a été <strong>restauré</strong>",
"You created %1$s" : "Vous avez créé %1$s",
"%2$s created %1$s" : "%2$s a créé %1$s",
"%1$s was created in a public folder" : "%1$s a été créé dans un dossier public",
@@ -91,7 +94,7 @@ OC.L10N.register(
"Maximum upload size" : "Taille max. d'envoi",
"max. possible: " : "Max. possible :",
"Save" : "Sauvegarder",
- "Can not be edited from here due to insufficient permissions." : "Ne peut être modifié ici à cause de permissions insufisantes.",
+ "Can not be edited from here due to insufficient permissions." : "Ne peut être modifié ici à cause de permissions insuffisantes.",
"Settings" : "Paramètres",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilisez cette adresse pour <a href=\"%s\" target=\"_blank\">accéder à vos fichiers par WebDAV</a>",
@@ -102,7 +105,7 @@ OC.L10N.register(
"Folder" : "Dossier",
"Upload" : "Chargement",
"Cancel upload" : "Annuler l'envoi",
- "No files in here" : "Pas de fichier ici",
+ "No files in here" : "Aucun fichier ici",
"Upload some content or sync with your devices!" : "Déposez du contenu ou synchronisez vos appareils !",
"No entries found in this folder" : "Aucune entrée trouvée dans ce dossier",
"Select all" : "Tout sélectionner",
diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json
index 76136495968..2b578466faa 100644
--- a/apps/files/l10n/fr.json
+++ b/apps/files/l10n/fr.json
@@ -14,7 +14,7 @@
"No file was uploaded. Unknown error" : "Aucun fichier n'a été envoyé. Erreur inconnue",
"There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Le fichier envoyé dépasse l'instruction upload_max_filesize située dans le fichier php.ini :",
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier envoyé dépasse la valeur MAX_FILE_SIZE qui est spécifiée dans le formulaire HTML.",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier envoyé dépasse la valeur MAX_FILE_SIZE qui était spécifiée dans le formulaire HTML.",
"The uploaded file was only partially uploaded" : "Le fichier n'a été que partiellement envoyé.",
"No file was uploaded" : "Pas de fichier envoyé.",
"Missing a temporary folder" : "Absence de dossier temporaire",
@@ -40,10 +40,13 @@
"Delete" : "Supprimer",
"Disconnect storage" : "Déconnecter ce support de stockage",
"Unshare" : "Ne plus partager",
+ "No permission to delete" : "Pas de permission de suppression",
"Download" : "Télécharger",
"Select" : "Sélectionner",
"Pending" : "En attente",
"Unable to determine date" : "Impossible de déterminer la date",
+ "This operation is forbidden" : "Cette opération est interdite",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Ce répertoire n'est pas disponible. Consultez les logs ou contactez votre administrateur",
"Error moving file." : "Erreur lors du déplacement du fichier.",
"Error moving file" : "Erreur lors du déplacement du fichier",
"Error" : "Erreur",
@@ -59,20 +62,20 @@
"_Uploading %n file_::_Uploading %n files_" : ["Téléversement de %n fichier","Téléversement de %n fichiers"],
"\"{name}\" is an invalid file name." : "\"{name}\" n'est pas un nom de fichier valide.",
"File name cannot be empty." : "Le nom de fichier ne peut être vide.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ou synchronisés!",
"Your storage is full, files can not be updated or synced anymore!" : "Votre espage de stockage est plein, les fichiers ne peuvent plus être ajoutés ou synchronisés !",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "L'espace de stockage de {owner} est presque plein ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Votre espace de stockage est presque plein ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Le chiffrement est activé, mais vos clés ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée pour le chiffrement n'est pas valide ! Veuillez mettre à jour le mot de passe de votre clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers chiffrés.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Le chiffrement a été désactivé mais vos fichiers sont toujours chiffrés. Veuillez vous rendre sur vos paramètres personnels pour déchiffrer vos fichiers.",
"_matches '{filter}'_::_match '{filter}'_" : ["correspond à '{filter}'","correspondent à '{filter}'"],
"{dirs} and {files}" : "{dirs} et {files}",
"Favorited" : "Marqué comme favori",
"Favorite" : "Favoris",
- "An error occurred while trying to update the tags" : "Une erreur est survenue lors de la tentative de mise à jour des étiquettes",
+ "An error occurred while trying to update the tags" : "Une erreur est survenue lors de la mise à jour des étiquettes",
"A new file or folder has been <strong>created</strong>" : "Un nouveau fichier ou répertoire a été <strong>créé</strong>",
"A file or folder has been <strong>changed</strong>" : "Un fichier ou un répertoire a été <strong>modifié</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limiter les notifications à ce qui concerne la création et la modification de vos <strong>fichiers favoris</strong> <em>(Flux uniquement)</em>",
"A file or folder has been <strong>deleted</strong>" : "Un fichier ou un répertoire a été <strong>supprimé</strong>",
- "A file or folder has been <strong>restored</strong>" : "Un fichier ou répertoire a été <strong>restauré</strong>",
+ "A file or folder has been <strong>restored</strong>" : "Un fichier ou un répertoire a été <strong>restauré</strong>",
"You created %1$s" : "Vous avez créé %1$s",
"%2$s created %1$s" : "%2$s a créé %1$s",
"%1$s was created in a public folder" : "%1$s a été créé dans un dossier public",
@@ -89,7 +92,7 @@
"Maximum upload size" : "Taille max. d'envoi",
"max. possible: " : "Max. possible :",
"Save" : "Sauvegarder",
- "Can not be edited from here due to insufficient permissions." : "Ne peut être modifié ici à cause de permissions insufisantes.",
+ "Can not be edited from here due to insufficient permissions." : "Ne peut être modifié ici à cause de permissions insuffisantes.",
"Settings" : "Paramètres",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilisez cette adresse pour <a href=\"%s\" target=\"_blank\">accéder à vos fichiers par WebDAV</a>",
@@ -100,7 +103,7 @@
"Folder" : "Dossier",
"Upload" : "Chargement",
"Cancel upload" : "Annuler l'envoi",
- "No files in here" : "Pas de fichier ici",
+ "No files in here" : "Aucun fichier ici",
"Upload some content or sync with your devices!" : "Déposez du contenu ou synchronisez vos appareils !",
"No entries found in this folder" : "Aucune entrée trouvée dans ce dossier",
"Select all" : "Tout sélectionner",
diff --git a/apps/files/l10n/gl.js b/apps/files/l10n/gl.js
index e23212fe504..2ab8c9f94ab 100644
--- a/apps/files/l10n/gl.js
+++ b/apps/files/l10n/gl.js
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "Eliminar",
"Disconnect storage" : "Desconectar o almacenamento",
"Unshare" : "Deixar de compartir",
+ "No permission to delete" : "Non ten permisos para eliminar",
"Download" : "Descargar",
"Select" : "Seleccionar",
"Pending" : "Pendentes",
"Unable to determine date" : "Non é posíbel determinar a data",
+ "This operation is forbidden" : "Esta operación está prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este directorio non está dispoñíbel, comprobe os rexistros ou póñase en contacto co administrador",
"Error moving file." : "Produciuse un erro ao mover o ficheiro.",
"Error moving file" : "Produciuse un erro ao mover o ficheiro",
"Error" : "Erro",
@@ -61,11 +64,10 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["Cargando %n ficheiro","Cargando %n ficheiros"],
"\"{name}\" is an invalid file name." : "«{name}» é un nome incorrecto de ficheiro.",
"File name cannot be empty." : "O nome de ficheiro non pode estar baleiro",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "O espazo de almacenamento de {owner} está cheo, non é posíbel actualizar ou sincronizar máis os ficheiros!",
"Your storage is full, files can not be updated or synced anymore!" : "O seu espazo de almacenamento está cheo, non é posíbel actualizar ou sincronizar máis os ficheiros!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "O espazo de almacenamento de {owner} está case cheo ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "O seu espazo de almacenamento está case cheo ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron preparadas, saia da sesión e volva a acceder de novo",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "A chave privada para a aplicación de cifrado non é correcta. Actualice o contrasinal da súa chave privada nos seus axustes persoais para recuperar o acceso aos seus ficheiros cifrados.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "O cifrado foi desactivado, mais os ficheiros están cifrados. Vaia á configuración persoal para descifrar os ficheiros.",
"_matches '{filter}'_::_match '{filter}'_" : ["coincidente con «{filter}»","coincidentes con «{filter}»"],
"{dirs} and {files}" : "{dirs} e {files}",
"Favorited" : "Marcado como favorito",
@@ -73,6 +75,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "Produciuse un erro ao tentar actualizar as etiquetas",
"A new file or folder has been <strong>created</strong>" : "<strong>Creouse</strong> un novo ficheiro ou cartafol",
"A file or folder has been <strong>changed</strong>" : "<strong>Cambiouse</strong> un ficheiro ou cartafol",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limita as notificacións sobre a creación e modificación dos seus <strong>ficheiros favoritos</strong> <em>(só os fluxos)</em>",
"A file or folder has been <strong>deleted</strong>" : "<strong>Eliminouse</strong> un ficheiro ou cartafol",
"A file or folder has been <strong>restored</strong>" : "Foi <strong>restaurado</strong> satisfactoriamente un ficheiro ou cartafol",
"You created %1$s" : "Creou %1$s",
diff --git a/apps/files/l10n/gl.json b/apps/files/l10n/gl.json
index f5ffd326b89..0668c535aee 100644
--- a/apps/files/l10n/gl.json
+++ b/apps/files/l10n/gl.json
@@ -40,10 +40,13 @@
"Delete" : "Eliminar",
"Disconnect storage" : "Desconectar o almacenamento",
"Unshare" : "Deixar de compartir",
+ "No permission to delete" : "Non ten permisos para eliminar",
"Download" : "Descargar",
"Select" : "Seleccionar",
"Pending" : "Pendentes",
"Unable to determine date" : "Non é posíbel determinar a data",
+ "This operation is forbidden" : "Esta operación está prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este directorio non está dispoñíbel, comprobe os rexistros ou póñase en contacto co administrador",
"Error moving file." : "Produciuse un erro ao mover o ficheiro.",
"Error moving file" : "Produciuse un erro ao mover o ficheiro",
"Error" : "Erro",
@@ -59,11 +62,10 @@
"_Uploading %n file_::_Uploading %n files_" : ["Cargando %n ficheiro","Cargando %n ficheiros"],
"\"{name}\" is an invalid file name." : "«{name}» é un nome incorrecto de ficheiro.",
"File name cannot be empty." : "O nome de ficheiro non pode estar baleiro",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "O espazo de almacenamento de {owner} está cheo, non é posíbel actualizar ou sincronizar máis os ficheiros!",
"Your storage is full, files can not be updated or synced anymore!" : "O seu espazo de almacenamento está cheo, non é posíbel actualizar ou sincronizar máis os ficheiros!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "O espazo de almacenamento de {owner} está case cheo ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "O seu espazo de almacenamento está case cheo ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron preparadas, saia da sesión e volva a acceder de novo",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "A chave privada para a aplicación de cifrado non é correcta. Actualice o contrasinal da súa chave privada nos seus axustes persoais para recuperar o acceso aos seus ficheiros cifrados.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "O cifrado foi desactivado, mais os ficheiros están cifrados. Vaia á configuración persoal para descifrar os ficheiros.",
"_matches '{filter}'_::_match '{filter}'_" : ["coincidente con «{filter}»","coincidentes con «{filter}»"],
"{dirs} and {files}" : "{dirs} e {files}",
"Favorited" : "Marcado como favorito",
@@ -71,6 +73,7 @@
"An error occurred while trying to update the tags" : "Produciuse un erro ao tentar actualizar as etiquetas",
"A new file or folder has been <strong>created</strong>" : "<strong>Creouse</strong> un novo ficheiro ou cartafol",
"A file or folder has been <strong>changed</strong>" : "<strong>Cambiouse</strong> un ficheiro ou cartafol",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limita as notificacións sobre a creación e modificación dos seus <strong>ficheiros favoritos</strong> <em>(só os fluxos)</em>",
"A file or folder has been <strong>deleted</strong>" : "<strong>Eliminouse</strong> un ficheiro ou cartafol",
"A file or folder has been <strong>restored</strong>" : "Foi <strong>restaurado</strong> satisfactoriamente un ficheiro ou cartafol",
"You created %1$s" : "Creou %1$s",
diff --git a/apps/files/l10n/hr.js b/apps/files/l10n/hr.js
index a1d08bea51d..f62fe8d6c64 100644
--- a/apps/files/l10n/hr.js
+++ b/apps/files/l10n/hr.js
@@ -63,9 +63,6 @@ OC.L10N.register(
"File name cannot be empty." : "Naziv datoteke ne može biti prazan.",
"Your storage is full, files can not be updated or synced anymore!" : "Vaša je pohrana puna, datoteke više nije moguće ažurirati niti sinkronizirati!",
"Your storage is almost full ({usedSpacePercent}%)" : "Vaš prostor za pohranu je skoro pun ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je onemogućena, ali vaši ključevi nisu inicijalizirani, molimo odjavite se i ponovno prijavite",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za šifriranje. Molimo ažurirajte lozinku svoga privatnog ključa u svojim osobnimpostavkama da biste obnovili pristup svojim šifriranim datotekama.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifriranje je onemogućeno, ali vaše su datoteke još uvijek šifrirane. Molimo, otiđite u svojeosobne postavke da biste dešifrirali svoje datoteke.",
"{dirs} and {files}" : "{dirs} i {files}",
"Favorited" : "Favoritovan",
"Favorite" : "Favorit",
diff --git a/apps/files/l10n/hr.json b/apps/files/l10n/hr.json
index 80a0faec727..9a83a301dd9 100644
--- a/apps/files/l10n/hr.json
+++ b/apps/files/l10n/hr.json
@@ -61,9 +61,6 @@
"File name cannot be empty." : "Naziv datoteke ne može biti prazan.",
"Your storage is full, files can not be updated or synced anymore!" : "Vaša je pohrana puna, datoteke više nije moguće ažurirati niti sinkronizirati!",
"Your storage is almost full ({usedSpacePercent}%)" : "Vaš prostor za pohranu je skoro pun ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je onemogućena, ali vaši ključevi nisu inicijalizirani, molimo odjavite se i ponovno prijavite",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za šifriranje. Molimo ažurirajte lozinku svoga privatnog ključa u svojim osobnimpostavkama da biste obnovili pristup svojim šifriranim datotekama.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifriranje je onemogućeno, ali vaše su datoteke još uvijek šifrirane. Molimo, otiđite u svojeosobne postavke da biste dešifrirali svoje datoteke.",
"{dirs} and {files}" : "{dirs} i {files}",
"Favorited" : "Favoritovan",
"Favorite" : "Favorit",
diff --git a/apps/files/l10n/hu_HU.js b/apps/files/l10n/hu_HU.js
index 3365195d258..0f7d09bc123 100644
--- a/apps/files/l10n/hu_HU.js
+++ b/apps/files/l10n/hu_HU.js
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "Törlés",
"Disconnect storage" : "Tároló leválasztása",
"Unshare" : "A megosztás visszavonása",
+ "No permission to delete" : "Nincs törlési jogosultsága",
"Download" : "Letöltés",
"Select" : "Kiválaszt",
"Pending" : "Folyamatban",
"Unable to determine date" : "Nem lehet meghatározni a dátumot",
+ "This operation is forbidden" : "Tiltott művelet",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Ez a könyvtár nem elérhető, kérem nézze meg a naplófájlokat vagy keresse az adminisztrátort",
"Error moving file." : "Hiba történt a fájl áthelyezése közben.",
"Error moving file" : "Az állomány áthelyezése nem sikerült.",
"Error" : "Hiba",
@@ -61,11 +64,10 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["%n állomány feltöltése","%n állomány feltöltése"],
"\"{name}\" is an invalid file name." : "\"{name}\" érvénytelen, mint fájlnév.",
"File name cannot be empty." : "A fájlnév nem lehet semmi.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "A {owner} felhasználó tárolója betelt, a fájlok nem frissíthetők és szinkronizálhatók többet!",
"Your storage is full, files can not be updated or synced anymore!" : "A tároló tele van, a fájlok nem frissíthetőek vagy szinkronizálhatóak a jövőben.",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "A {owner} felhasználó tárolója majdnem betelt ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "A tároló majdnem tele van ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Az állományok titkosítása engedélyezve van, de az Ön titkos kulcsai nincsenek beállítva. Ezért kérjük, hogy jelentkezzen ki, és lépjen be újra!",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Az állományok titkosításához használt titkos kulcsa érvénytelen. Kérjük frissítse a titkos kulcs jelszót a személyes beállításokban, hogy ismét hozzáférjen a titkosított állományaihoz!",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "A titkosítási funkciót kikapcsolták, de az Ön állományai még mindig titkosított állapotban vannak. A személyes beállításoknál tudja a titkosítást feloldani.",
"_matches '{filter}'_::_match '{filter}'_" : ["egyezések '{filter}'","egyezés '{filter}'"],
"{dirs} and {files}" : "{dirs} és {files}",
"Favorited" : "Kedvenc",
@@ -73,6 +75,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "Hiba történt, miközben megpróbálta frissíteni a címkéket",
"A new file or folder has been <strong>created</strong>" : "Új fájl vagy könyvtár <strong>létrehozása</strong>",
"A file or folder has been <strong>changed</strong>" : "Fájl vagy könyvtár <strong>módosítása</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Szűkítse le az értesítéseket a létrehozásról és a változásokról a <strong>kedvenc fájlok</strong> <em>(Stream only)</em> -ra",
"A file or folder has been <strong>deleted</strong>" : "Fájl vagy könyvtár <strong>törlése</strong>",
"A file or folder has been <strong>restored</strong>" : "Fájl vagy könyvtár <strong>visszatöltése</strong>",
"You created %1$s" : "Létrehoztam: %1$s",
@@ -102,6 +105,7 @@ OC.L10N.register(
"Folder" : "Mappa",
"Upload" : "Feltöltés",
"Cancel upload" : "A feltöltés megszakítása",
+ "No files in here" : "Itt nincsenek fájlok",
"Upload some content or sync with your devices!" : "Tölts fel néhány tartalmat, vagy szinkronizálj az eszközöddel!",
"No entries found in this folder" : "Nincsenek bejegyzések ebben a könyvtárban",
"Select all" : "Összes kijelölése",
diff --git a/apps/files/l10n/hu_HU.json b/apps/files/l10n/hu_HU.json
index e5c3ab973d8..bf98eef627b 100644
--- a/apps/files/l10n/hu_HU.json
+++ b/apps/files/l10n/hu_HU.json
@@ -40,10 +40,13 @@
"Delete" : "Törlés",
"Disconnect storage" : "Tároló leválasztása",
"Unshare" : "A megosztás visszavonása",
+ "No permission to delete" : "Nincs törlési jogosultsága",
"Download" : "Letöltés",
"Select" : "Kiválaszt",
"Pending" : "Folyamatban",
"Unable to determine date" : "Nem lehet meghatározni a dátumot",
+ "This operation is forbidden" : "Tiltott művelet",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Ez a könyvtár nem elérhető, kérem nézze meg a naplófájlokat vagy keresse az adminisztrátort",
"Error moving file." : "Hiba történt a fájl áthelyezése közben.",
"Error moving file" : "Az állomány áthelyezése nem sikerült.",
"Error" : "Hiba",
@@ -59,11 +62,10 @@
"_Uploading %n file_::_Uploading %n files_" : ["%n állomány feltöltése","%n állomány feltöltése"],
"\"{name}\" is an invalid file name." : "\"{name}\" érvénytelen, mint fájlnév.",
"File name cannot be empty." : "A fájlnév nem lehet semmi.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "A {owner} felhasználó tárolója betelt, a fájlok nem frissíthetők és szinkronizálhatók többet!",
"Your storage is full, files can not be updated or synced anymore!" : "A tároló tele van, a fájlok nem frissíthetőek vagy szinkronizálhatóak a jövőben.",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "A {owner} felhasználó tárolója majdnem betelt ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "A tároló majdnem tele van ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Az állományok titkosítása engedélyezve van, de az Ön titkos kulcsai nincsenek beállítva. Ezért kérjük, hogy jelentkezzen ki, és lépjen be újra!",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Az állományok titkosításához használt titkos kulcsa érvénytelen. Kérjük frissítse a titkos kulcs jelszót a személyes beállításokban, hogy ismét hozzáférjen a titkosított állományaihoz!",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "A titkosítási funkciót kikapcsolták, de az Ön állományai még mindig titkosított állapotban vannak. A személyes beállításoknál tudja a titkosítást feloldani.",
"_matches '{filter}'_::_match '{filter}'_" : ["egyezések '{filter}'","egyezés '{filter}'"],
"{dirs} and {files}" : "{dirs} és {files}",
"Favorited" : "Kedvenc",
@@ -71,6 +73,7 @@
"An error occurred while trying to update the tags" : "Hiba történt, miközben megpróbálta frissíteni a címkéket",
"A new file or folder has been <strong>created</strong>" : "Új fájl vagy könyvtár <strong>létrehozása</strong>",
"A file or folder has been <strong>changed</strong>" : "Fájl vagy könyvtár <strong>módosítása</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Szűkítse le az értesítéseket a létrehozásról és a változásokról a <strong>kedvenc fájlok</strong> <em>(Stream only)</em> -ra",
"A file or folder has been <strong>deleted</strong>" : "Fájl vagy könyvtár <strong>törlése</strong>",
"A file or folder has been <strong>restored</strong>" : "Fájl vagy könyvtár <strong>visszatöltése</strong>",
"You created %1$s" : "Létrehoztam: %1$s",
@@ -100,6 +103,7 @@
"Folder" : "Mappa",
"Upload" : "Feltöltés",
"Cancel upload" : "A feltöltés megszakítása",
+ "No files in here" : "Itt nincsenek fájlok",
"Upload some content or sync with your devices!" : "Tölts fel néhány tartalmat, vagy szinkronizálj az eszközöddel!",
"No entries found in this folder" : "Nincsenek bejegyzések ebben a könyvtárban",
"Select all" : "Összes kijelölése",
diff --git a/apps/files/l10n/id.js b/apps/files/l10n/id.js
index d5bf00e01f3..d11e9b7a4f6 100644
--- a/apps/files/l10n/id.js
+++ b/apps/files/l10n/id.js
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "Hapus",
"Disconnect storage" : "Memutuskan penyimpaan",
"Unshare" : "Batalkan berbagi",
+ "No permission to delete" : "Tidak memiliki hak untuk menghapus",
"Download" : "Unduh",
"Select" : "Pilih",
- "Pending" : "Menunggu",
+ "Pending" : "Tertunda",
"Unable to determine date" : "Tidak dapat menentukan tanggal",
+ "This operation is forbidden" : "Operasi ini dilarang",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Direktori ini tidak tersedia, silakan periksa log atau hubungi kontak",
"Error moving file." : "Kesalahan saat memindahkan berkas.",
"Error moving file" : "Kesalahan saat memindahkan berkas",
"Error" : "Kesalahan ",
@@ -61,17 +64,18 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["Mengunggah %n berkas"],
"\"{name}\" is an invalid file name." : "\"{name}\" adalah nama berkas yang tidak sah.",
"File name cannot be empty." : "Nama berkas tidak boleh kosong.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Penyimpanan {owner} penuh, berkas tidak dapat diperbarui atau disinkronisasikan lagi!",
"Your storage is full, files can not be updated or synced anymore!" : "Ruang penyimpanan Anda penuh, berkas tidak dapat diperbarui atau disinkronkan lagi!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Penyimpanan {owner} hampir penuh ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Ruang penyimpanan hampir penuh ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kunci privat tidak sah untuk Aplikasi Enskripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienskripsi.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Enskripi telah dinonaktifkan tetapi berkas anda tetap dienskripsi. Silakan menuju ke pengaturan pribadi untuk deskrip berkas anda.",
"_matches '{filter}'_::_match '{filter}'_" : ["cocok dengan '{filter}'"],
"{dirs} and {files}" : "{dirs} dan {files}",
"Favorited" : "Difavoritkan",
"Favorite" : "Favorit",
+ "An error occurred while trying to update the tags" : "Terjadi kesalahan saat mencoba untuk memperbarui label",
"A new file or folder has been <strong>created</strong>" : "Sebuah berkas atau folder baru telah <strong>dibuat</strong>",
"A file or folder has been <strong>changed</strong>" : "Sebuah berkas atau folder telah <strong>diubah</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Batas notifikasi tentang pembuatan dan perubahan <strong>berkas favorit</strong> Anda <em>(Hanya stream)</em>",
"A file or folder has been <strong>deleted</strong>" : "Sebuah berkas atau folder telah <strong>dihapus</strong>",
"A file or folder has been <strong>restored</strong>" : "Sebuah berkas atau folder telah <strong>dipulihkan</strong>",
"You created %1$s" : "Anda membuat %1$s",
@@ -90,6 +94,7 @@ OC.L10N.register(
"Maximum upload size" : "Ukuran pengunggahan maksimum",
"max. possible: " : "Kemungkinan maks.:",
"Save" : "Simpan",
+ "Can not be edited from here due to insufficient permissions." : "Tidak dapat diidit dari sini karena tidak memiliki izin.",
"Settings" : "Pengaturan",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gunakan alamat ini untuk <a href=\"%s\" target=\"_blank\">mengakses Berkas via WebDAV</a>",
@@ -100,6 +105,7 @@ OC.L10N.register(
"Folder" : "Folder",
"Upload" : "Unggah",
"Cancel upload" : "Batal unggah",
+ "No files in here" : "Tidak ada berkas disini",
"Upload some content or sync with your devices!" : "Unggah beberapa konten dan sinkronisasikan dengan perangkat Anda!",
"No entries found in this folder" : "Tidak ada entri yang ditemukan dalam folder ini",
"Select all" : "Pilih Semua",
diff --git a/apps/files/l10n/id.json b/apps/files/l10n/id.json
index 52b1426a6f7..f2b557205b7 100644
--- a/apps/files/l10n/id.json
+++ b/apps/files/l10n/id.json
@@ -40,10 +40,13 @@
"Delete" : "Hapus",
"Disconnect storage" : "Memutuskan penyimpaan",
"Unshare" : "Batalkan berbagi",
+ "No permission to delete" : "Tidak memiliki hak untuk menghapus",
"Download" : "Unduh",
"Select" : "Pilih",
- "Pending" : "Menunggu",
+ "Pending" : "Tertunda",
"Unable to determine date" : "Tidak dapat menentukan tanggal",
+ "This operation is forbidden" : "Operasi ini dilarang",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Direktori ini tidak tersedia, silakan periksa log atau hubungi kontak",
"Error moving file." : "Kesalahan saat memindahkan berkas.",
"Error moving file" : "Kesalahan saat memindahkan berkas",
"Error" : "Kesalahan ",
@@ -59,17 +62,18 @@
"_Uploading %n file_::_Uploading %n files_" : ["Mengunggah %n berkas"],
"\"{name}\" is an invalid file name." : "\"{name}\" adalah nama berkas yang tidak sah.",
"File name cannot be empty." : "Nama berkas tidak boleh kosong.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Penyimpanan {owner} penuh, berkas tidak dapat diperbarui atau disinkronisasikan lagi!",
"Your storage is full, files can not be updated or synced anymore!" : "Ruang penyimpanan Anda penuh, berkas tidak dapat diperbarui atau disinkronkan lagi!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Penyimpanan {owner} hampir penuh ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Ruang penyimpanan hampir penuh ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kunci privat tidak sah untuk Aplikasi Enskripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienskripsi.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Enskripi telah dinonaktifkan tetapi berkas anda tetap dienskripsi. Silakan menuju ke pengaturan pribadi untuk deskrip berkas anda.",
"_matches '{filter}'_::_match '{filter}'_" : ["cocok dengan '{filter}'"],
"{dirs} and {files}" : "{dirs} dan {files}",
"Favorited" : "Difavoritkan",
"Favorite" : "Favorit",
+ "An error occurred while trying to update the tags" : "Terjadi kesalahan saat mencoba untuk memperbarui label",
"A new file or folder has been <strong>created</strong>" : "Sebuah berkas atau folder baru telah <strong>dibuat</strong>",
"A file or folder has been <strong>changed</strong>" : "Sebuah berkas atau folder telah <strong>diubah</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Batas notifikasi tentang pembuatan dan perubahan <strong>berkas favorit</strong> Anda <em>(Hanya stream)</em>",
"A file or folder has been <strong>deleted</strong>" : "Sebuah berkas atau folder telah <strong>dihapus</strong>",
"A file or folder has been <strong>restored</strong>" : "Sebuah berkas atau folder telah <strong>dipulihkan</strong>",
"You created %1$s" : "Anda membuat %1$s",
@@ -88,6 +92,7 @@
"Maximum upload size" : "Ukuran pengunggahan maksimum",
"max. possible: " : "Kemungkinan maks.:",
"Save" : "Simpan",
+ "Can not be edited from here due to insufficient permissions." : "Tidak dapat diidit dari sini karena tidak memiliki izin.",
"Settings" : "Pengaturan",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gunakan alamat ini untuk <a href=\"%s\" target=\"_blank\">mengakses Berkas via WebDAV</a>",
@@ -98,6 +103,7 @@
"Folder" : "Folder",
"Upload" : "Unggah",
"Cancel upload" : "Batal unggah",
+ "No files in here" : "Tidak ada berkas disini",
"Upload some content or sync with your devices!" : "Unggah beberapa konten dan sinkronisasikan dengan perangkat Anda!",
"No entries found in this folder" : "Tidak ada entri yang ditemukan dalam folder ini",
"Select all" : "Pilih Semua",
diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js
index 00507bf43d9..6fea601bdfc 100644
--- a/apps/files/l10n/is.js
+++ b/apps/files/l10n/is.js
@@ -42,4 +42,4 @@ OC.L10N.register(
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Skrárnar sem þú ert að senda inn eru stærri en hámarks innsendingarstærð á þessum netþjóni.",
"Files are being scanned, please wait." : "Verið er að skima skrár, vinsamlegast hinkraðu."
},
-"nplurals=2; plural=(n != 1);");
+"nplurals=2; plural=(n % 10 == 1 || n % 100 != 11);");
diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json
index e63dd585d17..1fe2dd93e2f 100644
--- a/apps/files/l10n/is.json
+++ b/apps/files/l10n/is.json
@@ -39,5 +39,5 @@
"Upload too large" : "Innsend skrá er of stór",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Skrárnar sem þú ert að senda inn eru stærri en hámarks innsendingarstærð á þessum netþjóni.",
"Files are being scanned, please wait." : "Verið er að skima skrár, vinsamlegast hinkraðu."
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
+},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 || n % 100 != 11);"
} \ No newline at end of file
diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js
index 52f1d0a728d..2c57c0e5ac5 100644
--- a/apps/files/l10n/it.js
+++ b/apps/files/l10n/it.js
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "Elimina",
"Disconnect storage" : "Disconnetti archiviazione",
"Unshare" : "Rimuovi condivisione",
+ "No permission to delete" : "Nessun permesso per eliminare",
"Download" : "Scarica",
"Select" : "Seleziona",
"Pending" : "In corso",
"Unable to determine date" : "Impossibile determinare la data",
+ "This operation is forbidden" : "Questa operazione è vietata",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Questa cartella non è disponibile, controlla i log o contatta l'amministratore",
"Error moving file." : "Errore durante lo spostamento del file.",
"Error moving file" : "Errore durante lo spostamento del file",
"Error" : "Errore",
@@ -61,11 +64,10 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["Caricamento di %n file in corso","Caricamento di %n file in corso"],
"\"{name}\" is an invalid file name." : "\"{name}\" non è un nome file valido.",
"File name cannot be empty." : "Il nome del file non può essere vuoto.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Lo spazio di archiviazione di {owner} è pieno, i file non possono essere più aggiornati o sincronizzati!",
"Your storage is full, files can not be updated or synced anymore!" : "Lo spazio di archiviazione è pieno, i file non possono essere più aggiornati o sincronizzati!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Lo spazio di archiviazione di {owner} è quasi pieno ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Lo spazio di archiviazione è quasi pieno ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'applicazione di cifratura è abilitata, ma le chiavi non sono state inizializzate, disconnettiti ed effettua nuovamente l'accesso",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chiave privata non valida per l'applicazione di cifratura. Aggiorna la password della chiave privata nelle impostazioni personali per ripristinare l'accesso ai tuoi file cifrati.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "La cifratura è stata disabilitata ma i tuoi file sono ancora cifrati. Vai nelle impostazioni personali per decifrare i file.",
"_matches '{filter}'_::_match '{filter}'_" : ["corrispondono a '{filter}'","corrisponde a '{filter}'"],
"{dirs} and {files}" : "{dirs} e {files}",
"Favorited" : "Preferiti",
@@ -73,6 +75,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "Si è verificato un errore durante il tentativo di aggiornare le etichette",
"A new file or folder has been <strong>created</strong>" : "Un nuovo file o cartella è stato <strong>creato</strong>",
"A file or folder has been <strong>changed</strong>" : "Un file o una cartella è stato <strong>modificato</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limita le notifiche relative alla creazione e alla modifica dei tuoi <strong>file preferiti</strong> <em>(Solo flusso)</em>",
"A file or folder has been <strong>deleted</strong>" : "Un file o una cartella è stato <strong>eliminato</strong>",
"A file or folder has been <strong>restored</strong>" : "Un file o una cartella è stato <strong>ripristinato</strong>",
"You created %1$s" : "Hai creato %1$s",
diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json
index ce73465ce73..4ebb6a360b5 100644
--- a/apps/files/l10n/it.json
+++ b/apps/files/l10n/it.json
@@ -40,10 +40,13 @@
"Delete" : "Elimina",
"Disconnect storage" : "Disconnetti archiviazione",
"Unshare" : "Rimuovi condivisione",
+ "No permission to delete" : "Nessun permesso per eliminare",
"Download" : "Scarica",
"Select" : "Seleziona",
"Pending" : "In corso",
"Unable to determine date" : "Impossibile determinare la data",
+ "This operation is forbidden" : "Questa operazione è vietata",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Questa cartella non è disponibile, controlla i log o contatta l'amministratore",
"Error moving file." : "Errore durante lo spostamento del file.",
"Error moving file" : "Errore durante lo spostamento del file",
"Error" : "Errore",
@@ -59,11 +62,10 @@
"_Uploading %n file_::_Uploading %n files_" : ["Caricamento di %n file in corso","Caricamento di %n file in corso"],
"\"{name}\" is an invalid file name." : "\"{name}\" non è un nome file valido.",
"File name cannot be empty." : "Il nome del file non può essere vuoto.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Lo spazio di archiviazione di {owner} è pieno, i file non possono essere più aggiornati o sincronizzati!",
"Your storage is full, files can not be updated or synced anymore!" : "Lo spazio di archiviazione è pieno, i file non possono essere più aggiornati o sincronizzati!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Lo spazio di archiviazione di {owner} è quasi pieno ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Lo spazio di archiviazione è quasi pieno ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'applicazione di cifratura è abilitata, ma le chiavi non sono state inizializzate, disconnettiti ed effettua nuovamente l'accesso",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chiave privata non valida per l'applicazione di cifratura. Aggiorna la password della chiave privata nelle impostazioni personali per ripristinare l'accesso ai tuoi file cifrati.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "La cifratura è stata disabilitata ma i tuoi file sono ancora cifrati. Vai nelle impostazioni personali per decifrare i file.",
"_matches '{filter}'_::_match '{filter}'_" : ["corrispondono a '{filter}'","corrisponde a '{filter}'"],
"{dirs} and {files}" : "{dirs} e {files}",
"Favorited" : "Preferiti",
@@ -71,6 +73,7 @@
"An error occurred while trying to update the tags" : "Si è verificato un errore durante il tentativo di aggiornare le etichette",
"A new file or folder has been <strong>created</strong>" : "Un nuovo file o cartella è stato <strong>creato</strong>",
"A file or folder has been <strong>changed</strong>" : "Un file o una cartella è stato <strong>modificato</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limita le notifiche relative alla creazione e alla modifica dei tuoi <strong>file preferiti</strong> <em>(Solo flusso)</em>",
"A file or folder has been <strong>deleted</strong>" : "Un file o una cartella è stato <strong>eliminato</strong>",
"A file or folder has been <strong>restored</strong>" : "Un file o una cartella è stato <strong>ripristinato</strong>",
"You created %1$s" : "Hai creato %1$s",
diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js
index 7b4ccb0c6bc..5a0b4247e93 100644
--- a/apps/files/l10n/ja.js
+++ b/apps/files/l10n/ja.js
@@ -42,16 +42,19 @@ OC.L10N.register(
"Delete" : "削除",
"Disconnect storage" : "ストレージを切断する",
"Unshare" : "共有解除",
+ "No permission to delete" : "削除する権限がありません",
"Download" : "ダウンロード",
"Select" : "選択",
"Pending" : "中断",
"Unable to determine date" : "更新日不明",
+ "This operation is forbidden" : "この操作は禁止されています",
+ "This directory is unavailable, please check the logs or contact the administrator" : "このディレクトリは利用できません。ログを確認するか管理者に問い合わせてください。",
"Error moving file." : "ファイル移動でエラー",
"Error moving file" : "ファイルの移動エラー",
"Error" : "エラー",
"Could not rename file" : "ファイルの名前変更ができませんでした",
"Error deleting file." : "ファイルの削除エラー。",
- "No entries in this folder match '{filter}'" : "このフォルダで '{filter}' にマッチするものはありません",
+ "No entries in this folder match '{filter}'" : "このフォルダー内で '{filter}' にマッチするものはありません",
"Name" : "名前",
"Size" : "サイズ",
"Modified" : "更新日時",
@@ -61,11 +64,10 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["%n 個のファイルをアップロード中"],
"\"{name}\" is an invalid file name." : "\"{name}\" は無効なファイル名です。",
"File name cannot be empty." : "ファイル名を空にすることはできません。",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} のストレージは一杯です。ファイルの更新と同期はもうできません!",
"Your storage is full, files can not be updated or synced anymore!" : "あなたのストレージは一杯です。ファイルの更新と同期はもうできません!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} のストレージはほぼ一杯です。({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "ストレージがほぼ一杯です({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "暗号化アプリは有効ですが、あなたの暗号化キーは初期化されていません。ログアウトした後に、再度ログインしてください",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "暗号化アプリの無効なプライベートキーです。あなたの暗号化されたファイルへアクセスするために、個人設定からプライベートキーのパスワードを更新してください。",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "暗号化の機能は無効化されましたが、ファイルはすでに暗号化されています。個人設定からファイルを複合を行ってください。",
"_matches '{filter}'_::_match '{filter}'_" : [" '{filter}' にマッチ"],
"{dirs} and {files}" : "{dirs} と {files}",
"Favorited" : "お気に入り済",
@@ -73,6 +75,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "タグを更新する際にエラーが発生しました",
"A new file or folder has been <strong>created</strong>" : "新しいファイルまたはフォルダーを<strong>作成</strong>したとき",
"A file or folder has been <strong>changed</strong>" : "ファイルまたはフォルダーを<strong>変更</strong>したとき",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>お気に入りファイル</strong>に対する作成と変更の通知は制限されています。<em>(表示のみ)</em>",
"A file or folder has been <strong>deleted</strong>" : "ファイルまたはフォルダーを<strong>削除</strong>したとき",
"A file or folder has been <strong>restored</strong>" : "ファイルまたはフォルダーを<strong>復元</strong>したとき",
"You created %1$s" : "あなたは %1$s を作成しました",
diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json
index 1ec47b409db..bcc9c1c77a1 100644
--- a/apps/files/l10n/ja.json
+++ b/apps/files/l10n/ja.json
@@ -40,16 +40,19 @@
"Delete" : "削除",
"Disconnect storage" : "ストレージを切断する",
"Unshare" : "共有解除",
+ "No permission to delete" : "削除する権限がありません",
"Download" : "ダウンロード",
"Select" : "選択",
"Pending" : "中断",
"Unable to determine date" : "更新日不明",
+ "This operation is forbidden" : "この操作は禁止されています",
+ "This directory is unavailable, please check the logs or contact the administrator" : "このディレクトリは利用できません。ログを確認するか管理者に問い合わせてください。",
"Error moving file." : "ファイル移動でエラー",
"Error moving file" : "ファイルの移動エラー",
"Error" : "エラー",
"Could not rename file" : "ファイルの名前変更ができませんでした",
"Error deleting file." : "ファイルの削除エラー。",
- "No entries in this folder match '{filter}'" : "このフォルダで '{filter}' にマッチするものはありません",
+ "No entries in this folder match '{filter}'" : "このフォルダー内で '{filter}' にマッチするものはありません",
"Name" : "名前",
"Size" : "サイズ",
"Modified" : "更新日時",
@@ -59,11 +62,10 @@
"_Uploading %n file_::_Uploading %n files_" : ["%n 個のファイルをアップロード中"],
"\"{name}\" is an invalid file name." : "\"{name}\" は無効なファイル名です。",
"File name cannot be empty." : "ファイル名を空にすることはできません。",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} のストレージは一杯です。ファイルの更新と同期はもうできません!",
"Your storage is full, files can not be updated or synced anymore!" : "あなたのストレージは一杯です。ファイルの更新と同期はもうできません!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} のストレージはほぼ一杯です。({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "ストレージがほぼ一杯です({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "暗号化アプリは有効ですが、あなたの暗号化キーは初期化されていません。ログアウトした後に、再度ログインしてください",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "暗号化アプリの無効なプライベートキーです。あなたの暗号化されたファイルへアクセスするために、個人設定からプライベートキーのパスワードを更新してください。",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "暗号化の機能は無効化されましたが、ファイルはすでに暗号化されています。個人設定からファイルを複合を行ってください。",
"_matches '{filter}'_::_match '{filter}'_" : [" '{filter}' にマッチ"],
"{dirs} and {files}" : "{dirs} と {files}",
"Favorited" : "お気に入り済",
@@ -71,6 +73,7 @@
"An error occurred while trying to update the tags" : "タグを更新する際にエラーが発生しました",
"A new file or folder has been <strong>created</strong>" : "新しいファイルまたはフォルダーを<strong>作成</strong>したとき",
"A file or folder has been <strong>changed</strong>" : "ファイルまたはフォルダーを<strong>変更</strong>したとき",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>お気に入りファイル</strong>に対する作成と変更の通知は制限されています。<em>(表示のみ)</em>",
"A file or folder has been <strong>deleted</strong>" : "ファイルまたはフォルダーを<strong>削除</strong>したとき",
"A file or folder has been <strong>restored</strong>" : "ファイルまたはフォルダーを<strong>復元</strong>したとき",
"You created %1$s" : "あなたは %1$s を作成しました",
diff --git a/apps/files/l10n/ko.js b/apps/files/l10n/ko.js
index c98403c77ee..a29ef613da3 100644
--- a/apps/files/l10n/ko.js
+++ b/apps/files/l10n/ko.js
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "삭제",
"Disconnect storage" : "저장소 연결 해제",
"Unshare" : "공유 해제",
+ "No permission to delete" : "삭제할 권한 없음",
"Download" : "다운로드",
"Select" : "선택",
"Pending" : "대기 중",
"Unable to determine date" : "날짜를 결정할 수 없음",
+ "This operation is forbidden" : "이 작업이 금지됨",
+ "This directory is unavailable, please check the logs or contact the administrator" : "디렉터리를 사용할 수 없습니다. 로그를 확인하거나 관리자에게 연락하십시오",
"Error moving file." : "파일 이동 오류.",
"Error moving file" : "파일 이동 오류",
"Error" : "오류",
@@ -61,11 +64,10 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["파일 %n개 업로드 중"],
"\"{name}\" is an invalid file name." : "\"{name}\"은(는) 잘못된 파일 이름입니다.",
"File name cannot be empty." : "파일 이름이 비어 있을 수 없습니다.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner}의 저장소가 가득 찼습니다. 파일을 더 이상 업데이트하거나 동기화할 수 없습니다!",
"Your storage is full, files can not be updated or synced anymore!" : "저장 공간이 가득 찼습니다. 파일을 업데이트하거나 동기화할 수 없습니다!",
- "Your storage is almost full ({usedSpacePercent}%)" : "저장 공간이 거의 가득 찼습니다 ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "암호화 앱의 개인 키가 잘못되었습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 업데이트해야 합니다.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "암호화는 해제되어 있지만, 파일은 아직 암호화되어 있습니다. 개인 설정에서 파일을 복호화하십시오.",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner}의 저장 공간이 거의 가득 찼습니다({usedSpacePercent}%)",
+ "Your storage is almost full ({usedSpacePercent}%)" : "저장 공간이 거의 가득 찼습니다({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["'{filter}'와(과) 일치"],
"{dirs} and {files}" : "{dirs} 그리고 {files}",
"Favorited" : "책갈피에 추가됨",
@@ -73,6 +75,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "태그를 업데이트하는 중 오류 발생",
"A new file or folder has been <strong>created</strong>" : "새 파일이나 폴더가 <strong>생성됨</strong>",
"A file or folder has been <strong>changed</strong>" : "파일이나 폴더가 <strong>변경됨</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>즐겨찾는 파일</strong>의 생성 및 변경 사항에 대한 알림을 줄일 수 있습니다<em>(스트림에서만)</em>",
"A file or folder has been <strong>deleted</strong>" : "파일이나 폴더가 <strong>삭제됨</strong>",
"A file or folder has been <strong>restored</strong>" : "파일이나 폴더가 <strong>복원됨</strong>",
"You created %1$s" : "내가 %1$s을(를) 생성함",
@@ -91,6 +94,7 @@ OC.L10N.register(
"Maximum upload size" : "최대 업로드 크기",
"max. possible: " : "최대 가능:",
"Save" : "저장",
+ "Can not be edited from here due to insufficient permissions." : "권한이 부족하므로 여기에서 편집할 수 없습니다.",
"Settings" : "설정",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "WebDAV로 파일에 접근하려면 <a href=\"%s\" target=\"_blank\">이 주소를 사용하십시오</a>",
@@ -101,6 +105,7 @@ OC.L10N.register(
"Folder" : "폴더",
"Upload" : "업로드",
"Cancel upload" : "업로드 취소",
+ "No files in here" : "여기에 파일 없음",
"Upload some content or sync with your devices!" : "파일을 업로드하거나 장치와 동기화하십시오!",
"No entries found in this folder" : "이 폴더에 항목 없음",
"Select all" : "모두 선택",
diff --git a/apps/files/l10n/ko.json b/apps/files/l10n/ko.json
index 4c77124d80f..fd001630161 100644
--- a/apps/files/l10n/ko.json
+++ b/apps/files/l10n/ko.json
@@ -40,10 +40,13 @@
"Delete" : "삭제",
"Disconnect storage" : "저장소 연결 해제",
"Unshare" : "공유 해제",
+ "No permission to delete" : "삭제할 권한 없음",
"Download" : "다운로드",
"Select" : "선택",
"Pending" : "대기 중",
"Unable to determine date" : "날짜를 결정할 수 없음",
+ "This operation is forbidden" : "이 작업이 금지됨",
+ "This directory is unavailable, please check the logs or contact the administrator" : "디렉터리를 사용할 수 없습니다. 로그를 확인하거나 관리자에게 연락하십시오",
"Error moving file." : "파일 이동 오류.",
"Error moving file" : "파일 이동 오류",
"Error" : "오류",
@@ -59,11 +62,10 @@
"_Uploading %n file_::_Uploading %n files_" : ["파일 %n개 업로드 중"],
"\"{name}\" is an invalid file name." : "\"{name}\"은(는) 잘못된 파일 이름입니다.",
"File name cannot be empty." : "파일 이름이 비어 있을 수 없습니다.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner}의 저장소가 가득 찼습니다. 파일을 더 이상 업데이트하거나 동기화할 수 없습니다!",
"Your storage is full, files can not be updated or synced anymore!" : "저장 공간이 가득 찼습니다. 파일을 업데이트하거나 동기화할 수 없습니다!",
- "Your storage is almost full ({usedSpacePercent}%)" : "저장 공간이 거의 가득 찼습니다 ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "암호화 앱의 개인 키가 잘못되었습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 업데이트해야 합니다.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "암호화는 해제되어 있지만, 파일은 아직 암호화되어 있습니다. 개인 설정에서 파일을 복호화하십시오.",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner}의 저장 공간이 거의 가득 찼습니다({usedSpacePercent}%)",
+ "Your storage is almost full ({usedSpacePercent}%)" : "저장 공간이 거의 가득 찼습니다({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["'{filter}'와(과) 일치"],
"{dirs} and {files}" : "{dirs} 그리고 {files}",
"Favorited" : "책갈피에 추가됨",
@@ -71,6 +73,7 @@
"An error occurred while trying to update the tags" : "태그를 업데이트하는 중 오류 발생",
"A new file or folder has been <strong>created</strong>" : "새 파일이나 폴더가 <strong>생성됨</strong>",
"A file or folder has been <strong>changed</strong>" : "파일이나 폴더가 <strong>변경됨</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>즐겨찾는 파일</strong>의 생성 및 변경 사항에 대한 알림을 줄일 수 있습니다<em>(스트림에서만)</em>",
"A file or folder has been <strong>deleted</strong>" : "파일이나 폴더가 <strong>삭제됨</strong>",
"A file or folder has been <strong>restored</strong>" : "파일이나 폴더가 <strong>복원됨</strong>",
"You created %1$s" : "내가 %1$s을(를) 생성함",
@@ -89,6 +92,7 @@
"Maximum upload size" : "최대 업로드 크기",
"max. possible: " : "최대 가능:",
"Save" : "저장",
+ "Can not be edited from here due to insufficient permissions." : "권한이 부족하므로 여기에서 편집할 수 없습니다.",
"Settings" : "설정",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "WebDAV로 파일에 접근하려면 <a href=\"%s\" target=\"_blank\">이 주소를 사용하십시오</a>",
@@ -99,6 +103,7 @@
"Folder" : "폴더",
"Upload" : "업로드",
"Cancel upload" : "업로드 취소",
+ "No files in here" : "여기에 파일 없음",
"Upload some content or sync with your devices!" : "파일을 업로드하거나 장치와 동기화하십시오!",
"No entries found in this folder" : "이 폴더에 항목 없음",
"Select all" : "모두 선택",
diff --git a/apps/files/l10n/lb.js b/apps/files/l10n/lb.js
index 8dc8269c0cc..8d4cf072cf6 100644
--- a/apps/files/l10n/lb.js
+++ b/apps/files/l10n/lb.js
@@ -29,9 +29,12 @@ OC.L10N.register(
"Settings" : "Astellungen",
"New" : "Nei",
"Text file" : "Text Fichier",
+ "New folder" : "Neien Dossier",
"Folder" : "Dossier",
"Upload" : "Eroplueden",
"Cancel upload" : "Upload ofbriechen",
+ "No entries found in this folder" : "Keng Elementer an dësem Dossier fonnt",
+ "Select all" : "All auswielen",
"Upload too large" : "Upload ze grouss",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Déi Dateien déi Dir probéiert erop ze lueden sinn méi grouss wei déi Maximal Gréisst déi op dësem Server erlaabt ass.",
"Files are being scanned, please wait." : "Fichieren gi gescannt, war weg."
diff --git a/apps/files/l10n/lb.json b/apps/files/l10n/lb.json
index 524bd0c1cc9..b3b6ff1f632 100644
--- a/apps/files/l10n/lb.json
+++ b/apps/files/l10n/lb.json
@@ -27,9 +27,12 @@
"Settings" : "Astellungen",
"New" : "Nei",
"Text file" : "Text Fichier",
+ "New folder" : "Neien Dossier",
"Folder" : "Dossier",
"Upload" : "Eroplueden",
"Cancel upload" : "Upload ofbriechen",
+ "No entries found in this folder" : "Keng Elementer an dësem Dossier fonnt",
+ "Select all" : "All auswielen",
"Upload too large" : "Upload ze grouss",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Déi Dateien déi Dir probéiert erop ze lueden sinn méi grouss wei déi Maximal Gréisst déi op dësem Server erlaabt ass.",
"Files are being scanned, please wait." : "Fichieren gi gescannt, war weg."
diff --git a/apps/files/l10n/lt_LT.js b/apps/files/l10n/lt_LT.js
index 38848c41f07..2106a985350 100644
--- a/apps/files/l10n/lt_LT.js
+++ b/apps/files/l10n/lt_LT.js
@@ -42,15 +42,19 @@ OC.L10N.register(
"Delete" : "Ištrinti",
"Disconnect storage" : "Atjungti saugyklą",
"Unshare" : "Nebesidalinti",
+ "No permission to delete" : "Neturite leidimų ištrinti",
"Download" : "Atsisiųsti",
"Select" : "Pasirinkiti",
"Pending" : "Laukiantis",
"Unable to determine date" : "Nepavyksta nustatyti datos",
+ "This operation is forbidden" : "Ši operacija yra uždrausta",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Katalogas nepasiekiamas, prašome peržiūrėti žurnalo įrašus arba susisiekti su administratoriumi",
"Error moving file." : "Klaida perkeliant failą.",
"Error moving file" : "Klaida perkeliant failą",
"Error" : "Klaida",
"Could not rename file" : "Neįmanoma pervadinti failo",
"Error deleting file." : "Klaida trinant failą.",
+ "No entries in this folder match '{filter}'" : "Nėra įrašų šiame aplanko atitikmeniui „{filter}“",
"Name" : "Pavadinimas",
"Size" : "Dydis",
"Modified" : "Pakeista",
@@ -60,16 +64,18 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["Įkeliamas %n failas","Įkeliami %n failai","Įkeliama %n failų"],
"\"{name}\" is an invalid file name." : "„{name}“ yra netinkamas failo pavadinime.",
"File name cannot be empty." : "Failo pavadinimas negali būti tuščias.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} saugykla yra pilna, failai daugiau nebegali būti atnaujinti arba sinchronizuojami!",
"Your storage is full, files can not be updated or synced anymore!" : "Jūsų visa vieta serveryje užimta",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} saugykla yra beveik pilna ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Jūsų vieta serveryje beveik visa užimta ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifravimo programa įjungta, bet Jūsų raktai nėra pritaikyti. Prašome atsijungti ir vėl prisijungti",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Netinkamas privatus raktas Šifravimo programai. Prašome atnaujinti savo privataus rakto slaptažodį asmeniniuose nustatymuose, kad atkurti prieigą prie šifruotų failų.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifravimas buvo išjungtas, bet Jūsų failai vis dar užšifruoti. Prašome eiti į asmeninius nustatymus ir iššifruoti savo failus.",
+ "_matches '{filter}'_::_match '{filter}'_" : ["atitikmuo „{filter}“","atitikmenys „{filter}“","atitikmenų „{filter}“"],
"{dirs} and {files}" : "{dirs} ir {files}",
"Favorited" : "Pažymėta mėgstamu",
"Favorite" : "Mėgiamas",
+ "An error occurred while trying to update the tags" : "Bandant atnaujinti žymes įvyko klaida",
"A new file or folder has been <strong>created</strong>" : "Naujas failas ar aplankas buvo <strong>sukurtas</strong>",
"A file or folder has been <strong>changed</strong>" : "Failas ar aplankas buvo <strong>pakeistas</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Riboti pranešimus apie sukūrimą ir pokyčius jūsų <strong>mėgiamuose failuose</strong> <em>(Tik srautas)</em>",
"A file or folder has been <strong>deleted</strong>" : "Failas ar aplankas buvo <strong>ištrintas</strong>",
"A file or folder has been <strong>restored</strong>" : "Failas ar aplankas buvo <strong>atkurtas</strong>",
"You created %1$s" : "Jūs sukūrėte %1$s",
@@ -88,6 +94,7 @@ OC.L10N.register(
"Maximum upload size" : "Maksimalus įkeliamo failo dydis",
"max. possible: " : "maks. galima:",
"Save" : "Išsaugoti",
+ "Can not be edited from here due to insufficient permissions." : "Negali būti redaguojamas iš čia dėl leidimų trūkumo.",
"Settings" : "Nustatymai",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Naudokite šį adresą, kad <a href=\"%s\" target=\"_blank\">pasiektumėte savo failus per WebDAV</a>",
@@ -98,7 +105,9 @@ OC.L10N.register(
"Folder" : "Katalogas",
"Upload" : "Įkelti",
"Cancel upload" : "Atšaukti siuntimą",
+ "No files in here" : "Čia nėra failų",
"Upload some content or sync with your devices!" : "Įkelkite kokį nors turinį, arba sinchronizuokite su savo įrenginiais!",
+ "No entries found in this folder" : "Nerasta įrašų šiame aplanke",
"Select all" : "Pažymėti viską",
"Upload too large" : "Įkėlimui failas per didelis",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Bandomų įkelti failų dydis viršija maksimalų, kuris leidžiamas šiame serveryje",
diff --git a/apps/files/l10n/lt_LT.json b/apps/files/l10n/lt_LT.json
index d57121d8aba..b4758b4a9bb 100644
--- a/apps/files/l10n/lt_LT.json
+++ b/apps/files/l10n/lt_LT.json
@@ -40,15 +40,19 @@
"Delete" : "Ištrinti",
"Disconnect storage" : "Atjungti saugyklą",
"Unshare" : "Nebesidalinti",
+ "No permission to delete" : "Neturite leidimų ištrinti",
"Download" : "Atsisiųsti",
"Select" : "Pasirinkiti",
"Pending" : "Laukiantis",
"Unable to determine date" : "Nepavyksta nustatyti datos",
+ "This operation is forbidden" : "Ši operacija yra uždrausta",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Katalogas nepasiekiamas, prašome peržiūrėti žurnalo įrašus arba susisiekti su administratoriumi",
"Error moving file." : "Klaida perkeliant failą.",
"Error moving file" : "Klaida perkeliant failą",
"Error" : "Klaida",
"Could not rename file" : "Neįmanoma pervadinti failo",
"Error deleting file." : "Klaida trinant failą.",
+ "No entries in this folder match '{filter}'" : "Nėra įrašų šiame aplanko atitikmeniui „{filter}“",
"Name" : "Pavadinimas",
"Size" : "Dydis",
"Modified" : "Pakeista",
@@ -58,16 +62,18 @@
"_Uploading %n file_::_Uploading %n files_" : ["Įkeliamas %n failas","Įkeliami %n failai","Įkeliama %n failų"],
"\"{name}\" is an invalid file name." : "„{name}“ yra netinkamas failo pavadinime.",
"File name cannot be empty." : "Failo pavadinimas negali būti tuščias.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} saugykla yra pilna, failai daugiau nebegali būti atnaujinti arba sinchronizuojami!",
"Your storage is full, files can not be updated or synced anymore!" : "Jūsų visa vieta serveryje užimta",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} saugykla yra beveik pilna ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Jūsų vieta serveryje beveik visa užimta ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifravimo programa įjungta, bet Jūsų raktai nėra pritaikyti. Prašome atsijungti ir vėl prisijungti",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Netinkamas privatus raktas Šifravimo programai. Prašome atnaujinti savo privataus rakto slaptažodį asmeniniuose nustatymuose, kad atkurti prieigą prie šifruotų failų.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifravimas buvo išjungtas, bet Jūsų failai vis dar užšifruoti. Prašome eiti į asmeninius nustatymus ir iššifruoti savo failus.",
+ "_matches '{filter}'_::_match '{filter}'_" : ["atitikmuo „{filter}“","atitikmenys „{filter}“","atitikmenų „{filter}“"],
"{dirs} and {files}" : "{dirs} ir {files}",
"Favorited" : "Pažymėta mėgstamu",
"Favorite" : "Mėgiamas",
+ "An error occurred while trying to update the tags" : "Bandant atnaujinti žymes įvyko klaida",
"A new file or folder has been <strong>created</strong>" : "Naujas failas ar aplankas buvo <strong>sukurtas</strong>",
"A file or folder has been <strong>changed</strong>" : "Failas ar aplankas buvo <strong>pakeistas</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Riboti pranešimus apie sukūrimą ir pokyčius jūsų <strong>mėgiamuose failuose</strong> <em>(Tik srautas)</em>",
"A file or folder has been <strong>deleted</strong>" : "Failas ar aplankas buvo <strong>ištrintas</strong>",
"A file or folder has been <strong>restored</strong>" : "Failas ar aplankas buvo <strong>atkurtas</strong>",
"You created %1$s" : "Jūs sukūrėte %1$s",
@@ -86,6 +92,7 @@
"Maximum upload size" : "Maksimalus įkeliamo failo dydis",
"max. possible: " : "maks. galima:",
"Save" : "Išsaugoti",
+ "Can not be edited from here due to insufficient permissions." : "Negali būti redaguojamas iš čia dėl leidimų trūkumo.",
"Settings" : "Nustatymai",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Naudokite šį adresą, kad <a href=\"%s\" target=\"_blank\">pasiektumėte savo failus per WebDAV</a>",
@@ -96,7 +103,9 @@
"Folder" : "Katalogas",
"Upload" : "Įkelti",
"Cancel upload" : "Atšaukti siuntimą",
+ "No files in here" : "Čia nėra failų",
"Upload some content or sync with your devices!" : "Įkelkite kokį nors turinį, arba sinchronizuokite su savo įrenginiais!",
+ "No entries found in this folder" : "Nerasta įrašų šiame aplanke",
"Select all" : "Pažymėti viską",
"Upload too large" : "Įkėlimui failas per didelis",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Bandomų įkelti failų dydis viršija maksimalų, kuris leidžiamas šiame serveryje",
diff --git a/apps/files/l10n/lv.js b/apps/files/l10n/lv.js
index fb0b4907ff4..8454fe48faa 100644
--- a/apps/files/l10n/lv.js
+++ b/apps/files/l10n/lv.js
@@ -63,9 +63,6 @@ OC.L10N.register(
"File name cannot be empty." : "Datnes nosaukums nevar būt tukšs.",
"Your storage is full, files can not be updated or synced anymore!" : "Jūsu krātuve ir pilna, datnes vairs nevar augšupielādēt vai sinhronizēt!",
"Your storage is almost full ({usedSpacePercent}%)" : "Jūsu krātuve ir gandrīz pilna ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifrēšanas lietotnes ir pieslēgta, bet šifrēšanas atslēgas nav uzstādītas. Lūdzu izejiet no sistēmas un ieejiet sistēmā atpakaļ.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Šifrēšanas lietotnei nepareiza privātā atslēga. Lūdzu atjaunojiet savu privāto atslēgu personīgo uzstādījumu sadaļā, lai atjaunot pieeju šifrētajiem failiem.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifrēšana tika atslēgta, tomēr jūsu faili joprojām ir šifrēti. Atšifrēt failus var Personiskajos uzstādījumos.",
"_matches '{filter}'_::_match '{filter}'_" : ["atrasts pēc '{filter}'","atrasts pēc '{filter}'","atrasti pēc '{filter}'"],
"{dirs} and {files}" : "{dirs} un {files}",
"Favorited" : "Favorīti",
diff --git a/apps/files/l10n/lv.json b/apps/files/l10n/lv.json
index 7146e1b423e..59220478b65 100644
--- a/apps/files/l10n/lv.json
+++ b/apps/files/l10n/lv.json
@@ -61,9 +61,6 @@
"File name cannot be empty." : "Datnes nosaukums nevar būt tukšs.",
"Your storage is full, files can not be updated or synced anymore!" : "Jūsu krātuve ir pilna, datnes vairs nevar augšupielādēt vai sinhronizēt!",
"Your storage is almost full ({usedSpacePercent}%)" : "Jūsu krātuve ir gandrīz pilna ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifrēšanas lietotnes ir pieslēgta, bet šifrēšanas atslēgas nav uzstādītas. Lūdzu izejiet no sistēmas un ieejiet sistēmā atpakaļ.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Šifrēšanas lietotnei nepareiza privātā atslēga. Lūdzu atjaunojiet savu privāto atslēgu personīgo uzstādījumu sadaļā, lai atjaunot pieeju šifrētajiem failiem.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifrēšana tika atslēgta, tomēr jūsu faili joprojām ir šifrēti. Atšifrēt failus var Personiskajos uzstādījumos.",
"_matches '{filter}'_::_match '{filter}'_" : ["atrasts pēc '{filter}'","atrasts pēc '{filter}'","atrasti pēc '{filter}'"],
"{dirs} and {files}" : "{dirs} un {files}",
"Favorited" : "Favorīti",
diff --git a/apps/files/l10n/mk.js b/apps/files/l10n/mk.js
index 13e21643c97..fbda6b4d1fb 100644
--- a/apps/files/l10n/mk.js
+++ b/apps/files/l10n/mk.js
@@ -51,6 +51,7 @@ OC.L10N.register(
"You deleted %1$s" : "Вие избришавте %1$s",
"%2$s deleted %1$s" : "%2$s избришани %1$s",
"%s could not be renamed" : "%s не може да биде преименуван",
+ "Upload (max. %s)" : "Префрлање (макс. %s)",
"File handling" : "Ракување со датотеки",
"Maximum upload size" : "Максимална големина за подигање",
"max. possible: " : "макс. можно:",
diff --git a/apps/files/l10n/mk.json b/apps/files/l10n/mk.json
index 12c4edc25c5..7eb9488916f 100644
--- a/apps/files/l10n/mk.json
+++ b/apps/files/l10n/mk.json
@@ -49,6 +49,7 @@
"You deleted %1$s" : "Вие избришавте %1$s",
"%2$s deleted %1$s" : "%2$s избришани %1$s",
"%s could not be renamed" : "%s не може да биде преименуван",
+ "Upload (max. %s)" : "Префрлање (макс. %s)",
"File handling" : "Ракување со датотеки",
"Maximum upload size" : "Максимална големина за подигање",
"max. possible: " : "макс. можно:",
diff --git a/apps/files/l10n/nb_NO.js b/apps/files/l10n/nb_NO.js
index bc9893c708a..b7741835c0f 100644
--- a/apps/files/l10n/nb_NO.js
+++ b/apps/files/l10n/nb_NO.js
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "Slett",
"Disconnect storage" : "Koble fra lagring",
"Unshare" : "Avslutt deling",
+ "No permission to delete" : "Ikke tillatelse til å slette",
"Download" : "Last ned",
"Select" : "Velg",
"Pending" : "Ventende",
"Unable to determine date" : "Kan ikke fastslå datoen",
+ "This operation is forbidden" : "Operasjonen er forbudt",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Denne mappen er utilgjengelig. Sjekk loggene eller kontakt administrator",
"Error moving file." : "Feil ved flytting av fil.",
"Error moving file" : "Feil ved flytting av fil",
"Error" : "Feil",
@@ -61,11 +64,10 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["Laster opp %n fil","Laster opp %n filer"],
"\"{name}\" is an invalid file name." : "\"{name}\" er et uglydig filnavn.",
"File name cannot be empty." : "Filnavn kan ikke være tomt.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Lagringsplass for {owner} er full, filer kan ikke oppdateres eller synkroniseres lenger!",
"Your storage is full, files can not be updated or synced anymore!" : "Lagringsplass er oppbrukt, filer kan ikke lenger oppdateres eller synkroniseres!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Lagringsplass for {owner} er nesten full ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Lagringsplass er nesten brukt opp ([usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøkkel for Krypterings-app. Oppdater passordet for din private nøkkel i dine personlige innstillinger for å gjenopprette tilgang til de krypterte filene dine.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Kryptering ble slått av men filene dine er fremdeles kryptert. Gå til dine personlige innstillinger for å dekryptere filene dine.",
"_matches '{filter}'_::_match '{filter}'_" : [" stemmer med '{filter}'"," stemmer med '{filter}'"],
"{dirs} and {files}" : "{dirs} og {files}",
"Favorited" : "Er favoritt",
@@ -73,6 +75,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "En feil oppstod under oppdatering av taggene",
"A new file or folder has been <strong>created</strong>" : "En ny fil eller mappe ble <strong>opprettet</strong>",
"A file or folder has been <strong>changed</strong>" : "En fil eller mappe ble <strong>endret</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Begrens varsling om oppretting og endringer til <strong>favorittfilene</strong> dine <em>(Kun strøm)</em>",
"A file or folder has been <strong>deleted</strong>" : "En fil eller mappe ble <strong>slettet</strong>",
"A file or folder has been <strong>restored</strong>" : "En fil eller mappe ble <strong>gjenopprettet</strong>",
"You created %1$s" : "Du opprettet %1$s",
@@ -88,10 +91,10 @@ OC.L10N.register(
"%s could not be renamed" : "Kunne ikke gi nytt navn til %s",
"Upload (max. %s)" : "Opplasting (maks. %s)",
"File handling" : "Filhåndtering",
- "Maximum upload size" : "Maksimum opplastingsstørrelse",
+ "Maximum upload size" : "Største opplastingsstørrelse",
"max. possible: " : "max. mulige:",
"Save" : "Lagre",
- "Can not be edited from here due to insufficient permissions." : "Kan ikke redigeres her pga. utilstrekkelige rettigheter.",
+ "Can not be edited from here due to insufficient permissions." : "Kan ikke redigeres her pga. manglende rettigheter.",
"Settings" : "Innstillinger",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Bruk denne adressen for å <a href=\"%s\" target=\"_blank\">få tilgang til filene dine via WebDAV</a>",
@@ -107,7 +110,7 @@ OC.L10N.register(
"No entries found in this folder" : "Ingen oppføringer funnet i denne mappen",
"Select all" : "Velg alle",
"Upload too large" : "Filen er for stor",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filene du prøver å laste opp er for store for å laste opp til denne serveren.",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filene du prøver å laste opp er for store til å laste opp til denne serveren.",
"Files are being scanned, please wait." : "Skanner filer, vennligst vent.",
"Currently scanning" : "Skanner nå",
"No favorites" : "Ingen favoritter",
diff --git a/apps/files/l10n/nb_NO.json b/apps/files/l10n/nb_NO.json
index 2c12b3ad0c5..662d8433c21 100644
--- a/apps/files/l10n/nb_NO.json
+++ b/apps/files/l10n/nb_NO.json
@@ -40,10 +40,13 @@
"Delete" : "Slett",
"Disconnect storage" : "Koble fra lagring",
"Unshare" : "Avslutt deling",
+ "No permission to delete" : "Ikke tillatelse til å slette",
"Download" : "Last ned",
"Select" : "Velg",
"Pending" : "Ventende",
"Unable to determine date" : "Kan ikke fastslå datoen",
+ "This operation is forbidden" : "Operasjonen er forbudt",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Denne mappen er utilgjengelig. Sjekk loggene eller kontakt administrator",
"Error moving file." : "Feil ved flytting av fil.",
"Error moving file" : "Feil ved flytting av fil",
"Error" : "Feil",
@@ -59,11 +62,10 @@
"_Uploading %n file_::_Uploading %n files_" : ["Laster opp %n fil","Laster opp %n filer"],
"\"{name}\" is an invalid file name." : "\"{name}\" er et uglydig filnavn.",
"File name cannot be empty." : "Filnavn kan ikke være tomt.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Lagringsplass for {owner} er full, filer kan ikke oppdateres eller synkroniseres lenger!",
"Your storage is full, files can not be updated or synced anymore!" : "Lagringsplass er oppbrukt, filer kan ikke lenger oppdateres eller synkroniseres!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Lagringsplass for {owner} er nesten full ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Lagringsplass er nesten brukt opp ([usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøkkel for Krypterings-app. Oppdater passordet for din private nøkkel i dine personlige innstillinger for å gjenopprette tilgang til de krypterte filene dine.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Kryptering ble slått av men filene dine er fremdeles kryptert. Gå til dine personlige innstillinger for å dekryptere filene dine.",
"_matches '{filter}'_::_match '{filter}'_" : [" stemmer med '{filter}'"," stemmer med '{filter}'"],
"{dirs} and {files}" : "{dirs} og {files}",
"Favorited" : "Er favoritt",
@@ -71,6 +73,7 @@
"An error occurred while trying to update the tags" : "En feil oppstod under oppdatering av taggene",
"A new file or folder has been <strong>created</strong>" : "En ny fil eller mappe ble <strong>opprettet</strong>",
"A file or folder has been <strong>changed</strong>" : "En fil eller mappe ble <strong>endret</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Begrens varsling om oppretting og endringer til <strong>favorittfilene</strong> dine <em>(Kun strøm)</em>",
"A file or folder has been <strong>deleted</strong>" : "En fil eller mappe ble <strong>slettet</strong>",
"A file or folder has been <strong>restored</strong>" : "En fil eller mappe ble <strong>gjenopprettet</strong>",
"You created %1$s" : "Du opprettet %1$s",
@@ -86,10 +89,10 @@
"%s could not be renamed" : "Kunne ikke gi nytt navn til %s",
"Upload (max. %s)" : "Opplasting (maks. %s)",
"File handling" : "Filhåndtering",
- "Maximum upload size" : "Maksimum opplastingsstørrelse",
+ "Maximum upload size" : "Største opplastingsstørrelse",
"max. possible: " : "max. mulige:",
"Save" : "Lagre",
- "Can not be edited from here due to insufficient permissions." : "Kan ikke redigeres her pga. utilstrekkelige rettigheter.",
+ "Can not be edited from here due to insufficient permissions." : "Kan ikke redigeres her pga. manglende rettigheter.",
"Settings" : "Innstillinger",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Bruk denne adressen for å <a href=\"%s\" target=\"_blank\">få tilgang til filene dine via WebDAV</a>",
@@ -105,7 +108,7 @@
"No entries found in this folder" : "Ingen oppføringer funnet i denne mappen",
"Select all" : "Velg alle",
"Upload too large" : "Filen er for stor",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filene du prøver å laste opp er for store for å laste opp til denne serveren.",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filene du prøver å laste opp er for store til å laste opp til denne serveren.",
"Files are being scanned, please wait." : "Skanner filer, vennligst vent.",
"Currently scanning" : "Skanner nå",
"No favorites" : "Ingen favoritter",
diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js
index 92be41a4c47..85bebde9c3e 100644
--- a/apps/files/l10n/nl.js
+++ b/apps/files/l10n/nl.js
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "Verwijderen",
"Disconnect storage" : "Verbinding met opslag verbreken",
"Unshare" : "Stop met delen",
+ "No permission to delete" : "Geen permissie om te verwijderen",
"Download" : "Downloaden",
"Select" : "Selecteer",
"Pending" : "In behandeling",
"Unable to determine date" : "Kon datum niet vaststellen",
+ "This operation is forbidden" : "Deze taak is verboden",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Deze map is niet beschikbaar. Verifieer de logs of neem contact op met de beheerder",
"Error moving file." : "Fout bij verplaatsen bestand.",
"Error moving file" : "Fout bij verplaatsen bestand",
"Error" : "Fout",
@@ -60,11 +63,10 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["%n bestand aan het uploaden","%n bestanden aan het uploaden"],
"\"{name}\" is an invalid file name." : "\"{name}\" is een ongeldige bestandsnaam.",
"File name cannot be empty." : "Bestandsnaam kan niet leeg zijn.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Opslagruimte van {owner} zit vol, bestanden kunnen niet meer worden ge-upload of gesynchroniseerd!",
"Your storage is full, files can not be updated or synced anymore!" : "Uw opslagruimte zit vol. Bestanden kunnen niet meer worden gewijzigd of gesynchroniseerd!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Opslagruimte van {owner} zit bijna vol ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Uw opslagruimte zit bijna vol ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Crypto app is geactiveerd, maar uw sleutels werden niet geïnitialiseerd. Log uit en log daarna opnieuw in.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ongeldige privésleutel voor crypto app. Werk het privésleutel wachtwoord bij in uw persoonlijke instellingen om opnieuw toegang te krijgen tot uw versleutelde bestanden.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Encryptie is uitgeschakeld maar uw bestanden zijn nog steeds versleuteld. Ga naar uw persoonlijke instellingen om uw bestanden te decoderen.",
"_matches '{filter}'_::_match '{filter}'_" : ["komt overeen met '{filter}'","komen overeen met '{filter}'"],
"{dirs} and {files}" : "{dirs} en {files}",
"Favorited" : "Favoriet",
@@ -72,6 +74,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "Er trad een fout op bij uw poging de tags bij te werken",
"A new file or folder has been <strong>created</strong>" : "Een nieuw bestand of map is <strong>aangemaakt</strong>",
"A file or folder has been <strong>changed</strong>" : "Een bestand of map is <strong>gewijzigd</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Beperk meldingen over aanmaken en wijzigen aan uw <strong>favoriete bestanden</strong> <em>(Alleen stream)</em>",
"A file or folder has been <strong>deleted</strong>" : "Een bestand of map is <strong>verwijderd</strong>",
"A file or folder has been <strong>restored</strong>" : "Een bestand of een mmaps is <strong>hersteld</strong>",
"You created %1$s" : "U creëerde %1$s",
diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json
index 154f8c835a7..9094ed1b031 100644
--- a/apps/files/l10n/nl.json
+++ b/apps/files/l10n/nl.json
@@ -40,10 +40,13 @@
"Delete" : "Verwijderen",
"Disconnect storage" : "Verbinding met opslag verbreken",
"Unshare" : "Stop met delen",
+ "No permission to delete" : "Geen permissie om te verwijderen",
"Download" : "Downloaden",
"Select" : "Selecteer",
"Pending" : "In behandeling",
"Unable to determine date" : "Kon datum niet vaststellen",
+ "This operation is forbidden" : "Deze taak is verboden",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Deze map is niet beschikbaar. Verifieer de logs of neem contact op met de beheerder",
"Error moving file." : "Fout bij verplaatsen bestand.",
"Error moving file" : "Fout bij verplaatsen bestand",
"Error" : "Fout",
@@ -58,11 +61,10 @@
"_Uploading %n file_::_Uploading %n files_" : ["%n bestand aan het uploaden","%n bestanden aan het uploaden"],
"\"{name}\" is an invalid file name." : "\"{name}\" is een ongeldige bestandsnaam.",
"File name cannot be empty." : "Bestandsnaam kan niet leeg zijn.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Opslagruimte van {owner} zit vol, bestanden kunnen niet meer worden ge-upload of gesynchroniseerd!",
"Your storage is full, files can not be updated or synced anymore!" : "Uw opslagruimte zit vol. Bestanden kunnen niet meer worden gewijzigd of gesynchroniseerd!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Opslagruimte van {owner} zit bijna vol ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Uw opslagruimte zit bijna vol ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Crypto app is geactiveerd, maar uw sleutels werden niet geïnitialiseerd. Log uit en log daarna opnieuw in.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ongeldige privésleutel voor crypto app. Werk het privésleutel wachtwoord bij in uw persoonlijke instellingen om opnieuw toegang te krijgen tot uw versleutelde bestanden.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Encryptie is uitgeschakeld maar uw bestanden zijn nog steeds versleuteld. Ga naar uw persoonlijke instellingen om uw bestanden te decoderen.",
"_matches '{filter}'_::_match '{filter}'_" : ["komt overeen met '{filter}'","komen overeen met '{filter}'"],
"{dirs} and {files}" : "{dirs} en {files}",
"Favorited" : "Favoriet",
@@ -70,6 +72,7 @@
"An error occurred while trying to update the tags" : "Er trad een fout op bij uw poging de tags bij te werken",
"A new file or folder has been <strong>created</strong>" : "Een nieuw bestand of map is <strong>aangemaakt</strong>",
"A file or folder has been <strong>changed</strong>" : "Een bestand of map is <strong>gewijzigd</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Beperk meldingen over aanmaken en wijzigen aan uw <strong>favoriete bestanden</strong> <em>(Alleen stream)</em>",
"A file or folder has been <strong>deleted</strong>" : "Een bestand of map is <strong>verwijderd</strong>",
"A file or folder has been <strong>restored</strong>" : "Een bestand of een mmaps is <strong>hersteld</strong>",
"You created %1$s" : "U creëerde %1$s",
diff --git a/apps/files/l10n/nn_NO.js b/apps/files/l10n/nn_NO.js
index fd378eeb606..af4ec92771c 100644
--- a/apps/files/l10n/nn_NO.js
+++ b/apps/files/l10n/nn_NO.js
@@ -42,7 +42,6 @@ OC.L10N.register(
"File name cannot be empty." : "Filnamnet kan ikkje vera tomt.",
"Your storage is full, files can not be updated or synced anymore!" : "Lagringa di er full, kan ikkje lenger oppdatera eller synkronisera!",
"Your storage is almost full ({usedSpacePercent}%)" : "Lagringa di er nesten full ({usedSpacePercent} %)",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Kryptering er skrudd av, men filene dine er enno krypterte. Du kan dekryptera filene i personlege innstillingar.",
"{dirs} and {files}" : "{dirs} og {files}",
"Favorite" : "Favoritt",
"A new file or folder has been <strong>created</strong>" : "Ei ny fil eller mappe er <strong>oppretta</strong>",
diff --git a/apps/files/l10n/nn_NO.json b/apps/files/l10n/nn_NO.json
index a03cb799eae..8e0e297220f 100644
--- a/apps/files/l10n/nn_NO.json
+++ b/apps/files/l10n/nn_NO.json
@@ -40,7 +40,6 @@
"File name cannot be empty." : "Filnamnet kan ikkje vera tomt.",
"Your storage is full, files can not be updated or synced anymore!" : "Lagringa di er full, kan ikkje lenger oppdatera eller synkronisera!",
"Your storage is almost full ({usedSpacePercent}%)" : "Lagringa di er nesten full ({usedSpacePercent} %)",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Kryptering er skrudd av, men filene dine er enno krypterte. Du kan dekryptera filene i personlege innstillingar.",
"{dirs} and {files}" : "{dirs} og {files}",
"Favorite" : "Favoritt",
"A new file or folder has been <strong>created</strong>" : "Ei ny fil eller mappe er <strong>oppretta</strong>",
diff --git a/apps/files/l10n/oc.js b/apps/files/l10n/oc.js
index ba100451061..a3beb77ef2a 100644
--- a/apps/files/l10n/oc.js
+++ b/apps/files/l10n/oc.js
@@ -1,36 +1,115 @@
OC.L10N.register(
"files",
{
- "There is no error, the file uploaded with success" : "Amontcargament capitat, pas d'errors",
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Lo fichièr amontcargat es mai gròs que la directiva «MAX_FILE_SIZE» especifiada dins lo formulari HTML",
- "The uploaded file was only partially uploaded" : "Lo fichièr foguèt pas completament amontcargat",
- "No file was uploaded" : "Cap de fichièrs son estats amontcargats",
- "Missing a temporary folder" : "Un dorsièr temporari manca",
- "Failed to write to disk" : "L'escriptura sul disc a fracassat",
+ "Storage not available" : "Supòrt d'emmagazinatge pas disponible",
+ "Storage invalid" : "Supòrt d'emmagazinatge pas valable",
+ "Unknown error" : "Error Desconeguda ",
+ "Could not move %s - File with this name already exists" : "Impossible de desplaçar %s - Un fichièr que pòrta aqueste nom existís ja",
+ "Could not move %s" : "Impossible de desplaçar %s",
+ "Permission denied" : "Permission refusada",
+ "The target folder has been moved or deleted." : "Lo dorsièr cibla es estat desplaçat o suprimit.",
+ "The name %s is already used in the folder %s. Please choose a different name." : "Lo nom %s es ja utilizat dins lo dorsièr %s. Mercé de causir un nom diferent.",
+ "Error when creating the file" : "Error pendent la creacion del fichièr",
+ "Error when creating the folder" : "Error pendent la creacion del dorsièr",
+ "Unable to set upload directory." : "Impossible de definir lo dorsièr de destinacion.",
+ "Invalid Token" : "Geton invalid",
+ "No file was uploaded. Unknown error" : "Cap de fichièr es pas estat mandat. Error desconeguda",
+ "There is no error, the file uploaded with success" : "Pas cap d'error, lo fichièr es estat mandat amb succès.",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Lo fichièr mandat depassa l'instruccion upload_max_filesize situada dins lo fichièr php.ini :",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Lo fichièr mandat depassa la valor MAX_FILE_SIZE qu'èra especificada dins lo formulari HTML.",
+ "The uploaded file was only partially uploaded" : "Lo fichièr es estat mandat sonque parcialament.",
+ "No file was uploaded" : "Pas de fichièr mandat.",
+ "Missing a temporary folder" : "Abséncia de dorsièr temporari",
+ "Failed to write to disk" : "Error d'escritura sul disc",
+ "Not enough storage available" : "Pas pro d'espaci d'emmagazinatge de disponible",
+ "Upload failed. Could not find uploaded file" : "Lo mandadís a fracassat. Impossible de trobar lo fichièr mandat.",
+ "Upload failed. Could not get file info." : "Lo mandadís a fracassat. Impossible d'obténer las informacions del fichièr.",
+ "Invalid directory." : "Dorsièr invalid.",
"Files" : "Fichièrs",
- "Upload cancelled." : "Amontcargar anullat.",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Un amontcargar es a se far. Daissar aquesta pagina ara tamparà lo cargament. ",
- "Rename" : "Torna nomenar",
- "Delete" : "Escafa",
- "Unshare" : "Pas partejador",
- "Download" : "Avalcarga",
- "Pending" : "Al esperar",
+ "All files" : "Totes los fichièrs",
+ "Favorites" : "Favorits",
+ "Home" : "Mos fichièrs",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossible de mandar {filename} perque s'agís d'un repertòri o d'un fichièr de talha nulla",
+ "Total file size {size1} exceeds upload limit {size2}" : "La talha totala del fichièr {size1} excedís la talha maximala de mandadís {size2}",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "Espaci liure insufisent : ensajatz de mandar {size1} mas solament {size2} son disponibles",
+ "Upload cancelled." : "Mandadís anullat.",
+ "Could not get result from server." : "Pòt pas recebre los resultats del servidor.",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Lo mandadís del fichièr es en cors. Quitar aquesta pagina ara anullarà lo mandadís del fichièr.",
+ "{new_name} already exists" : "{new_name} existís ja",
+ "Could not create file" : "Impossible de crear lo fichièr",
+ "Could not create folder" : "Impossible de crear lo dorsièr",
+ "Rename" : "Renomenar",
+ "Delete" : "Suprimir",
+ "Disconnect storage" : "Desconnectar aqueste supòrt d'emmagazinatge",
+ "Unshare" : "Partejar pas mai",
+ "No permission to delete" : "Pas de permission de supression",
+ "Download" : "Telecargar",
+ "Select" : "Seleccionar",
+ "Pending" : "En espèra",
+ "Unable to determine date" : "Impossible de determinar la data",
+ "Error moving file." : "Error al moment del desplaçament del fichièr.",
+ "Error moving file" : "Error al moment del desplaçament del fichièr",
"Error" : "Error",
+ "Could not rename file" : "Impossible de renomenar lo fichièr",
+ "Error deleting file." : "Error pendent la supression del fichièr.",
+ "No entries in this folder match '{filter}'" : "Cap d'entrada d'aqueste dorsièr correspond pas a '{filter}'",
"Name" : "Nom",
"Size" : "Talha",
"Modified" : "Modificat",
- "File handling" : "Manejament de fichièr",
- "Maximum upload size" : "Talha maximum d'amontcargament",
- "max. possible: " : "max. possible: ",
- "Save" : "Enregistra",
+ "_%n folder_::_%n folders_" : ["%n dorsièr","%n dorsièrs"],
+ "_%n file_::_%n files_" : ["%n fichièr","%n fichièrs"],
+ "You don’t have permission to upload or create files here" : "Avètz pas la permission d'apondre de fichièrs aicí",
+ "_Uploading %n file_::_Uploading %n files_" : ["Mandadís de %n fichièr","Mandadís de %n fichièrs"],
+ "\"{name}\" is an invalid file name." : "\"{name}\" es pas un nom de fichièr valid.",
+ "File name cannot be empty." : "Lo nom de fichièr pòt pas èsser void.",
+ "Your storage is full, files can not be updated or synced anymore!" : "Vòstre espaci d'emmagazinatge es plen, los fichièrs pòdon pas mai èsser aponduts o sincronizats !",
+ "Your storage is almost full ({usedSpacePercent}%)" : "Vòstre espace d'emmagazinatge es gaireben plen ({usedSpacePercent}%)",
+ "_matches '{filter}'_::_match '{filter}'_" : ["correspond a '{filter}'","correspondon a '{filter}'"],
+ "{dirs} and {files}" : "{dirs} e {files}",
+ "Favorited" : "Marcat coma favorit",
+ "Favorite" : "Favorit",
+ "An error occurred while trying to update the tags" : "Una error s'es produsida al moment de la mesa a jorn de las etiquetas",
+ "A new file or folder has been <strong>created</strong>" : "Un novèl fichièr o repertòri es estat <strong>creat</strong>",
+ "A file or folder has been <strong>changed</strong>" : "Un fichièr o un repertòri es estat <strong>modificat</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitar las notifications a çò que concernís la creacion e la modificacion de vòstres <strong>fichièrs favorits</strong> <em>(Flux unicament)</em>",
+ "A file or folder has been <strong>deleted</strong>" : "Un fichièr o un repertòri es estat <strong>suprimit</strong>",
+ "A file or folder has been <strong>restored</strong>" : "Un fichièr o un repertòri es estat <strong>restablit</strong>",
+ "You created %1$s" : "Avètz creat %1$s",
+ "%2$s created %1$s" : "%2$s a creat %1$s",
+ "%1$s was created in a public folder" : "%1$s es estat creat dins un dorsièr public",
+ "You changed %1$s" : "Avètz modificat %1$s",
+ "%2$s changed %1$s" : "%2$s a modificat %1$s",
+ "You deleted %1$s" : "Avètz suprimit %1$s",
+ "%2$s deleted %1$s" : "%2$s a suprimit %1$s",
+ "You restored %1$s" : "Avètz restablit %1$s",
+ "%2$s restored %1$s" : "%2$s a restablit %1$s",
+ "%s could not be renamed as it has been deleted" : "%s pòt pas èsser renomenat perque es estat suprimit ",
+ "%s could not be renamed" : "%s pòt pas èsser renomenat",
+ "Upload (max. %s)" : "Mandadís (max. %s)",
+ "File handling" : "Gestion de fichièrs",
+ "Maximum upload size" : "Talha max. de mandadís",
+ "max. possible: " : "Max. possible :",
+ "Save" : "Salvar",
+ "Can not be edited from here due to insufficient permissions." : "Pòt pas èsser modificat aicí a causa de permissions insufisentas.",
"Settings" : "Paramètres",
- "New" : "Nòu",
- "Text file" : "Fichièr de tèxte",
+ "WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizatz aquesta adreça per <a href=\"%s\" target=\"_blank\">accedir a vòstres fichièrs per WebDAV</a>",
+ "New" : "Novèl",
+ "New text file" : "Novèl fichièr tèxte",
+ "Text file" : "Fichièr tèxte",
+ "New folder" : "Novèl dorsièr",
"Folder" : "Dorsièr",
- "Upload" : "Amontcarga",
- "Cancel upload" : " Anulla l'amontcargar",
- "Upload too large" : "Amontcargament tròp gròs",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los fichièrs que sias a amontcargar son tròp pesucs per la talha maxi pel servidor.",
- "Files are being scanned, please wait." : "Los fiichièrs son a èsser explorats, "
+ "Upload" : "Cargament",
+ "Cancel upload" : "Anullar lo mandadís",
+ "No files in here" : "Pas cap de fichièr aicí",
+ "Upload some content or sync with your devices!" : "Depausatz de contengut o sincronizatz vòstres aparelhs !",
+ "No entries found in this folder" : "Cap d'entrada pas trobada dins aqueste dorsièr",
+ "Select all" : "Seleccionar tot",
+ "Upload too large" : "Mandadís tròp voluminós",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los fichièrs qu'ensajatz de mandar depassan la talha maximala de mandadís permesa per aqueste servidor.",
+ "Files are being scanned, please wait." : "Los fichièrs son en cors d'analisi, pacientatz.",
+ "Currently scanning" : "Analisi en cors",
+ "No favorites" : "Pas cap de favorit",
+ "Files and folders you mark as favorite will show up here" : "Los fichièrs e dorsièrs aponduts a vòstres favorits apareisseràn aicí"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files/l10n/oc.json b/apps/files/l10n/oc.json
index f06365c6b0b..1a904502025 100644
--- a/apps/files/l10n/oc.json
+++ b/apps/files/l10n/oc.json
@@ -1,34 +1,113 @@
{ "translations": {
- "There is no error, the file uploaded with success" : "Amontcargament capitat, pas d'errors",
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Lo fichièr amontcargat es mai gròs que la directiva «MAX_FILE_SIZE» especifiada dins lo formulari HTML",
- "The uploaded file was only partially uploaded" : "Lo fichièr foguèt pas completament amontcargat",
- "No file was uploaded" : "Cap de fichièrs son estats amontcargats",
- "Missing a temporary folder" : "Un dorsièr temporari manca",
- "Failed to write to disk" : "L'escriptura sul disc a fracassat",
+ "Storage not available" : "Supòrt d'emmagazinatge pas disponible",
+ "Storage invalid" : "Supòrt d'emmagazinatge pas valable",
+ "Unknown error" : "Error Desconeguda ",
+ "Could not move %s - File with this name already exists" : "Impossible de desplaçar %s - Un fichièr que pòrta aqueste nom existís ja",
+ "Could not move %s" : "Impossible de desplaçar %s",
+ "Permission denied" : "Permission refusada",
+ "The target folder has been moved or deleted." : "Lo dorsièr cibla es estat desplaçat o suprimit.",
+ "The name %s is already used in the folder %s. Please choose a different name." : "Lo nom %s es ja utilizat dins lo dorsièr %s. Mercé de causir un nom diferent.",
+ "Error when creating the file" : "Error pendent la creacion del fichièr",
+ "Error when creating the folder" : "Error pendent la creacion del dorsièr",
+ "Unable to set upload directory." : "Impossible de definir lo dorsièr de destinacion.",
+ "Invalid Token" : "Geton invalid",
+ "No file was uploaded. Unknown error" : "Cap de fichièr es pas estat mandat. Error desconeguda",
+ "There is no error, the file uploaded with success" : "Pas cap d'error, lo fichièr es estat mandat amb succès.",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Lo fichièr mandat depassa l'instruccion upload_max_filesize situada dins lo fichièr php.ini :",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Lo fichièr mandat depassa la valor MAX_FILE_SIZE qu'èra especificada dins lo formulari HTML.",
+ "The uploaded file was only partially uploaded" : "Lo fichièr es estat mandat sonque parcialament.",
+ "No file was uploaded" : "Pas de fichièr mandat.",
+ "Missing a temporary folder" : "Abséncia de dorsièr temporari",
+ "Failed to write to disk" : "Error d'escritura sul disc",
+ "Not enough storage available" : "Pas pro d'espaci d'emmagazinatge de disponible",
+ "Upload failed. Could not find uploaded file" : "Lo mandadís a fracassat. Impossible de trobar lo fichièr mandat.",
+ "Upload failed. Could not get file info." : "Lo mandadís a fracassat. Impossible d'obténer las informacions del fichièr.",
+ "Invalid directory." : "Dorsièr invalid.",
"Files" : "Fichièrs",
- "Upload cancelled." : "Amontcargar anullat.",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Un amontcargar es a se far. Daissar aquesta pagina ara tamparà lo cargament. ",
- "Rename" : "Torna nomenar",
- "Delete" : "Escafa",
- "Unshare" : "Pas partejador",
- "Download" : "Avalcarga",
- "Pending" : "Al esperar",
+ "All files" : "Totes los fichièrs",
+ "Favorites" : "Favorits",
+ "Home" : "Mos fichièrs",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossible de mandar {filename} perque s'agís d'un repertòri o d'un fichièr de talha nulla",
+ "Total file size {size1} exceeds upload limit {size2}" : "La talha totala del fichièr {size1} excedís la talha maximala de mandadís {size2}",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "Espaci liure insufisent : ensajatz de mandar {size1} mas solament {size2} son disponibles",
+ "Upload cancelled." : "Mandadís anullat.",
+ "Could not get result from server." : "Pòt pas recebre los resultats del servidor.",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Lo mandadís del fichièr es en cors. Quitar aquesta pagina ara anullarà lo mandadís del fichièr.",
+ "{new_name} already exists" : "{new_name} existís ja",
+ "Could not create file" : "Impossible de crear lo fichièr",
+ "Could not create folder" : "Impossible de crear lo dorsièr",
+ "Rename" : "Renomenar",
+ "Delete" : "Suprimir",
+ "Disconnect storage" : "Desconnectar aqueste supòrt d'emmagazinatge",
+ "Unshare" : "Partejar pas mai",
+ "No permission to delete" : "Pas de permission de supression",
+ "Download" : "Telecargar",
+ "Select" : "Seleccionar",
+ "Pending" : "En espèra",
+ "Unable to determine date" : "Impossible de determinar la data",
+ "Error moving file." : "Error al moment del desplaçament del fichièr.",
+ "Error moving file" : "Error al moment del desplaçament del fichièr",
"Error" : "Error",
+ "Could not rename file" : "Impossible de renomenar lo fichièr",
+ "Error deleting file." : "Error pendent la supression del fichièr.",
+ "No entries in this folder match '{filter}'" : "Cap d'entrada d'aqueste dorsièr correspond pas a '{filter}'",
"Name" : "Nom",
"Size" : "Talha",
"Modified" : "Modificat",
- "File handling" : "Manejament de fichièr",
- "Maximum upload size" : "Talha maximum d'amontcargament",
- "max. possible: " : "max. possible: ",
- "Save" : "Enregistra",
+ "_%n folder_::_%n folders_" : ["%n dorsièr","%n dorsièrs"],
+ "_%n file_::_%n files_" : ["%n fichièr","%n fichièrs"],
+ "You don’t have permission to upload or create files here" : "Avètz pas la permission d'apondre de fichièrs aicí",
+ "_Uploading %n file_::_Uploading %n files_" : ["Mandadís de %n fichièr","Mandadís de %n fichièrs"],
+ "\"{name}\" is an invalid file name." : "\"{name}\" es pas un nom de fichièr valid.",
+ "File name cannot be empty." : "Lo nom de fichièr pòt pas èsser void.",
+ "Your storage is full, files can not be updated or synced anymore!" : "Vòstre espaci d'emmagazinatge es plen, los fichièrs pòdon pas mai èsser aponduts o sincronizats !",
+ "Your storage is almost full ({usedSpacePercent}%)" : "Vòstre espace d'emmagazinatge es gaireben plen ({usedSpacePercent}%)",
+ "_matches '{filter}'_::_match '{filter}'_" : ["correspond a '{filter}'","correspondon a '{filter}'"],
+ "{dirs} and {files}" : "{dirs} e {files}",
+ "Favorited" : "Marcat coma favorit",
+ "Favorite" : "Favorit",
+ "An error occurred while trying to update the tags" : "Una error s'es produsida al moment de la mesa a jorn de las etiquetas",
+ "A new file or folder has been <strong>created</strong>" : "Un novèl fichièr o repertòri es estat <strong>creat</strong>",
+ "A file or folder has been <strong>changed</strong>" : "Un fichièr o un repertòri es estat <strong>modificat</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitar las notifications a çò que concernís la creacion e la modificacion de vòstres <strong>fichièrs favorits</strong> <em>(Flux unicament)</em>",
+ "A file or folder has been <strong>deleted</strong>" : "Un fichièr o un repertòri es estat <strong>suprimit</strong>",
+ "A file or folder has been <strong>restored</strong>" : "Un fichièr o un repertòri es estat <strong>restablit</strong>",
+ "You created %1$s" : "Avètz creat %1$s",
+ "%2$s created %1$s" : "%2$s a creat %1$s",
+ "%1$s was created in a public folder" : "%1$s es estat creat dins un dorsièr public",
+ "You changed %1$s" : "Avètz modificat %1$s",
+ "%2$s changed %1$s" : "%2$s a modificat %1$s",
+ "You deleted %1$s" : "Avètz suprimit %1$s",
+ "%2$s deleted %1$s" : "%2$s a suprimit %1$s",
+ "You restored %1$s" : "Avètz restablit %1$s",
+ "%2$s restored %1$s" : "%2$s a restablit %1$s",
+ "%s could not be renamed as it has been deleted" : "%s pòt pas èsser renomenat perque es estat suprimit ",
+ "%s could not be renamed" : "%s pòt pas èsser renomenat",
+ "Upload (max. %s)" : "Mandadís (max. %s)",
+ "File handling" : "Gestion de fichièrs",
+ "Maximum upload size" : "Talha max. de mandadís",
+ "max. possible: " : "Max. possible :",
+ "Save" : "Salvar",
+ "Can not be edited from here due to insufficient permissions." : "Pòt pas èsser modificat aicí a causa de permissions insufisentas.",
"Settings" : "Paramètres",
- "New" : "Nòu",
- "Text file" : "Fichièr de tèxte",
+ "WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizatz aquesta adreça per <a href=\"%s\" target=\"_blank\">accedir a vòstres fichièrs per WebDAV</a>",
+ "New" : "Novèl",
+ "New text file" : "Novèl fichièr tèxte",
+ "Text file" : "Fichièr tèxte",
+ "New folder" : "Novèl dorsièr",
"Folder" : "Dorsièr",
- "Upload" : "Amontcarga",
- "Cancel upload" : " Anulla l'amontcargar",
- "Upload too large" : "Amontcargament tròp gròs",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los fichièrs que sias a amontcargar son tròp pesucs per la talha maxi pel servidor.",
- "Files are being scanned, please wait." : "Los fiichièrs son a èsser explorats, "
+ "Upload" : "Cargament",
+ "Cancel upload" : "Anullar lo mandadís",
+ "No files in here" : "Pas cap de fichièr aicí",
+ "Upload some content or sync with your devices!" : "Depausatz de contengut o sincronizatz vòstres aparelhs !",
+ "No entries found in this folder" : "Cap d'entrada pas trobada dins aqueste dorsièr",
+ "Select all" : "Seleccionar tot",
+ "Upload too large" : "Mandadís tròp voluminós",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los fichièrs qu'ensajatz de mandar depassan la talha maximala de mandadís permesa per aqueste servidor.",
+ "Files are being scanned, please wait." : "Los fichièrs son en cors d'analisi, pacientatz.",
+ "Currently scanning" : "Analisi en cors",
+ "No favorites" : "Pas cap de favorit",
+ "Files and folders you mark as favorite will show up here" : "Los fichièrs e dorsièrs aponduts a vòstres favorits apareisseràn aicí"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js
index 635780e8876..daa623d3cde 100644
--- a/apps/files/l10n/pl.js
+++ b/apps/files/l10n/pl.js
@@ -42,14 +42,17 @@ OC.L10N.register(
"Delete" : "Usuń",
"Disconnect storage" : "Odłącz magazyn",
"Unshare" : "Zatrzymaj współdzielenie",
+ "No permission to delete" : "Brak uprawnień do usunięcia",
"Download" : "Pobierz",
"Select" : "Wybierz",
"Pending" : "Oczekujące",
+ "Unable to determine date" : "Nie można ustalić daty",
"Error moving file." : "Błąd podczas przenoszenia pliku.",
"Error moving file" : "Błąd prz przenoszeniu pliku",
"Error" : "Błąd",
"Could not rename file" : "Nie można zmienić nazwy pliku",
"Error deleting file." : "Błąd podczas usuwania pliku",
+ "No entries in this folder match '{filter}'" : "Brak wyników pasujących do '{filter}'",
"Name" : "Nazwa",
"Size" : "Rozmiar",
"Modified" : "Modyfikacja",
@@ -59,12 +62,12 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["Wysyłanie %n pliku","Wysyłanie %n plików","Wysyłanie %n plików"],
"\"{name}\" is an invalid file name." : "\"{name}\" jest nieprawidłową nazwą pliku.",
"File name cannot be empty." : "Nazwa pliku nie może być pusta.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Brak wolnego miejsca {owner}, pliki nie mogą zostać zaktualizowane lub synchronizowane! ",
"Your storage is full, files can not be updated or synced anymore!" : "Magazyn jest pełny. Pliki nie mogą zostać zaktualizowane lub zsynchronizowane!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Miejsce dla {owner} jest na wyczerpaniu ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Twój magazyn jest prawie pełny ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacja szyfrująca jest aktywna, ale twoje klucze nie zostały zainicjowane, prosze wyloguj się i zaloguj ponownie.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Klucz prywatny nie jest poprawny! Może Twoje hasło zostało zmienione z zewnątrz. Można zaktualizować hasło klucza prywatnego w ustawieniach osobistych w celu odzyskania dostępu do plików",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Szyfrowanie zostało wyłączone, ale nadal pliki są zaszyfrowane. Przejdź do ustawień osobistych i tam odszyfruj pliki.",
"{dirs} and {files}" : "{dirs} i {files}",
+ "Favorited" : "Ulubione",
"Favorite" : "Ulubione",
"A new file or folder has been <strong>created</strong>" : "Nowy plik lub folder został <strong>utworzony</strong>",
"A file or folder has been <strong>changed</strong>" : "Plik lub folder został <strong>zmieniony</strong>",
diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json
index 6ecce8ddca2..a46afbcc9f0 100644
--- a/apps/files/l10n/pl.json
+++ b/apps/files/l10n/pl.json
@@ -40,14 +40,17 @@
"Delete" : "Usuń",
"Disconnect storage" : "Odłącz magazyn",
"Unshare" : "Zatrzymaj współdzielenie",
+ "No permission to delete" : "Brak uprawnień do usunięcia",
"Download" : "Pobierz",
"Select" : "Wybierz",
"Pending" : "Oczekujące",
+ "Unable to determine date" : "Nie można ustalić daty",
"Error moving file." : "Błąd podczas przenoszenia pliku.",
"Error moving file" : "Błąd prz przenoszeniu pliku",
"Error" : "Błąd",
"Could not rename file" : "Nie można zmienić nazwy pliku",
"Error deleting file." : "Błąd podczas usuwania pliku",
+ "No entries in this folder match '{filter}'" : "Brak wyników pasujących do '{filter}'",
"Name" : "Nazwa",
"Size" : "Rozmiar",
"Modified" : "Modyfikacja",
@@ -57,12 +60,12 @@
"_Uploading %n file_::_Uploading %n files_" : ["Wysyłanie %n pliku","Wysyłanie %n plików","Wysyłanie %n plików"],
"\"{name}\" is an invalid file name." : "\"{name}\" jest nieprawidłową nazwą pliku.",
"File name cannot be empty." : "Nazwa pliku nie może być pusta.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Brak wolnego miejsca {owner}, pliki nie mogą zostać zaktualizowane lub synchronizowane! ",
"Your storage is full, files can not be updated or synced anymore!" : "Magazyn jest pełny. Pliki nie mogą zostać zaktualizowane lub zsynchronizowane!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Miejsce dla {owner} jest na wyczerpaniu ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Twój magazyn jest prawie pełny ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacja szyfrująca jest aktywna, ale twoje klucze nie zostały zainicjowane, prosze wyloguj się i zaloguj ponownie.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Klucz prywatny nie jest poprawny! Może Twoje hasło zostało zmienione z zewnątrz. Można zaktualizować hasło klucza prywatnego w ustawieniach osobistych w celu odzyskania dostępu do plików",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Szyfrowanie zostało wyłączone, ale nadal pliki są zaszyfrowane. Przejdź do ustawień osobistych i tam odszyfruj pliki.",
"{dirs} and {files}" : "{dirs} i {files}",
+ "Favorited" : "Ulubione",
"Favorite" : "Ulubione",
"A new file or folder has been <strong>created</strong>" : "Nowy plik lub folder został <strong>utworzony</strong>",
"A file or folder has been <strong>changed</strong>" : "Plik lub folder został <strong>zmieniony</strong>",
diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js
index 7d23e67422b..583123252f9 100644
--- a/apps/files/l10n/pt_BR.js
+++ b/apps/files/l10n/pt_BR.js
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "Excluir",
"Disconnect storage" : "Desconectar armazenagem",
"Unshare" : "Descompartilhar",
+ "No permission to delete" : "Sem permissão para excluir",
"Download" : "Baixar",
"Select" : "Selecionar",
"Pending" : "Pendente",
"Unable to determine date" : "Impossível determinar a data",
+ "This operation is forbidden" : "Esta operação é proibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor, verifique os logs ou entre em contato com o administrador",
"Error moving file." : "Erro movendo o arquivo.",
"Error moving file" : "Erro movendo o arquivo",
"Error" : "Erro",
@@ -61,17 +64,18 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["Enviando %n arquivo","Enviando %n arquivos"],
"\"{name}\" is an invalid file name." : "\"{name}\" é um nome de arquivo inválido.",
"File name cannot be empty." : "O nome do arquivo não pode estar vazio.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Armazenamento do {owner} está cheio, os arquivos não podem ser mais atualizados ou sincronizados!",
"Your storage is full, files can not be updated or synced anymore!" : "Seu armazenamento está cheio, arquivos não podem mais ser atualizados ou sincronizados!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Armazenamento do {owner} está quase cheio ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Seu armazenamento está quase cheio ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App de criptografia está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave do App de Criptografia é inválida. Por favor, atualize sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Criptografia foi desabilitada mas seus arquivos continuam criptografados. Por favor vá a suas configurações pessoais para descriptar seus arquivos.",
+ "_matches '{filter}'_::_match '{filter}'_" : ["coincide com '{filter}'","coincide com '{filter}'"],
"{dirs} and {files}" : "{dirs} e {files}",
"Favorited" : "Favorito",
"Favorite" : "Favorito",
"An error occurred while trying to update the tags" : "Ocorreu um erro enquanto tentava atualizar as etiquetas",
"A new file or folder has been <strong>created</strong>" : "Um novo arquivo ou pasta foi <strong>criado</strong>",
"A file or folder has been <strong>changed</strong>" : "Um arquivo ou pasta foi <strong>modificado</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limite de notificações sobre a criação e alterações em seus <strong>arquivos favoritos</strong> <em>(Stream apenas)</em>",
"A file or folder has been <strong>deleted</strong>" : "Um arquivo ou pasta foi <strong>excluído</strong>",
"A file or folder has been <strong>restored</strong>" : "Um arquivo ou pasta foi <strong>restautado</strong>",
"You created %1$s" : "Você criou %1$s",
diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json
index 17c69e0607d..31227d66f82 100644
--- a/apps/files/l10n/pt_BR.json
+++ b/apps/files/l10n/pt_BR.json
@@ -40,10 +40,13 @@
"Delete" : "Excluir",
"Disconnect storage" : "Desconectar armazenagem",
"Unshare" : "Descompartilhar",
+ "No permission to delete" : "Sem permissão para excluir",
"Download" : "Baixar",
"Select" : "Selecionar",
"Pending" : "Pendente",
"Unable to determine date" : "Impossível determinar a data",
+ "This operation is forbidden" : "Esta operação é proibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor, verifique os logs ou entre em contato com o administrador",
"Error moving file." : "Erro movendo o arquivo.",
"Error moving file" : "Erro movendo o arquivo",
"Error" : "Erro",
@@ -59,17 +62,18 @@
"_Uploading %n file_::_Uploading %n files_" : ["Enviando %n arquivo","Enviando %n arquivos"],
"\"{name}\" is an invalid file name." : "\"{name}\" é um nome de arquivo inválido.",
"File name cannot be empty." : "O nome do arquivo não pode estar vazio.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Armazenamento do {owner} está cheio, os arquivos não podem ser mais atualizados ou sincronizados!",
"Your storage is full, files can not be updated or synced anymore!" : "Seu armazenamento está cheio, arquivos não podem mais ser atualizados ou sincronizados!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Armazenamento do {owner} está quase cheio ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Seu armazenamento está quase cheio ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App de criptografia está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave do App de Criptografia é inválida. Por favor, atualize sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Criptografia foi desabilitada mas seus arquivos continuam criptografados. Por favor vá a suas configurações pessoais para descriptar seus arquivos.",
+ "_matches '{filter}'_::_match '{filter}'_" : ["coincide com '{filter}'","coincide com '{filter}'"],
"{dirs} and {files}" : "{dirs} e {files}",
"Favorited" : "Favorito",
"Favorite" : "Favorito",
"An error occurred while trying to update the tags" : "Ocorreu um erro enquanto tentava atualizar as etiquetas",
"A new file or folder has been <strong>created</strong>" : "Um novo arquivo ou pasta foi <strong>criado</strong>",
"A file or folder has been <strong>changed</strong>" : "Um arquivo ou pasta foi <strong>modificado</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limite de notificações sobre a criação e alterações em seus <strong>arquivos favoritos</strong> <em>(Stream apenas)</em>",
"A file or folder has been <strong>deleted</strong>" : "Um arquivo ou pasta foi <strong>excluído</strong>",
"A file or folder has been <strong>restored</strong>" : "Um arquivo ou pasta foi <strong>restautado</strong>",
"You created %1$s" : "Você criou %1$s",
diff --git a/apps/files/l10n/pt_PT.js b/apps/files/l10n/pt_PT.js
index b37996b5073..d1830fefd99 100644
--- a/apps/files/l10n/pt_PT.js
+++ b/apps/files/l10n/pt_PT.js
@@ -42,7 +42,8 @@ OC.L10N.register(
"Delete" : "Apagar",
"Disconnect storage" : "Desconete o armazenamento",
"Unshare" : "Deixar de partilhar",
- "Download" : "Transferir",
+ "No permission to delete" : "Não tem permissão para apagar",
+ "Download" : "Descarregar",
"Select" : "Selecionar",
"Pending" : "Pendente",
"Unable to determine date" : "Impossível determinar a data",
@@ -63,9 +64,6 @@ OC.L10N.register(
"File name cannot be empty." : "O nome do ficheiro não pode estar em branco.",
"Your storage is full, files can not be updated or synced anymore!" : "O seu armazenamento está cheio, os ficheiros já não podem ser atualizados ou sincronizados.",
"Your storage is almost full ({usedSpacePercent}%)" : "O seu armazenamento está quase cheiro ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A Aplicação de Encriptação está ativada, mas as suas chaves não inicializaram. Por favor termine e inicie a sessão novamente",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave privada inválida da Aplicação de Encriptação. Por favor atualize a sua senha de chave privada nas definições pessoais, para recuperar o acesso aos seus ficheiros encriptados.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "A encriptação foi desactivada mas os seus ficheiros continuam encriptados. Por favor consulte as suas definições pessoais para desencriptar os ficheiros.",
"_matches '{filter}'_::_match '{filter}'_" : ["corresponde a '{filter}'","correspondem a '{filter}'"],
"{dirs} and {files}" : "{dirs} e {files}",
"Favorited" : "Assinalado como Favorito",
@@ -73,6 +71,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "Ocorreu um erro ao tentar atualizar as tags",
"A new file or folder has been <strong>created</strong>" : "Foi <strong>criado</strong> um novo ficheiro ou pasta",
"A file or folder has been <strong>changed</strong>" : "Foi <strong>alterado</strong> um ficheiro ou pasta",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limite notificações sobre a criação e modificações nos seus <strong>ficheiros favoritos</strong> <em>(apenas Stream)</em>",
"A file or folder has been <strong>deleted</strong>" : "Foi <strong>apagado</strong> um ficheiro ou pasta",
"A file or folder has been <strong>restored</strong>" : "Foi <strong>restaurado(a)</strong> um ficheiro ou pasta",
"You created %1$s" : "Criou %1$s",
diff --git a/apps/files/l10n/pt_PT.json b/apps/files/l10n/pt_PT.json
index c0ab202a86d..f0d2d6b74de 100644
--- a/apps/files/l10n/pt_PT.json
+++ b/apps/files/l10n/pt_PT.json
@@ -40,7 +40,8 @@
"Delete" : "Apagar",
"Disconnect storage" : "Desconete o armazenamento",
"Unshare" : "Deixar de partilhar",
- "Download" : "Transferir",
+ "No permission to delete" : "Não tem permissão para apagar",
+ "Download" : "Descarregar",
"Select" : "Selecionar",
"Pending" : "Pendente",
"Unable to determine date" : "Impossível determinar a data",
@@ -61,9 +62,6 @@
"File name cannot be empty." : "O nome do ficheiro não pode estar em branco.",
"Your storage is full, files can not be updated or synced anymore!" : "O seu armazenamento está cheio, os ficheiros já não podem ser atualizados ou sincronizados.",
"Your storage is almost full ({usedSpacePercent}%)" : "O seu armazenamento está quase cheiro ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A Aplicação de Encriptação está ativada, mas as suas chaves não inicializaram. Por favor termine e inicie a sessão novamente",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave privada inválida da Aplicação de Encriptação. Por favor atualize a sua senha de chave privada nas definições pessoais, para recuperar o acesso aos seus ficheiros encriptados.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "A encriptação foi desactivada mas os seus ficheiros continuam encriptados. Por favor consulte as suas definições pessoais para desencriptar os ficheiros.",
"_matches '{filter}'_::_match '{filter}'_" : ["corresponde a '{filter}'","correspondem a '{filter}'"],
"{dirs} and {files}" : "{dirs} e {files}",
"Favorited" : "Assinalado como Favorito",
@@ -71,6 +69,7 @@
"An error occurred while trying to update the tags" : "Ocorreu um erro ao tentar atualizar as tags",
"A new file or folder has been <strong>created</strong>" : "Foi <strong>criado</strong> um novo ficheiro ou pasta",
"A file or folder has been <strong>changed</strong>" : "Foi <strong>alterado</strong> um ficheiro ou pasta",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limite notificações sobre a criação e modificações nos seus <strong>ficheiros favoritos</strong> <em>(apenas Stream)</em>",
"A file or folder has been <strong>deleted</strong>" : "Foi <strong>apagado</strong> um ficheiro ou pasta",
"A file or folder has been <strong>restored</strong>" : "Foi <strong>restaurado(a)</strong> um ficheiro ou pasta",
"You created %1$s" : "Criou %1$s",
diff --git a/apps/files/l10n/ro.js b/apps/files/l10n/ro.js
index 6831754b1b5..541ff6e444a 100644
--- a/apps/files/l10n/ro.js
+++ b/apps/files/l10n/ro.js
@@ -30,7 +30,7 @@ OC.L10N.register(
"Favorites" : "Favorite",
"Home" : "Acasă",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Nu se poate încărca {filename} deoarece este un director sau are mărimea de 0 octeți",
- "Total file size {size1} exceeds upload limit {size2}" : "Mărimea fișierului este {size1} ce depășește limita de incarcare de {size2}",
+ "Total file size {size1} exceeds upload limit {size2}" : "Mărimea fișierului este {size1} ce depășește limita de încărcare de {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Spațiu liber insuficient, încărcați {size1} însă doar {size2} disponibil rămas",
"Upload cancelled." : "Încărcare anulată.",
"Could not get result from server." : "Nu se poate obține rezultatul de la server.",
@@ -55,15 +55,12 @@ OC.L10N.register(
"Modified" : "Modificat",
"_%n folder_::_%n folders_" : ["%n director","%n directoare","%n directoare"],
"_%n file_::_%n files_" : ["%n fișier","%n fișiere","%n fișiere"],
- "You don’t have permission to upload or create files here" : "Nu aveti permisiunea de a incarca sau crea fisiere aici",
+ "You don’t have permission to upload or create files here" : "Nu aveți permisiunea de a încărca sau crea fișiere aici",
"_Uploading %n file_::_Uploading %n files_" : ["Se încarcă %n fișier.","Se încarcă %n fișiere.","Se încarcă %n fișiere."],
"\"{name}\" is an invalid file name." : "\"{name}\" este un nume de fișier nevalid.",
"File name cannot be empty." : "Numele fișierului nu poate rămâne gol.",
"Your storage is full, files can not be updated or synced anymore!" : "Spațiul de stocare este plin, fișierele nu mai pot fi actualizate sau sincronizate!",
"Your storage is almost full ({usedSpacePercent}%)" : "Spațiul de stocare este aproape plin ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplicatia de criptare este activata dar tastatura nu este initializata , va rugam deconectati-va si reconectati-va",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Cheie privată nevalidă pentru aplicația Încriptare. Te rog, actualizează-ți parola cheii private folosind setările personale pentru a reaccesa fișierele tale încriptate.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "criptarea a fost disactivata dar fisierele sant inca criptate.va rog intrati in setarile personale pentru a decripta fisierele",
"{dirs} and {files}" : "{dirs} și {files}",
"Favorite" : "Favorit",
"A new file or folder has been <strong>created</strong>" : "Un nou fișier sau dosar a fost <strong>creat</strong>",
@@ -96,6 +93,7 @@ OC.L10N.register(
"Folder" : "Dosar",
"Upload" : "Încărcă",
"Cancel upload" : "Anulează încărcarea",
+ "Select all" : "Selectează tot",
"Upload too large" : "Fișierul încărcat este prea mare",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Fișierele pe care încerci să le încarci depășesc limita de încărcare maximă admisă pe acest server.",
"Files are being scanned, please wait." : "Fișierele sunt scanate, te rog așteaptă.",
diff --git a/apps/files/l10n/ro.json b/apps/files/l10n/ro.json
index 206bb7e7e6c..6c4536d5357 100644
--- a/apps/files/l10n/ro.json
+++ b/apps/files/l10n/ro.json
@@ -28,7 +28,7 @@
"Favorites" : "Favorite",
"Home" : "Acasă",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Nu se poate încărca {filename} deoarece este un director sau are mărimea de 0 octeți",
- "Total file size {size1} exceeds upload limit {size2}" : "Mărimea fișierului este {size1} ce depășește limita de incarcare de {size2}",
+ "Total file size {size1} exceeds upload limit {size2}" : "Mărimea fișierului este {size1} ce depășește limita de încărcare de {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Spațiu liber insuficient, încărcați {size1} însă doar {size2} disponibil rămas",
"Upload cancelled." : "Încărcare anulată.",
"Could not get result from server." : "Nu se poate obține rezultatul de la server.",
@@ -53,15 +53,12 @@
"Modified" : "Modificat",
"_%n folder_::_%n folders_" : ["%n director","%n directoare","%n directoare"],
"_%n file_::_%n files_" : ["%n fișier","%n fișiere","%n fișiere"],
- "You don’t have permission to upload or create files here" : "Nu aveti permisiunea de a incarca sau crea fisiere aici",
+ "You don’t have permission to upload or create files here" : "Nu aveți permisiunea de a încărca sau crea fișiere aici",
"_Uploading %n file_::_Uploading %n files_" : ["Se încarcă %n fișier.","Se încarcă %n fișiere.","Se încarcă %n fișiere."],
"\"{name}\" is an invalid file name." : "\"{name}\" este un nume de fișier nevalid.",
"File name cannot be empty." : "Numele fișierului nu poate rămâne gol.",
"Your storage is full, files can not be updated or synced anymore!" : "Spațiul de stocare este plin, fișierele nu mai pot fi actualizate sau sincronizate!",
"Your storage is almost full ({usedSpacePercent}%)" : "Spațiul de stocare este aproape plin ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplicatia de criptare este activata dar tastatura nu este initializata , va rugam deconectati-va si reconectati-va",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Cheie privată nevalidă pentru aplicația Încriptare. Te rog, actualizează-ți parola cheii private folosind setările personale pentru a reaccesa fișierele tale încriptate.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "criptarea a fost disactivata dar fisierele sant inca criptate.va rog intrati in setarile personale pentru a decripta fisierele",
"{dirs} and {files}" : "{dirs} și {files}",
"Favorite" : "Favorit",
"A new file or folder has been <strong>created</strong>" : "Un nou fișier sau dosar a fost <strong>creat</strong>",
@@ -94,6 +91,7 @@
"Folder" : "Dosar",
"Upload" : "Încărcă",
"Cancel upload" : "Anulează încărcarea",
+ "Select all" : "Selectează tot",
"Upload too large" : "Fișierul încărcat este prea mare",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Fișierele pe care încerci să le încarci depășesc limita de încărcare maximă admisă pe acest server.",
"Files are being scanned, please wait." : "Fișierele sunt scanate, te rog așteaptă.",
diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js
index f93ac884971..a2a7bc69c96 100644
--- a/apps/files/l10n/ru.js
+++ b/apps/files/l10n/ru.js
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "Удалить",
"Disconnect storage" : "Отсоединить хранилище",
"Unshare" : "Закрыть доступ",
+ "No permission to delete" : "Недостаточно прав для удаления",
"Download" : "Скачать",
"Select" : "Выбрать",
"Pending" : "Ожидание",
"Unable to determine date" : "Невозможно определить дату",
+ "This operation is forbidden" : "Операция запрещена",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Директория недоступна, пожалуйста проверьте журнал сообщений или свяжитесь с администратором",
"Error moving file." : "Ошибка при перемещении файла.",
"Error moving file" : "Ошибка при перемещении файла",
"Error" : "Ошибка",
@@ -55,28 +58,28 @@ OC.L10N.register(
"Name" : "Имя",
"Size" : "Размер",
"Modified" : "Изменён",
- "_%n folder_::_%n folders_" : ["%n каталог","%n каталога","%n каталогов"],
- "_%n file_::_%n files_" : ["%n файл","%n файла","%n файлов"],
+ "_%n folder_::_%n folders_" : ["%n каталог","%n каталога","%n каталогов","%n каталогов"],
+ "_%n file_::_%n files_" : ["%n файл","%n файла","%n файлов","%n файлов"],
"You don’t have permission to upload or create files here" : "У вас нет прав для загрузки или создания файлов здесь.",
- "_Uploading %n file_::_Uploading %n files_" : ["Закачка %n файла","Закачка %n файлов","Закачка %n файлов"],
+ "_Uploading %n file_::_Uploading %n files_" : ["Закачка %n файла","Закачка %n файлов","Закачка %n файлов","Закачка %n файлов"],
"\"{name}\" is an invalid file name." : "\"{name}\" это неправильное имя файла.",
"File name cannot be empty." : "Имя файла не может быть пустым.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Хранилище {owner} переполнено, файлы больше не могут быть обновлены или синхронизированы!",
"Your storage is full, files can not be updated or synced anymore!" : "Ваше хранилище заполнено, произведите очистку перед загрузкой новых файлов.",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Хранилище {owner} практически заполнено ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Ваше хранилище почти заполнено ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение для шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите заново",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Закрытый ключ приложения шифрования недействителен. Обновите закрытый ключ в личных настройках, чтобы восстановить доступ к зашифрованным файлам.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Шифрование было отключено, но ваши файлы остались зашифрованными. Зайдите на страницу личных настроек для того, чтобы расшифровать их.",
- "_matches '{filter}'_::_match '{filter}'_" : ["соответствует '{filter}'","соответствуют '{filter}'","соответствуют '{filter}'"],
+ "_matches '{filter}'_::_match '{filter}'_" : ["соответствует '{filter}'","соответствуют '{filter}'","соответствуют '{filter}'","соответствуют '{filter}'"],
"{dirs} and {files}" : "{dirs} и {files}",
"Favorited" : "Избранное",
"Favorite" : "Избранное",
"An error occurred while trying to update the tags" : "Во время обновления тегов возникла ошибка",
"A new file or folder has been <strong>created</strong>" : "<strong>Создан</strong> новый файл или каталог",
"A file or folder has been <strong>changed</strong>" : "<strong>Изменён</strong> файл или каталог",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Ограничить уведомления о создании и изменении ваших <strong>избранных файлов</strong> <em>(отображать только в приложении события)</em>",
"A file or folder has been <strong>deleted</strong>" : "<strong>Удален</strong> файл или каталог",
"A file or folder has been <strong>restored</strong>" : "<strong>Восстановлен</strong> файл или каталог",
"You created %1$s" : "Вы создали %1$s",
- "%2$s created %1$s" : "%2$s создано %1$s",
+ "%2$s created %1$s" : "%2$s создал %1$s",
"%1$s was created in a public folder" : "%1$s создан в общем каталоге",
"You changed %1$s" : "Вы изменили %1$s",
"%2$s changed %1$s" : "%2$s изменил %1$s",
@@ -113,4 +116,4 @@ OC.L10N.register(
"No favorites" : "Нет избранного",
"Files and folders you mark as favorite will show up here" : "Здесь появятся файлы и каталоги, отмеченные как избранные"
},
-"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
+"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json
index eee5d0957fc..80487e989fb 100644
--- a/apps/files/l10n/ru.json
+++ b/apps/files/l10n/ru.json
@@ -40,10 +40,13 @@
"Delete" : "Удалить",
"Disconnect storage" : "Отсоединить хранилище",
"Unshare" : "Закрыть доступ",
+ "No permission to delete" : "Недостаточно прав для удаления",
"Download" : "Скачать",
"Select" : "Выбрать",
"Pending" : "Ожидание",
"Unable to determine date" : "Невозможно определить дату",
+ "This operation is forbidden" : "Операция запрещена",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Директория недоступна, пожалуйста проверьте журнал сообщений или свяжитесь с администратором",
"Error moving file." : "Ошибка при перемещении файла.",
"Error moving file" : "Ошибка при перемещении файла",
"Error" : "Ошибка",
@@ -53,28 +56,28 @@
"Name" : "Имя",
"Size" : "Размер",
"Modified" : "Изменён",
- "_%n folder_::_%n folders_" : ["%n каталог","%n каталога","%n каталогов"],
- "_%n file_::_%n files_" : ["%n файл","%n файла","%n файлов"],
+ "_%n folder_::_%n folders_" : ["%n каталог","%n каталога","%n каталогов","%n каталогов"],
+ "_%n file_::_%n files_" : ["%n файл","%n файла","%n файлов","%n файлов"],
"You don’t have permission to upload or create files here" : "У вас нет прав для загрузки или создания файлов здесь.",
- "_Uploading %n file_::_Uploading %n files_" : ["Закачка %n файла","Закачка %n файлов","Закачка %n файлов"],
+ "_Uploading %n file_::_Uploading %n files_" : ["Закачка %n файла","Закачка %n файлов","Закачка %n файлов","Закачка %n файлов"],
"\"{name}\" is an invalid file name." : "\"{name}\" это неправильное имя файла.",
"File name cannot be empty." : "Имя файла не может быть пустым.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Хранилище {owner} переполнено, файлы больше не могут быть обновлены или синхронизированы!",
"Your storage is full, files can not be updated or synced anymore!" : "Ваше хранилище заполнено, произведите очистку перед загрузкой новых файлов.",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Хранилище {owner} практически заполнено ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Ваше хранилище почти заполнено ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение для шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите заново",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Закрытый ключ приложения шифрования недействителен. Обновите закрытый ключ в личных настройках, чтобы восстановить доступ к зашифрованным файлам.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Шифрование было отключено, но ваши файлы остались зашифрованными. Зайдите на страницу личных настроек для того, чтобы расшифровать их.",
- "_matches '{filter}'_::_match '{filter}'_" : ["соответствует '{filter}'","соответствуют '{filter}'","соответствуют '{filter}'"],
+ "_matches '{filter}'_::_match '{filter}'_" : ["соответствует '{filter}'","соответствуют '{filter}'","соответствуют '{filter}'","соответствуют '{filter}'"],
"{dirs} and {files}" : "{dirs} и {files}",
"Favorited" : "Избранное",
"Favorite" : "Избранное",
"An error occurred while trying to update the tags" : "Во время обновления тегов возникла ошибка",
"A new file or folder has been <strong>created</strong>" : "<strong>Создан</strong> новый файл или каталог",
"A file or folder has been <strong>changed</strong>" : "<strong>Изменён</strong> файл или каталог",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Ограничить уведомления о создании и изменении ваших <strong>избранных файлов</strong> <em>(отображать только в приложении события)</em>",
"A file or folder has been <strong>deleted</strong>" : "<strong>Удален</strong> файл или каталог",
"A file or folder has been <strong>restored</strong>" : "<strong>Восстановлен</strong> файл или каталог",
"You created %1$s" : "Вы создали %1$s",
- "%2$s created %1$s" : "%2$s создано %1$s",
+ "%2$s created %1$s" : "%2$s создал %1$s",
"%1$s was created in a public folder" : "%1$s создан в общем каталоге",
"You changed %1$s" : "Вы изменили %1$s",
"%2$s changed %1$s" : "%2$s изменил %1$s",
@@ -110,5 +113,5 @@
"Currently scanning" : "В настоящее время сканируется",
"No favorites" : "Нет избранного",
"Files and folders you mark as favorite will show up here" : "Здесь появятся файлы и каталоги, отмеченные как избранные"
-},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
+},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/files/l10n/sk_SK.js b/apps/files/l10n/sk_SK.js
index 3b426f7b026..809e9567b95 100644
--- a/apps/files/l10n/sk_SK.js
+++ b/apps/files/l10n/sk_SK.js
@@ -42,10 +42,12 @@ OC.L10N.register(
"Delete" : "Zmazať",
"Disconnect storage" : "Odpojiť úložisko",
"Unshare" : "Zrušiť zdieľanie",
+ "No permission to delete" : "Žiadne povolenie na odstránenie",
"Download" : "Sťahovanie",
"Select" : "Vybrať",
"Pending" : "Čaká",
"Unable to determine date" : "Nemožno určiť dátum",
+ "This operation is forbidden" : "Táto operácia je zakázaná",
"Error moving file." : "Chyba pri presune súboru.",
"Error moving file" : "Chyba pri presúvaní súboru",
"Error" : "Chyba",
@@ -63,9 +65,6 @@ OC.L10N.register(
"File name cannot be empty." : "Meno súboru nemôže byť prázdne",
"Your storage is full, files can not be updated or synced anymore!" : "Vaše úložisko je plné. Súbory nemožno aktualizovať ani synchronizovať!",
"Your storage is almost full ({usedSpacePercent}%)" : "Vaše úložisko je takmer plné ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný súkromný kľúč na šifrovanie aplikácií. Zaktualizujte si heslo súkromného kľúča v svojom osobnom nastavení, aby ste znovu získali prístup k svojim zašifrovaným súborom.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifrovanie bolo zakázané, ale vaše súbory sú stále zašifrované. Prosím, choďte do osobného nastavenia pre dešifrovanie súborov.",
"_matches '{filter}'_::_match '{filter}'_" : ["zodpovedá '{filter}'","zodpovedá '{filter}'","zodpovedá '{filter}'"],
"{dirs} and {files}" : "{dirs} a {files}",
"Favorited" : "Pridané k obľúbeným",
@@ -101,6 +100,7 @@ OC.L10N.register(
"Folder" : "Priečinok",
"Upload" : "Nahrať",
"Cancel upload" : "Zrušiť nahrávanie",
+ "No files in here" : "Nie sú tu žiadne súbory",
"Upload some content or sync with your devices!" : "Nahrajte nejaký obsah alebo synchronizujte zo svojimi zariadeniami!",
"No entries found in this folder" : "V tomto priečinku nebolo nič nájdené",
"Select all" : "Vybrať všetko",
diff --git a/apps/files/l10n/sk_SK.json b/apps/files/l10n/sk_SK.json
index 673d16788a6..2702076b234 100644
--- a/apps/files/l10n/sk_SK.json
+++ b/apps/files/l10n/sk_SK.json
@@ -40,10 +40,12 @@
"Delete" : "Zmazať",
"Disconnect storage" : "Odpojiť úložisko",
"Unshare" : "Zrušiť zdieľanie",
+ "No permission to delete" : "Žiadne povolenie na odstránenie",
"Download" : "Sťahovanie",
"Select" : "Vybrať",
"Pending" : "Čaká",
"Unable to determine date" : "Nemožno určiť dátum",
+ "This operation is forbidden" : "Táto operácia je zakázaná",
"Error moving file." : "Chyba pri presune súboru.",
"Error moving file" : "Chyba pri presúvaní súboru",
"Error" : "Chyba",
@@ -61,9 +63,6 @@
"File name cannot be empty." : "Meno súboru nemôže byť prázdne",
"Your storage is full, files can not be updated or synced anymore!" : "Vaše úložisko je plné. Súbory nemožno aktualizovať ani synchronizovať!",
"Your storage is almost full ({usedSpacePercent}%)" : "Vaše úložisko je takmer plné ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný súkromný kľúč na šifrovanie aplikácií. Zaktualizujte si heslo súkromného kľúča v svojom osobnom nastavení, aby ste znovu získali prístup k svojim zašifrovaným súborom.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifrovanie bolo zakázané, ale vaše súbory sú stále zašifrované. Prosím, choďte do osobného nastavenia pre dešifrovanie súborov.",
"_matches '{filter}'_::_match '{filter}'_" : ["zodpovedá '{filter}'","zodpovedá '{filter}'","zodpovedá '{filter}'"],
"{dirs} and {files}" : "{dirs} a {files}",
"Favorited" : "Pridané k obľúbeným",
@@ -99,6 +98,7 @@
"Folder" : "Priečinok",
"Upload" : "Nahrať",
"Cancel upload" : "Zrušiť nahrávanie",
+ "No files in here" : "Nie sú tu žiadne súbory",
"Upload some content or sync with your devices!" : "Nahrajte nejaký obsah alebo synchronizujte zo svojimi zariadeniami!",
"No entries found in this folder" : "V tomto priečinku nebolo nič nájdené",
"Select all" : "Vybrať všetko",
diff --git a/apps/files/l10n/sl.js b/apps/files/l10n/sl.js
index 9abf025473b..299bce880f5 100644
--- a/apps/files/l10n/sl.js
+++ b/apps/files/l10n/sl.js
@@ -42,6 +42,7 @@ OC.L10N.register(
"Delete" : "Izbriši",
"Disconnect storage" : "Odklopi shrambo",
"Unshare" : "Prekini souporabo",
+ "No permission to delete" : "Ni ustreznih dovoljenj za brisanje tega stika",
"Download" : "Prejmi",
"Select" : "Izberi",
"Pending" : "V čakanju ...",
@@ -61,11 +62,10 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["Posodabljanje %n datoteke","Posodabljanje %n datotek","Posodabljanje %n datotek","Posodabljanje %n datotek"],
"\"{name}\" is an invalid file name." : "\"{name}\" je neveljavno ime datoteke.",
"File name cannot be empty." : "Ime datoteke ne sme biti prazno polje.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Shramba uporabnika {owner} je polna, zato datotek ni več mogoče posodabljati in usklajevati!",
"Your storage is full, files can not be updated or synced anymore!" : "Shramba je povsem napolnjena. Datotek ni več mogoče posodabljati in usklajevati!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Shramba uporabnika {owner} je polna ({usedSpacePercent}%).",
"Your storage is almost full ({usedSpacePercent}%)" : "Prostor za shranjevanje je skoraj do konca zaseden ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Program za šifriranje je omogočen, vendar ni začet. Odjavite se in nato ponovno prijavite.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ni ustreznega osebnega ključa za program za šifriranje. Posodobite osebni ključ za dostop do šifriranih datotek med nastavitvami.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifriranje je onemogočeno, datoteke pa so še vedno šifrirane. Odšifrirajte jih med nastavitvami.",
"_matches '{filter}'_::_match '{filter}'_" : ["se sklada s filtrom '{filter}'","se skladata s filtrom '{filter}'","se skladajo s filtrom '{filter}'","se skladajo s filtrom '{filter}'"],
"{dirs} and {files}" : "{dirs} in {files}",
"Favorited" : "Označeno kot priljubljeno",
@@ -73,6 +73,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "Prišlo je do napake med posodabljanjem oznak",
"A new file or folder has been <strong>created</strong>" : "Nova datoteka ali mapa je <strong>ustvarjena</strong>",
"A file or folder has been <strong>changed</strong>" : "Datoteka ali mapa je <strong>spremenjena</strong>.",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Omeji obvestila o ustvarjanju in spreminjanju <strong>najpogosteje uporabljenih </strong> datotek <em>(omogoči pretok)</em>",
"A file or folder has been <strong>deleted</strong>" : "Datoteka ali mapa je <strong>izbrisana</strong>.",
"A file or folder has been <strong>restored</strong>" : "Datoteka ali mapa je <strong>obnovljena</strong>.",
"You created %1$s" : "Ustvarili ste %1$s",
diff --git a/apps/files/l10n/sl.json b/apps/files/l10n/sl.json
index ce8a63f6376..7e684c04efe 100644
--- a/apps/files/l10n/sl.json
+++ b/apps/files/l10n/sl.json
@@ -40,6 +40,7 @@
"Delete" : "Izbriši",
"Disconnect storage" : "Odklopi shrambo",
"Unshare" : "Prekini souporabo",
+ "No permission to delete" : "Ni ustreznih dovoljenj za brisanje tega stika",
"Download" : "Prejmi",
"Select" : "Izberi",
"Pending" : "V čakanju ...",
@@ -59,11 +60,10 @@
"_Uploading %n file_::_Uploading %n files_" : ["Posodabljanje %n datoteke","Posodabljanje %n datotek","Posodabljanje %n datotek","Posodabljanje %n datotek"],
"\"{name}\" is an invalid file name." : "\"{name}\" je neveljavno ime datoteke.",
"File name cannot be empty." : "Ime datoteke ne sme biti prazno polje.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Shramba uporabnika {owner} je polna, zato datotek ni več mogoče posodabljati in usklajevati!",
"Your storage is full, files can not be updated or synced anymore!" : "Shramba je povsem napolnjena. Datotek ni več mogoče posodabljati in usklajevati!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Shramba uporabnika {owner} je polna ({usedSpacePercent}%).",
"Your storage is almost full ({usedSpacePercent}%)" : "Prostor za shranjevanje je skoraj do konca zaseden ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Program za šifriranje je omogočen, vendar ni začet. Odjavite se in nato ponovno prijavite.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ni ustreznega osebnega ključa za program za šifriranje. Posodobite osebni ključ za dostop do šifriranih datotek med nastavitvami.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifriranje je onemogočeno, datoteke pa so še vedno šifrirane. Odšifrirajte jih med nastavitvami.",
"_matches '{filter}'_::_match '{filter}'_" : ["se sklada s filtrom '{filter}'","se skladata s filtrom '{filter}'","se skladajo s filtrom '{filter}'","se skladajo s filtrom '{filter}'"],
"{dirs} and {files}" : "{dirs} in {files}",
"Favorited" : "Označeno kot priljubljeno",
@@ -71,6 +71,7 @@
"An error occurred while trying to update the tags" : "Prišlo je do napake med posodabljanjem oznak",
"A new file or folder has been <strong>created</strong>" : "Nova datoteka ali mapa je <strong>ustvarjena</strong>",
"A file or folder has been <strong>changed</strong>" : "Datoteka ali mapa je <strong>spremenjena</strong>.",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Omeji obvestila o ustvarjanju in spreminjanju <strong>najpogosteje uporabljenih </strong> datotek <em>(omogoči pretok)</em>",
"A file or folder has been <strong>deleted</strong>" : "Datoteka ali mapa je <strong>izbrisana</strong>.",
"A file or folder has been <strong>restored</strong>" : "Datoteka ali mapa je <strong>obnovljena</strong>.",
"You created %1$s" : "Ustvarili ste %1$s",
diff --git a/apps/files/l10n/sq.js b/apps/files/l10n/sq.js
index 73476b286b0..e171d3d1e9b 100644
--- a/apps/files/l10n/sq.js
+++ b/apps/files/l10n/sq.js
@@ -59,9 +59,6 @@ OC.L10N.register(
"File name cannot be empty." : "Emri i skedarit nuk mund të jetë bosh.",
"Your storage is full, files can not be updated or synced anymore!" : "Hapsira juaj e arkivimit është plot, skedarët nuk mund të përditësohen ose sinkronizohen!",
"Your storage is almost full ({usedSpacePercent}%)" : "Hapsira juaj e arkivimit është pothuajse në fund ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacioni i Shifrimit është i aktivizuar por çelësat tuaj nuk janë aktivizuar, ju lutem dilni dhe ri-hyni përseri në sistem",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Çelësi privat për Aplikacionin e Shifrimit është i pavlefshëm. Ju lutem përditësoni fjalëkalimin e çelësit tuaj privat në parametrat tuaj për të rimarrë qasje në skedarët tuaj të shifruar.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Kodifikimi u çaktivizua por skedarët tuaj vazhdojnë të jenë të kodifikuar. Ju lutem shkoni tek parametrat personale për të dekodifikuar skedarët tuaj.",
"{dirs} and {files}" : "{dirs} dhe {files}",
"A new file or folder has been <strong>created</strong>" : "Një skedar ose një dosje e re është <strong>krijuar</strong>",
"A file or folder has been <strong>changed</strong>" : "Një skedar ose një dosje ka <strong>ndryshuar</strong>",
diff --git a/apps/files/l10n/sq.json b/apps/files/l10n/sq.json
index 2f8b64a24b1..624f85bf0c8 100644
--- a/apps/files/l10n/sq.json
+++ b/apps/files/l10n/sq.json
@@ -57,9 +57,6 @@
"File name cannot be empty." : "Emri i skedarit nuk mund të jetë bosh.",
"Your storage is full, files can not be updated or synced anymore!" : "Hapsira juaj e arkivimit është plot, skedarët nuk mund të përditësohen ose sinkronizohen!",
"Your storage is almost full ({usedSpacePercent}%)" : "Hapsira juaj e arkivimit është pothuajse në fund ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacioni i Shifrimit është i aktivizuar por çelësat tuaj nuk janë aktivizuar, ju lutem dilni dhe ri-hyni përseri në sistem",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Çelësi privat për Aplikacionin e Shifrimit është i pavlefshëm. Ju lutem përditësoni fjalëkalimin e çelësit tuaj privat në parametrat tuaj për të rimarrë qasje në skedarët tuaj të shifruar.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Kodifikimi u çaktivizua por skedarët tuaj vazhdojnë të jenë të kodifikuar. Ju lutem shkoni tek parametrat personale për të dekodifikuar skedarët tuaj.",
"{dirs} and {files}" : "{dirs} dhe {files}",
"A new file or folder has been <strong>created</strong>" : "Një skedar ose një dosje e re është <strong>krijuar</strong>",
"A file or folder has been <strong>changed</strong>" : "Një skedar ose një dosje ka <strong>ndryshuar</strong>",
diff --git a/apps/files/l10n/sr.js b/apps/files/l10n/sr.js
index 75a1ad3b1c6..060ac4d506e 100644
--- a/apps/files/l10n/sr.js
+++ b/apps/files/l10n/sr.js
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "Обриши",
"Disconnect storage" : "Искључи складиште",
"Unshare" : "Не дели",
+ "No permission to delete" : "Без дозволе за брисање",
"Download" : "Преузми",
"Select" : "Изабери",
"Pending" : "На чекању",
"Unable to determine date" : "Не могу да одредим датум",
+ "This operation is forbidden" : "Ова радња је забрањена",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Овај директоријум није доступан, проверите записе или контактирајте администратора",
"Error moving file." : "Грешка при премештању фајла.",
"Error moving file" : "Грешка при премештању фајла",
"Error" : "Грешка",
@@ -61,11 +64,10 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["Отпремам %n фајл","Отпремам %n фајла","Отпремам %n фајлова"],
"\"{name}\" is an invalid file name." : "\"{name}\" није исправан назив фајла.",
"File name cannot be empty." : "Назив фајла не може бити празан.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Складиште корисника {owner} је пуно. Фајлови се не могу ажурирати нити синхронизовати!",
"Your storage is full, files can not be updated or synced anymore!" : "Ваше складиште је пуно. Фајлови више не могу бити ажурирани ни синхронизовани!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Складиште корисника {owner} је скоро пуно ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Ваше складиште је скоро пуно ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Апликација шифровања је укључена али није иницијализована. Одјавите се и поново се пријавите.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Неисправан лични кључ за апликацију шифровања. Ажурирајте лозинку личног кључа у личним поставкама да бисте опоравили приступ вашим шифрованим фајловима.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Шифровање је искључено али ваши фајлови су и даље шифровани. Идите у личне поставке и дешифрујте ваше фајлове.",
"_matches '{filter}'_::_match '{filter}'_" : ["се поклапа са '{filter}'","се поклапају са '{filter}'","се поклапа са '{filter}'"],
"{dirs} and {files}" : "{dirs} и {files}",
"Favorited" : "Омиљено",
@@ -73,6 +75,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "Дошло је до грешке при покушају ажурирања ознака",
"A new file or folder has been <strong>created</strong>" : "Нови фајл или фасцикла су <strong>направљени</strong>",
"A file or folder has been <strong>changed</strong>" : "Фајл или фасцикла су <strong>измењени</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Ограничи обавештења о стварању и изменама на <strong>омиљене фајлове</strong> <em>(само у записнику)</em>",
"A file or folder has been <strong>deleted</strong>" : "Фајл или фасцикла су <strong>обрисани</strong>",
"A file or folder has been <strong>restored</strong>" : "Фајл или фасцикла су <strong>враћени</strong>",
"You created %1$s" : "Направили сте %1$s",
diff --git a/apps/files/l10n/sr.json b/apps/files/l10n/sr.json
index 1384a2598dc..69fefcaf2b2 100644
--- a/apps/files/l10n/sr.json
+++ b/apps/files/l10n/sr.json
@@ -40,10 +40,13 @@
"Delete" : "Обриши",
"Disconnect storage" : "Искључи складиште",
"Unshare" : "Не дели",
+ "No permission to delete" : "Без дозволе за брисање",
"Download" : "Преузми",
"Select" : "Изабери",
"Pending" : "На чекању",
"Unable to determine date" : "Не могу да одредим датум",
+ "This operation is forbidden" : "Ова радња је забрањена",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Овај директоријум није доступан, проверите записе или контактирајте администратора",
"Error moving file." : "Грешка при премештању фајла.",
"Error moving file" : "Грешка при премештању фајла",
"Error" : "Грешка",
@@ -59,11 +62,10 @@
"_Uploading %n file_::_Uploading %n files_" : ["Отпремам %n фајл","Отпремам %n фајла","Отпремам %n фајлова"],
"\"{name}\" is an invalid file name." : "\"{name}\" није исправан назив фајла.",
"File name cannot be empty." : "Назив фајла не може бити празан.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Складиште корисника {owner} је пуно. Фајлови се не могу ажурирати нити синхронизовати!",
"Your storage is full, files can not be updated or synced anymore!" : "Ваше складиште је пуно. Фајлови више не могу бити ажурирани ни синхронизовани!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Складиште корисника {owner} је скоро пуно ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Ваше складиште је скоро пуно ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Апликација шифровања је укључена али није иницијализована. Одјавите се и поново се пријавите.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Неисправан лични кључ за апликацију шифровања. Ажурирајте лозинку личног кључа у личним поставкама да бисте опоравили приступ вашим шифрованим фајловима.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Шифровање је искључено али ваши фајлови су и даље шифровани. Идите у личне поставке и дешифрујте ваше фајлове.",
"_matches '{filter}'_::_match '{filter}'_" : ["се поклапа са '{filter}'","се поклапају са '{filter}'","се поклапа са '{filter}'"],
"{dirs} and {files}" : "{dirs} и {files}",
"Favorited" : "Омиљено",
@@ -71,6 +73,7 @@
"An error occurred while trying to update the tags" : "Дошло је до грешке при покушају ажурирања ознака",
"A new file or folder has been <strong>created</strong>" : "Нови фајл или фасцикла су <strong>направљени</strong>",
"A file or folder has been <strong>changed</strong>" : "Фајл или фасцикла су <strong>измењени</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Ограничи обавештења о стварању и изменама на <strong>омиљене фајлове</strong> <em>(само у записнику)</em>",
"A file or folder has been <strong>deleted</strong>" : "Фајл или фасцикла су <strong>обрисани</strong>",
"A file or folder has been <strong>restored</strong>" : "Фајл или фасцикла су <strong>враћени</strong>",
"You created %1$s" : "Направили сте %1$s",
diff --git a/apps/files/l10n/sr@latin.js b/apps/files/l10n/sr@latin.js
index ba2c2072551..acd0a988ec6 100644
--- a/apps/files/l10n/sr@latin.js
+++ b/apps/files/l10n/sr@latin.js
@@ -4,110 +4,111 @@ OC.L10N.register(
"Storage not available" : "Skladište nije dostupno",
"Storage invalid" : "Neispravno skladište",
"Unknown error" : "Nepoznata greška",
- "Could not move %s - File with this name already exists" : "Nemoguće premeštanje %s - fajl sa ovim imenom već postoji",
- "Could not move %s" : "Nemoguće premeštanje %s",
+ "Could not move %s - File with this name already exists" : "Ne mogu da premestim %s – fajl sa ovim nazivom već postoji",
+ "Could not move %s" : "Ne mogu da premestim %s",
"Permission denied" : "Pristup odbijen",
- "The target folder has been moved or deleted." : "Ciljani direktorijum je premešten ili izbrisan.",
- "The name %s is already used in the folder %s. Please choose a different name." : "Ime %s je već u upotrebi u direktorijumu %s. Molimo izaberite drugo ime.",
- "Error when creating the file" : "Greška pri kreiranju fajla",
- "Error when creating the folder" : "Greška pri kreiranju direktorijuma",
- "Unable to set upload directory." : "Nemoguće postaviti direktorijum za otpremanje.",
- "Invalid Token" : "Neispravan simbol",
- "No file was uploaded. Unknown error" : "Fajl nije otpremeljen. Nepoznata greška",
- "There is no error, the file uploaded with success" : "Nema greške, fajl je uspešno poslat",
- "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Otpremljeni fajl prevazilazi upload_max_filesize direktivu u php.ini:",
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Poslati fajl prevazilazi direktivu MAX_FILE_SIZE koja je navedena u HTML formi",
- "The uploaded file was only partially uploaded" : "Poslati fajl je samo delimično otpremljen!",
- "No file was uploaded" : "Nijedan fajl nije poslat",
+ "The target folder has been moved or deleted." : "Odredišna fascikla je premeštena ili obrisana.",
+ "The name %s is already used in the folder %s. Please choose a different name." : "Naziv %s se već koristi u fascikli %s. Odredite drugi naziv.",
+ "Error when creating the file" : "Greška pri stvaranju fajla",
+ "Error when creating the folder" : "Greška pri stvaranju fajla",
+ "Unable to set upload directory." : "Ne mogu da postavim direktorijum za otpremanje.",
+ "Invalid Token" : "Neispravan token",
+ "No file was uploaded. Unknown error" : "Nijedan fajl nije otpremljen. Nepoznata greška",
+ "There is no error, the file uploaded with success" : "Nema greške, fajl je uspešno otpremljen",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Otpremani fajl prevazilazi smernicu upload_max_filesize u fajlu php.ini:",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Otpremani fajl prevazilazi smernicu MAX_FILE_SIZE koja je navedena u HTML obrascu",
+ "The uploaded file was only partially uploaded" : "Otpremani fajl je samo delimično otpremljen",
+ "No file was uploaded" : "Ništa nije otpremljeno",
"Missing a temporary folder" : "Nedostaje privremena fascikla",
- "Failed to write to disk" : "Neuspelo pisanje na disk",
- "Not enough storage available" : "Nema dovoljno skladišnog prostora na raspolaganju",
- "Upload failed. Could not find uploaded file" : "Otpremanje nije uspelo. Nije pronađen otpremljeni fajl",
- "Upload failed. Could not get file info." : "Otpremanje nije uspelo. Nije moguće pronaći informacije o fajlu.",
- "Invalid directory." : "Neispravan direktorijum",
+ "Failed to write to disk" : "Ne mogu da pišem na disk",
+ "Not enough storage available" : "Nema dovoljno prostora",
+ "Upload failed. Could not find uploaded file" : "Neuspešno otpremanje. Ne mogu da nađem otpremljeni fajl",
+ "Upload failed. Could not get file info." : "Neuspešno otpremanje. Ne mogu da dobijem podatke o fajlu.",
+ "Invalid directory." : "Neispravna fascikla.",
"Files" : "Fajlovi",
"All files" : "Svi fajlovi",
"Favorites" : "Omiljeni",
- "Home" : "Kuća",
- "Unable to upload {filename} as it is a directory or has 0 bytes" : "Nije moguće otpremiti {filename} zato što je u pitanju direktorijum ili ima 0 bajtova.",
- "Total file size {size1} exceeds upload limit {size2}" : "Ukupna veličina fajla {size1} prevazilazi limit za otpremanje {size2}",
- "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nema dovoljno slobodnog prostora, otpremate {size1} ali samo je {size2} preostalo",
- "Upload cancelled." : "Otpremanje otkazano.",
- "Could not get result from server." : "Nije bilo moguće dobiti rezultat sa servera.",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Otpremanje fajla je u toku. Ako sada napustite stranicu, prekinućete otpremanje.",
+ "Home" : "Početna",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "Ne mogu da otpremim {filename} jer je to direktorijum ili ima 0 bajtova",
+ "Total file size {size1} exceeds upload limit {size2}" : "Veličina {size1} prevazilazi ograničenje za otpremanje od {size2}",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nema prostora. Otpremate {size1} ali samo {size2} je preostalo",
+ "Upload cancelled." : "Otpremanje je otkazano.",
+ "Could not get result from server." : "Ne mogu da dobijem rezultat sa servera.",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Otpremanje fajla je u toku. Ako sada napustite stranicu, otkazaćete otpremanje.",
"{new_name} already exists" : "{new_name} već postoji",
- "Could not create file" : "Nije bilo moguće kreirati fajl",
- "Could not create folder" : "Nije bilo moguće kreirati direktorijum",
- "Rename" : "Preimenij",
+ "Could not create file" : "Ne mogu da stvorim fajl",
+ "Could not create folder" : "Ne mogu da stvorim fasciklu",
+ "Rename" : "Preimenuj",
"Delete" : "Obriši",
- "Disconnect storage" : "Nepovezano skladište",
- "Unshare" : "Ukljoni deljenje",
+ "Disconnect storage" : "Isključi skladište",
+ "Unshare" : "Ne deli",
"Download" : "Preuzmi",
- "Select" : "Odaberi",
- "Pending" : "U toku",
- "Unable to determine date" : "Nemoguće ustanoviti datum",
+ "Select" : "Izaberi",
+ "Pending" : "Na čekanju",
+ "Unable to determine date" : "Ne mogu da odredim datum",
"Error moving file." : "Greška pri premeštanju fajla.",
"Error moving file" : "Greška pri premeštanju fajla",
"Error" : "Greška",
- "Could not rename file" : "Nemoguća promena imena fajla",
+ "Could not rename file" : "Ne mogu da preimenujem fajl",
"Error deleting file." : "Greška pri brisanju fajla.",
- "No entries in this folder match '{filter}'" : "Nijedan unos u ovom direktorijumu se ne poklapa sa '{filter}'",
- "Name" : "Ime",
+ "No entries in this folder match '{filter}'" : "U ovoj fascikli ništa se ne poklapa sa '{filter}'",
+ "Name" : "Naziv",
"Size" : "Veličina",
- "Modified" : "Zadnja izmena",
- "_%n folder_::_%n folders_" : ["%n direktorijum","%n direktorijuma","%n direktorijuma"],
- "_%n file_::_%n files_" : ["%n fajl","%n fajlova","%n fajlova"],
- "You don’t have permission to upload or create files here" : "Nemate dozvolu da otpremate ili kreirate fajlove ovde",
- "_Uploading %n file_::_Uploading %n files_" : ["Otpremam %n fajl","Otpremam %n fajlova","Otpremam %n fajlova"],
- "\"{name}\" is an invalid file name." : "\"{name}\" je neispravno ime fajla.",
- "File name cannot be empty." : "Ime fajla ne može biti prazno.",
- "Your storage is full, files can not be updated or synced anymore!" : "Vaše skladište je puno, fajlovi se ne mogu više otpremati ili sinhronizovati.",
+ "Modified" : "Izmenjen",
+ "_%n folder_::_%n folders_" : ["%n fascikla","%n fascikle","%n fascikli"],
+ "_%n file_::_%n files_" : ["%n fajl","%n fajla","%n fajlova"],
+ "You don’t have permission to upload or create files here" : "Nemate dozvole da ovde otpremate ili stvarate fajlove",
+ "_Uploading %n file_::_Uploading %n files_" : ["Otpremam %n fajl","Otpremam %n fajla","Otpremam %n fajlova"],
+ "\"{name}\" is an invalid file name." : "\"{name}\" nije ispravan naziv fajla.",
+ "File name cannot be empty." : "Naziv fajla ne može biti prazan.",
+ "Your storage is full, files can not be updated or synced anymore!" : "Vaše skladište je puno. Fajlovi više ne mogu biti ažurirani ni sinhronizovani!",
"Your storage is almost full ({usedSpacePercent}%)" : "Vaše skladište je skoro puno ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija za šifrovanje je omogućena ali Vaši ključevi nisu inicijalizovani, molimo Vas da se izlogujete i ulogujete ponovo.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za Aplikaciju za šifrovanje. Molimo da osvežite vašu lozinku privatnog ključa u ličnim podešavanjima kako bi dobili pristup šifrovanim fajlovima.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifrovanje je isključeno, ali Vaši fajlovi su i dalje šifrovani. Molimo Vas da odete u lična podešavanja da dešifrujete svoje fajlove.",
- "_matches '{filter}'_::_match '{filter}'_" : ["poklapa se sa '{filter}'","poklapaju se sa '{filter}'","poklapaju se sa '{filter}'"],
+ "_matches '{filter}'_::_match '{filter}'_" : ["se poklapa sa '{filter}'","se poklapaju sa '{filter}'","se poklapa sa '{filter}'"],
"{dirs} and {files}" : "{dirs} i {files}",
- "Favorited" : "Omiljeni",
- "Favorite" : "Omiljen",
- "A new file or folder has been <strong>created</strong>" : "Novi fajl ili direktorijum je <strong>kreiran</strong>",
- "A file or folder has been <strong>changed</strong>" : "Faj ili direktorijum je <strong>promenjen</strong>",
- "A file or folder has been <strong>deleted</strong>" : "Fajl ili direktorijum je <strong>uklonjen</strong>",
- "A file or folder has been <strong>restored</strong>" : "Fajl ili direktorijum je <strong>povraćen</strong>",
- "You created %1$s" : "Kreirali ste %1$s",
- "%2$s created %1$s" : "%2$s je kreirao %1$s",
- "%1$s was created in a public folder" : "%1$s je kreiran u javnom direktorijumu",
+ "Favorited" : "Omiljeno",
+ "Favorite" : "Omiljeni",
+ "An error occurred while trying to update the tags" : "Došlo je do greške pri pokušaju ažuriranja oznaka",
+ "A new file or folder has been <strong>created</strong>" : "Novi fajl ili fascikla su <strong>napravljeni</strong>",
+ "A file or folder has been <strong>changed</strong>" : "Fajl ili fascikla su <strong>izmenjeni</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Ograniči obaveštenja o stvaranju i izmenama na <strong>omiljene fajlove</strong> <em>(samo u zapisniku)</em>",
+ "A file or folder has been <strong>deleted</strong>" : "Fajl ili fascikla su <strong>obrisani</strong>",
+ "A file or folder has been <strong>restored</strong>" : "Fajl ili fascikla su <strong>vraćeni</strong>",
+ "You created %1$s" : "Napravili ste %1$s",
+ "%2$s created %1$s" : "%2$s napravi %1$s",
+ "%1$s was created in a public folder" : "%1$s je napravljen u javnoj fascikli",
"You changed %1$s" : "Izmenili ste %1$s",
- "%2$s changed %1$s" : "%2$s je izmenio %1$s",
+ "%2$s changed %1$s" : "%2$s izmeni %1$s",
"You deleted %1$s" : "Obrisali ste %1$s",
- "%2$s deleted %1$s" : "%2$s je obrisao %1$s",
- "You restored %1$s" : "Povratili ste %1$s",
- "%2$s restored %1$s" : "%2$s je povratio %1$s",
- "%s could not be renamed as it has been deleted" : "%s nije mogao biti preimenovan jer je obrisan.",
- "%s could not be renamed" : "%s nije mogao biti preimenovan",
- "Upload (max. %s)" : "Otpremanje (maksimalno %s)",
- "File handling" : "Upravljanje fajlovima",
- "Maximum upload size" : "Maksimalna veličina pošiljke",
+ "%2$s deleted %1$s" : "%2$s obrisa %1$s",
+ "You restored %1$s" : "Vratili ste %1$s",
+ "%2$s restored %1$s" : "%2$s povrati %1$s",
+ "%s could not be renamed as it has been deleted" : "%s se ne može preimenovati jer je obrisan",
+ "%s could not be renamed" : "%s se ne može preimenovati",
+ "Upload (max. %s)" : "Otpremanje (maks. %s)",
+ "File handling" : "Rukovanje fajlovima",
+ "Maximum upload size" : "Najveća veličina otpremanja",
"max. possible: " : "najviše moguće:",
- "Save" : "Snimi",
- "Settings" : "Podešavanja",
+ "Save" : "Sačuvaj",
+ "Can not be edited from here due to insufficient permissions." : "Ne može da se menja odavde zbog nedostatka dozvola.",
+ "Settings" : "Postavke",
"WebDAV" : "WebDAV",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Upotrebite ovu adresu da <a href=\"%s\" target=\"_blank\">pristupite svojim fajlovima putem WebDAV-a</a>",
- "New" : "Novi",
- "New text file" : "Novi tekstualni fajl",
- "Text file" : "Tekstualni fajl",
- "New folder" : "Novi direktorijum",
- "Folder" : "Direktorijum",
- "Upload" : "Pošalji",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Koristite ovu adresu da <a href=\"%s\" target=\"_blank\"> pristupite fajlovima preko WebDAV-a</a>",
+ "New" : "Novo",
+ "New text file" : "Nov tekstualni fajl",
+ "Text file" : "tekstualni fajl",
+ "New folder" : "Nova fascikla",
+ "Folder" : "fascikla",
+ "Upload" : "Otpremi",
"Cancel upload" : "Otkaži otpremanje",
- "Upload some content or sync with your devices!" : "Otpremite neki sadržaj ili sinhronizujte sa svojim uređajima!",
- "No entries found in this folder" : "Nema pronađenih unosa u ovom direktorijumu",
- "Select all" : "Odaberi sve",
- "Upload too large" : "Pošiljka je prevelika",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Fajlovi koje želite da pošaljete prevazilaze ograničenje maksimalne veličine pošiljke na ovom serveru.",
- "Files are being scanned, please wait." : "Fajlovi se skeniraju, molimo sačekajte.",
+ "No files in here" : "Ovde nema fajlova",
+ "Upload some content or sync with your devices!" : "Otpremite neki sadržaj ili sinhronizujte sa vašim uređajima!",
+ "No entries found in this folder" : "Nema ničega u ovoj fascikli",
+ "Select all" : "Označi sve",
+ "Upload too large" : "Otpremanje je preveliko",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Fajlovi koje želite da otpremite prevazilaze ograničenje otpremanja na ovom serveru.",
+ "Files are being scanned, please wait." : "Skeniram fajlove, sačekajte.",
"Currently scanning" : "Trenutno skeniram",
"No favorites" : "Nema omiljenih",
- "Files and folders you mark as favorite will show up here" : "Fajlovi i direktorijumi koje ste obeležili kao omiljene će biti prikazani ovde"
+ "Files and folders you mark as favorite will show up here" : "Fajlovi i fascikle koje obeležite kao omiljene pojaviće se ovde"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files/l10n/sr@latin.json b/apps/files/l10n/sr@latin.json
index be17fd7bed9..cb6882c5c5c 100644
--- a/apps/files/l10n/sr@latin.json
+++ b/apps/files/l10n/sr@latin.json
@@ -2,110 +2,111 @@
"Storage not available" : "Skladište nije dostupno",
"Storage invalid" : "Neispravno skladište",
"Unknown error" : "Nepoznata greška",
- "Could not move %s - File with this name already exists" : "Nemoguće premeštanje %s - fajl sa ovim imenom već postoji",
- "Could not move %s" : "Nemoguće premeštanje %s",
+ "Could not move %s - File with this name already exists" : "Ne mogu da premestim %s – fajl sa ovim nazivom već postoji",
+ "Could not move %s" : "Ne mogu da premestim %s",
"Permission denied" : "Pristup odbijen",
- "The target folder has been moved or deleted." : "Ciljani direktorijum je premešten ili izbrisan.",
- "The name %s is already used in the folder %s. Please choose a different name." : "Ime %s je već u upotrebi u direktorijumu %s. Molimo izaberite drugo ime.",
- "Error when creating the file" : "Greška pri kreiranju fajla",
- "Error when creating the folder" : "Greška pri kreiranju direktorijuma",
- "Unable to set upload directory." : "Nemoguće postaviti direktorijum za otpremanje.",
- "Invalid Token" : "Neispravan simbol",
- "No file was uploaded. Unknown error" : "Fajl nije otpremeljen. Nepoznata greška",
- "There is no error, the file uploaded with success" : "Nema greške, fajl je uspešno poslat",
- "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Otpremljeni fajl prevazilazi upload_max_filesize direktivu u php.ini:",
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Poslati fajl prevazilazi direktivu MAX_FILE_SIZE koja je navedena u HTML formi",
- "The uploaded file was only partially uploaded" : "Poslati fajl je samo delimično otpremljen!",
- "No file was uploaded" : "Nijedan fajl nije poslat",
+ "The target folder has been moved or deleted." : "Odredišna fascikla je premeštena ili obrisana.",
+ "The name %s is already used in the folder %s. Please choose a different name." : "Naziv %s se već koristi u fascikli %s. Odredite drugi naziv.",
+ "Error when creating the file" : "Greška pri stvaranju fajla",
+ "Error when creating the folder" : "Greška pri stvaranju fajla",
+ "Unable to set upload directory." : "Ne mogu da postavim direktorijum za otpremanje.",
+ "Invalid Token" : "Neispravan token",
+ "No file was uploaded. Unknown error" : "Nijedan fajl nije otpremljen. Nepoznata greška",
+ "There is no error, the file uploaded with success" : "Nema greške, fajl je uspešno otpremljen",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Otpremani fajl prevazilazi smernicu upload_max_filesize u fajlu php.ini:",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Otpremani fajl prevazilazi smernicu MAX_FILE_SIZE koja je navedena u HTML obrascu",
+ "The uploaded file was only partially uploaded" : "Otpremani fajl je samo delimično otpremljen",
+ "No file was uploaded" : "Ništa nije otpremljeno",
"Missing a temporary folder" : "Nedostaje privremena fascikla",
- "Failed to write to disk" : "Neuspelo pisanje na disk",
- "Not enough storage available" : "Nema dovoljno skladišnog prostora na raspolaganju",
- "Upload failed. Could not find uploaded file" : "Otpremanje nije uspelo. Nije pronađen otpremljeni fajl",
- "Upload failed. Could not get file info." : "Otpremanje nije uspelo. Nije moguće pronaći informacije o fajlu.",
- "Invalid directory." : "Neispravan direktorijum",
+ "Failed to write to disk" : "Ne mogu da pišem na disk",
+ "Not enough storage available" : "Nema dovoljno prostora",
+ "Upload failed. Could not find uploaded file" : "Neuspešno otpremanje. Ne mogu da nađem otpremljeni fajl",
+ "Upload failed. Could not get file info." : "Neuspešno otpremanje. Ne mogu da dobijem podatke o fajlu.",
+ "Invalid directory." : "Neispravna fascikla.",
"Files" : "Fajlovi",
"All files" : "Svi fajlovi",
"Favorites" : "Omiljeni",
- "Home" : "Kuća",
- "Unable to upload {filename} as it is a directory or has 0 bytes" : "Nije moguće otpremiti {filename} zato što je u pitanju direktorijum ili ima 0 bajtova.",
- "Total file size {size1} exceeds upload limit {size2}" : "Ukupna veličina fajla {size1} prevazilazi limit za otpremanje {size2}",
- "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nema dovoljno slobodnog prostora, otpremate {size1} ali samo je {size2} preostalo",
- "Upload cancelled." : "Otpremanje otkazano.",
- "Could not get result from server." : "Nije bilo moguće dobiti rezultat sa servera.",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Otpremanje fajla je u toku. Ako sada napustite stranicu, prekinućete otpremanje.",
+ "Home" : "Početna",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "Ne mogu da otpremim {filename} jer je to direktorijum ili ima 0 bajtova",
+ "Total file size {size1} exceeds upload limit {size2}" : "Veličina {size1} prevazilazi ograničenje za otpremanje od {size2}",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nema prostora. Otpremate {size1} ali samo {size2} je preostalo",
+ "Upload cancelled." : "Otpremanje je otkazano.",
+ "Could not get result from server." : "Ne mogu da dobijem rezultat sa servera.",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Otpremanje fajla je u toku. Ako sada napustite stranicu, otkazaćete otpremanje.",
"{new_name} already exists" : "{new_name} već postoji",
- "Could not create file" : "Nije bilo moguće kreirati fajl",
- "Could not create folder" : "Nije bilo moguće kreirati direktorijum",
- "Rename" : "Preimenij",
+ "Could not create file" : "Ne mogu da stvorim fajl",
+ "Could not create folder" : "Ne mogu da stvorim fasciklu",
+ "Rename" : "Preimenuj",
"Delete" : "Obriši",
- "Disconnect storage" : "Nepovezano skladište",
- "Unshare" : "Ukljoni deljenje",
+ "Disconnect storage" : "Isključi skladište",
+ "Unshare" : "Ne deli",
"Download" : "Preuzmi",
- "Select" : "Odaberi",
- "Pending" : "U toku",
- "Unable to determine date" : "Nemoguće ustanoviti datum",
+ "Select" : "Izaberi",
+ "Pending" : "Na čekanju",
+ "Unable to determine date" : "Ne mogu da odredim datum",
"Error moving file." : "Greška pri premeštanju fajla.",
"Error moving file" : "Greška pri premeštanju fajla",
"Error" : "Greška",
- "Could not rename file" : "Nemoguća promena imena fajla",
+ "Could not rename file" : "Ne mogu da preimenujem fajl",
"Error deleting file." : "Greška pri brisanju fajla.",
- "No entries in this folder match '{filter}'" : "Nijedan unos u ovom direktorijumu se ne poklapa sa '{filter}'",
- "Name" : "Ime",
+ "No entries in this folder match '{filter}'" : "U ovoj fascikli ništa se ne poklapa sa '{filter}'",
+ "Name" : "Naziv",
"Size" : "Veličina",
- "Modified" : "Zadnja izmena",
- "_%n folder_::_%n folders_" : ["%n direktorijum","%n direktorijuma","%n direktorijuma"],
- "_%n file_::_%n files_" : ["%n fajl","%n fajlova","%n fajlova"],
- "You don’t have permission to upload or create files here" : "Nemate dozvolu da otpremate ili kreirate fajlove ovde",
- "_Uploading %n file_::_Uploading %n files_" : ["Otpremam %n fajl","Otpremam %n fajlova","Otpremam %n fajlova"],
- "\"{name}\" is an invalid file name." : "\"{name}\" je neispravno ime fajla.",
- "File name cannot be empty." : "Ime fajla ne može biti prazno.",
- "Your storage is full, files can not be updated or synced anymore!" : "Vaše skladište je puno, fajlovi se ne mogu više otpremati ili sinhronizovati.",
+ "Modified" : "Izmenjen",
+ "_%n folder_::_%n folders_" : ["%n fascikla","%n fascikle","%n fascikli"],
+ "_%n file_::_%n files_" : ["%n fajl","%n fajla","%n fajlova"],
+ "You don’t have permission to upload or create files here" : "Nemate dozvole da ovde otpremate ili stvarate fajlove",
+ "_Uploading %n file_::_Uploading %n files_" : ["Otpremam %n fajl","Otpremam %n fajla","Otpremam %n fajlova"],
+ "\"{name}\" is an invalid file name." : "\"{name}\" nije ispravan naziv fajla.",
+ "File name cannot be empty." : "Naziv fajla ne može biti prazan.",
+ "Your storage is full, files can not be updated or synced anymore!" : "Vaše skladište je puno. Fajlovi više ne mogu biti ažurirani ni sinhronizovani!",
"Your storage is almost full ({usedSpacePercent}%)" : "Vaše skladište je skoro puno ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija za šifrovanje je omogućena ali Vaši ključevi nisu inicijalizovani, molimo Vas da se izlogujete i ulogujete ponovo.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za Aplikaciju za šifrovanje. Molimo da osvežite vašu lozinku privatnog ključa u ličnim podešavanjima kako bi dobili pristup šifrovanim fajlovima.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifrovanje je isključeno, ali Vaši fajlovi su i dalje šifrovani. Molimo Vas da odete u lična podešavanja da dešifrujete svoje fajlove.",
- "_matches '{filter}'_::_match '{filter}'_" : ["poklapa se sa '{filter}'","poklapaju se sa '{filter}'","poklapaju se sa '{filter}'"],
+ "_matches '{filter}'_::_match '{filter}'_" : ["se poklapa sa '{filter}'","se poklapaju sa '{filter}'","se poklapa sa '{filter}'"],
"{dirs} and {files}" : "{dirs} i {files}",
- "Favorited" : "Omiljeni",
- "Favorite" : "Omiljen",
- "A new file or folder has been <strong>created</strong>" : "Novi fajl ili direktorijum je <strong>kreiran</strong>",
- "A file or folder has been <strong>changed</strong>" : "Faj ili direktorijum je <strong>promenjen</strong>",
- "A file or folder has been <strong>deleted</strong>" : "Fajl ili direktorijum je <strong>uklonjen</strong>",
- "A file or folder has been <strong>restored</strong>" : "Fajl ili direktorijum je <strong>povraćen</strong>",
- "You created %1$s" : "Kreirali ste %1$s",
- "%2$s created %1$s" : "%2$s je kreirao %1$s",
- "%1$s was created in a public folder" : "%1$s je kreiran u javnom direktorijumu",
+ "Favorited" : "Omiljeno",
+ "Favorite" : "Omiljeni",
+ "An error occurred while trying to update the tags" : "Došlo je do greške pri pokušaju ažuriranja oznaka",
+ "A new file or folder has been <strong>created</strong>" : "Novi fajl ili fascikla su <strong>napravljeni</strong>",
+ "A file or folder has been <strong>changed</strong>" : "Fajl ili fascikla su <strong>izmenjeni</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Ograniči obaveštenja o stvaranju i izmenama na <strong>omiljene fajlove</strong> <em>(samo u zapisniku)</em>",
+ "A file or folder has been <strong>deleted</strong>" : "Fajl ili fascikla su <strong>obrisani</strong>",
+ "A file or folder has been <strong>restored</strong>" : "Fajl ili fascikla su <strong>vraćeni</strong>",
+ "You created %1$s" : "Napravili ste %1$s",
+ "%2$s created %1$s" : "%2$s napravi %1$s",
+ "%1$s was created in a public folder" : "%1$s je napravljen u javnoj fascikli",
"You changed %1$s" : "Izmenili ste %1$s",
- "%2$s changed %1$s" : "%2$s je izmenio %1$s",
+ "%2$s changed %1$s" : "%2$s izmeni %1$s",
"You deleted %1$s" : "Obrisali ste %1$s",
- "%2$s deleted %1$s" : "%2$s je obrisao %1$s",
- "You restored %1$s" : "Povratili ste %1$s",
- "%2$s restored %1$s" : "%2$s je povratio %1$s",
- "%s could not be renamed as it has been deleted" : "%s nije mogao biti preimenovan jer je obrisan.",
- "%s could not be renamed" : "%s nije mogao biti preimenovan",
- "Upload (max. %s)" : "Otpremanje (maksimalno %s)",
- "File handling" : "Upravljanje fajlovima",
- "Maximum upload size" : "Maksimalna veličina pošiljke",
+ "%2$s deleted %1$s" : "%2$s obrisa %1$s",
+ "You restored %1$s" : "Vratili ste %1$s",
+ "%2$s restored %1$s" : "%2$s povrati %1$s",
+ "%s could not be renamed as it has been deleted" : "%s se ne može preimenovati jer je obrisan",
+ "%s could not be renamed" : "%s se ne može preimenovati",
+ "Upload (max. %s)" : "Otpremanje (maks. %s)",
+ "File handling" : "Rukovanje fajlovima",
+ "Maximum upload size" : "Najveća veličina otpremanja",
"max. possible: " : "najviše moguće:",
- "Save" : "Snimi",
- "Settings" : "Podešavanja",
+ "Save" : "Sačuvaj",
+ "Can not be edited from here due to insufficient permissions." : "Ne može da se menja odavde zbog nedostatka dozvola.",
+ "Settings" : "Postavke",
"WebDAV" : "WebDAV",
- "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Upotrebite ovu adresu da <a href=\"%s\" target=\"_blank\">pristupite svojim fajlovima putem WebDAV-a</a>",
- "New" : "Novi",
- "New text file" : "Novi tekstualni fajl",
- "Text file" : "Tekstualni fajl",
- "New folder" : "Novi direktorijum",
- "Folder" : "Direktorijum",
- "Upload" : "Pošalji",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Koristite ovu adresu da <a href=\"%s\" target=\"_blank\"> pristupite fajlovima preko WebDAV-a</a>",
+ "New" : "Novo",
+ "New text file" : "Nov tekstualni fajl",
+ "Text file" : "tekstualni fajl",
+ "New folder" : "Nova fascikla",
+ "Folder" : "fascikla",
+ "Upload" : "Otpremi",
"Cancel upload" : "Otkaži otpremanje",
- "Upload some content or sync with your devices!" : "Otpremite neki sadržaj ili sinhronizujte sa svojim uređajima!",
- "No entries found in this folder" : "Nema pronađenih unosa u ovom direktorijumu",
- "Select all" : "Odaberi sve",
- "Upload too large" : "Pošiljka je prevelika",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Fajlovi koje želite da pošaljete prevazilaze ograničenje maksimalne veličine pošiljke na ovom serveru.",
- "Files are being scanned, please wait." : "Fajlovi se skeniraju, molimo sačekajte.",
+ "No files in here" : "Ovde nema fajlova",
+ "Upload some content or sync with your devices!" : "Otpremite neki sadržaj ili sinhronizujte sa vašim uređajima!",
+ "No entries found in this folder" : "Nema ničega u ovoj fascikli",
+ "Select all" : "Označi sve",
+ "Upload too large" : "Otpremanje je preveliko",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Fajlovi koje želite da otpremite prevazilaze ograničenje otpremanja na ovom serveru.",
+ "Files are being scanned, please wait." : "Skeniram fajlove, sačekajte.",
"Currently scanning" : "Trenutno skeniram",
"No favorites" : "Nema omiljenih",
- "Files and folders you mark as favorite will show up here" : "Fajlovi i direktorijumi koje ste obeležili kao omiljene će biti prikazani ovde"
+ "Files and folders you mark as favorite will show up here" : "Fajlovi i fascikle koje obeležite kao omiljene pojaviće se ovde"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js
index 4bf977e1e77..9af440dcbce 100644
--- a/apps/files/l10n/sv.js
+++ b/apps/files/l10n/sv.js
@@ -62,9 +62,6 @@ OC.L10N.register(
"File name cannot be empty." : "Filnamn kan inte vara tomt.",
"Your storage is full, files can not be updated or synced anymore!" : "Ditt lagringsutrymme är fullt, filer kan inte längre uppdateras eller synkroniseras!",
"Your storage is almost full ({usedSpacePercent}%)" : "Ditt lagringsutrymme är nästan fullt ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ogiltig privat nyckel i krypteringsprogrammet. Vänligen uppdatera lösenordet till din privata nyckel under dina personliga inställningar för att återfå tillgång till dina krypterade filer.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Kryptering inaktiverades men dina filer är fortfarande krypterade. Vänligen gå till sidan för dina personliga inställningar för att dekryptera dina filer.",
"{dirs} and {files}" : "{dirs} och {files}",
"Favorited" : "Favoritiserad",
"Favorite" : "Favorit",
diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json
index 95a1978a0a5..0da4cbe5f50 100644
--- a/apps/files/l10n/sv.json
+++ b/apps/files/l10n/sv.json
@@ -60,9 +60,6 @@
"File name cannot be empty." : "Filnamn kan inte vara tomt.",
"Your storage is full, files can not be updated or synced anymore!" : "Ditt lagringsutrymme är fullt, filer kan inte längre uppdateras eller synkroniseras!",
"Your storage is almost full ({usedSpacePercent}%)" : "Ditt lagringsutrymme är nästan fullt ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ogiltig privat nyckel i krypteringsprogrammet. Vänligen uppdatera lösenordet till din privata nyckel under dina personliga inställningar för att återfå tillgång till dina krypterade filer.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Kryptering inaktiverades men dina filer är fortfarande krypterade. Vänligen gå till sidan för dina personliga inställningar för att dekryptera dina filer.",
"{dirs} and {files}" : "{dirs} och {files}",
"Favorited" : "Favoritiserad",
"Favorite" : "Favorit",
diff --git a/apps/files/l10n/th_TH.js b/apps/files/l10n/th_TH.js
index e0c43462094..40af2bb490d 100644
--- a/apps/files/l10n/th_TH.js
+++ b/apps/files/l10n/th_TH.js
@@ -1,9 +1,18 @@
OC.L10N.register(
"files",
{
+ "Storage not available" : "ไม่สามารถใช้พื้นที่จัดเก็บข้อมูลได้",
+ "Storage invalid" : "การจัดเก็บข้อมูลไม่ถูกต้อง",
"Unknown error" : "ข้อผิดพลาดที่ไม่ทราบสาเหตุ",
"Could not move %s - File with this name already exists" : "ไม่สามารถย้าย %s ได้ - ไฟล์ที่ใช้ชื่อนี้มีอยู่แล้ว",
"Could not move %s" : "ไม่สามารถย้าย %s ได้",
+ "Permission denied" : "ไม่อนุญาต",
+ "The target folder has been moved or deleted." : "โฟลเดอร์ปลายทางถูกย้ายหรือลบ",
+ "The name %s is already used in the folder %s. Please choose a different name." : "ชื่อ %s ถูกใช้ไปแล้วในโฟลเดอร์ %s โปรดเลือกชื่ออื่นที่แตกต่างกัน",
+ "Error when creating the file" : "เกิดข้อผิดพลาดเมื่อมีการสร้างไฟล์",
+ "Error when creating the folder" : "เกิดข้อผิดพลาดเมื่อมีการสร้างโฟลเดอร์",
+ "Unable to set upload directory." : "ไม่สามารถตั้งค่าอัพโหลดไดเรกทอรี",
+ "Invalid Token" : "โทเค็นไม่ถูกต้อง",
"No file was uploaded. Unknown error" : "ยังไม่มีไฟล์ใดที่ถูกอัพโหลด เกิดข้อผิดพลาดที่ไม่ทราบสาเหตุ",
"There is no error, the file uploaded with success" : "ไม่พบข้อผิดพลาดใดๆ, ไฟล์ถูกอัพโหลดเรียบร้อยแล้ว",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "ขนาดไฟล์ที่อัพโหลดมีขนาดเกิน upload_max_filesize ที่ระบุไว้ใน php.ini",
@@ -13,41 +22,98 @@ OC.L10N.register(
"Missing a temporary folder" : "โฟลเดอร์ชั่วคราวเกิดการสูญหาย",
"Failed to write to disk" : "เขียนข้อมูลลงแผ่นดิสก์ล้มเหลว",
"Not enough storage available" : "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน",
+ "Upload failed. Could not find uploaded file" : "อัปโหลดล้มเหลว ไม่สามารถหาไฟล์ที่จะอัพโหลด",
+ "Upload failed. Could not get file info." : "อัพโหลดล้มเหลว ไม่สามารถรับข้อมูลไฟล์",
"Invalid directory." : "ไดเร็กทอรี่ไม่ถูกต้อง",
"Files" : "ไฟล์",
+ "All files" : "ไฟล์ทั้งหมด",
"Favorites" : "รายการโปรด",
"Home" : "บ้าน",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "ไม่สามารถอัพโหลด {filename} มันเป็นไดเรกทอรีหรือมี 0 ไบต์",
+ "Total file size {size1} exceeds upload limit {size2}" : "ขนาดไฟล์ {size1} ทั้งหมดเกินขีดจำกัด ของการอัพโหลด {size2}",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "พื้นที่ว่างไม่เพียงพอคุณจะอัพโหลด {size1} แต่มีพืนที่แค่ {size2}",
"Upload cancelled." : "การอัพโหลดถูกยกเลิก",
+ "Could not get result from server." : "ไม่สามารถรับผลลัพธ์จากเซิร์ฟเวอร์",
"File upload is in progress. Leaving the page now will cancel the upload." : "การอัพโหลดไฟล์กำลังอยู่ในระหว่างดำเนินการ การออกจากหน้าเว็บนี้จะทำให้การอัพโหลดถูกยกเลิก",
"{new_name} already exists" : "{new_name} มีอยู่แล้วในระบบ",
+ "Could not create file" : "ไม่สามารถสร้างไฟล์",
+ "Could not create folder" : "ไม่สามารถสร้างโฟลเดอร์",
"Rename" : "เปลี่ยนชื่อ",
"Delete" : "ลบ",
+ "Disconnect storage" : "ยกเลิกการเชื่อมต่อการจัดเก็บข้อมูล",
"Unshare" : "ยกเลิกการแชร์",
+ "No permission to delete" : "ไม่อนุญาตให้ลบ",
"Download" : "ดาวน์โหลด",
"Select" : "เลือก",
"Pending" : "อยู่ระหว่างดำเนินการ",
+ "Unable to determine date" : "ไม่สามารถกำหนดวัน",
+ "This operation is forbidden" : "การดำเนินการนี้ถูกห้าม",
+ "This directory is unavailable, please check the logs or contact the administrator" : "ไม่สามารถใช้งานไดเรกทอรีนี้โปรดตรวจสอบบันทึกหรือติดต่อผู้ดูแลระบบ",
+ "Error moving file." : "ข้อผิดพลาดในการเคลื่อนย้ายไฟล์",
+ "Error moving file" : "ข้อผิดพลาดในการเคลื่อนย้ายไฟล์",
"Error" : "ข้อผิดพลาด",
+ "Could not rename file" : "ไม่สามารถเปลี่ยนชื่อไฟล์",
+ "Error deleting file." : "เกิดข้อผิดพลาดในการลบไฟล์",
+ "No entries in this folder match '{filter}'" : "ไม่มีรายการในโฟลเดอร์นี้ที่ตรงกับ '{filter}'",
"Name" : "ชื่อ",
"Size" : "ขนาด",
"Modified" : "แก้ไขแล้ว",
+ "_%n folder_::_%n folders_" : ["%n โฟลเดอร์"],
+ "_%n file_::_%n files_" : ["%n ไฟล์"],
+ "You don’t have permission to upload or create files here" : "คุณไม่ได้รับอนุญาตให้อัพโหลดหรือสร้างไฟล์ที่นี่",
+ "_Uploading %n file_::_Uploading %n files_" : ["อัพโหลด %n ไฟล์"],
+ "\"{name}\" is an invalid file name." : "\"{name}\" เป็นชื่อไฟล์ที่ไม่ถูกต้อง",
"File name cannot be empty." : "ชื่อไฟล์ไม่สามารถเว้นว่างได้",
- "Your storage is full, files can not be updated or synced anymore!" : "พื้นที่จัดเก็บข้อมูลของคุณเต็มแล้ว ไม่สามารถอัพเดทหรือผสานไฟล์ต่างๆได้อีกต่อไป",
- "Your storage is almost full ({usedSpacePercent}%)" : "พื้นที่จัดเก็บข้อมูลของคุณใกล้เต็มแล้ว ({usedSpacePercent}%)",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "พื้นที่จัดเก็บข้อมูลของ {owner} เต็มแล้ว ไฟล์ไม่สามารถอัพเดทหรือผสานข้อมูลได้อีก!",
+ "Your storage is full, files can not be updated or synced anymore!" : "พื้นที่จัดเก็บข้อมูลของคุณเต็มแล้ว ไม่สามารถอัพเดทหรือผสานข้อมูลได้อีก!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "พื้นที่จัดเก็บข้อมูลของ {owner} ใกล้เต็มแล้ว\nใช้พื้นที่ไปแล้ว: ({usedSpacePercent}%)",
+ "Your storage is almost full ({usedSpacePercent}%)" : "พื้นที่จัดเก็บข้อมูลของคุณใกล้เต็มแล้ว \nใช้พื้นที่ไปแล้ว: ({usedSpacePercent}%)",
+ "_matches '{filter}'_::_match '{filter}'_" : ["ตรงกับ '{filter}'"],
+ "{dirs} and {files}" : "{dirs} และ {files}",
+ "Favorited" : "รายการโปรด",
"Favorite" : "รายการโปรด",
- "File handling" : "การจัดกาไฟล์",
+ "An error occurred while trying to update the tags" : "เกิดข้อผิดพลาดขณะที่พยายามจะปรับปรุงแท็ก",
+ "A new file or folder has been <strong>created</strong>" : "มีไฟล์ใหม่หรือโฟลเดอร์ได้ถูก <strong>สร้างขึ้น!</strong>",
+ "A file or folder has been <strong>changed</strong>" : "มีไฟล์หรือโฟลเดอร์ได้ถูก <strong>เปลี่ยน!</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "จำกัดการแจ้งเตือนเกี่ยวกับการสร้างและการเปลี่ยนแปลงของคุณ <strong>ไฟล์ที่ชื่นชอบ</strong> <em>(สตรีมเท่านั้น)</em>",
+ "A file or folder has been <strong>deleted</strong>" : "ไฟล์หรือโฟลเดอร์ถูก <strong>ลบ</strong>",
+ "A file or folder has been <strong>restored</strong>" : "ไฟล์หรือโฟลเดอร์ถูก <strong>กู้คืน</strong>",
+ "You created %1$s" : "คุณสร้าง %1$s",
+ "%2$s created %1$s" : "%2$s สร้าง %1$s",
+ "%1$s was created in a public folder" : "%1$s ถูกสร้างขึ้นในโฟลเดอร์สาธารณะ",
+ "You changed %1$s" : "คุณทำการเปลี่ยนแปลง %1$s",
+ "%2$s changed %1$s" : "%2$s ได้เปลี่ยนแปลง %1$s",
+ "You deleted %1$s" : "คุณลบ %1$s ออก",
+ "%2$s deleted %1$s" : "%2$s ลบ %1$s ออก",
+ "You restored %1$s" : "คุณกู้คืน %1$s",
+ "%2$s restored %1$s" : "%2$s ได้กู้คืน %1$s",
+ "%s could not be renamed as it has been deleted" : "%s ไม่สามารถเปลี่ยนชื่อเนื่องจากถูกลบไปแล้ว",
+ "%s could not be renamed" : "%s ไม่สามารถเปลี่ยนชื่อ",
+ "Upload (max. %s)" : "อัพโหลด (สูงสุด %s)",
+ "File handling" : "การจัดการไฟล์",
"Maximum upload size" : "ขนาดไฟล์สูงสุดที่อัพโหลดได้",
"max. possible: " : "จำนวนสูงสุดที่สามารถทำได้: ",
"Save" : "บันทึก",
+ "Can not be edited from here due to insufficient permissions." : "ไม่สามารถแก้ไขได้จากที่นี่เนื่องจากสิทธิ์ไม่เพียงพอ",
"Settings" : "ตั้งค่า",
"WebDAV" : "WebDAV",
- "New" : "อัพโหลดไฟล์ใหม่",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "ใช้ที่อยู่นี้เพื่อ <a href=\"%s\" target=\"_blank\">เข้าถึงไฟล์ของคุณผ่าน WebDAV</a>",
+ "New" : "ใหม่",
+ "New text file" : "ไฟล์ข้อความใหม่",
"Text file" : "ไฟล์ข้อความ",
"New folder" : "โฟลเดอร์ใหม่",
"Folder" : "แฟ้มเอกสาร",
"Upload" : "อัพโหลด",
"Cancel upload" : "ยกเลิกการอัพโหลด",
+ "No files in here" : "ไม่มีไฟล์ที่นี่",
+ "Upload some content or sync with your devices!" : "อัพโหลดเนื้อหาบางส่วนหรือผสานข้อมูลกับอุปกรณ์ของคุณ! อีกครั้ง",
+ "No entries found in this folder" : "ไม่พบรายการในโฟลเดอร์นี้",
+ "Select all" : "เลือกทั้งหมด",
"Upload too large" : "ไฟล์ที่อัพโหลดมีขนาดใหญ่เกินไป",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "ไฟล์ที่คุณพยายามที่จะอัพโหลดมีขนาดเกินกว่าขนาดสูงสุดที่กำหนดไว้ให้อัพโหลดได้สำหรับเซิร์ฟเวอร์นี้",
- "Files are being scanned, please wait." : "ไฟล์กำลังอยู่ระหว่างการสแกน, กรุณารอสักครู่."
+ "Files are being scanned, please wait." : "ไฟล์กำลังอยู่ระหว่างการสแกน, กรุณารอสักครู่.",
+ "Currently scanning" : "ปัจจุบันกำลังสแกน",
+ "No favorites" : "ไม่มีรายการโปรด",
+ "Files and folders you mark as favorite will show up here" : "ไฟล์และโฟลเดอร์ที่คุณทำเครื่องหมายเป็นรายการโปรดจะปรากฏขึ้นที่นี่"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/th_TH.json b/apps/files/l10n/th_TH.json
index 03d43e9b516..a6febf6fadf 100644
--- a/apps/files/l10n/th_TH.json
+++ b/apps/files/l10n/th_TH.json
@@ -1,7 +1,16 @@
{ "translations": {
+ "Storage not available" : "ไม่สามารถใช้พื้นที่จัดเก็บข้อมูลได้",
+ "Storage invalid" : "การจัดเก็บข้อมูลไม่ถูกต้อง",
"Unknown error" : "ข้อผิดพลาดที่ไม่ทราบสาเหตุ",
"Could not move %s - File with this name already exists" : "ไม่สามารถย้าย %s ได้ - ไฟล์ที่ใช้ชื่อนี้มีอยู่แล้ว",
"Could not move %s" : "ไม่สามารถย้าย %s ได้",
+ "Permission denied" : "ไม่อนุญาต",
+ "The target folder has been moved or deleted." : "โฟลเดอร์ปลายทางถูกย้ายหรือลบ",
+ "The name %s is already used in the folder %s. Please choose a different name." : "ชื่อ %s ถูกใช้ไปแล้วในโฟลเดอร์ %s โปรดเลือกชื่ออื่นที่แตกต่างกัน",
+ "Error when creating the file" : "เกิดข้อผิดพลาดเมื่อมีการสร้างไฟล์",
+ "Error when creating the folder" : "เกิดข้อผิดพลาดเมื่อมีการสร้างโฟลเดอร์",
+ "Unable to set upload directory." : "ไม่สามารถตั้งค่าอัพโหลดไดเรกทอรี",
+ "Invalid Token" : "โทเค็นไม่ถูกต้อง",
"No file was uploaded. Unknown error" : "ยังไม่มีไฟล์ใดที่ถูกอัพโหลด เกิดข้อผิดพลาดที่ไม่ทราบสาเหตุ",
"There is no error, the file uploaded with success" : "ไม่พบข้อผิดพลาดใดๆ, ไฟล์ถูกอัพโหลดเรียบร้อยแล้ว",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "ขนาดไฟล์ที่อัพโหลดมีขนาดเกิน upload_max_filesize ที่ระบุไว้ใน php.ini",
@@ -11,41 +20,98 @@
"Missing a temporary folder" : "โฟลเดอร์ชั่วคราวเกิดการสูญหาย",
"Failed to write to disk" : "เขียนข้อมูลลงแผ่นดิสก์ล้มเหลว",
"Not enough storage available" : "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน",
+ "Upload failed. Could not find uploaded file" : "อัปโหลดล้มเหลว ไม่สามารถหาไฟล์ที่จะอัพโหลด",
+ "Upload failed. Could not get file info." : "อัพโหลดล้มเหลว ไม่สามารถรับข้อมูลไฟล์",
"Invalid directory." : "ไดเร็กทอรี่ไม่ถูกต้อง",
"Files" : "ไฟล์",
+ "All files" : "ไฟล์ทั้งหมด",
"Favorites" : "รายการโปรด",
"Home" : "บ้าน",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "ไม่สามารถอัพโหลด {filename} มันเป็นไดเรกทอรีหรือมี 0 ไบต์",
+ "Total file size {size1} exceeds upload limit {size2}" : "ขนาดไฟล์ {size1} ทั้งหมดเกินขีดจำกัด ของการอัพโหลด {size2}",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "พื้นที่ว่างไม่เพียงพอคุณจะอัพโหลด {size1} แต่มีพืนที่แค่ {size2}",
"Upload cancelled." : "การอัพโหลดถูกยกเลิก",
+ "Could not get result from server." : "ไม่สามารถรับผลลัพธ์จากเซิร์ฟเวอร์",
"File upload is in progress. Leaving the page now will cancel the upload." : "การอัพโหลดไฟล์กำลังอยู่ในระหว่างดำเนินการ การออกจากหน้าเว็บนี้จะทำให้การอัพโหลดถูกยกเลิก",
"{new_name} already exists" : "{new_name} มีอยู่แล้วในระบบ",
+ "Could not create file" : "ไม่สามารถสร้างไฟล์",
+ "Could not create folder" : "ไม่สามารถสร้างโฟลเดอร์",
"Rename" : "เปลี่ยนชื่อ",
"Delete" : "ลบ",
+ "Disconnect storage" : "ยกเลิกการเชื่อมต่อการจัดเก็บข้อมูล",
"Unshare" : "ยกเลิกการแชร์",
+ "No permission to delete" : "ไม่อนุญาตให้ลบ",
"Download" : "ดาวน์โหลด",
"Select" : "เลือก",
"Pending" : "อยู่ระหว่างดำเนินการ",
+ "Unable to determine date" : "ไม่สามารถกำหนดวัน",
+ "This operation is forbidden" : "การดำเนินการนี้ถูกห้าม",
+ "This directory is unavailable, please check the logs or contact the administrator" : "ไม่สามารถใช้งานไดเรกทอรีนี้โปรดตรวจสอบบันทึกหรือติดต่อผู้ดูแลระบบ",
+ "Error moving file." : "ข้อผิดพลาดในการเคลื่อนย้ายไฟล์",
+ "Error moving file" : "ข้อผิดพลาดในการเคลื่อนย้ายไฟล์",
"Error" : "ข้อผิดพลาด",
+ "Could not rename file" : "ไม่สามารถเปลี่ยนชื่อไฟล์",
+ "Error deleting file." : "เกิดข้อผิดพลาดในการลบไฟล์",
+ "No entries in this folder match '{filter}'" : "ไม่มีรายการในโฟลเดอร์นี้ที่ตรงกับ '{filter}'",
"Name" : "ชื่อ",
"Size" : "ขนาด",
"Modified" : "แก้ไขแล้ว",
+ "_%n folder_::_%n folders_" : ["%n โฟลเดอร์"],
+ "_%n file_::_%n files_" : ["%n ไฟล์"],
+ "You don’t have permission to upload or create files here" : "คุณไม่ได้รับอนุญาตให้อัพโหลดหรือสร้างไฟล์ที่นี่",
+ "_Uploading %n file_::_Uploading %n files_" : ["อัพโหลด %n ไฟล์"],
+ "\"{name}\" is an invalid file name." : "\"{name}\" เป็นชื่อไฟล์ที่ไม่ถูกต้อง",
"File name cannot be empty." : "ชื่อไฟล์ไม่สามารถเว้นว่างได้",
- "Your storage is full, files can not be updated or synced anymore!" : "พื้นที่จัดเก็บข้อมูลของคุณเต็มแล้ว ไม่สามารถอัพเดทหรือผสานไฟล์ต่างๆได้อีกต่อไป",
- "Your storage is almost full ({usedSpacePercent}%)" : "พื้นที่จัดเก็บข้อมูลของคุณใกล้เต็มแล้ว ({usedSpacePercent}%)",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "พื้นที่จัดเก็บข้อมูลของ {owner} เต็มแล้ว ไฟล์ไม่สามารถอัพเดทหรือผสานข้อมูลได้อีก!",
+ "Your storage is full, files can not be updated or synced anymore!" : "พื้นที่จัดเก็บข้อมูลของคุณเต็มแล้ว ไม่สามารถอัพเดทหรือผสานข้อมูลได้อีก!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "พื้นที่จัดเก็บข้อมูลของ {owner} ใกล้เต็มแล้ว\nใช้พื้นที่ไปแล้ว: ({usedSpacePercent}%)",
+ "Your storage is almost full ({usedSpacePercent}%)" : "พื้นที่จัดเก็บข้อมูลของคุณใกล้เต็มแล้ว \nใช้พื้นที่ไปแล้ว: ({usedSpacePercent}%)",
+ "_matches '{filter}'_::_match '{filter}'_" : ["ตรงกับ '{filter}'"],
+ "{dirs} and {files}" : "{dirs} และ {files}",
+ "Favorited" : "รายการโปรด",
"Favorite" : "รายการโปรด",
- "File handling" : "การจัดกาไฟล์",
+ "An error occurred while trying to update the tags" : "เกิดข้อผิดพลาดขณะที่พยายามจะปรับปรุงแท็ก",
+ "A new file or folder has been <strong>created</strong>" : "มีไฟล์ใหม่หรือโฟลเดอร์ได้ถูก <strong>สร้างขึ้น!</strong>",
+ "A file or folder has been <strong>changed</strong>" : "มีไฟล์หรือโฟลเดอร์ได้ถูก <strong>เปลี่ยน!</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "จำกัดการแจ้งเตือนเกี่ยวกับการสร้างและการเปลี่ยนแปลงของคุณ <strong>ไฟล์ที่ชื่นชอบ</strong> <em>(สตรีมเท่านั้น)</em>",
+ "A file or folder has been <strong>deleted</strong>" : "ไฟล์หรือโฟลเดอร์ถูก <strong>ลบ</strong>",
+ "A file or folder has been <strong>restored</strong>" : "ไฟล์หรือโฟลเดอร์ถูก <strong>กู้คืน</strong>",
+ "You created %1$s" : "คุณสร้าง %1$s",
+ "%2$s created %1$s" : "%2$s สร้าง %1$s",
+ "%1$s was created in a public folder" : "%1$s ถูกสร้างขึ้นในโฟลเดอร์สาธารณะ",
+ "You changed %1$s" : "คุณทำการเปลี่ยนแปลง %1$s",
+ "%2$s changed %1$s" : "%2$s ได้เปลี่ยนแปลง %1$s",
+ "You deleted %1$s" : "คุณลบ %1$s ออก",
+ "%2$s deleted %1$s" : "%2$s ลบ %1$s ออก",
+ "You restored %1$s" : "คุณกู้คืน %1$s",
+ "%2$s restored %1$s" : "%2$s ได้กู้คืน %1$s",
+ "%s could not be renamed as it has been deleted" : "%s ไม่สามารถเปลี่ยนชื่อเนื่องจากถูกลบไปแล้ว",
+ "%s could not be renamed" : "%s ไม่สามารถเปลี่ยนชื่อ",
+ "Upload (max. %s)" : "อัพโหลด (สูงสุด %s)",
+ "File handling" : "การจัดการไฟล์",
"Maximum upload size" : "ขนาดไฟล์สูงสุดที่อัพโหลดได้",
"max. possible: " : "จำนวนสูงสุดที่สามารถทำได้: ",
"Save" : "บันทึก",
+ "Can not be edited from here due to insufficient permissions." : "ไม่สามารถแก้ไขได้จากที่นี่เนื่องจากสิทธิ์ไม่เพียงพอ",
"Settings" : "ตั้งค่า",
"WebDAV" : "WebDAV",
- "New" : "อัพโหลดไฟล์ใหม่",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "ใช้ที่อยู่นี้เพื่อ <a href=\"%s\" target=\"_blank\">เข้าถึงไฟล์ของคุณผ่าน WebDAV</a>",
+ "New" : "ใหม่",
+ "New text file" : "ไฟล์ข้อความใหม่",
"Text file" : "ไฟล์ข้อความ",
"New folder" : "โฟลเดอร์ใหม่",
"Folder" : "แฟ้มเอกสาร",
"Upload" : "อัพโหลด",
"Cancel upload" : "ยกเลิกการอัพโหลด",
+ "No files in here" : "ไม่มีไฟล์ที่นี่",
+ "Upload some content or sync with your devices!" : "อัพโหลดเนื้อหาบางส่วนหรือผสานข้อมูลกับอุปกรณ์ของคุณ! อีกครั้ง",
+ "No entries found in this folder" : "ไม่พบรายการในโฟลเดอร์นี้",
+ "Select all" : "เลือกทั้งหมด",
"Upload too large" : "ไฟล์ที่อัพโหลดมีขนาดใหญ่เกินไป",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "ไฟล์ที่คุณพยายามที่จะอัพโหลดมีขนาดเกินกว่าขนาดสูงสุดที่กำหนดไว้ให้อัพโหลดได้สำหรับเซิร์ฟเวอร์นี้",
- "Files are being scanned, please wait." : "ไฟล์กำลังอยู่ระหว่างการสแกน, กรุณารอสักครู่."
+ "Files are being scanned, please wait." : "ไฟล์กำลังอยู่ระหว่างการสแกน, กรุณารอสักครู่.",
+ "Currently scanning" : "ปัจจุบันกำลังสแกน",
+ "No favorites" : "ไม่มีรายการโปรด",
+ "Files and folders you mark as favorite will show up here" : "ไฟล์และโฟลเดอร์ที่คุณทำเครื่องหมายเป็นรายการโปรดจะปรากฏขึ้นที่นี่"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/tr.js b/apps/files/l10n/tr.js
index add6d671a84..dbc91ba15dc 100644
--- a/apps/files/l10n/tr.js
+++ b/apps/files/l10n/tr.js
@@ -42,10 +42,13 @@ OC.L10N.register(
"Delete" : "Sil",
"Disconnect storage" : "Depolama bağlantısını kes",
"Unshare" : "Paylaşmayı Kaldır",
+ "No permission to delete" : "Silmeye izin yok",
"Download" : "İndir",
"Select" : "Seç",
"Pending" : "Bekliyor",
"Unable to determine date" : "Tarih tespit edilemedi",
+ "This operation is forbidden" : "Bu işlem yasak",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Bu dizine yazılamıyor, lütfen günlüğü kontrol edin veya yönetici ile iletişime geçin",
"Error moving file." : "Dosya taşıma hatası.",
"Error moving file" : "Dosya taşıma hatası",
"Error" : "Hata",
@@ -55,17 +58,16 @@ OC.L10N.register(
"Name" : "İsim",
"Size" : "Boyut",
"Modified" : "Değiştirilme",
- "_%n folder_::_%n folders_" : ["%n dizin","%n dizin"],
+ "_%n folder_::_%n folders_" : ["%n klasör","%n klasör"],
"_%n file_::_%n files_" : ["%n dosya","%n dosya"],
"You don’t have permission to upload or create files here" : "Buraya dosya yükleme veya oluşturma izniniz yok",
"_Uploading %n file_::_Uploading %n files_" : ["%n dosya yükleniyor","%n dosya yükleniyor"],
"\"{name}\" is an invalid file name." : "\"{name}\" geçersiz bir dosya adı.",
"File name cannot be empty." : "Dosya adı boş olamaz.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} depolama alanı dolu, artık dosyalar güncellenmeyecek yada eşitlenmeyecek.",
"Your storage is full, files can not be updated or synced anymore!" : "Depolama alanınız dolu, artık dosyalar güncellenmeyecek veya eşitlenmeyecek.",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : " {owner} depolama alanı neredeyse dolu ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Depolama alanınız neredeyse dolu (%{usedSpacePercent})",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Şifreleme Uygulaması etkin ancak anahtarlarınız başlatılmamış. Lütfen oturumu kapatıp yeniden açın",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifreleme Uygulaması için geçersiz özel anahtar. Lütfen şifreli dosyalarınıza erişimi tekrar kazanabilmek için kişisel ayarlarınızdan özel anahtar parolanızı güncelleyin.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Şifreleme işlemi durduruldu ancak dosyalarınız hala şifreli. Dosyalarınızın şifrelemesini kaldırmak için lütfen kişisel ayarlar kısmına geçin.",
"_matches '{filter}'_::_match '{filter}'_" : ["'{filter}' ile eşleşiyor","'{filter}' ile eşleşiyor"],
"{dirs} and {files}" : "{dirs} ve {files}",
"Favorited" : "Sık kullanılanlara eklendi",
@@ -73,6 +75,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "Etiketler güncellenmeye çalışılırken bir hata oluştu",
"A new file or folder has been <strong>created</strong>" : "Yeni bir dosya veya klasör <strong>oluşturuldu</strong>",
"A file or folder has been <strong>changed</strong>" : "Bir dosya veya klasör <strong>değiştirildi</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>Sık kullanılan dosyalarınızın</strong> oluşturulma ve değiştirilme hakkındaki bildirimlerini sınırla <em>(Sadece akışta)</em>",
"A file or folder has been <strong>deleted</strong>" : "Bir dosya veya klasör <strong>silindi</strong>",
"A file or folder has been <strong>restored</strong>" : "Bir dosya veya klasör <strong>geri alındı</strong>",
"You created %1$s" : "%1$s dosyasını oluşturdunuz",
diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json
index 9f16990140f..eb967e2e3ec 100644
--- a/apps/files/l10n/tr.json
+++ b/apps/files/l10n/tr.json
@@ -40,10 +40,13 @@
"Delete" : "Sil",
"Disconnect storage" : "Depolama bağlantısını kes",
"Unshare" : "Paylaşmayı Kaldır",
+ "No permission to delete" : "Silmeye izin yok",
"Download" : "İndir",
"Select" : "Seç",
"Pending" : "Bekliyor",
"Unable to determine date" : "Tarih tespit edilemedi",
+ "This operation is forbidden" : "Bu işlem yasak",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Bu dizine yazılamıyor, lütfen günlüğü kontrol edin veya yönetici ile iletişime geçin",
"Error moving file." : "Dosya taşıma hatası.",
"Error moving file" : "Dosya taşıma hatası",
"Error" : "Hata",
@@ -53,17 +56,16 @@
"Name" : "İsim",
"Size" : "Boyut",
"Modified" : "Değiştirilme",
- "_%n folder_::_%n folders_" : ["%n dizin","%n dizin"],
+ "_%n folder_::_%n folders_" : ["%n klasör","%n klasör"],
"_%n file_::_%n files_" : ["%n dosya","%n dosya"],
"You don’t have permission to upload or create files here" : "Buraya dosya yükleme veya oluşturma izniniz yok",
"_Uploading %n file_::_Uploading %n files_" : ["%n dosya yükleniyor","%n dosya yükleniyor"],
"\"{name}\" is an invalid file name." : "\"{name}\" geçersiz bir dosya adı.",
"File name cannot be empty." : "Dosya adı boş olamaz.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} depolama alanı dolu, artık dosyalar güncellenmeyecek yada eşitlenmeyecek.",
"Your storage is full, files can not be updated or synced anymore!" : "Depolama alanınız dolu, artık dosyalar güncellenmeyecek veya eşitlenmeyecek.",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : " {owner} depolama alanı neredeyse dolu ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Depolama alanınız neredeyse dolu (%{usedSpacePercent})",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Şifreleme Uygulaması etkin ancak anahtarlarınız başlatılmamış. Lütfen oturumu kapatıp yeniden açın",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifreleme Uygulaması için geçersiz özel anahtar. Lütfen şifreli dosyalarınıza erişimi tekrar kazanabilmek için kişisel ayarlarınızdan özel anahtar parolanızı güncelleyin.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Şifreleme işlemi durduruldu ancak dosyalarınız hala şifreli. Dosyalarınızın şifrelemesini kaldırmak için lütfen kişisel ayarlar kısmına geçin.",
"_matches '{filter}'_::_match '{filter}'_" : ["'{filter}' ile eşleşiyor","'{filter}' ile eşleşiyor"],
"{dirs} and {files}" : "{dirs} ve {files}",
"Favorited" : "Sık kullanılanlara eklendi",
@@ -71,6 +73,7 @@
"An error occurred while trying to update the tags" : "Etiketler güncellenmeye çalışılırken bir hata oluştu",
"A new file or folder has been <strong>created</strong>" : "Yeni bir dosya veya klasör <strong>oluşturuldu</strong>",
"A file or folder has been <strong>changed</strong>" : "Bir dosya veya klasör <strong>değiştirildi</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>Sık kullanılan dosyalarınızın</strong> oluşturulma ve değiştirilme hakkındaki bildirimlerini sınırla <em>(Sadece akışta)</em>",
"A file or folder has been <strong>deleted</strong>" : "Bir dosya veya klasör <strong>silindi</strong>",
"A file or folder has been <strong>restored</strong>" : "Bir dosya veya klasör <strong>geri alındı</strong>",
"You created %1$s" : "%1$s dosyasını oluşturdunuz",
diff --git a/apps/files/l10n/uk.js b/apps/files/l10n/uk.js
index a72e4ce3972..167897b57e5 100644
--- a/apps/files/l10n/uk.js
+++ b/apps/files/l10n/uk.js
@@ -11,41 +11,43 @@ OC.L10N.register(
"The name %s is already used in the folder %s. Please choose a different name." : "Файл з ім'ям %s вже є у теці %s. Оберіть інше ім'я.",
"Error when creating the file" : "Помилка створення файлу",
"Error when creating the folder" : "Помилка створення теки",
- "Unable to set upload directory." : "Не вдалося встановити каталог завантаження.",
+ "Unable to set upload directory." : "Не вдалося встановити каталог вивантаження.",
"Invalid Token" : "Неприпустимий маркер",
- "No file was uploaded. Unknown error" : "Файл не був завантажений. Невідома помилка",
- "There is no error, the file uploaded with success" : "Файл успішно завантажений. Помилок немає.",
- "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Розмір звантаження перевищує upload_max_filesize параметра в php.ini: ",
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Розмір відвантаженого файлу перевищує директиву MAX_FILE_SIZE вказану в HTML формі",
- "The uploaded file was only partially uploaded" : "Файл завантажений лише частково",
- "No file was uploaded" : "Не завантажено жодного файлу",
+ "No file was uploaded. Unknown error" : "Файл не був вивантажений. Невідома помилка",
+ "There is no error, the file uploaded with success" : "Файл успішно вивантажений. Помилок немає.",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Розмір вивантаження перевищує значення параметра upload_max_filesize в php.ini: ",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Розмір вивантаженого файлу перевищує директиву MAX_FILE_SIZE вказану в HTML формі",
+ "The uploaded file was only partially uploaded" : "Файл вивантажений лише частково",
+ "No file was uploaded" : "Не вивантажено жодного файлу",
"Missing a temporary folder" : "Відсутній тимчасовий каталог",
"Failed to write to disk" : "Помилка запису на диск",
"Not enough storage available" : "Місця більше немає",
- "Upload failed. Could not find uploaded file" : "Завантаження не вдалося. Неможливо знайти завантажений файл.",
- "Upload failed. Could not get file info." : "Завантаження не вдалося. Неможливо отримати інформацію про файл.",
+ "Upload failed. Could not find uploaded file" : "Вивантаження не вдалося. Неможливо знайти вивантажений файл.",
+ "Upload failed. Could not get file info." : "Вивантаження не вдалося. Неможливо отримати інформацію про файл.",
"Invalid directory." : "Невірний каталог.",
"Files" : "Файли",
"All files" : "Усі файли",
"Favorites" : "Улюблені",
"Home" : "Домашня адреса",
- "Unable to upload {filename} as it is a directory or has 0 bytes" : "Неможливо завантажити {filename}, оскільки це каталог або має нульовий розмір.",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "Неможливо вивантажити {filename}, оскільки це каталог або файл має розмір 0 байт.",
"Total file size {size1} exceeds upload limit {size2}" : "Розмір файлу {size1} перевищує обмеження {size2}",
- "Not enough free space, you are uploading {size1} but only {size2} is left" : "Недостатньо вільного місця, ви завантажуєте {size1}, а залишилося лише {size2}",
- "Upload cancelled." : "Завантаження перервано.",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "Недостатньо вільного місця, ви вивантажуєте {size1}, а залишилося лише {size2}",
+ "Upload cancelled." : "Вивантаження скасовано.",
"Could not get result from server." : "Не вдалося отримати результат від сервера.",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Виконується завантаження файлу. Закриття цієї сторінки приведе до відміни завантаження.",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Виконується вивантаження файлу. Закриття цієї сторінки приведе до скасування вивантаження.",
"{new_name} already exists" : "{new_name} вже існує",
"Could not create file" : "Не вдалося створити файл",
"Could not create folder" : "Не вдалося створити теку",
"Rename" : "Перейменувати",
"Delete" : "Видалити",
"Disconnect storage" : "Від’єднати сховище",
- "Unshare" : "Закрити доступ",
+ "Unshare" : "Закрити спільний доступ",
+ "No permission to delete" : "Недостатньо прав для видалення",
"Download" : "Завантажити",
"Select" : "Оберіть",
"Pending" : "Очікування",
"Unable to determine date" : "Неможливо визначити дату",
+ "This operation is forbidden" : "Ця операція заборонена",
"Error moving file." : "Помилка переміщення файлу.",
"Error moving file" : "Помилка переміщення файлу",
"Error" : "Помилка",
@@ -57,15 +59,12 @@ OC.L10N.register(
"Modified" : "Змінено",
"_%n folder_::_%n folders_" : ["%n тека ","теки : %n ","теки : %n "],
"_%n file_::_%n files_" : ["%n файл ","файли : %n ","файли : %n "],
- "You don’t have permission to upload or create files here" : "У вас недостатньо прав для завантаження або створення файлів тут",
- "_Uploading %n file_::_Uploading %n files_" : ["Завантаження %n файлу","Завантаження %n файлів","Завантаження %n файлів"],
+ "You don’t have permission to upload or create files here" : "У вас недостатньо прав для вивантаження або створення тут файлів",
+ "_Uploading %n file_::_Uploading %n files_" : ["Вивантаження %n файлу","Вивантаження %n файлів","Вивантаження %n файлів"],
"\"{name}\" is an invalid file name." : "\"{name}\" - некоректне ім'я файлу.",
"File name cannot be empty." : " Ім'я файлу не може бути порожнім.",
"Your storage is full, files can not be updated or synced anymore!" : "Ваше сховище переповнене, файли більше не можуть бути оновлені або синхронізовані !",
"Your storage is almost full ({usedSpacePercent}%)" : "Ваше сховище майже повне ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Невірний закритий ключ для доданку шифрування. Оновіть пароль до вашого закритого ключа в особистих налаштуваннях.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Шифрування було вимкнено, але ваші файли все ще зашифровано. Для розшифрування перейдіть до персональних налаштувань.",
"_matches '{filter}'_::_match '{filter}'_" : ["знайдено '{filter}'","знайдено '{filter}'","знайдено '{filter}'"],
"{dirs} and {files}" : "{dirs} і {files}",
"Favorited" : "Улюблений",
@@ -73,6 +72,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "Виникла помилка при спробі оновити мітки",
"A new file or folder has been <strong>created</strong>" : "Новий файл або теку було <strong>створено</strong>",
"A file or folder has been <strong>changed</strong>" : "Файл або теку було <strong> змінено </strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Обмежити повідомлення про створення та зміни в ваших <strong>улюблених файлах</strong>\n<em>(Тількі потік)</em>",
"A file or folder has been <strong>deleted</strong>" : "Файл або теку було <strong> видалено </strong>",
"A file or folder has been <strong>restored</strong>" : "Файл або теку було <strong> відновлено </strong>",
"You created %1$s" : "Вами створено %1$s",
@@ -80,15 +80,15 @@ OC.L10N.register(
"%1$s was created in a public folder" : "%1$s створено у публічній теці",
"You changed %1$s" : "Вами змінено %1$s",
"%2$s changed %1$s" : "%2$s змінено %1$s",
- "You deleted %1$s" : "Вами видалене %1$s",
- "%2$s deleted %1$s" : "%2$s видалене %1$s",
+ "You deleted %1$s" : "Вами видалено %1$s",
+ "%2$s deleted %1$s" : "%2$s видалено %1$s",
"You restored %1$s" : "Вами відновлено %1$s",
"%2$s restored %1$s" : "%2$s відновлено %1$s",
- "%s could not be renamed as it has been deleted" : "%s не може бути перейменований, оскільки він видалений",
- "%s could not be renamed" : "%s не може бути перейменований",
- "Upload (max. %s)" : "Завантаження (макс. %s)",
+ "%s could not be renamed as it has been deleted" : "%s не можна перейменувати, оскільки його видалено",
+ "%s could not be renamed" : "%s не можна перейменувати",
+ "Upload (max. %s)" : "Вивантаження (макс. %s)",
"File handling" : "Робота з файлами",
- "Maximum upload size" : "Максимальний розмір відвантажень",
+ "Maximum upload size" : "Максимальний розмір вивантажень",
"max. possible: " : "макс. можливе:",
"Save" : "Зберегти",
"Can not be edited from here due to insufficient permissions." : "Неможливо відредагувати тут через брак повноважень.",
@@ -101,15 +101,16 @@ OC.L10N.register(
"New folder" : "Нова тека",
"Folder" : "Тека",
"Upload" : "Вивантажити",
- "Cancel upload" : "Перервати завантаження",
- "Upload some content or sync with your devices!" : "Завантажте вміст або синхронізуйте з пристроями!",
- "No entries found in this folder" : "Записів не знайдено в цій папці",
+ "Cancel upload" : "Скасувати вивантаження",
+ "No files in here" : "Тут немає файлів",
+ "Upload some content or sync with your devices!" : "Вивантажте щось або синхронізуйте з пристроями!",
+ "No entries found in this folder" : "В цій теці нічого немає",
"Select all" : "Вибрати всі",
"Upload too large" : "Файл занадто великий",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Файли,що ви намагаєтесь відвантажити перевищують максимальний дозволений розмір файлів на цьому сервері.",
- "Files are being scanned, please wait." : "Файли скануються, зачекайте, будь-ласка.",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Файли,що ви намагаєтесь вивантажити перевищують максимальний дозволений розмір файлів на цьому сервері.",
+ "Files are being scanned, please wait." : "Файли перевіряються, зачекайте, будь-ласка.",
"Currently scanning" : "Триває перевірка",
- "No favorites" : "Немає обраних",
- "Files and folders you mark as favorite will show up here" : "Файли і папки, які ви помітили як улюблені з’являться тут"
+ "No favorites" : "Немає улюблених",
+ "Files and folders you mark as favorite will show up here" : "Файли і теки, які ви позначили як улюблені, з’являться тут"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files/l10n/uk.json b/apps/files/l10n/uk.json
index e104cbbd721..803d9887627 100644
--- a/apps/files/l10n/uk.json
+++ b/apps/files/l10n/uk.json
@@ -9,41 +9,43 @@
"The name %s is already used in the folder %s. Please choose a different name." : "Файл з ім'ям %s вже є у теці %s. Оберіть інше ім'я.",
"Error when creating the file" : "Помилка створення файлу",
"Error when creating the folder" : "Помилка створення теки",
- "Unable to set upload directory." : "Не вдалося встановити каталог завантаження.",
+ "Unable to set upload directory." : "Не вдалося встановити каталог вивантаження.",
"Invalid Token" : "Неприпустимий маркер",
- "No file was uploaded. Unknown error" : "Файл не був завантажений. Невідома помилка",
- "There is no error, the file uploaded with success" : "Файл успішно завантажений. Помилок немає.",
- "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Розмір звантаження перевищує upload_max_filesize параметра в php.ini: ",
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Розмір відвантаженого файлу перевищує директиву MAX_FILE_SIZE вказану в HTML формі",
- "The uploaded file was only partially uploaded" : "Файл завантажений лише частково",
- "No file was uploaded" : "Не завантажено жодного файлу",
+ "No file was uploaded. Unknown error" : "Файл не був вивантажений. Невідома помилка",
+ "There is no error, the file uploaded with success" : "Файл успішно вивантажений. Помилок немає.",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Розмір вивантаження перевищує значення параметра upload_max_filesize в php.ini: ",
+ "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Розмір вивантаженого файлу перевищує директиву MAX_FILE_SIZE вказану в HTML формі",
+ "The uploaded file was only partially uploaded" : "Файл вивантажений лише частково",
+ "No file was uploaded" : "Не вивантажено жодного файлу",
"Missing a temporary folder" : "Відсутній тимчасовий каталог",
"Failed to write to disk" : "Помилка запису на диск",
"Not enough storage available" : "Місця більше немає",
- "Upload failed. Could not find uploaded file" : "Завантаження не вдалося. Неможливо знайти завантажений файл.",
- "Upload failed. Could not get file info." : "Завантаження не вдалося. Неможливо отримати інформацію про файл.",
+ "Upload failed. Could not find uploaded file" : "Вивантаження не вдалося. Неможливо знайти вивантажений файл.",
+ "Upload failed. Could not get file info." : "Вивантаження не вдалося. Неможливо отримати інформацію про файл.",
"Invalid directory." : "Невірний каталог.",
"Files" : "Файли",
"All files" : "Усі файли",
"Favorites" : "Улюблені",
"Home" : "Домашня адреса",
- "Unable to upload {filename} as it is a directory or has 0 bytes" : "Неможливо завантажити {filename}, оскільки це каталог або має нульовий розмір.",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "Неможливо вивантажити {filename}, оскільки це каталог або файл має розмір 0 байт.",
"Total file size {size1} exceeds upload limit {size2}" : "Розмір файлу {size1} перевищує обмеження {size2}",
- "Not enough free space, you are uploading {size1} but only {size2} is left" : "Недостатньо вільного місця, ви завантажуєте {size1}, а залишилося лише {size2}",
- "Upload cancelled." : "Завантаження перервано.",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "Недостатньо вільного місця, ви вивантажуєте {size1}, а залишилося лише {size2}",
+ "Upload cancelled." : "Вивантаження скасовано.",
"Could not get result from server." : "Не вдалося отримати результат від сервера.",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Виконується завантаження файлу. Закриття цієї сторінки приведе до відміни завантаження.",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Виконується вивантаження файлу. Закриття цієї сторінки приведе до скасування вивантаження.",
"{new_name} already exists" : "{new_name} вже існує",
"Could not create file" : "Не вдалося створити файл",
"Could not create folder" : "Не вдалося створити теку",
"Rename" : "Перейменувати",
"Delete" : "Видалити",
"Disconnect storage" : "Від’єднати сховище",
- "Unshare" : "Закрити доступ",
+ "Unshare" : "Закрити спільний доступ",
+ "No permission to delete" : "Недостатньо прав для видалення",
"Download" : "Завантажити",
"Select" : "Оберіть",
"Pending" : "Очікування",
"Unable to determine date" : "Неможливо визначити дату",
+ "This operation is forbidden" : "Ця операція заборонена",
"Error moving file." : "Помилка переміщення файлу.",
"Error moving file" : "Помилка переміщення файлу",
"Error" : "Помилка",
@@ -55,15 +57,12 @@
"Modified" : "Змінено",
"_%n folder_::_%n folders_" : ["%n тека ","теки : %n ","теки : %n "],
"_%n file_::_%n files_" : ["%n файл ","файли : %n ","файли : %n "],
- "You don’t have permission to upload or create files here" : "У вас недостатньо прав для завантаження або створення файлів тут",
- "_Uploading %n file_::_Uploading %n files_" : ["Завантаження %n файлу","Завантаження %n файлів","Завантаження %n файлів"],
+ "You don’t have permission to upload or create files here" : "У вас недостатньо прав для вивантаження або створення тут файлів",
+ "_Uploading %n file_::_Uploading %n files_" : ["Вивантаження %n файлу","Вивантаження %n файлів","Вивантаження %n файлів"],
"\"{name}\" is an invalid file name." : "\"{name}\" - некоректне ім'я файлу.",
"File name cannot be empty." : " Ім'я файлу не може бути порожнім.",
"Your storage is full, files can not be updated or synced anymore!" : "Ваше сховище переповнене, файли більше не можуть бути оновлені або синхронізовані !",
"Your storage is almost full ({usedSpacePercent}%)" : "Ваше сховище майже повне ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Невірний закритий ключ для доданку шифрування. Оновіть пароль до вашого закритого ключа в особистих налаштуваннях.",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Шифрування було вимкнено, але ваші файли все ще зашифровано. Для розшифрування перейдіть до персональних налаштувань.",
"_matches '{filter}'_::_match '{filter}'_" : ["знайдено '{filter}'","знайдено '{filter}'","знайдено '{filter}'"],
"{dirs} and {files}" : "{dirs} і {files}",
"Favorited" : "Улюблений",
@@ -71,6 +70,7 @@
"An error occurred while trying to update the tags" : "Виникла помилка при спробі оновити мітки",
"A new file or folder has been <strong>created</strong>" : "Новий файл або теку було <strong>створено</strong>",
"A file or folder has been <strong>changed</strong>" : "Файл або теку було <strong> змінено </strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Обмежити повідомлення про створення та зміни в ваших <strong>улюблених файлах</strong>\n<em>(Тількі потік)</em>",
"A file or folder has been <strong>deleted</strong>" : "Файл або теку було <strong> видалено </strong>",
"A file or folder has been <strong>restored</strong>" : "Файл або теку було <strong> відновлено </strong>",
"You created %1$s" : "Вами створено %1$s",
@@ -78,15 +78,15 @@
"%1$s was created in a public folder" : "%1$s створено у публічній теці",
"You changed %1$s" : "Вами змінено %1$s",
"%2$s changed %1$s" : "%2$s змінено %1$s",
- "You deleted %1$s" : "Вами видалене %1$s",
- "%2$s deleted %1$s" : "%2$s видалене %1$s",
+ "You deleted %1$s" : "Вами видалено %1$s",
+ "%2$s deleted %1$s" : "%2$s видалено %1$s",
"You restored %1$s" : "Вами відновлено %1$s",
"%2$s restored %1$s" : "%2$s відновлено %1$s",
- "%s could not be renamed as it has been deleted" : "%s не може бути перейменований, оскільки він видалений",
- "%s could not be renamed" : "%s не може бути перейменований",
- "Upload (max. %s)" : "Завантаження (макс. %s)",
+ "%s could not be renamed as it has been deleted" : "%s не можна перейменувати, оскільки його видалено",
+ "%s could not be renamed" : "%s не можна перейменувати",
+ "Upload (max. %s)" : "Вивантаження (макс. %s)",
"File handling" : "Робота з файлами",
- "Maximum upload size" : "Максимальний розмір відвантажень",
+ "Maximum upload size" : "Максимальний розмір вивантажень",
"max. possible: " : "макс. можливе:",
"Save" : "Зберегти",
"Can not be edited from here due to insufficient permissions." : "Неможливо відредагувати тут через брак повноважень.",
@@ -99,15 +99,16 @@
"New folder" : "Нова тека",
"Folder" : "Тека",
"Upload" : "Вивантажити",
- "Cancel upload" : "Перервати завантаження",
- "Upload some content or sync with your devices!" : "Завантажте вміст або синхронізуйте з пристроями!",
- "No entries found in this folder" : "Записів не знайдено в цій папці",
+ "Cancel upload" : "Скасувати вивантаження",
+ "No files in here" : "Тут немає файлів",
+ "Upload some content or sync with your devices!" : "Вивантажте щось або синхронізуйте з пристроями!",
+ "No entries found in this folder" : "В цій теці нічого немає",
"Select all" : "Вибрати всі",
"Upload too large" : "Файл занадто великий",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Файли,що ви намагаєтесь відвантажити перевищують максимальний дозволений розмір файлів на цьому сервері.",
- "Files are being scanned, please wait." : "Файли скануються, зачекайте, будь-ласка.",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Файли,що ви намагаєтесь вивантажити перевищують максимальний дозволений розмір файлів на цьому сервері.",
+ "Files are being scanned, please wait." : "Файли перевіряються, зачекайте, будь-ласка.",
"Currently scanning" : "Триває перевірка",
- "No favorites" : "Немає обраних",
- "Files and folders you mark as favorite will show up here" : "Файли і папки, які ви помітили як улюблені з’являться тут"
+ "No favorites" : "Немає улюблених",
+ "Files and folders you mark as favorite will show up here" : "Файли і теки, які ви позначили як улюблені, з’являться тут"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files/l10n/vi.js b/apps/files/l10n/vi.js
index df4d2e7a1ca..c724f5f73ea 100644
--- a/apps/files/l10n/vi.js
+++ b/apps/files/l10n/vi.js
@@ -1,6 +1,8 @@
OC.L10N.register(
"files",
{
+ "Storage not available" : "Lưu trữ không có sẵn",
+ "Storage invalid" : "Lưu trữ không hợp lệ",
"Unknown error" : "Lỗi chưa biết",
"Could not move %s - File with this name already exists" : "Không thể di chuyển %s - Đã có tên tập tin này trên hệ thống",
"Could not move %s" : "Không thể di chuyển %s",
@@ -51,8 +53,6 @@ OC.L10N.register(
"File name cannot be empty." : "Tên file không được rỗng",
"Your storage is full, files can not be updated or synced anymore!" : "Your storage is full, files can not be updated or synced anymore!",
"Your storage is almost full ({usedSpacePercent}%)" : "Your storage is almost full ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Ứng dụng mã hóa đã được kích hoạt nhưng bạn chưa khởi tạo khóa. Vui lòng đăng xuất ra và đăng nhập lại",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Mã hóa đã bị vô hiệu nhưng những tập tin của bạn vẫn được mã hóa. Vui lòng vào phần thiết lập cá nhân để giải mã chúng.",
"{dirs} and {files}" : "{dirs} và {files}",
"Favorite" : "Ưu thích",
"%s could not be renamed" : "%s không thể đổi tên",
@@ -70,6 +70,7 @@ OC.L10N.register(
"Upload" : "Tải lên",
"Cancel upload" : "Hủy upload",
"No entries found in this folder" : "Chưa có mục nào trong thư mục",
+ "Select all" : "Chọn tất cả",
"Upload too large" : "Tập tin tải lên quá lớn",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Các tập tin bạn đang tải lên vượt quá kích thước tối đa cho phép trên máy chủ .",
"Files are being scanned, please wait." : "Tập tin đang được quét ,vui lòng chờ."
diff --git a/apps/files/l10n/vi.json b/apps/files/l10n/vi.json
index eee5928ab63..5a4519cf84b 100644
--- a/apps/files/l10n/vi.json
+++ b/apps/files/l10n/vi.json
@@ -1,4 +1,6 @@
{ "translations": {
+ "Storage not available" : "Lưu trữ không có sẵn",
+ "Storage invalid" : "Lưu trữ không hợp lệ",
"Unknown error" : "Lỗi chưa biết",
"Could not move %s - File with this name already exists" : "Không thể di chuyển %s - Đã có tên tập tin này trên hệ thống",
"Could not move %s" : "Không thể di chuyển %s",
@@ -49,8 +51,6 @@
"File name cannot be empty." : "Tên file không được rỗng",
"Your storage is full, files can not be updated or synced anymore!" : "Your storage is full, files can not be updated or synced anymore!",
"Your storage is almost full ({usedSpacePercent}%)" : "Your storage is almost full ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Ứng dụng mã hóa đã được kích hoạt nhưng bạn chưa khởi tạo khóa. Vui lòng đăng xuất ra và đăng nhập lại",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Mã hóa đã bị vô hiệu nhưng những tập tin của bạn vẫn được mã hóa. Vui lòng vào phần thiết lập cá nhân để giải mã chúng.",
"{dirs} and {files}" : "{dirs} và {files}",
"Favorite" : "Ưu thích",
"%s could not be renamed" : "%s không thể đổi tên",
@@ -68,6 +68,7 @@
"Upload" : "Tải lên",
"Cancel upload" : "Hủy upload",
"No entries found in this folder" : "Chưa có mục nào trong thư mục",
+ "Select all" : "Chọn tất cả",
"Upload too large" : "Tập tin tải lên quá lớn",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Các tập tin bạn đang tải lên vượt quá kích thước tối đa cho phép trên máy chủ .",
"Files are being scanned, please wait." : "Tập tin đang được quét ,vui lòng chờ."
diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js
index 40f1a591dda..76cbe4110a8 100644
--- a/apps/files/l10n/zh_CN.js
+++ b/apps/files/l10n/zh_CN.js
@@ -42,15 +42,19 @@ OC.L10N.register(
"Delete" : "删除",
"Disconnect storage" : "断开储存连接",
"Unshare" : "取消共享",
+ "No permission to delete" : "无权删除",
"Download" : "下载",
"Select" : "选择",
"Pending" : "等待",
"Unable to determine date" : "无法确定日期",
+ "This operation is forbidden" : "操作被禁止",
+ "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用,请检查日志或联系管理员",
"Error moving file." : "移动文件出错。",
"Error moving file" : "移动文件错误",
"Error" : "错误",
"Could not rename file" : "不能重命名文件",
"Error deleting file." : "删除文件出错。",
+ "No entries in this folder match '{filter}'" : "此文件夹中无项目匹配“{filter}”",
"Name" : "名称",
"Size" : "大小",
"Modified" : "修改日期",
@@ -60,16 +64,18 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["上传 %n 个文件"],
"\"{name}\" is an invalid file name." : "“{name}”是一个无效的文件名。",
"File name cannot be empty." : "文件名不能为空。",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} 的存储空间已满,文件将无法更新或同步!",
"Your storage is full, files can not be updated or synced anymore!" : "您的存储空间已满,文件将无法更新或同步!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} 的存储空间即将用完 ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "您的存储空间即将用完 ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "加密应用被启用了,但是你的加密密钥没有初始化,请重新登出登录系统一次。",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "无效的私有密钥。请到您的个人配置里去更新私有密钥,来恢复对加密文件的访问。",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "加密是被禁用的,但是您的文件还是被加密了。请到您的个人配置里设置文件加密选项。",
+ "_matches '{filter}'_::_match '{filter}'_" : ["匹配“{filter}”"],
"{dirs} and {files}" : "{dirs} 和 {files}",
"Favorited" : "已收藏",
"Favorite" : "收藏",
+ "An error occurred while trying to update the tags" : "更新标签时出错",
"A new file or folder has been <strong>created</strong>" : "一个新的文件或文件夹已被<strong>创建</strong>",
"A file or folder has been <strong>changed</strong>" : "一个文件或文件夹已被<strong>修改</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "针对<strong>已收藏文件</strong>的新建和修改发送有限的通知 <em>(仅流)</em>",
"A file or folder has been <strong>deleted</strong>" : "一个文件或文件夹已被<strong>删除</strong>",
"A file or folder has been <strong>restored</strong>" : "一个文件或文件夹已经被 <strong>恢复</strong>",
"You created %1$s" : "您创建了%1$s",
@@ -88,6 +94,7 @@ OC.L10N.register(
"Maximum upload size" : "最大上传大小",
"max. possible: " : "最大允许: ",
"Save" : "保存",
+ "Can not be edited from here due to insufficient permissions." : "由于权限不足无法在此编辑。",
"Settings" : "设置",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "使用这个地址 <a href=\"%s\" target=\"_blank\">通过 WebDAV 访问您的文件</a>",
@@ -98,7 +105,9 @@ OC.L10N.register(
"Folder" : "文件夹",
"Upload" : "上传",
"Cancel upload" : "取消上传",
+ "No files in here" : "无文件",
"Upload some content or sync with your devices!" : "上传一些内容或者与设备同步!",
+ "No entries found in this folder" : "此文件夹中无项目",
"Select all" : "全部选择",
"Upload too large" : "上传文件过大",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "您正尝试上传的文件超过了此服务器可以上传的最大容量限制",
diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json
index e2e62b93959..44e763a42fd 100644
--- a/apps/files/l10n/zh_CN.json
+++ b/apps/files/l10n/zh_CN.json
@@ -40,15 +40,19 @@
"Delete" : "删除",
"Disconnect storage" : "断开储存连接",
"Unshare" : "取消共享",
+ "No permission to delete" : "无权删除",
"Download" : "下载",
"Select" : "选择",
"Pending" : "等待",
"Unable to determine date" : "无法确定日期",
+ "This operation is forbidden" : "操作被禁止",
+ "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用,请检查日志或联系管理员",
"Error moving file." : "移动文件出错。",
"Error moving file" : "移动文件错误",
"Error" : "错误",
"Could not rename file" : "不能重命名文件",
"Error deleting file." : "删除文件出错。",
+ "No entries in this folder match '{filter}'" : "此文件夹中无项目匹配“{filter}”",
"Name" : "名称",
"Size" : "大小",
"Modified" : "修改日期",
@@ -58,16 +62,18 @@
"_Uploading %n file_::_Uploading %n files_" : ["上传 %n 个文件"],
"\"{name}\" is an invalid file name." : "“{name}”是一个无效的文件名。",
"File name cannot be empty." : "文件名不能为空。",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} 的存储空间已满,文件将无法更新或同步!",
"Your storage is full, files can not be updated or synced anymore!" : "您的存储空间已满,文件将无法更新或同步!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} 的存储空间即将用完 ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "您的存储空间即将用完 ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "加密应用被启用了,但是你的加密密钥没有初始化,请重新登出登录系统一次。",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "无效的私有密钥。请到您的个人配置里去更新私有密钥,来恢复对加密文件的访问。",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "加密是被禁用的,但是您的文件还是被加密了。请到您的个人配置里设置文件加密选项。",
+ "_matches '{filter}'_::_match '{filter}'_" : ["匹配“{filter}”"],
"{dirs} and {files}" : "{dirs} 和 {files}",
"Favorited" : "已收藏",
"Favorite" : "收藏",
+ "An error occurred while trying to update the tags" : "更新标签时出错",
"A new file or folder has been <strong>created</strong>" : "一个新的文件或文件夹已被<strong>创建</strong>",
"A file or folder has been <strong>changed</strong>" : "一个文件或文件夹已被<strong>修改</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "针对<strong>已收藏文件</strong>的新建和修改发送有限的通知 <em>(仅流)</em>",
"A file or folder has been <strong>deleted</strong>" : "一个文件或文件夹已被<strong>删除</strong>",
"A file or folder has been <strong>restored</strong>" : "一个文件或文件夹已经被 <strong>恢复</strong>",
"You created %1$s" : "您创建了%1$s",
@@ -86,6 +92,7 @@
"Maximum upload size" : "最大上传大小",
"max. possible: " : "最大允许: ",
"Save" : "保存",
+ "Can not be edited from here due to insufficient permissions." : "由于权限不足无法在此编辑。",
"Settings" : "设置",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "使用这个地址 <a href=\"%s\" target=\"_blank\">通过 WebDAV 访问您的文件</a>",
@@ -96,7 +103,9 @@
"Folder" : "文件夹",
"Upload" : "上传",
"Cancel upload" : "取消上传",
+ "No files in here" : "无文件",
"Upload some content or sync with your devices!" : "上传一些内容或者与设备同步!",
+ "No entries found in this folder" : "此文件夹中无项目",
"Select all" : "全部选择",
"Upload too large" : "上传文件过大",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "您正尝试上传的文件超过了此服务器可以上传的最大容量限制",
diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js
index 4360aeaa9f2..194020ef9b7 100644
--- a/apps/files/l10n/zh_TW.js
+++ b/apps/files/l10n/zh_TW.js
@@ -61,9 +61,6 @@ OC.L10N.register(
"File name cannot be empty." : "檔名不能為空",
"Your storage is full, files can not be updated or synced anymore!" : "您的儲存空間已滿,沒有辦法再更新或是同步檔案!",
"Your storage is almost full ({usedSpacePercent}%)" : "您的儲存空間快要滿了 ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "檔案加密已啓用,但是您的金鑰尚未初始化,請重新登入一次",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "無效的檔案加密私鑰,請在個人設定中更新您的私鑰密語以存取加密的檔案。",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "加密已經被停用,但是您的舊檔案還是處於已加密的狀態,請前往個人設定以解密這些檔案。",
"{dirs} and {files}" : "{dirs} 和 {files}",
"Favorite" : "我的最愛",
"A new file or folder has been <strong>created</strong>" : "新的檔案或目錄已被 <strong>建立</strong>",
diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json
index d5bc48c0030..1a0b187498a 100644
--- a/apps/files/l10n/zh_TW.json
+++ b/apps/files/l10n/zh_TW.json
@@ -59,9 +59,6 @@
"File name cannot be empty." : "檔名不能為空",
"Your storage is full, files can not be updated or synced anymore!" : "您的儲存空間已滿,沒有辦法再更新或是同步檔案!",
"Your storage is almost full ({usedSpacePercent}%)" : "您的儲存空間快要滿了 ({usedSpacePercent}%)",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "檔案加密已啓用,但是您的金鑰尚未初始化,請重新登入一次",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "無效的檔案加密私鑰,請在個人設定中更新您的私鑰密語以存取加密的檔案。",
- "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "加密已經被停用,但是您的舊檔案還是處於已加密的狀態,請前往個人設定以解密這些檔案。",
"{dirs} and {files}" : "{dirs} 和 {files}",
"Favorite" : "我的最愛",
"A new file or folder has been <strong>created</strong>" : "新的檔案或目錄已被 <strong>建立</strong>",
diff --git a/apps/files/lib/activity.php b/apps/files/lib/activity.php
index fff49ea4ea5..bf80d0cfd7c 100644
--- a/apps/files/lib/activity.php
+++ b/apps/files/lib/activity.php
@@ -30,6 +30,7 @@ use OCP\IL10N;
use OCP\IURLGenerator;
class Activity implements IExtension {
+ const APP_FILES = 'files';
const FILTER_FILES = 'files';
const FILTER_FAVORITES = 'files_favorites';
@@ -78,7 +79,7 @@ class Activity implements IExtension {
* @return IL10N
*/
protected function getL10N($languageCode = null) {
- return $this->languageFactory->get('files', $languageCode);
+ return $this->languageFactory->get(self::APP_FILES, $languageCode);
}
/**
@@ -86,14 +87,21 @@ class Activity implements IExtension {
* If no additional types are to be added false is to be returned
*
* @param string $languageCode
- * @return array|false
+ * @return array|false Array "stringID of the type" => "translated string description for the setting"
+ * or Array "stringID of the type" => [
+ * 'desc' => "translated string description for the setting"
+ * 'methods' => [self::METHOD_*],
+ * ]
*/
public function getNotificationTypes($languageCode) {
$l = $this->getL10N($languageCode);
return [
self::TYPE_SHARE_CREATED => (string) $l->t('A new file or folder has been <strong>created</strong>'),
self::TYPE_SHARE_CHANGED => (string) $l->t('A file or folder has been <strong>changed</strong>'),
- self::TYPE_FAVORITES => (string) $l->t('Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>'),
+ self::TYPE_FAVORITES => [
+ 'desc' => (string) $l->t('Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>'),
+ 'methods' => [self::METHOD_STREAM],
+ ],
self::TYPE_SHARE_DELETED => (string) $l->t('A file or folder has been <strong>deleted</strong>'),
self::TYPE_SHARE_RESTORED => (string) $l->t('A file or folder has been <strong>restored</strong>'),
];
@@ -107,7 +115,7 @@ class Activity implements IExtension {
* @return array|false
*/
public function getDefaultTypes($method) {
- if ($method === 'stream') {
+ if ($method === self::METHOD_STREAM) {
$settings = array();
$settings[] = self::TYPE_SHARE_CREATED;
$settings[] = self::TYPE_SHARE_CHANGED;
@@ -132,29 +140,30 @@ class Activity implements IExtension {
* @return string|false
*/
public function translate($app, $text, $params, $stripPath, $highlightParams, $languageCode) {
- if ($app !== 'files') {
+ if ($app !== self::APP_FILES) {
return false;
}
+ $l = $this->getL10N($languageCode);
switch ($text) {
case 'created_self':
- return (string) $this->l->t('You created %1$s', $params);
+ return (string) $l->t('You created %1$s', $params);
case 'created_by':
- return (string) $this->l->t('%2$s created %1$s', $params);
+ return (string) $l->t('%2$s created %1$s', $params);
case 'created_public':
- return (string) $this->l->t('%1$s was created in a public folder', $params);
+ return (string) $l->t('%1$s was created in a public folder', $params);
case 'changed_self':
- return (string) $this->l->t('You changed %1$s', $params);
+ return (string) $l->t('You changed %1$s', $params);
case 'changed_by':
- return (string) $this->l->t('%2$s changed %1$s', $params);
+ return (string) $l->t('%2$s changed %1$s', $params);
case 'deleted_self':
- return (string) $this->l->t('You deleted %1$s', $params);
+ return (string) $l->t('You deleted %1$s', $params);
case 'deleted_by':
- return (string) $this->l->t('%2$s deleted %1$s', $params);
+ return (string) $l->t('%2$s deleted %1$s', $params);
case 'restored_self':
- return (string) $this->l->t('You restored %1$s', $params);
+ return (string) $l->t('You restored %1$s', $params);
case 'restored_by':
- return (string) $this->l->t('%2$s restored %1$s', $params);
+ return (string) $l->t('%2$s restored %1$s', $params);
default:
return false;
@@ -173,7 +182,7 @@ class Activity implements IExtension {
* @return array|false
*/
function getSpecialParameterList($app, $text) {
- if ($app === 'files') {
+ if ($app === self::APP_FILES) {
switch ($text) {
case 'created_self':
case 'created_by':
@@ -223,7 +232,7 @@ class Activity implements IExtension {
* @return integer|false
*/
public function getGroupParameter($activity) {
- if ($activity['app'] === 'files') {
+ if ($activity['app'] === self::APP_FILES) {
switch ($activity['subject']) {
case 'created_self':
case 'created_by':
@@ -309,7 +318,7 @@ class Activity implements IExtension {
$user = $this->activityManager->getCurrentUserId();
// Display actions from all files
if ($filter === self::FILTER_FILES) {
- return ['`app` = ?', ['files']];
+ return ['`app` = ?', [self::APP_FILES]];
}
if (!$user) {
@@ -323,7 +332,7 @@ class Activity implements IExtension {
$favorites = $this->helper->getFavoriteFilePaths($user);
} catch (\RuntimeException $e) {
// Too many favorites, can not put them into one query anymore...
- return ['`app` = ?', ['files']];
+ return ['`app` = ?', [self::APP_FILES]];
}
/*
@@ -331,7 +340,7 @@ class Activity implements IExtension {
* or `file` is a favorite or in a favorite folder
*/
$parameters = $fileQueryList = [];
- $parameters[] = 'files';
+ $parameters[] = self::APP_FILES;
$fileQueryList[] = '(`type` <> ? AND `type` <> ?)';
$parameters[] = self::TYPE_SHARE_CREATED;
@@ -346,7 +355,7 @@ class Activity implements IExtension {
$parameters[] = $favorite . '/%';
}
- $parameters[] = 'files';
+ $parameters[] = self::APP_FILES;
return [
' CASE WHEN `app` = ? THEN (' . implode(' OR ', $fileQueryList) . ') ELSE `app` <> ? END ',
@@ -363,6 +372,6 @@ class Activity implements IExtension {
* @return bool
*/
protected function userSettingFavoritesOnly($user) {
- return (bool) $this->config->getUserValue($user, 'activity', 'notify_stream_' . self::TYPE_FAVORITES, false);
+ return (bool) $this->config->getUserValue($user, 'activity', 'notify_' . self::METHOD_STREAM . '_' . self::TYPE_FAVORITES, false);
}
}
diff --git a/apps/files/lib/app.php b/apps/files/lib/app.php
index d80024f2470..5bd8c127586 100644
--- a/apps/files/lib/app.php
+++ b/apps/files/lib/app.php
@@ -74,6 +74,17 @@ class App {
'data' => NULL
);
+ try {
+ // check if the new name is conform to file name restrictions
+ $this->view->verifyPath($dir, $newname);
+ } catch (\OCP\Files\InvalidPathException $ex) {
+ $result['data'] = array(
+ 'message' => $this->l10n->t($ex->getMessage()),
+ 'code' => 'invalidname',
+ );
+ return $result;
+ }
+
$normalizedOldPath = \OC\Files\Filesystem::normalizePath($dir . '/' . $oldname);
$normalizedNewPath = \OC\Files\Filesystem::normalizePath($dir . '/' . $newname);
diff --git a/apps/files/lib/capabilities.php b/apps/files/lib/capabilities.php
index 05d12864dca..2e19283e4d6 100644
--- a/apps/files/lib/capabilities.php
+++ b/apps/files/lib/capabilities.php
@@ -1,7 +1,7 @@
<?php
/**
* @author Christopher Schäpers <kondou@ts.unde.re>
- * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Tom Needham <tom@owncloud.com>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
@@ -20,19 +20,28 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
-
-namespace OCA\Files;
-class Capabilities {
-
- public static function getCapabilities() {
- return new \OC_OCS_Result(array(
- 'capabilities' => array(
- 'files' => array(
- 'bigfilechunking' => true,
- ),
- ),
- ));
+namespace OCA\Files;
+
+use OCP\Capabilities\ICapability;
+
+/**
+ * Class Capabilities
+ *
+ * @package OCA\Files
+ */
+class Capabilities implements ICapability {
+
+ /**
+ * Return this classes capabilities
+ *
+ * @return array
+ */
+ public function getCapabilities() {
+ return [
+ 'files' => [
+ 'bigfilechunking' => true,
+ ],
+ ];
}
-
}
diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php
index cc1b2d3cfbe..6bfdc0a095c 100644
--- a/apps/files/lib/helper.php
+++ b/apps/files/lib/helper.php
@@ -52,7 +52,9 @@ class Helper {
'uploadMaxFilesize' => $maxUploadFileSize,
'maxHumanFilesize' => $maxHumanFileSize,
'freeSpace' => $storageInfo['free'],
- 'usedSpacePercent' => (int)$storageInfo['relative']
+ 'usedSpacePercent' => (int)$storageInfo['relative'],
+ 'owner' => $storageInfo['owner'],
+ 'ownerDisplayName' => $storageInfo['ownerDisplayName'],
];
}
@@ -196,10 +198,11 @@ class Helper {
* @param string $dir path to the directory
* @param string $sortAttribute attribute to sort on
* @param bool $sortDescending true for descending sort, false otherwise
+ * @param string $mimetypeFilter limit returned content to this mimetype or mimepart
* @return \OCP\Files\FileInfo[] files
*/
- public static function getFiles($dir, $sortAttribute = 'name', $sortDescending = false) {
- $content = \OC\Files\Filesystem::getDirectoryContent($dir);
+ public static function getFiles($dir, $sortAttribute = 'name', $sortDescending = false, $mimetypeFilter = '') {
+ $content = \OC\Files\Filesystem::getDirectoryContent($dir, $mimetypeFilter);
return self::sortFiles($content, $sortAttribute, $sortDescending);
}
diff --git a/apps/files/templates/admin.php b/apps/files/templates/admin.php
index adf756a12be..822fc779bd3 100644
--- a/apps/files/templates/admin.php
+++ b/apps/files/templates/admin.php
@@ -10,6 +10,8 @@
<br/>
<input type="hidden" value="<?php p($_['requesttoken']); ?>" name="requesttoken" />
<?php if($_['uploadChangable']): ?>
+ <?php p($l->t('With PHP-FPM this value may take up to 5 minutes to take effect after saving.')); ?>
+ <br/>
<input type="submit" name="submitFilesAdminSettings" id="submitFilesAdminSettings"
value="<?php p($l->t( 'Save' )); ?>"/>
<?php else: ?>
diff --git a/apps/files/templates/appnavigation.php b/apps/files/templates/appnavigation.php
index f586b0ecb28..512300e3a58 100644
--- a/apps/files/templates/appnavigation.php
+++ b/apps/files/templates/appnavigation.php
@@ -3,7 +3,7 @@
<?php foreach ($_['navigationItems'] as $item) { ?>
<li data-id="<?php p($item['id']) ?>" class="nav-<?php p($item['id']) ?>">
<a href="<?php p(isset($item['href']) ? $item['href'] : '#') ?>"
- class="nav-icon-<?php p($item['id']) ?> svg">
+ class="nav-icon-<?php p($item['icon'] !== '' ? $item['icon'] : $item['id']) ?> svg">
<?php p($item['name']);?>
</a>
</li>
@@ -12,7 +12,7 @@
<div id="app-settings">
<div id="app-settings-header">
<button class="settings-button" data-apps-slide-toggle="#app-settings-content">
- <span><?php p($l->t('Settings'));?></span>
+ <?php p($l->t('Settings'));?>
</button>
</div>
<div id="app-settings-content">
diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php
index 77f80bc346d..e825c300d31 100644
--- a/apps/files/templates/index.php
+++ b/apps/files/templates/index.php
@@ -6,11 +6,14 @@
<?php print_unescaped($content['content']) ?>
</div>
<?php } ?>
+ <div id="searchresults" class="hidden"></div>
</div><!-- closing app-content -->
<!-- config hints for javascript -->
<input type="hidden" name="filesApp" id="filesApp" value="1" />
<input type="hidden" name="usedSpacePercent" id="usedSpacePercent" value="<?php p($_['usedSpacePercent']); ?>" />
+<input type="hidden" name="owner" id="owner" value="<?php p($_['owner']); ?>" />
+<input type="hidden" name="ownerDisplayName" id="ownerDisplayName" value="<?php p($_['ownerDisplayName']); ?>" />
<?php if (!$_['isPublic']) :?>
<input type="hidden" name="mailNotificationEnabled" id="mailNotificationEnabled" value="<?php p($_['mailNotificationEnabled']) ?>" />
<input type="hidden" name="mailPublicNotificationEnabled" id="mailPublicNotificationEnabled" value="<?php p($_['mailPublicNotificationEnabled']) ?>" />
diff --git a/apps/files/templates/list.php b/apps/files/templates/list.php
index 02137c7e446..32651b261da 100644
--- a/apps/files/templates/list.php
+++ b/apps/files/templates/list.php
@@ -54,7 +54,7 @@
<div id="emptycontent" class="hidden">
<div class="icon-folder"></div>
<h2><?php p($l->t('No files in here')); ?></h2>
- <p><?php p($l->t('Upload some content or sync with your devices!')); ?></p>
+ <p class="uploadmessage hidden"><?php p($l->t('Upload some content or sync with your devices!')); ?></p>
</div>
<div class="nofilterresults emptycontent hidden">
diff --git a/apps/files/templates/test.png b/apps/files/templates/test.png
new file mode 100644
index 00000000000..2b90216f797
--- /dev/null
+++ b/apps/files/templates/test.png
Binary files differ
diff --git a/apps/files/tests/activitytest.php b/apps/files/tests/activitytest.php
index 1f8d6330e51..cdb1d21bcd8 100644
--- a/apps/files/tests/activitytest.php
+++ b/apps/files/tests/activitytest.php
@@ -1,11 +1,24 @@
<?php
/**
- * Copyright (c) 2015 Joas Schilling <nickvergessen@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
+ * @author Joas Schilling <nickvergessen@owncloud.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
*
-*/
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
namespace OCA\Files\Tests;
@@ -29,6 +42,9 @@ class ActivityTest extends TestCase {
/** @var \PHPUnit_Framework_MockObject_MockObject */
protected $activityHelper;
+ /** @var \PHPUnit_Framework_MockObject_MockObject */
+ protected $l10nFactory;
+
/** @var \OCA\Files\Activity */
protected $activityExtension;
@@ -54,8 +70,28 @@ class ActivityTest extends TestCase {
$this->config
);
+ $this->l10nFactory = $this->getMockBuilder('OC\L10N\Factory')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $deL10n = $this->getMockBuilder('OC_L10N')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $deL10n->expects($this->any())
+ ->method('t')
+ ->willReturnCallback(function ($argument) {
+ return 'translate(' . $argument . ')';
+ });
+
+ $this->l10nFactory->expects($this->any())
+ ->method('get')
+ ->willReturnMap([
+ ['files', null, new \OC_L10N('files', 'en')],
+ ['files', 'en', new \OC_L10N('files', 'en')],
+ ['files', 'de', $deL10n],
+ ]);
+
$this->activityExtension = $activityExtension = new Activity(
- new \OC\L10N\Factory(),
+ $this->l10nFactory,
$this->getMockBuilder('OCP\IURLGenerator')->disableOriginalConstructor()->getMock(),
$this->activityManager,
$this->activityHelper,
@@ -98,6 +134,26 @@ class ActivityTest extends TestCase {
$this->activityExtension->translate('files_sharing', '', [], false, false, 'en'),
'Asserting that no translations are set for files_sharing'
);
+
+ // Test english
+ $this->assertNotFalse(
+ $this->activityExtension->translate('files', 'deleted_self', ['file'], false, false, 'en'),
+ 'Asserting that translations are set for files.deleted_self'
+ );
+ $this->assertStringStartsWith(
+ 'You deleted ',
+ $this->activityExtension->translate('files', 'deleted_self', ['file'], false, false, 'en')
+ );
+
+ // Test translation
+ $this->assertNotFalse(
+ $this->activityExtension->translate('files', 'deleted_self', ['file'], false, false, 'de'),
+ 'Asserting that translations are set for files.deleted_self'
+ );
+ $this->assertStringStartsWith(
+ 'translate(You deleted ',
+ $this->activityExtension->translate('files', 'deleted_self', ['file'], false, false, 'de')
+ );
}
public function testGetSpecialParameterList() {
diff --git a/apps/files/tests/ajax_rename.php b/apps/files/tests/ajax_rename.php
index 34e7f5085dd..a690c7dcb0c 100644
--- a/apps/files/tests/ajax_rename.php
+++ b/apps/files/tests/ajax_rename.php
@@ -222,36 +222,17 @@ class Test_OC_Files_App_Rename extends \Test\TestCase {
}
/**
- * Test move to a folder that doesn't exist any more
+ * Test move to invalid name
*/
- function testRenameToNonExistingFolder() {
+ function testRenameToInvalidName() {
$dir = '/';
$oldname = 'oldname';
- $newname = '/unexist/newname';
-
- $this->viewMock->expects($this->any())
- ->method('file_exists')
- ->with($this->anything())
- ->will($this->returnValueMap(array(
- array('/oldname', true),
- array('/unexist', false)
- )));
-
- $this->viewMock->expects($this->any())
- ->method('getFileInfo')
- ->will($this->returnValue(array(
- 'fileid' => 123,
- 'type' => 'dir',
- 'mimetype' => 'httpd/unix-directory',
- 'size' => 18,
- 'etag' => 'abcdef',
- 'directory' => '/unexist',
- 'name' => 'new_name',
- )));
+ $newname = 'abc\\';
$result = $this->files->rename($dir, $oldname, $newname);
$this->assertFalse($result['success']);
- $this->assertEquals('targetnotfound', $result['data']['code']);
+ $this->assertEquals('File name contains at least one invalid character', $result['data']['message']);
+ $this->assertEquals('invalidname', $result['data']['code']);
}
}
diff --git a/apps/files/tests/controller/apicontrollertest.php b/apps/files/tests/controller/apicontrollertest.php
index bbab711310c..35d00af75ba 100644
--- a/apps/files/tests/controller/apicontrollertest.php
+++ b/apps/files/tests/controller/apicontrollertest.php
@@ -1,5 +1,6 @@
<?php
/**
+ * @author Joas Schilling <nickvergessen@owncloud.com>
* @author Lukas Reschke <lukas@owncloud.com>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
@@ -25,7 +26,6 @@ namespace OCA\Files\Controller;
use OC\Files\FileInfo;
use OCP\AppFramework\Http;
-use OC\Preview;
use OCP\Files\NotFoundException;
use OCP\Files\StorageNotAvailableException;
use Test\TestCase;
diff --git a/apps/files/tests/js/detailsviewSpec.js b/apps/files/tests/js/detailsviewSpec.js
new file mode 100644
index 00000000000..852f8b04293
--- /dev/null
+++ b/apps/files/tests/js/detailsviewSpec.js
@@ -0,0 +1,157 @@
+/**
+* ownCloud
+*
+* @author Vincent Petry
+* @copyright 2015 Vincent Petry <pvince81@owncloud.com>
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+describe('OCA.Files.DetailsView tests', function() {
+ var detailsView;
+
+ beforeEach(function() {
+ detailsView = new OCA.Files.DetailsView();
+ });
+ afterEach(function() {
+ detailsView.remove();
+ detailsView = undefined;
+ });
+ it('renders itself empty when nothing registered', function() {
+ detailsView.render();
+ expect(detailsView.$el.find('.detailFileInfoContainer').length).toEqual(1);
+ expect(detailsView.$el.find('.tabsContainer').length).toEqual(1);
+ });
+ describe('file info detail view', function() {
+ it('renders registered view', function() {
+ var testView = new OCA.Files.DetailFileInfoView();
+ var testView2 = new OCA.Files.DetailFileInfoView();
+ detailsView.addDetailView(testView);
+ detailsView.addDetailView(testView2);
+ detailsView.render();
+
+ expect(detailsView.$el.find('.detailFileInfoContainer .detailFileInfoView').length).toEqual(2);
+ });
+ it('updates registered tabs when fileinfo is updated', function() {
+ var viewRenderStub = sinon.stub(OCA.Files.DetailFileInfoView.prototype, 'render');
+ var testView = new OCA.Files.DetailFileInfoView();
+ var testView2 = new OCA.Files.DetailFileInfoView();
+ detailsView.addDetailView(testView);
+ detailsView.addDetailView(testView2);
+ detailsView.render();
+
+ var fileInfo = {id: 5, name: 'test.txt'};
+ viewRenderStub.reset();
+ detailsView.setFileInfo(fileInfo);
+
+ expect(testView.getFileInfo()).toEqual(fileInfo);
+ expect(testView2.getFileInfo()).toEqual(fileInfo);
+
+ expect(viewRenderStub.callCount).toEqual(2);
+ viewRenderStub.restore();
+ });
+ });
+ describe('tabs', function() {
+ var testView, testView2;
+
+ beforeEach(function() {
+ testView = new OCA.Files.DetailTabView({id: 'test1'});
+ testView2 = new OCA.Files.DetailTabView({id: 'test2'});
+ detailsView.addTabView(testView);
+ detailsView.addTabView(testView2);
+ detailsView.render();
+ });
+ it('initially renders only the selected tab', function() {
+ expect(detailsView.$el.find('.tab').length).toEqual(1);
+ expect(detailsView.$el.find('.tab').attr('id')).toEqual('test1');
+ });
+ it('updates tab model and rerenders on-demand as soon as it gets selected', function() {
+ var tab1RenderStub = sinon.stub(testView, 'render');
+ var tab2RenderStub = sinon.stub(testView2, 'render');
+ var fileInfo1 = new OCA.Files.FileInfoModel({id: 5, name: 'test.txt'});
+ var fileInfo2 = new OCA.Files.FileInfoModel({id: 8, name: 'test2.txt'});
+
+ detailsView.setFileInfo(fileInfo1);
+
+ // first tab renders, not the second one
+ expect(tab1RenderStub.calledOnce).toEqual(true);
+ expect(tab2RenderStub.notCalled).toEqual(true);
+
+ // info got set only to the first visible tab
+ expect(testView.getFileInfo()).toEqual(fileInfo1);
+ expect(testView2.getFileInfo()).toBeUndefined();
+
+ // select second tab for first render
+ detailsView.$el.find('.tabHeader').eq(1).click();
+
+ // second tab got rendered
+ expect(tab2RenderStub.calledOnce).toEqual(true);
+ expect(testView2.getFileInfo()).toEqual(fileInfo1);
+
+ // select the first tab again
+ detailsView.$el.find('.tabHeader').eq(0).click();
+
+ // no re-render
+ expect(tab1RenderStub.calledOnce).toEqual(true);
+ expect(tab2RenderStub.calledOnce).toEqual(true);
+
+ tab1RenderStub.reset();
+ tab2RenderStub.reset();
+
+ // switch to another file
+ detailsView.setFileInfo(fileInfo2);
+
+ // only the visible tab was updated and rerendered
+ expect(tab1RenderStub.calledOnce).toEqual(true);
+ expect(testView.getFileInfo()).toEqual(fileInfo2);
+
+ // second/invisible tab still has old info, not rerendered
+ expect(tab2RenderStub.notCalled).toEqual(true);
+ expect(testView2.getFileInfo()).toEqual(fileInfo1);
+
+ // reselect the second one
+ detailsView.$el.find('.tabHeader').eq(1).click();
+
+ // second tab becomes visible, updated and rendered
+ expect(testView2.getFileInfo()).toEqual(fileInfo2);
+ expect(tab2RenderStub.calledOnce).toEqual(true);
+
+ tab1RenderStub.restore();
+ tab2RenderStub.restore();
+ });
+ it('selects the first tab by default', function() {
+ expect(detailsView.$el.find('.tabHeader').eq(0).hasClass('selected')).toEqual(true);
+ expect(detailsView.$el.find('.tabHeader').eq(1).hasClass('selected')).toEqual(false);
+ expect(detailsView.$el.find('.tab').eq(0).hasClass('hidden')).toEqual(false);
+ expect(detailsView.$el.find('.tab').eq(1).length).toEqual(0);
+ });
+ it('switches the current tab when clicking on tab header', function() {
+ detailsView.$el.find('.tabHeader').eq(1).click();
+ expect(detailsView.$el.find('.tabHeader').eq(0).hasClass('selected')).toEqual(false);
+ expect(detailsView.$el.find('.tabHeader').eq(1).hasClass('selected')).toEqual(true);
+ expect(detailsView.$el.find('.tab').eq(0).hasClass('hidden')).toEqual(true);
+ expect(detailsView.$el.find('.tab').eq(1).hasClass('hidden')).toEqual(false);
+ });
+ it('does not render tab headers when only one tab exists', function() {
+ detailsView.remove();
+ detailsView = new OCA.Files.DetailsView();
+ testView = new OCA.Files.DetailTabView({id: 'test1'});
+ detailsView.addTabView(testView);
+ detailsView.render();
+
+ expect(detailsView.$el.find('.tabHeader').length).toEqual(0);
+ });
+ });
+});
diff --git a/apps/files/tests/js/favoritespluginspec.js b/apps/files/tests/js/favoritespluginspec.js
index 90b40ede74b..1b144c28707 100644
--- a/apps/files/tests/js/favoritespluginspec.js
+++ b/apps/files/tests/js/favoritespluginspec.js
@@ -113,7 +113,7 @@ describe('OCA.Files.FavoritesPlugin tests', function() {
shareOwner: 'user2'
}]);
- fileList.findFileEl('testdir').find('td a.name').click();
+ fileList.findFileEl('testdir').find('td .nametext').click();
expect(OCA.Files.App.fileList.getCurrentDirectory()).toEqual('/somewhere/inside/subdir/testdir');
diff --git a/apps/files/tests/js/fileUploadSpec.js b/apps/files/tests/js/fileUploadSpec.js
index 49b7265ced1..817654c4fa9 100644
--- a/apps/files/tests/js/fileUploadSpec.js
+++ b/apps/files/tests/js/fileUploadSpec.js
@@ -35,7 +35,14 @@ describe('OC.Upload tests', function() {
$('#testArea').append(
'<input type="file" id="file_upload_start" name="files[]" multiple="multiple">' +
'<input type="hidden" id="upload_limit" name="upload_limit" value="10000000">' + // 10 MB
- '<input type="hidden" id="free_space" name="free_space" value="50000000">' // 50 MB
+ '<input type="hidden" id="free_space" name="free_space" value="50000000">' + // 50 MB
+ // TODO: handlebars!
+ '<div id="new">' +
+ '<a>New</a>' +
+ '<ul>' +
+ '<li data-type="file" data-newname="New text file.txt"><p>Text file</p></li>' +
+ '</ul>' +
+ '</div>'
);
$dummyUploader = $('#file_upload_start');
});
@@ -111,4 +118,54 @@ describe('OC.Upload tests', function() {
);
});
});
+ describe('New file', function() {
+ var $input;
+ var currentDirStub;
+
+ beforeEach(function() {
+ OC.Upload.init();
+ $('#new>a').click();
+ $('#new li[data-type=file]').click();
+ $input = $('#new input[type=text]');
+
+ currentDirStub = sinon.stub(FileList, 'getCurrentDirectory');
+ currentDirStub.returns('testdir');
+ });
+ afterEach(function() {
+ currentDirStub.restore();
+ });
+ it('sets default text in field', function() {
+ expect($input.length).toEqual(1);
+ expect($input.val()).toEqual('New text file.txt');
+ });
+ it('creates file when enter is pressed', function() {
+ $input.val('somefile.txt');
+ $input.trigger(new $.Event('keyup', {keyCode: 13}));
+ $input.parent('form').submit();
+ expect(fakeServer.requests.length).toEqual(2);
+
+ var request = fakeServer.requests[1];
+ expect(request.method).toEqual('POST');
+ expect(request.url).toEqual(OC.webroot + '/index.php/apps/files/ajax/newfile.php');
+ var query = OC.parseQueryString(request.requestBody);
+ expect(query).toEqual({
+ dir: 'testdir',
+ filename: 'somefile.txt'
+ });
+ });
+ it('prevents entering invalid file names', function() {
+ $input.val('..');
+ $input.trigger(new $.Event('keyup', {keyCode: 13}));
+ $input.parent('form').submit();
+ expect(fakeServer.requests.length).toEqual(1);
+ });
+ it('prevents entering file names that already exist', function() {
+ var inListStub = sinon.stub(FileList, 'inList').returns(true);
+ $input.val('existing.txt');
+ $input.trigger(new $.Event('keyup', {keyCode: 13}));
+ $input.parent('form').submit();
+ expect(fakeServer.requests.length).toEqual(1);
+ inListStub.restore();
+ });
+ });
});
diff --git a/apps/files/tests/js/fileactionsSpec.js b/apps/files/tests/js/fileactionsSpec.js
index 828aec9b6b9..1254843e66a 100644
--- a/apps/files/tests/js/fileactionsSpec.js
+++ b/apps/files/tests/js/fileactionsSpec.js
@@ -20,178 +20,225 @@
*/
describe('OCA.Files.FileActions tests', function() {
- var $filesTable, fileList;
- var FileActions;
+ var fileList, fileActions;
beforeEach(function() {
// init horrible parameters
var $body = $('#testArea');
$body.append('<input type="hidden" id="dir" value="/subdir"></input>');
$body.append('<input type="hidden" id="permissions" value="31"></input>');
+ $body.append('<table id="filestable"><tbody id="fileList"></tbody></table>');
// dummy files table
- $filesTable = $body.append('<table id="filestable"></table>');
- fileList = new OCA.Files.FileList($('#testArea'));
- FileActions = new OCA.Files.FileActions();
- FileActions.registerDefaultActions();
+ fileActions = new OCA.Files.FileActions();
+ fileActions.registerAction({
+ name: 'Testdropdown',
+ displayName: 'Testdropdowndisplay',
+ mime: 'all',
+ permissions: OC.PERMISSION_READ,
+ icon: function () {
+ return OC.imagePath('core', 'actions/download');
+ }
+ });
+
+ fileActions.registerAction({
+ name: 'Testinline',
+ displayName: 'Testinlinedisplay',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ mime: 'all',
+ permissions: OC.PERMISSION_READ
+ });
+
+ fileActions.registerAction({
+ name: 'Testdefault',
+ displayName: 'Testdefaultdisplay',
+ mime: 'all',
+ permissions: OC.PERMISSION_READ
+ });
+ fileActions.setDefault('all', 'Testdefault');
+ fileList = new OCA.Files.FileList($body, {
+ fileActions: fileActions
+ });
});
afterEach(function() {
- FileActions = null;
+ fileActions = null;
fileList.destroy();
fileList = undefined;
$('#dir, #permissions, #filestable').remove();
});
it('calling clear() clears file actions', function() {
- FileActions.clear();
- expect(FileActions.actions).toEqual({});
- expect(FileActions.defaults).toEqual({});
- expect(FileActions.icons).toEqual({});
- expect(FileActions.currentFile).toBe(null);
- });
- it('calling display() sets file actions', function() {
- var fileData = {
- id: 18,
- type: 'file',
- name: 'testName.txt',
- mimetype: 'text/plain',
- size: '1234',
- etag: 'a01234c',
- mtime: '123456'
- };
-
- // note: FileActions.display() is called implicitly
- var $tr = fileList.add(fileData);
-
- // actions defined after call
- expect($tr.find('.action.action-download').length).toEqual(1);
- expect($tr.find('.action.action-download').attr('data-action')).toEqual('Download');
- expect($tr.find('.nametext .action.action-rename').length).toEqual(1);
- expect($tr.find('.nametext .action.action-rename').attr('data-action')).toEqual('Rename');
- expect($tr.find('.action.delete').length).toEqual(1);
- });
- it('calling display() twice correctly replaces file actions', function() {
- var fileData = {
- id: 18,
- type: 'file',
- name: 'testName.txt',
- mimetype: 'text/plain',
- size: '1234',
- etag: 'a01234c',
- mtime: '123456'
- };
- var $tr = fileList.add(fileData);
-
- FileActions.display($tr.find('td.filename'), true, fileList);
- FileActions.display($tr.find('td.filename'), true, fileList);
-
- // actions defined after cal
- expect($tr.find('.action.action-download').length).toEqual(1);
- expect($tr.find('.nametext .action.action-rename').length).toEqual(1);
- expect($tr.find('.action.delete').length).toEqual(1);
+ fileActions.clear();
+ expect(fileActions.actions).toEqual({});
+ expect(fileActions.defaults).toEqual({});
+ expect(fileActions.icons).toEqual({});
+ expect(fileActions.currentFile).toBe(null);
});
- it('redirects to download URL when clicking download', function() {
- var redirectStub = sinon.stub(OC, 'redirect');
- var fileData = {
- id: 18,
- type: 'file',
- name: 'testName.txt',
- mimetype: 'text/plain',
- size: '1234',
- etag: 'a01234c',
- mtime: '123456'
- };
- var $tr = fileList.add(fileData);
- FileActions.display($tr.find('td.filename'), true, fileList);
-
- $tr.find('.action-download').click();
-
- expect(redirectStub.calledOnce).toEqual(true);
- expect(redirectStub.getCall(0).args[0]).toEqual(
- OC.webroot +
- '/index.php/apps/files/ajax/download.php' +
- '?dir=%2Fsubdir&files=testName.txt');
- redirectStub.restore();
- });
- it('takes the file\'s path into account when clicking download', function() {
- var redirectStub = sinon.stub(OC, 'redirect');
- var fileData = {
- id: 18,
- type: 'file',
- name: 'testName.txt',
- path: '/anotherpath/there',
- mimetype: 'text/plain',
- size: '1234',
- etag: 'a01234c',
- mtime: '123456'
- };
- var $tr = fileList.add(fileData);
- FileActions.display($tr.find('td.filename'), true, fileList);
-
- $tr.find('.action-download').click();
-
- expect(redirectStub.calledOnce).toEqual(true);
- expect(redirectStub.getCall(0).args[0]).toEqual(
- OC.webroot + '/index.php/apps/files/ajax/download.php' +
- '?dir=%2Fanotherpath%2Fthere&files=testName.txt'
- );
- redirectStub.restore();
- });
- it('deletes file when clicking delete', function() {
- var deleteStub = sinon.stub(fileList, 'do_delete');
- var fileData = {
- id: 18,
- type: 'file',
- name: 'testName.txt',
- path: '/somepath/dir',
- mimetype: 'text/plain',
- size: '1234',
- etag: 'a01234c',
- mtime: '123456'
- };
- var $tr = fileList.add(fileData);
- FileActions.display($tr.find('td.filename'), true, fileList);
-
- $tr.find('.action.delete').click();
-
- expect(deleteStub.calledOnce).toEqual(true);
- expect(deleteStub.getCall(0).args[0]).toEqual('testName.txt');
- expect(deleteStub.getCall(0).args[1]).toEqual('/somepath/dir');
- deleteStub.restore();
+ describe('displaying actions', function() {
+ var $tr;
+
+ beforeEach(function() {
+ var fileData = {
+ id: 18,
+ type: 'file',
+ name: 'testName.txt',
+ mimetype: 'text/plain',
+ size: '1234',
+ etag: 'a01234c',
+ mtime: '123456',
+ permissions: OC.PERMISSION_READ | OC.PERMISSION_UPDATE
+ };
+
+ // note: FileActions.display() is called implicitly
+ $tr = fileList.add(fileData);
+ });
+ it('renders inline file actions', function() {
+ // actions defined after call
+ expect($tr.find('.action.action-testinline').length).toEqual(1);
+ expect($tr.find('.action.action-testinline').attr('data-action')).toEqual('Testinline');
+ });
+ it('does not render dropdown actions', function() {
+ expect($tr.find('.action.action-testdropdown').length).toEqual(0);
+ });
+ it('does not render default action', function() {
+ expect($tr.find('.action.action-testdefault').length).toEqual(0);
+ });
+ it('replaces file actions when displayed twice', function() {
+ fileActions.display($tr.find('td.filename'), true, fileList);
+ fileActions.display($tr.find('td.filename'), true, fileList);
+
+ expect($tr.find('.action.action-testinline').length).toEqual(1);
+ });
+ it('renders actions menu trigger', function() {
+ expect($tr.find('.action.action-menu').length).toEqual(1);
+ expect($tr.find('.action.action-menu').attr('data-action')).toEqual('menu');
+ });
+ it('only renders actions relevant to the mime type', function() {
+ fileActions.registerAction({
+ name: 'Match',
+ displayName: 'MatchDisplay',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ mime: 'text/plain',
+ permissions: OC.PERMISSION_READ
+ });
+ fileActions.registerAction({
+ name: 'Nomatch',
+ displayName: 'NoMatchDisplay',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ mime: 'application/octet-stream',
+ permissions: OC.PERMISSION_READ
+ });
+
+ fileActions.display($tr.find('td.filename'), true, fileList);
+ expect($tr.find('.action.action-match').length).toEqual(1);
+ expect($tr.find('.action.action-nomatch').length).toEqual(0);
+ });
+ it('only renders actions relevant to the permissions', function() {
+ fileActions.registerAction({
+ name: 'Match',
+ displayName: 'MatchDisplay',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ mime: 'text/plain',
+ permissions: OC.PERMISSION_UPDATE
+ });
+ fileActions.registerAction({
+ name: 'Nomatch',
+ displayName: 'NoMatchDisplay',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ mime: 'text/plain',
+ permissions: OC.PERMISSION_DELETE
+ });
+
+ fileActions.display($tr.find('td.filename'), true, fileList);
+ expect($tr.find('.action.action-match').length).toEqual(1);
+ expect($tr.find('.action.action-nomatch').length).toEqual(0);
+ });
});
- it('passes context to action handler', function() {
- var actionStub = sinon.stub();
- var fileData = {
- id: 18,
- type: 'file',
- name: 'testName.txt',
- mimetype: 'text/plain',
- size: '1234',
- etag: 'a01234c',
- mtime: '123456'
- };
- var $tr = fileList.add(fileData);
- FileActions.register(
- 'all',
- 'Test',
- OC.PERMISSION_READ,
- OC.imagePath('core', 'actions/test'),
- actionStub
- );
- FileActions.display($tr.find('td.filename'), true, fileList);
- $tr.find('.action-test').click();
- expect(actionStub.calledOnce).toEqual(true);
- expect(actionStub.getCall(0).args[0]).toEqual('testName.txt');
- var context = actionStub.getCall(0).args[1];
- expect(context.$file.is($tr)).toEqual(true);
- expect(context.fileList).toBeDefined();
- expect(context.fileActions).toBeDefined();
- expect(context.dir).toEqual('/subdir');
-
- // when data-path is defined
- actionStub.reset();
- $tr.attr('data-path', '/somepath');
- $tr.find('.action-test').click();
- context = actionStub.getCall(0).args[1];
- expect(context.dir).toEqual('/somepath');
+ describe('action handler', function() {
+ var actionStub, $tr, clock;
+
+ beforeEach(function() {
+ clock = sinon.useFakeTimers();
+ var fileData = {
+ id: 18,
+ type: 'file',
+ name: 'testName.txt',
+ mimetype: 'text/plain',
+ size: '1234',
+ etag: 'a01234c',
+ mtime: '123456'
+ };
+ actionStub = sinon.stub();
+ fileActions.registerAction({
+ name: 'Test',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ mime: 'all',
+ icon: OC.imagePath('core', 'actions/test'),
+ permissions: OC.PERMISSION_READ,
+ actionHandler: actionStub
+ });
+ $tr = fileList.add(fileData);
+ });
+ afterEach(function() {
+ OC.hideMenus();
+ // jump past animations
+ clock.tick(1000);
+ clock.restore();
+ });
+ it('passes context to action handler', function() {
+ $tr.find('.action-test').click();
+ expect(actionStub.calledOnce).toEqual(true);
+ expect(actionStub.getCall(0).args[0]).toEqual('testName.txt');
+ var context = actionStub.getCall(0).args[1];
+ expect(context.$file.is($tr)).toEqual(true);
+ expect(context.fileList).toBeDefined();
+ expect(context.fileActions).toBeDefined();
+ expect(context.dir).toEqual('/subdir');
+ expect(context.fileInfoModel.get('name')).toEqual('testName.txt');
+
+ // when data-path is defined
+ actionStub.reset();
+ $tr.attr('data-path', '/somepath');
+ $tr.find('.action-test').click();
+ context = actionStub.getCall(0).args[1];
+ expect(context.dir).toEqual('/somepath');
+ });
+ it('also triggers action handler when calling triggerAction()', function() {
+ var model = new OCA.Files.FileInfoModel({
+ id: 1,
+ name: 'Test.txt',
+ path: '/subdir',
+ mime: 'text/plain',
+ permissions: 31
+ });
+ fileActions.triggerAction('Test', model, fileList);
+
+ expect(actionStub.calledOnce).toEqual(true);
+ expect(actionStub.getCall(0).args[0]).toEqual('Test.txt');
+ expect(actionStub.getCall(0).args[1].fileList).toEqual(fileList);
+ expect(actionStub.getCall(0).args[1].fileActions).toEqual(fileActions);
+ expect(actionStub.getCall(0).args[1].fileInfoModel).toEqual(model);
+ });
+ describe('actions menu', function() {
+ it('shows actions menu inside row when clicking the menu trigger', function() {
+ expect($tr.find('td.filename .fileActionsMenu').length).toEqual(0);
+ $tr.find('.action-menu').click();
+ expect($tr.find('td.filename .fileActionsMenu').length).toEqual(1);
+ });
+ it('shows highlight on current row', function() {
+ $tr.find('.action-menu').click();
+ expect($tr.hasClass('mouseOver')).toEqual(true);
+ });
+ it('cleans up after hiding', function() {
+ var slideUpStub = sinon.stub($.fn, 'slideUp');
+ $tr.find('.action-menu').click();
+ expect($tr.find('.fileActionsMenu').length).toEqual(1);
+ OC.hideMenus();
+ // sliding animation
+ expect(slideUpStub.calledOnce).toEqual(true);
+ slideUpStub.getCall(0).args[1]();
+ expect($tr.hasClass('mouseOver')).toEqual(false);
+ expect($tr.find('.fileActionsMenu').length).toEqual(0);
+ });
+ });
});
describe('custom rendering', function() {
var $tr;
@@ -209,10 +256,11 @@ describe('OCA.Files.FileActions tests', function() {
});
it('regular function', function() {
var actionStub = sinon.stub();
- FileActions.registerAction({
+ fileActions.registerAction({
name: 'Test',
displayName: '',
mime: 'all',
+ type: OCA.Files.FileActions.TYPE_INLINE,
permissions: OC.PERMISSION_READ,
render: function(actionSpec, isDefault, context) {
expect(actionSpec.name).toEqual('Test');
@@ -224,13 +272,13 @@ describe('OCA.Files.FileActions tests', function() {
expect(context.fileList).toEqual(fileList);
expect(context.$file[0]).toEqual($tr[0]);
- var $customEl = $('<a href="#"><span>blabli</span><span>blabla</span></a>');
+ var $customEl = $('<a class="action action-test" href="#"><span>blabli</span><span>blabla</span></a>');
$tr.find('td:first').append($customEl);
return $customEl;
},
actionHandler: actionStub
});
- FileActions.display($tr.find('td.filename'), true, fileList);
+ fileActions.display($tr.find('td.filename'), true, fileList);
var $actionEl = $tr.find('td:first .action-test');
expect($actionEl.length).toEqual(1);
@@ -264,20 +312,22 @@ describe('OCA.Files.FileActions tests', function() {
var actions2 = new OCA.Files.FileActions();
var actionStub1 = sinon.stub();
var actionStub2 = sinon.stub();
- actions1.register(
- 'all',
- 'Test',
- OC.PERMISSION_READ,
- OC.imagePath('core', 'actions/test'),
- actionStub1
- );
- actions2.register(
- 'all',
- 'Test2',
- OC.PERMISSION_READ,
- OC.imagePath('core', 'actions/test'),
- actionStub2
- );
+ actions1.registerAction({
+ name: 'Test',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ mime: 'all',
+ permissions: OC.PERMISSION_READ,
+ icon: OC.imagePath('core', 'actions/test'),
+ actionHandler: actionStub1
+ });
+ actions2.registerAction({
+ name: 'Test2',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ mime: 'all',
+ permissions: OC.PERMISSION_READ,
+ icon: OC.imagePath('core', 'actions/test'),
+ actionHandler: actionStub2
+ });
actions2.merge(actions1);
actions2.display($tr.find('td.filename'), true, fileList);
@@ -300,20 +350,22 @@ describe('OCA.Files.FileActions tests', function() {
var actions2 = new OCA.Files.FileActions();
var actionStub1 = sinon.stub();
var actionStub2 = sinon.stub();
- actions1.register(
- 'all',
- 'Test',
- OC.PERMISSION_READ,
- OC.imagePath('core', 'actions/test'),
- actionStub1
- );
- actions2.register(
- 'all',
- 'Test', // override
- OC.PERMISSION_READ,
- OC.imagePath('core', 'actions/test'),
- actionStub2
- );
+ actions1.registerAction({
+ name: 'Test',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ mime: 'all',
+ permissions: OC.PERMISSION_READ,
+ icon: OC.imagePath('core', 'actions/test'),
+ actionHandler: actionStub1
+ });
+ actions2.registerAction({
+ name: 'Test', // override
+ mime: 'all',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ permissions: OC.PERMISSION_READ,
+ icon: OC.imagePath('core', 'actions/test'),
+ actionHandler: actionStub2
+ });
actions1.merge(actions2);
actions1.display($tr.find('td.filename'), true, fileList);
@@ -329,24 +381,26 @@ describe('OCA.Files.FileActions tests', function() {
var actions2 = new OCA.Files.FileActions();
var actionStub1 = sinon.stub();
var actionStub2 = sinon.stub();
- actions1.register(
- 'all',
- 'Test',
- OC.PERMISSION_READ,
- OC.imagePath('core', 'actions/test'),
- actionStub1
- );
+ actions1.registerAction({
+ mime: 'all',
+ name: 'Test',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ permissions: OC.PERMISSION_READ,
+ icon: OC.imagePath('core', 'actions/test'),
+ actionHandler: actionStub1
+ });
actions1.merge(actions2);
// late override
- actions1.register(
- 'all',
- 'Test', // override
- OC.PERMISSION_READ,
- OC.imagePath('core', 'actions/test'),
- actionStub2
- );
+ actions1.registerAction({
+ mime: 'all',
+ name: 'Test', // override
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ permissions: OC.PERMISSION_READ,
+ icon: OC.imagePath('core', 'actions/test'),
+ actionHandler: actionStub2
+ });
actions1.display($tr.find('td.filename'), true, fileList);
@@ -361,25 +415,27 @@ describe('OCA.Files.FileActions tests', function() {
var actions2 = new OCA.Files.FileActions();
var actionStub1 = sinon.stub();
var actionStub2 = sinon.stub();
- actions1.register(
- 'all',
- 'Test',
- OC.PERMISSION_READ,
- OC.imagePath('core', 'actions/test'),
- actionStub1
- );
+ actions1.registerAction({
+ mime: 'all',
+ name: 'Test',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ permissions: OC.PERMISSION_READ,
+ icon: OC.imagePath('core', 'actions/test'),
+ actionHandler: actionStub1
+ });
// copy the Test action to actions2
actions2.merge(actions1);
// late override
- actions2.register(
- 'all',
- 'Test', // override
- OC.PERMISSION_READ,
- OC.imagePath('core', 'actions/test'),
- actionStub2
- );
+ actions2.registerAction({
+ mime: 'all',
+ name: 'Test', // override
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ permissions: OC.PERMISSION_READ,
+ icon: OC.imagePath('core', 'actions/test'),
+ actionHandler: actionStub2
+ });
// check if original actions still call the correct handler
actions1.display($tr.find('td.filename'), true, fileList);
@@ -402,42 +458,45 @@ describe('OCA.Files.FileActions tests', function() {
it('notifies update event handlers once after multiple changes', function() {
var actionStub = sinon.stub();
var handler = sinon.stub();
- FileActions.on('registerAction', handler);
- FileActions.register(
- 'all',
- 'Test',
- OC.PERMISSION_READ,
- OC.imagePath('core', 'actions/test'),
- actionStub
- );
- FileActions.register(
- 'all',
- 'Test2',
- OC.PERMISSION_READ,
- OC.imagePath('core', 'actions/test'),
- actionStub
- );
+ fileActions.on('registerAction', handler);
+ fileActions.registerAction({
+ mime: 'all',
+ name: 'Test',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ permissions: OC.PERMISSION_READ,
+ icon: OC.imagePath('core', 'actions/test'),
+ actionHandler: actionStub
+ });
+ fileActions.registerAction({
+ mime: 'all',
+ name: 'Test2',
+ permissions: OC.PERMISSION_READ,
+ icon: OC.imagePath('core', 'actions/test'),
+ actionHandler: actionStub
+ });
expect(handler.calledTwice).toEqual(true);
});
it('does not notifies update event handlers after unregistering', function() {
var actionStub = sinon.stub();
var handler = sinon.stub();
- FileActions.on('registerAction', handler);
- FileActions.off('registerAction', handler);
- FileActions.register(
- 'all',
- 'Test',
- OC.PERMISSION_READ,
- OC.imagePath('core', 'actions/test'),
- actionStub
- );
- FileActions.register(
- 'all',
- 'Test2',
- OC.PERMISSION_READ,
- OC.imagePath('core', 'actions/test'),
- actionStub
- );
+ fileActions.on('registerAction', handler);
+ fileActions.off('registerAction', handler);
+ fileActions.registerAction({
+ mime: 'all',
+ name: 'Test',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ permissions: OC.PERMISSION_READ,
+ icon: OC.imagePath('core', 'actions/test'),
+ actionHandler: actionStub
+ });
+ fileActions.registerAction({
+ mime: 'all',
+ name: 'Test2',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ permissions: OC.PERMISSION_READ,
+ icon: OC.imagePath('core', 'actions/test'),
+ actionHandler: actionStub
+ });
expect(handler.notCalled).toEqual(true);
});
});
diff --git a/apps/files/tests/js/fileactionsmenuSpec.js b/apps/files/tests/js/fileactionsmenuSpec.js
new file mode 100644
index 00000000000..0cfd12a2d04
--- /dev/null
+++ b/apps/files/tests/js/fileactionsmenuSpec.js
@@ -0,0 +1,273 @@
+/**
+* ownCloud
+*
+* @author Vincent Petry
+* @copyright 2015 Vincent Petry <pvince81@owncloud.com>
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+describe('OCA.Files.FileActionsMenu tests', function() {
+ var fileList, fileActions, menu, actionStub, $tr;
+
+ beforeEach(function() {
+ // init horrible parameters
+ var $body = $('#testArea');
+ $body.append('<input type="hidden" id="dir" value="/subdir"></input>');
+ $body.append('<input type="hidden" id="permissions" value="31"></input>');
+ // dummy files table
+ actionStub = sinon.stub();
+ fileActions = new OCA.Files.FileActions();
+ fileList = new OCA.Files.FileList($body, {
+ fileActions: fileActions
+ });
+
+ fileActions.registerAction({
+ name: 'Testdropdown',
+ displayName: 'Testdropdowndisplay',
+ mime: 'all',
+ permissions: OC.PERMISSION_READ,
+ icon: function () {
+ return OC.imagePath('core', 'actions/download');
+ },
+ actionHandler: actionStub
+ });
+
+ fileActions.registerAction({
+ name: 'Testdropdownnoicon',
+ displayName: 'Testdropdowndisplaynoicon',
+ mime: 'all',
+ permissions: OC.PERMISSION_READ,
+ actionHandler: actionStub
+ });
+
+ fileActions.registerAction({
+ name: 'Testinline',
+ displayName: 'Testinlinedisplay',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ mime: 'all',
+ permissions: OC.PERMISSION_READ
+ });
+
+ fileActions.registerAction({
+ name: 'Testdefault',
+ displayName: 'Testdefaultdisplay',
+ mime: 'all',
+ permissions: OC.PERMISSION_READ
+ });
+ fileActions.setDefault('all', 'Testdefault');
+
+ var fileData = {
+ id: 18,
+ type: 'file',
+ name: 'testName.txt',
+ mimetype: 'text/plain',
+ size: '1234',
+ etag: 'a01234c',
+ mtime: '123456'
+ };
+ $tr = fileList.add(fileData);
+
+ var menuContext = {
+ $file: $tr,
+ fileList: fileList,
+ fileActions: fileActions,
+ dir: fileList.getCurrentDirectory()
+ };
+ menu = new OCA.Files.FileActionsMenu();
+ menu.show(menuContext);
+ });
+ afterEach(function() {
+ fileActions = null;
+ fileList.destroy();
+ fileList = undefined;
+ menu.remove();
+ $('#dir, #permissions, #filestable').remove();
+ });
+
+ describe('rendering', function() {
+ it('renders dropdown actions in menu', function() {
+ var $action = menu.$el.find('a[data-action=Testdropdown]');
+ expect($action.length).toEqual(1);
+ expect($action.find('img').attr('src'))
+ .toEqual(OC.imagePath('core', 'actions/download'));
+ expect($action.find('.no-icon').length).toEqual(0);
+
+ $action = menu.$el.find('a[data-action=Testdropdownnoicon]');
+ expect($action.length).toEqual(1);
+ expect($action.find('img').length).toEqual(0);
+ expect($action.find('.no-icon').length).toEqual(1);
+ });
+ it('does not render default actions', function() {
+ expect(menu.$el.find('a[data-action=Testdefault]').length).toEqual(0);
+ });
+ it('does not render inline actions', function() {
+ expect(menu.$el.find('a[data-action=Testinline]').length).toEqual(0);
+ });
+ it('only renders actions relevant to the mime type', function() {
+ fileActions.registerAction({
+ name: 'Match',
+ displayName: 'MatchDisplay',
+ mime: 'text/plain',
+ permissions: OC.PERMISSION_READ
+ });
+ fileActions.registerAction({
+ name: 'Nomatch',
+ displayName: 'NoMatchDisplay',
+ mime: 'application/octet-stream',
+ permissions: OC.PERMISSION_READ
+ });
+
+ menu.render();
+ expect(menu.$el.find('a[data-action=Match]').length).toEqual(1);
+ expect(menu.$el.find('a[data-action=NoMatch]').length).toEqual(0);
+ });
+ it('only renders actions relevant to the permissions', function() {
+ fileActions.registerAction({
+ name: 'Match',
+ displayName: 'MatchDisplay',
+ mime: 'text/plain',
+ permissions: OC.PERMISSION_UPDATE
+ });
+ fileActions.registerAction({
+ name: 'Nomatch',
+ displayName: 'NoMatchDisplay',
+ mime: 'text/plain',
+ permissions: OC.PERMISSION_DELETE
+ });
+
+ menu.render();
+ expect(menu.$el.find('a[data-action=Match]').length).toEqual(1);
+ expect(menu.$el.find('a[data-action=NoMatch]').length).toEqual(0);
+ });
+ });
+
+ describe('action handler', function() {
+ it('calls action handler when clicking menu item', function() {
+ var $action = menu.$el.find('a[data-action=Testdropdown]');
+ $action.click();
+
+ expect(actionStub.calledOnce).toEqual(true);
+ expect(actionStub.getCall(0).args[0]).toEqual('testName.txt');
+ expect(actionStub.getCall(0).args[1].$file[0]).toEqual($tr[0]);
+ expect(actionStub.getCall(0).args[1].fileList).toEqual(fileList);
+ expect(actionStub.getCall(0).args[1].fileActions).toEqual(fileActions);
+ expect(actionStub.getCall(0).args[1].dir).toEqual('/subdir');
+ });
+ });
+ describe('default actions from registerDefaultActions', function() {
+ beforeEach(function() {
+ fileActions.clear();
+ fileActions.registerDefaultActions();
+ });
+ it('redirects to download URL when clicking download', function() {
+ var redirectStub = sinon.stub(OC, 'redirect');
+ var fileData = {
+ id: 18,
+ type: 'file',
+ name: 'testName.txt',
+ mimetype: 'text/plain',
+ size: '1234',
+ etag: 'a01234c',
+ mtime: '123456'
+ };
+ var $tr = fileList.add(fileData);
+ fileActions.display($tr.find('td.filename'), true, fileList);
+
+ var menuContext = {
+ $file: $tr,
+ fileList: fileList,
+ fileActions: fileActions,
+ dir: fileList.getCurrentDirectory()
+ };
+ menu = new OCA.Files.FileActionsMenu();
+ menu.show(menuContext);
+
+ menu.$el.find('.action-download').click();
+
+ expect(redirectStub.calledOnce).toEqual(true);
+ expect(redirectStub.getCall(0).args[0]).toContain(
+ OC.webroot +
+ '/index.php/apps/files/ajax/download.php' +
+ '?dir=%2Fsubdir&files=testName.txt');
+ redirectStub.restore();
+ });
+ it('takes the file\'s path into account when clicking download', function() {
+ var redirectStub = sinon.stub(OC, 'redirect');
+ var fileData = {
+ id: 18,
+ type: 'file',
+ name: 'testName.txt',
+ path: '/anotherpath/there',
+ mimetype: 'text/plain',
+ size: '1234',
+ etag: 'a01234c',
+ mtime: '123456'
+ };
+ var $tr = fileList.add(fileData);
+ fileActions.display($tr.find('td.filename'), true, fileList);
+
+ var menuContext = {
+ $file: $tr,
+ fileList: fileList,
+ fileActions: fileActions,
+ dir: '/anotherpath/there'
+ };
+ menu = new OCA.Files.FileActionsMenu();
+ menu.show(menuContext);
+
+ menu.$el.find('.action-download').click();
+
+ expect(redirectStub.calledOnce).toEqual(true);
+ expect(redirectStub.getCall(0).args[0]).toContain(
+ OC.webroot + '/index.php/apps/files/ajax/download.php' +
+ '?dir=%2Fanotherpath%2Fthere&files=testName.txt'
+ );
+ redirectStub.restore();
+ });
+ it('deletes file when clicking delete', function() {
+ var deleteStub = sinon.stub(fileList, 'do_delete');
+ var fileData = {
+ id: 18,
+ type: 'file',
+ name: 'testName.txt',
+ path: '/somepath/dir',
+ mimetype: 'text/plain',
+ size: '1234',
+ etag: 'a01234c',
+ mtime: '123456'
+ };
+ var $tr = fileList.add(fileData);
+ fileActions.display($tr.find('td.filename'), true, fileList);
+
+ var menuContext = {
+ $file: $tr,
+ fileList: fileList,
+ fileActions: fileActions,
+ dir: '/somepath/dir'
+ };
+ menu = new OCA.Files.FileActionsMenu();
+ menu.show(menuContext);
+
+ menu.$el.find('.action-delete').click();
+
+ expect(deleteStub.calledOnce).toEqual(true);
+ expect(deleteStub.getCall(0).args[0]).toEqual('testName.txt');
+ expect(deleteStub.getCall(0).args[1]).toEqual('/somepath/dir');
+ deleteStub.restore();
+ });
+ });
+});
+
diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js
index 153cbe52c10..7ed60084fa9 100644
--- a/apps/files/tests/js/filelistSpec.js
+++ b/apps/files/tests/js/filelistSpec.js
@@ -77,8 +77,8 @@ describe('OCA.Files.FileList tests', function() {
'<th id="headerName" class="hidden column-name">' +
'<input type="checkbox" id="select_all_files" class="select-all">' +
'<a class="name columntitle" data-sort="name"><span>Name</span><span class="sort-indicator"></span></a>' +
- '<span class="selectedActions hidden">' +
- '<a href class="download">Download</a>' +
+ '<span id="selectedActionsList" class="selectedActions hidden">' +
+ '<a href class="download"><img src="actions/download.svg">Download</a>' +
'<a href class="delete-selected">Delete</a></span>' +
'</th>' +
'<th class="hidden column-size"><a class="columntitle" data-sort="size"><span class="sort-indicator"></span></a></th>' +
@@ -87,7 +87,8 @@ describe('OCA.Files.FileList tests', function() {
'<tbody id="fileList"></tbody>' +
'<tfoot></tfoot>' +
'</table>' +
- '<div id="emptycontent">Empty content message</div>' +
+ // TODO: move to handlebars template
+ '<div id="emptycontent"><h2>Empty content message</h2><p class="uploadmessage">Upload message</p></div>' +
'<div class="nofilterresults hidden"></div>' +
'</div>'
);
@@ -455,19 +456,19 @@ describe('OCA.Files.FileList tests', function() {
expect(notificationStub.notCalled).toEqual(true);
});
- it('shows spinner on files to be deleted', function() {
+ it('shows busy state on files to be deleted', function() {
fileList.setFiles(testFiles);
doDelete();
- expect(fileList.findFileEl('One.txt').find('.icon-loading-small:not(.icon-delete)').length).toEqual(1);
- expect(fileList.findFileEl('Three.pdf').find('.icon-delete:not(.icon-loading-small)').length).toEqual(1);
+ expect(fileList.findFileEl('One.txt').hasClass('busy')).toEqual(true);
+ expect(fileList.findFileEl('Three.pdf').hasClass('busy')).toEqual(false);
});
- it('shows spinner on all files when deleting all', function() {
+ it('shows busy state on all files when deleting all', function() {
fileList.setFiles(testFiles);
fileList.do_delete();
- expect(fileList.$fileList.find('tr .icon-loading-small:not(.icon-delete)').length).toEqual(4);
+ expect(fileList.$fileList.find('tr.busy').length).toEqual(4);
});
it('updates summary when deleting last file', function() {
var $summary;
@@ -624,7 +625,7 @@ describe('OCA.Files.FileList tests', function() {
doCancelRename();
expect($summary.find('.info').text()).toEqual('1 folder and 3 files');
});
- it('Hides actions while rename in progress', function() {
+ it('Shows busy state while rename in progress', function() {
var $tr;
doRename();
@@ -633,8 +634,7 @@ describe('OCA.Files.FileList tests', function() {
expect($tr.length).toEqual(1);
expect(fileList.findFileEl('One.txt').length).toEqual(0);
// file actions are hidden
- expect($tr.find('.action').hasClass('hidden')).toEqual(true);
- expect($tr.find('.fileactions').hasClass('hidden')).toEqual(true);
+ expect($tr.hasClass('busy')).toEqual(true);
// input and form are gone
expect(fileList.$fileList.find('input.filename').length).toEqual(0);
@@ -696,7 +696,7 @@ describe('OCA.Files.FileList tests', function() {
expect(fileList.findFileEl('One.txt').length).toEqual(1);
expect(OC.TestUtil.getImageUrl(fileList.findFileEl('One.txt').find('.thumbnail')))
- .toEqual(OC.imagePath('core', 'filetypes/file.svg'));
+ .toEqual(OC.imagePath('core', 'filetypes/text.svg'));
});
});
describe('Moving files', function() {
@@ -815,7 +815,7 @@ describe('OCA.Files.FileList tests', function() {
expect(notificationStub.getCall(0).args[0]).toEqual('Error while moving file');
expect(OC.TestUtil.getImageUrl(fileList.findFileEl('One.txt').find('.thumbnail')))
- .toEqual(OC.imagePath('core', 'filetypes/file.svg'));
+ .toEqual(OC.imagePath('core', 'filetypes/text.svg'));
});
});
describe('List rendering', function() {
@@ -845,13 +845,15 @@ describe('OCA.Files.FileList tests', function() {
fileList.setFiles([]);
expect($('#filestable thead th').hasClass('hidden')).toEqual(true);
expect($('#emptycontent').hasClass('hidden')).toEqual(false);
+ expect($('#emptycontent .uploadmessage').hasClass('hidden')).toEqual(false);
expect(fileList.$el.find('.summary').hasClass('hidden')).toEqual(true);
});
- it('hides headers, empty content message, and summary when list is empty and user has no creation permission', function(){
+ it('hides headers, upload message, and summary when list is empty and user has no creation permission', function(){
$('#permissions').val(0);
fileList.setFiles([]);
expect($('#filestable thead th').hasClass('hidden')).toEqual(true);
- expect($('#emptycontent').hasClass('hidden')).toEqual(true);
+ expect($('#emptycontent').hasClass('hidden')).toEqual(false);
+ expect($('#emptycontent .uploadmessage').hasClass('hidden')).toEqual(true);
expect(fileList.$el.find('.summary').hasClass('hidden')).toEqual(true);
});
it('calling findFileEl() can find existing file element', function() {
@@ -1158,7 +1160,8 @@ describe('OCA.Files.FileList tests', function() {
var fileData = {
type: 'file',
name: 'test dir',
- icon: OC.webroot + '/core/img/filetypes/application-pdf.svg'
+ icon: OC.webroot + '/core/img/filetypes/application-pdf.svg',
+ mimetype: 'application/pdf'
};
var $tr = fileList.add(fileData);
var $imgDiv = $tr.find('td.filename .thumbnail');
@@ -1276,6 +1279,28 @@ describe('OCA.Files.FileList tests', function() {
fakeServer.respond();
expect(fileList.getCurrentDirectory()).toEqual('/');
});
+ it('switches to root dir when current directory is forbidden', function() {
+ fakeServer.respondWith(/\/index\.php\/apps\/files\/ajax\/list.php\?dir=%2funexist/, [
+ 403, {
+ "Content-Type": "application/json"
+ },
+ ''
+ ]);
+ fileList.changeDirectory('/unexist');
+ fakeServer.respond();
+ expect(fileList.getCurrentDirectory()).toEqual('/');
+ });
+ it('switches to root dir when current directory is unavailable', function() {
+ fakeServer.respondWith(/\/index\.php\/apps\/files\/ajax\/list.php\?dir=%2funexist/, [
+ 500, {
+ "Content-Type": "application/json"
+ },
+ ''
+ ]);
+ fileList.changeDirectory('/unexist');
+ fakeServer.respond();
+ expect(fileList.getCurrentDirectory()).toEqual('/');
+ });
it('shows mask before loading file list then hides it at the end', function() {
var showMaskStub = sinon.stub(fileList, 'showMask');
var hideMaskStub = sinon.stub(fileList, 'hideMask');
@@ -1581,7 +1606,7 @@ describe('OCA.Files.FileList tests', function() {
fileList.findFileEl('One.txt').find('input:checkbox').click();
fileList.findFileEl('Three.pdf').find('input:checkbox').click();
fileList.findFileEl('somedir').find('input:checkbox').click();
- expect($summary.text()).toEqual('1 folder & 2 files');
+ expect($summary.text()).toEqual('1 folder and 2 files');
});
it('Unselecting files hides selection summary', function() {
var $summary = $('#headerName a.name>span:first');
@@ -1749,7 +1774,7 @@ describe('OCA.Files.FileList tests', function() {
var redirectStub = sinon.stub(OC, 'redirect');
$('.selectedActions .download').click();
expect(redirectStub.calledOnce).toEqual(true);
- expect(redirectStub.getCall(0).args[0]).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=%5B%22One.txt%22%2C%22Three.pdf%22%2C%22somedir%22%5D');
+ expect(redirectStub.getCall(0).args[0]).toContain(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=%5B%22One.txt%22%2C%22Three.pdf%22%2C%22somedir%22%5D');
redirectStub.restore();
});
it('Downloads root folder when all selected in root folder', function() {
@@ -1758,7 +1783,7 @@ describe('OCA.Files.FileList tests', function() {
var redirectStub = sinon.stub(OC, 'redirect');
$('.selectedActions .download').click();
expect(redirectStub.calledOnce).toEqual(true);
- expect(redirectStub.getCall(0).args[0]).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2F&files=');
+ expect(redirectStub.getCall(0).args[0]).toContain(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2F&files=');
redirectStub.restore();
});
it('Downloads parent folder when all selected in subfolder', function() {
@@ -1766,7 +1791,7 @@ describe('OCA.Files.FileList tests', function() {
var redirectStub = sinon.stub(OC, 'redirect');
$('.selectedActions .download').click();
expect(redirectStub.calledOnce).toEqual(true);
- expect(redirectStub.getCall(0).args[0]).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2F&files=subdir');
+ expect(redirectStub.getCall(0).args[0]).toContain(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2F&files=subdir');
redirectStub.restore();
});
});
@@ -1844,8 +1869,13 @@ describe('OCA.Files.FileList tests', function() {
});
})
});
- describe('File actions', function() {
- it('Clicking on a file name will trigger default action', function() {
+ describe('Details sidebar', function() {
+ beforeEach(function() {
+ fileList.setFiles(testFiles);
+ });
+ it('Clicking on a file row will trigger file action if no details view configured', function() {
+ fileList._detailsView = null;
+ var updateDetailsViewStub = sinon.stub(fileList, '_updateDetailsView');
var actionStub = sinon.stub();
fileList.setFiles(testFiles);
fileList.fileActions.register(
@@ -1862,6 +1892,60 @@ describe('OCA.Files.FileList tests', function() {
var $tr = fileList.findFileEl('One.txt');
$tr.find('td.filename>a.name').click();
expect(actionStub.calledOnce).toEqual(true);
+ expect(updateDetailsViewStub.notCalled).toEqual(true);
+ updateDetailsViewStub.restore();
+ });
+ it('Clicking on a file row will trigger details sidebar', function() {
+ fileList.fileActions.setDefault('text/plain', 'Test');
+ var $tr = fileList.findFileEl('One.txt');
+ $tr.find('td.filename>a.name').click();
+ expect($tr.hasClass('highlighted')).toEqual(true);
+
+ expect(fileList._detailsView.getFileInfo().id).toEqual(1);
+ });
+ it('Clicking outside to deselect a file row will trigger details sidebar', function() {
+ var $tr = fileList.findFileEl('One.txt');
+ $tr.find('td.filename>a.name').click();
+
+ fileList.$el.find('tfoot').click();
+
+ expect($tr.hasClass('highlighted')).toEqual(false);
+ expect(fileList._detailsView.getFileInfo()).toEqual(null);
+ });
+ it('returns the currently selected model instance when calling getModelForFile', function() {
+ var $tr = fileList.findFileEl('One.txt');
+ $tr.find('td.filename>a.name').click();
+
+ var model1 = fileList.getModelForFile('One.txt');
+ var model2 = fileList.getModelForFile('One.txt');
+ model1.set('test', true);
+
+ // it's the same model
+ expect(model2).toEqual(model1);
+
+ var model3 = fileList.getModelForFile($tr);
+ expect(model3).toEqual(model1);
+ });
+ });
+ describe('File actions', function() {
+ it('Clicking on a file name will trigger default action', function() {
+ var actionStub = sinon.stub();
+ fileList.setFiles(testFiles);
+ fileList.fileActions.registerAction({
+ mime: 'text/plain',
+ name: 'Test',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ permissions: OC.PERMISSION_ALL,
+ icon: function() {
+ // Specify icon for hitory button
+ return OC.imagePath('core','actions/history');
+ },
+ actionHandler: actionStub
+ });
+ fileList.fileActions.setDefault('text/plain', 'Test');
+ var $tr = fileList.findFileEl('One.txt');
+ $tr.find('td.filename .nametext').click();
+ expect(actionStub.calledOnce).toEqual(true);
expect(actionStub.getCall(0).args[0]).toEqual('One.txt');
var context = actionStub.getCall(0).args[1];
expect(context.$file.is($tr)).toEqual(true);
@@ -1888,16 +1972,17 @@ describe('OCA.Files.FileList tests', function() {
fileList.$fileList.on('fileActionsReady', readyHandler);
- fileList.fileActions.register(
- 'text/plain',
- 'Test',
- OC.PERMISSION_ALL,
- function() {
+ fileList.fileActions.registerAction({
+ mime: 'text/plain',
+ name: 'Test',
+ type: OCA.Files.FileActions.TYPE_INLINE,
+ permissions: OC.PERMISSION_ALL,
+ icon: function() {
// Specify icon for hitory button
return OC.imagePath('core','actions/history');
},
- actionStub
- );
+ actionHandler: actionStub
+ });
var $tr = fileList.findFileEl('One.txt');
expect($tr.find('.action-test').length).toEqual(0);
expect(readyHandler.notCalled).toEqual(true);
@@ -2186,6 +2271,8 @@ describe('OCA.Files.FileList tests', function() {
});
});
describe('Handeling errors', function () {
+ var redirectStub;
+
beforeEach(function () {
redirectStub = sinon.stub(OC, 'redirect');
@@ -2211,4 +2298,36 @@ describe('OCA.Files.FileList tests', function() {
expect(redirectStub.calledWith(OC.generateUrl('apps/files'))).toEqual(true);
});
});
+ describe('showFileBusyState', function() {
+ var $tr;
+
+ beforeEach(function() {
+ fileList.setFiles(testFiles);
+ $tr = fileList.findFileEl('Two.jpg');
+ });
+ it('shows spinner on busy rows', function() {
+ fileList.showFileBusyState('Two.jpg', true);
+ expect($tr.hasClass('busy')).toEqual(true);
+ expect(OC.TestUtil.getImageUrl($tr.find('.thumbnail')))
+ .toEqual(OC.imagePath('core', 'loading.gif'));
+
+ fileList.showFileBusyState('Two.jpg', false);
+ expect($tr.hasClass('busy')).toEqual(false);
+ expect(OC.TestUtil.getImageUrl($tr.find('.thumbnail')))
+ .toEqual(OC.imagePath('core', 'filetypes/image.svg'));
+ });
+ it('accepts multiple input formats', function() {
+ _.each([
+ 'Two.jpg',
+ ['Two.jpg'],
+ $tr,
+ [$tr]
+ ], function(testCase) {
+ fileList.showFileBusyState(testCase, true);
+ expect($tr.hasClass('busy')).toEqual(true);
+ fileList.showFileBusyState(testCase, false);
+ expect($tr.hasClass('busy')).toEqual(false);
+ });
+ });
+ });
});
diff --git a/apps/files/tests/js/mainfileinfodetailviewSpec.js b/apps/files/tests/js/mainfileinfodetailviewSpec.js
new file mode 100644
index 00000000000..ca7384f6207
--- /dev/null
+++ b/apps/files/tests/js/mainfileinfodetailviewSpec.js
@@ -0,0 +1,175 @@
+/**
+* ownCloud
+*
+* @author Vincent Petry
+* @copyright 2015 Vincent Petry <pvince81@owncloud.com>
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+describe('OCA.Files.MainFileInfoDetailView tests', function() {
+ var view, tooltipStub, fileListMock, fileActions, fileList, testFileInfo;
+
+ beforeEach(function() {
+ tooltipStub = sinon.stub($.fn, 'tooltip');
+ fileListMock = sinon.mock(OCA.Files.FileList.prototype);
+ fileActions = new OCA.Files.FileActions();
+ fileList = new OCA.Files.FileList($('<table></table>'), {
+ fileActions: fileActions
+ });
+ view = new OCA.Files.MainFileInfoDetailView({
+ fileList: fileList,
+ fileActions: fileActions
+ });
+ testFileInfo = new OCA.Files.FileInfoModel({
+ id: 5,
+ name: 'One.txt',
+ mimetype: 'text/plain',
+ permissions: 31,
+ path: '/subdir',
+ size: 123456789,
+ mtime: Date.UTC(2015, 6, 17, 1, 2, 0, 0)
+ });
+ });
+ afterEach(function() {
+ view.remove();
+ view = undefined;
+ tooltipStub.restore();
+ fileListMock.restore();
+
+ });
+ describe('rendering', function() {
+ it('displays basic info', function() {
+ var clock = sinon.useFakeTimers(Date.UTC(2015, 6, 17, 1, 2, 0, 3));
+ var dateExpected = OC.Util.formatDate(Date(Date.UTC(2015, 6, 17, 1, 2, 0, 0)));
+ view.setFileInfo(testFileInfo);
+ expect(view.$el.find('.fileName').text()).toEqual('One.txt');
+ expect(view.$el.find('.fileName').attr('title')).toEqual('One.txt');
+ expect(view.$el.find('.size').text()).toEqual('117.7 MB');
+ expect(view.$el.find('.size').attr('title')).toEqual('123456789 bytes');
+ expect(view.$el.find('.date').text()).toEqual('a few seconds ago');
+ expect(view.$el.find('.date').attr('title')).toEqual(dateExpected);
+ clock.restore();
+ });
+ it('displays favorite icon', function() {
+ testFileInfo.set('tags', [OC.TAG_FAVORITE]);
+ view.setFileInfo(testFileInfo);
+ expect(view.$el.find('.favorite img').attr('src'))
+ .toEqual(OC.imagePath('core', 'actions/starred'));
+
+ testFileInfo.set('tags', []);
+ view.setFileInfo(testFileInfo);
+ expect(view.$el.find('.favorite img').attr('src'))
+ .toEqual(OC.imagePath('core', 'actions/star'));
+ });
+ it('displays mime icon', function() {
+ // File
+ testFileInfo.set('mimetype', 'text/calendar');
+ view.setFileInfo(testFileInfo);
+
+ expect(view.$el.find('.thumbnail').css('background-image'))
+ .toContain('filetypes/text-calendar.svg');
+
+ // Folder
+ testFileInfo.set('mimetype', 'httpd/unix-directory');
+ view.setFileInfo(testFileInfo);
+
+ expect(view.$el.find('.thumbnail').css('background-image'))
+ .toContain('filetypes/folder.svg');
+ });
+ it('displays thumbnail', function() {
+ testFileInfo.set('mimetype', 'test/plain');
+ view.setFileInfo(testFileInfo);
+
+ var expectation = fileListMock.expects('lazyLoadPreview');
+ expectation.once();
+
+ view.setFileInfo(testFileInfo);
+
+ fileListMock.verify();
+ });
+ it('rerenders when changes are made on the model', function() {
+ view.setFileInfo(testFileInfo);
+
+ testFileInfo.set('tags', [OC.TAG_FAVORITE]);
+
+ expect(view.$el.find('.favorite img').attr('src'))
+ .toEqual(OC.imagePath('core', 'actions/starred'));
+
+ testFileInfo.set('tags', []);
+
+ expect(view.$el.find('.favorite img').attr('src'))
+ .toEqual(OC.imagePath('core', 'actions/star'));
+ });
+ it('unbinds change listener from model', function() {
+ view.setFileInfo(testFileInfo);
+ view.setFileInfo(new OCA.Files.FileInfoModel({
+ id: 999,
+ name: 'test.txt',
+ path: '/'
+ }));
+
+ // set value on old model
+ testFileInfo.set('tags', [OC.TAG_FAVORITE]);
+
+ // no change
+ expect(view.$el.find('.favorite img').attr('src'))
+ .toEqual(OC.imagePath('core', 'actions/star'));
+ });
+ });
+ describe('events', function() {
+ it('triggers default action when clicking on the thumbnail', function() {
+ var actionHandler = sinon.stub();
+
+ fileActions.registerAction({
+ name: 'Something',
+ mime: 'all',
+ permissions: OC.PERMISSION_READ,
+ actionHandler: actionHandler
+ });
+ fileActions.setDefault('text/plain', 'Something');
+
+ view.setFileInfo(testFileInfo);
+
+ view.$el.find('.thumbnail').click();
+
+ expect(actionHandler.calledOnce).toEqual(true);
+ expect(actionHandler.getCall(0).args[0]).toEqual('One.txt');
+ expect(actionHandler.getCall(0).args[1].fileList).toEqual(fileList);
+ expect(actionHandler.getCall(0).args[1].fileActions).toEqual(fileActions);
+ expect(actionHandler.getCall(0).args[1].fileInfoModel).toEqual(testFileInfo);
+ });
+ it('triggers "Favorite" action when clicking on the star', function() {
+ var actionHandler = sinon.stub();
+
+ fileActions.registerAction({
+ name: 'Favorite',
+ mime: 'all',
+ permissions: OC.PERMISSION_READ,
+ actionHandler: actionHandler
+ });
+
+ view.setFileInfo(testFileInfo);
+
+ view.$el.find('.action-favorite').click();
+
+ expect(actionHandler.calledOnce).toEqual(true);
+ expect(actionHandler.getCall(0).args[0]).toEqual('One.txt');
+ expect(actionHandler.getCall(0).args[1].fileList).toEqual(fileList);
+ expect(actionHandler.getCall(0).args[1].fileActions).toEqual(fileActions);
+ expect(actionHandler.getCall(0).args[1].fileInfoModel).toEqual(testFileInfo);
+ });
+ });
+});
diff --git a/apps/files/tests/service/tagservice.php b/apps/files/tests/service/tagservice.php
index 2b5d1e5ec34..147e698aaaa 100644
--- a/apps/files/tests/service/tagservice.php
+++ b/apps/files/tests/service/tagservice.php
@@ -1,6 +1,5 @@
<?php
/**
- * @author Morris Jobke <hey@morrisjobke.de>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.