aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files
diff options
context:
space:
mode:
authorHamid Dehnavi <hamid.dev.pro@gmail.com>2023-10-30 11:43:32 +0330
committerGitHub <noreply@github.com>2023-10-30 11:43:32 +0330
commit344d99ae9456e45f95591e62cee665f5309cb5b8 (patch)
tree77bc601548c53be22da1668fd1a51b4c3c7288ee /apps/files
parentdf0a396b4cfcd0834eb056a0c4190d65c8496ae7 (diff)
parent600351c4cf7e8b7c599d6a7cea457cfc09393d03 (diff)
downloadnextcloud-server-344d99ae9456e45f95591e62cee665f5309cb5b8.tar.gz
nextcloud-server-344d99ae9456e45f95591e62cee665f5309cb5b8.zip
Merge branch 'master' into replace_substr_calls_in_files_app
Signed-off-by: Hamid Dehnavi <hamid.dev.pro@gmail.com>
Diffstat (limited to 'apps/files')
-rw-r--r--apps/files/js/file-upload.js10
-rw-r--r--apps/files/js/filelist.js8
-rw-r--r--apps/files/js/files.js6
-rw-r--r--apps/files/js/filesummary.js4
-rw-r--r--apps/files/js/mainfileinfodetailview.js2
-rw-r--r--apps/files/l10n/ar.js48
-rw-r--r--apps/files/l10n/ar.json48
-rw-r--r--apps/files/l10n/bg.js21
-rw-r--r--apps/files/l10n/bg.json21
-rw-r--r--apps/files/l10n/ca.js50
-rw-r--r--apps/files/l10n/ca.json50
-rw-r--r--apps/files/l10n/cs.js51
-rw-r--r--apps/files/l10n/cs.json51
-rw-r--r--apps/files/l10n/da.js23
-rw-r--r--apps/files/l10n/da.json23
-rw-r--r--apps/files/l10n/de.js25
-rw-r--r--apps/files/l10n/de.json25
-rw-r--r--apps/files/l10n/de_DE.js48
-rw-r--r--apps/files/l10n/de_DE.json48
-rw-r--r--apps/files/l10n/el.js18
-rw-r--r--apps/files/l10n/el.json18
-rw-r--r--apps/files/l10n/en_GB.js48
-rw-r--r--apps/files/l10n/en_GB.json48
-rw-r--r--apps/files/l10n/es.js46
-rw-r--r--apps/files/l10n/es.json46
-rw-r--r--apps/files/l10n/es_EC.js23
-rw-r--r--apps/files/l10n/es_EC.json23
-rw-r--r--apps/files/l10n/es_MX.js2
-rw-r--r--apps/files/l10n/es_MX.json2
-rw-r--r--apps/files/l10n/et_EE.js6
-rw-r--r--apps/files/l10n/et_EE.json6
-rw-r--r--apps/files/l10n/eu.js76
-rw-r--r--apps/files/l10n/eu.json76
-rw-r--r--apps/files/l10n/fa.js23
-rw-r--r--apps/files/l10n/fa.json23
-rw-r--r--apps/files/l10n/fi.js38
-rw-r--r--apps/files/l10n/fi.json38
-rw-r--r--apps/files/l10n/fr.js50
-rw-r--r--apps/files/l10n/fr.json50
-rw-r--r--apps/files/l10n/gl.js48
-rw-r--r--apps/files/l10n/gl.json48
-rw-r--r--apps/files/l10n/hr.js3
-rw-r--r--apps/files/l10n/hr.json3
-rw-r--r--apps/files/l10n/hu.js68
-rw-r--r--apps/files/l10n/hu.json68
-rw-r--r--apps/files/l10n/id.js2
-rw-r--r--apps/files/l10n/id.json2
-rw-r--r--apps/files/l10n/is.js2
-rw-r--r--apps/files/l10n/is.json2
-rw-r--r--apps/files/l10n/it.js51
-rw-r--r--apps/files/l10n/it.json51
-rw-r--r--apps/files/l10n/ja.js50
-rw-r--r--apps/files/l10n/ja.json50
-rw-r--r--apps/files/l10n/ko.js24
-rw-r--r--apps/files/l10n/ko.json24
-rw-r--r--apps/files/l10n/lt_LT.js16
-rw-r--r--apps/files/l10n/lt_LT.json16
-rw-r--r--apps/files/l10n/mk.js28
-rw-r--r--apps/files/l10n/mk.json28
-rw-r--r--apps/files/l10n/nb.js2
-rw-r--r--apps/files/l10n/nb.json2
-rw-r--r--apps/files/l10n/nl.js3
-rw-r--r--apps/files/l10n/nl.json3
-rw-r--r--apps/files/l10n/pl.js27
-rw-r--r--apps/files/l10n/pl.json27
-rw-r--r--apps/files/l10n/pt_BR.js42
-rw-r--r--apps/files/l10n/pt_BR.json42
-rw-r--r--apps/files/l10n/ro.js2
-rw-r--r--apps/files/l10n/ro.json2
-rw-r--r--apps/files/l10n/ru.js63
-rw-r--r--apps/files/l10n/ru.json63
-rw-r--r--apps/files/l10n/sc.js3
-rw-r--r--apps/files/l10n/sc.json3
-rw-r--r--apps/files/l10n/sk.js49
-rw-r--r--apps/files/l10n/sk.json49
-rw-r--r--apps/files/l10n/sl.js22
-rw-r--r--apps/files/l10n/sl.json22
-rw-r--r--apps/files/l10n/sr.js48
-rw-r--r--apps/files/l10n/sr.json48
-rw-r--r--apps/files/l10n/sv.js48
-rw-r--r--apps/files/l10n/sv.json48
-rw-r--r--apps/files/l10n/th.js2
-rw-r--r--apps/files/l10n/th.json2
-rw-r--r--apps/files/l10n/tr.js48
-rw-r--r--apps/files/l10n/tr.json48
-rw-r--r--apps/files/l10n/uk.js48
-rw-r--r--apps/files/l10n/uk.json48
-rw-r--r--apps/files/l10n/vi.js96
-rw-r--r--apps/files/l10n/vi.json96
-rw-r--r--apps/files/l10n/zh_CN.js51
-rw-r--r--apps/files/l10n/zh_CN.json51
-rw-r--r--apps/files/l10n/zh_HK.js48
-rw-r--r--apps/files/l10n/zh_HK.json48
-rw-r--r--apps/files/l10n/zh_TW.js48
-rw-r--r--apps/files/l10n/zh_TW.json48
-rw-r--r--apps/files/lib/Controller/ViewController.php23
-rw-r--r--apps/files/lib/Service/UserConfig.php6
-rw-r--r--apps/files/src/actions/deleteAction.ts2
-rw-r--r--apps/files/src/actions/favoriteAction.ts3
-rw-r--r--apps/files/src/actions/moveOrCopyAction.ts4
-rw-r--r--apps/files/src/actions/openInFilesAction.spec.ts4
-rw-r--r--apps/files/src/actions/openInFilesAction.ts2
-rw-r--r--apps/files/src/components/CustomSvgIconRender.vue68
-rw-r--r--apps/files/src/components/DragAndDropNotice.vue155
-rw-r--r--apps/files/src/components/FileEntry.vue779
-rw-r--r--apps/files/src/components/FileEntry/FavoriteIcon.vue (renamed from apps/files/src/components/FavoriteIcon.vue)24
-rw-r--r--apps/files/src/components/FileEntry/FileEntryActions.vue243
-rw-r--r--apps/files/src/components/FileEntry/FileEntryCheckbox.vue131
-rw-r--r--apps/files/src/components/FileEntry/FileEntryName.vue330
-rw-r--r--apps/files/src/components/FileEntry/FileEntryPreview.vue215
-rw-r--r--apps/files/src/components/FileEntryGrid.vue408
-rw-r--r--apps/files/src/components/FilesListFooter.vue175
-rw-r--r--apps/files/src/components/FilesListHeaderActions.vue226
-rw-r--r--apps/files/src/components/FilesListHeaderButton.vue122
-rw-r--r--apps/files/src/components/FilesListTableFooter.vue13
-rw-r--r--apps/files/src/components/FilesListTableHeader.vue17
-rw-r--r--apps/files/src/components/FilesListTableHeaderActions.vue6
-rw-r--r--apps/files/src/components/FilesListTableHeaderButton.vue17
-rw-r--r--apps/files/src/components/FilesListVirtual.vue399
-rw-r--r--apps/files/src/components/NavigationQuota.vue4
-rw-r--r--apps/files/src/components/TransferOwnershipDialogue.vue10
-rw-r--r--apps/files/src/components/VirtualList.vue159
-rw-r--r--apps/files/src/init-templates.ts (renamed from apps/files/src/templates.js)116
-rw-r--r--apps/files/src/init.ts5
-rw-r--r--apps/files/src/main.ts3
-rw-r--r--apps/files/src/mixins/filesListWidth.ts2
-rw-r--r--apps/files/src/newMenu/newFolder.ts25
-rw-r--r--apps/files/src/store/paths.ts54
-rw-r--r--apps/files/src/store/userconfig.ts1
-rw-r--r--apps/files/src/utils/davUtils.js13
-rw-r--r--apps/files/src/views/FilesList.vue46
-rw-r--r--apps/files/src/views/Settings.vue4
-rw-r--r--apps/files/src/views/TemplatePicker.vue89
-rw-r--r--apps/files/templates/appnavigation.php2
-rw-r--r--apps/files/tests/Controller/ViewControllerTest.php7
135 files changed, 4556 insertions, 2462 deletions
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index 61bd53eb35f..0301c1fe6ac 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -1063,8 +1063,8 @@ OC.Uploader.prototype = _.extend({
data.textStatus = 'notenoughspace';
data.errorThrown = t('files',
'Not enough free space, you are uploading {size1} but only {size2} is left', {
- 'size1': OC.Util.humanFileSize(selection.totalBytes),
- 'size2': OC.Util.humanFileSize(freeSpace)
+ 'size1': OC.Util.humanFileSize(selection.totalBytes, false, false),
+ 'size2': OC.Util.humanFileSize(freeSpace, false, false)
});
}
@@ -1302,9 +1302,9 @@ OC.Uploader.prototype = _.extend({
}
self._setProgressBarText(h, h, t('files', '{loadedSize} of {totalSize} ({bitrate})' , {
- loadedSize: OC.Util.humanFileSize(data.loaded),
- totalSize: OC.Util.humanFileSize(total),
- bitrate: OC.Util.humanFileSize(smoothBitrate / 8) + '/s'
+ loadedSize: OC.Util.humanFileSize(data.loaded, false, false),
+ totalSize: OC.Util.humanFileSize(total, false, false),
+ bitrate: OC.Util.humanFileSize(smoothBitrate / 8, false, false) + '/s'
}));
self._setProgressBarValue(progress);
self.trigger('progressall', e, data);
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index cfc21e909c0..7f5eade84ff 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -1798,7 +1798,7 @@
// size column
if (typeof(fileData.size) !== 'undefined' && fileData.size >= 0) {
- simpleSize = OC.Util.humanFileSize(parseInt(fileData.size, 10), true);
+ simpleSize = OC.Util.humanFileSize(parseInt(fileData.size, 10), true, false);
// rgb(118, 118, 118) / #767676
// min. color contrast for normal text on white background according to WCAG AA
sizeColor = Math.round(118-Math.pow((fileData.size/(1024*1024)), 2));
@@ -2609,7 +2609,7 @@
var oldSize = oldFile.data('size');
var newSize = oldSize + newFile.data('size');
oldFile.data('size', newSize);
- oldFile.find('td.filesize').text(OC.Util.humanFileSize(newSize));
+ oldFile.find('td.filesize').text(OC.Util.humanFileSize(newSize, false, false));
self.remove(fileName);
}
@@ -2752,7 +2752,7 @@
var oldSize = oldFile.data('size');
var newSize = oldSize + newFile.data('size');
oldFile.data('size', newSize);
- oldFile.find('td.filesize').text(OC.Util.humanFileSize(newSize));
+ oldFile.find('td.filesize').text(OC.Util.humanFileSize(newSize, false, false));
}
self.reload();
})
@@ -3463,7 +3463,7 @@
}
else {
this.$el.find('.selectedActions').removeClass('hidden');
- this.$el.find('.column-size a>span:first').text(OC.Util.humanFileSize(summary.totalSize));
+ this.$el.find('.column-size a>span:first').text(OC.Util.humanFileSize(summary.totalSize, false, false));
var directoryInfo = n('files', '%n folder', '%n folders', summary.totalDirs);
var fileInfo = n('files', '%n file', '%n files', summary.totalFiles);
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 486e437a8aa..88a762ca9c7 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -101,8 +101,8 @@
&& response.data.total !== undefined
&& response.data.used !== undefined
&& response.data.usedSpacePercent !== undefined) {
- var humanUsed = OC.Util.humanFileSize(response.data.used, true);
- var humanTotal = OC.Util.humanFileSize(response.data.total, true);
+ var humanUsed = OC.Util.humanFileSize(response.data.used, true, false);
+ var humanTotal = OC.Util.humanFileSize(response.data.total, true, false);
if (response.data.quota > 0) {
$('#quota').attr('title', t('files', '{used}%', {used: Math.round(response.data.usedSpacePercent)}));
$('#quota progress').val(response.data.usedSpacePercent);
@@ -425,7 +425,7 @@ var createDragShadow = function(event) {
.attr('data-file', elem.name)
.attr('data-origin', elem.origin);
newtr.append($('<td class="filename"></td>').text(elem.name).css('background-size', 32));
- newtr.append($('<td class="size"></td>').text(OC.Util.humanFileSize(elem.size)));
+ newtr.append($('<td class="size"></td>').text(OC.Util.humanFileSize(elem.size, false, false)));
tbody.append(newtr);
if (elem.type === 'dir') {
newtr.find('td.filename')
diff --git a/apps/files/js/filesummary.js b/apps/files/js/filesummary.js
index 00f13249ff3..0e9b191510a 100644
--- a/apps/files/js/filesummary.js
+++ b/apps/files/js/filesummary.js
@@ -226,7 +226,7 @@
$dirInfo.html(n('files', '%n folder', '%n folders', this.summary.totalDirs));
$fileInfo.html(n('files', '%n file', '%n files', this.summary.totalFiles));
$hiddenInfo.html(' (' + n('files', 'including %n hidden', 'including %n hidden', this.summary.totalHidden) + ')');
- var fileSize = this.summary.sumIsPending ? t('files', 'Pending') : OC.Util.humanFileSize(this.summary.totalSize);
+ var fileSize = this.summary.sumIsPending ? t('files', 'Pending') : OC.Util.humanFileSize(this.summary.totalSize, false, false);
this.$el.find('.filesize').html(fileSize);
// Show only what's necessary (may be hidden)
@@ -263,7 +263,7 @@
// don't show the filesize column, if filesize is NaN (e.g. in trashbin)
var fileSize = '';
if (!isNaN(summary.totalSize)) {
- fileSize = summary.sumIsPending ? t('files', 'Pending') : OC.Util.humanFileSize(summary.totalSize);
+ fileSize = summary.sumIsPending ? t('files', 'Pending') : OC.Util.humanFileSize(summary.totalSize, false, false);
fileSize = '<td class="filesize">' + fileSize + '</td>';
}
diff --git a/apps/files/js/mainfileinfodetailview.js b/apps/files/js/mainfileinfodetailview.js
index b5093e5c251..45988a60a02 100644
--- a/apps/files/js/mainfileinfodetailview.js
+++ b/apps/files/js/mainfileinfodetailview.js
@@ -156,7 +156,7 @@
path: this.model.get('path'),
hasSize: this.model.has('size'),
sizeLabel: t('files', 'Size'),
- size: OC.Util.humanFileSize(this.model.get('size'), true),
+ size: OC.Util.humanFileSize(this.model.get('size'), true, false),
altSize: n('files', '%n byte', '%n bytes', this.model.get('size')),
dateLabel: t('files', 'Modified'),
altDate: OC.Util.formatDate(this.model.get('mtime')),
diff --git a/apps/files/l10n/ar.js b/apps/files/l10n/ar.js
index 2ad40913dc4..fcddcb26bc9 100644
--- a/apps/files/l10n/ar.js
+++ b/apps/files/l10n/ar.js
@@ -171,31 +171,34 @@ OC.L10N.register(
"File Management" : "إدارة الملفات",
"Reload current directory" : "إعادة تحميل المجلد الحالي",
"Go to the \"{dir}\" directory" : "إنتقل إلى المجلد \"{dir}\"",
+ "Drag and drop files here to upload" : "إسحَب و أفلِت الملفات هنا لرفعها",
+ "Upload successful" : "تمّ الرفع بنجاحٍ",
+ "\"{displayName}\" action executed successfully" : "\"{displayName}\" الأمر نُفّذ بنجاح",
+ "\"{displayName}\" action failed" : "\"{dispalyName}\" الأمر أخفق عند التنفيذ",
"Select the row for {displayName}" : "إختر السطر في {displayName}",
"Rename file" : "إعادة تسمية الملف",
- "A long time ago" : "منذ وقت طويل",
- "This node is unavailable" : "هذه العُقْدَة node غير متوفرة ",
- "Download file {name}" : " تنزيل الملف {name}",
"File name" : "اسم الملف",
"Folder name" : "اسم المجلد",
- "\"{displayName}\" action executed successfully" : "\"{displayName}\" الأمر نُفّذ بنجاح",
- "\"{displayName}\" action failed" : "\"{dispalyName}\" الأمر أخفق عند التنفيذ",
+ "This node is unavailable" : "هذه العُقْدَة node غير متوفرة ",
+ "Download file {name}" : " تنزيل الملف {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" ليس نوع ملف مسموحًا به.",
"{newName} already exists." : "{newName} موجود بالفعل.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\" حرفٌ غير مسموح به في اسم الملف.",
"Name cannot be empty" : "لا يمكن أن يكون الاسم فارغاً",
"Another entry with the same name already exists" : "إدخال آخر بنفس الاسم موجود بالفعل",
"Renamed \"{oldName}\" to \"{newName}\"" : "تمت إعادة تسمية \"{oldName}\" إلى \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "تعذر إعادة تسمية \"{oldName}\"، لم يعد موجودًا",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "الاسم \"{newName}\" مُستعمَلٌ سلفاً في المجلّد\"{dir}\". إختَر اسماً آخر رجاءً.",
"Could not rename \"{oldName}\"" : "تعذرت إعادة تسمية \"{oldName}\"",
+ "A long time ago" : "منذ وقت طويل",
+ "Could not copy {file}. {message}" : "تعذّر نسخ {file}. {message}",
+ "Could not move {file}. {message}" : "تعذّر نقل {file}. {message}",
"Total rows summary" : "ملخص مجموع الأسطر",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" فشل في بعض العناصر",
- "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" حزمة الأوامر نُفّذت بنجاح",
- "ascending" : "تصاعدياً",
- "descending" : "تنازلياً",
- "Sort list by {column} ({direction})" : "ترتيب القائمة بحسب {column} ({direction})",
"Select all" : "تحديد الكل ",
"Unselect all" : "إلغاء الاختيار للكل",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" فشل في بعض العناصر",
+ "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" حزمة الأوامر نُفّذت بنجاح",
+ "Sort list by {column}" : "ترتيب القائمة على أساس {column} ",
"List of files and folders." : "قائمة الملفات و المجلدات",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "لم يتم عرض هذه القائمة بالكامل لأسباب تتعلق بالأداء. سيتم عرض الملفات تباعاً أثناء التنقل عبر القائمة.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} و {summaryFolder}",
@@ -226,6 +229,8 @@ OC.L10N.register(
"Share" : "مُشارَكة",
"Shared by link" : "شاركته باستخدام رابط مشاركة",
"Shared" : "مُشارَكة",
+ "Switch to list view" : "التبديل إلى عرض القائمة",
+ "Switch to grid view" : "بدِّل إلى المنظور الصندوقي",
"Open the files app settings" : "إفتح إعدادات تطبيق الملفات",
"Files settings" : "إعدادات الملفات",
"File cannot be accessed" : "الملف لم يمكن الوصول إليه",
@@ -233,6 +238,7 @@ OC.L10N.register(
"Sort favorites first" : "فرز المفضلات أولا",
"Show hidden files" : "عرض الملفات المخفية",
"Crop image previews" : "اقتصاص صورة العروض",
+ "Enable the grid view" : "تمكين المنظور الصندوقي",
"Additional settings" : "الإعدادات المتقدمة",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "نسخ الرابط",
@@ -249,16 +255,28 @@ OC.L10N.register(
"Blank" : "فارغ",
"Unable to create new file from template" : "تعذر إنشاء الملف الجديد من القالب",
"Delete permanently" : "حذف بشكل دائم",
+ "Destination is not a folder" : "المَقصَد ليس مُجلّداً",
+ "This file/folder is already in that directory" : "هذا الملف/المجلد موجود سلفاً في ذلك المجلد",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "لا يمكنك نقل ملف/مجلد إلى نفسه أو إلى مجلد فرعي منه",
+ "A file or folder with that name already exists in this folder" : "ملف أو مجلد بنفس ذاك الاسم موجود سلفاً في هذا المجلد",
+ "The files is locked" : "الملفات مقفله",
+ "The file does not exist anymore" : "الملف لم يعد موجوداً",
+ "Chose destination" : "إختَر المَقصَد",
"Copy to {target}" : "أُنسُخ إلى {target}",
"Move to {target}" : "أُنقُل إلى {target}",
+ "Cancelled move or copy operation" : ".عملية النسخ أو النقل تمّ إلغاؤها",
"Open folder {displayName}" : "إفتح المجلد {displayName}",
"Open in Files" : "إفتَح في \"الملفات\"",
"Open details" : "افتح التفاصيل",
- "Created new folder \"{name}\"" : "تمّ إنشاء مجلد جديد باسم \"{name}\"",
- "Set up templates folder" : "إعداد مجلد القوالب",
- "Templates" : "القوالب",
"Create new templates folder" : "إنشيْ مجلد جديد للقوالب",
+ "Templates" : "القوالب",
"Unable to initialize the templates directory" : "تعذر تهيئة دليل القوالب",
+ "Created new folder \"{name}\"" : "تمّ إنشاء مجلد جديد باسم \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} مجلد","{folderCount} مجلد","{folderCount} مجلدان","{folderCount} مجلد","{folderCount} مجلدات","{folderCount} مجلدات"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} ملف","{fileCount} ملف","{fileCount} ملفان","{fileCount} ملف","{fileCount} ملفات","{fileCount} ملفات"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["ملف واحد 1 و {folderCount} مجلد","ملف واحد 1 و {folderCount} مجلد","ملف واحد 1 و {folderCount} مجلدان","ملف واحد 1 و {folderCount} مجلد","ملف واحد 1 و {folderCount} مجلدات","ملف واحد 1 و {folderCount} مجلدات"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} ملف و مجلد واحد 1","{fileCount} ملف و مجلد واحد 1","{fileCount} ملفان و مجلد واحد 1","{fileCount} ملف و مجلد واحد 1","{fileCount} ملفات و مجلد واحد 1","{fileCount} ملفات و مجلد واحد 1"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} ملف و {folderCount} مجلد",
"List of favorites files and folders." : "قائمة الملفات والمجلدات المفضلة.",
"No favorites yet" : "ليست عندك مفضلات بعد",
"Files and folders you mark as favorite will show up here" : "الملفات والمجلدات التي حددتها كامفضلة سوف تظهر هنا ",
@@ -278,6 +296,7 @@ OC.L10N.register(
"Unlimited" : "غير محدود",
"Search users" : "ابحث عن مستخدمين",
"Cancel" : "الغاء",
+ "Set up templates folder" : "إعداد مجلد القوالب",
"%s used" : "%s مُستخدَم",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "تم استخدام %1$s من %2$s",
@@ -291,6 +310,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "هذا الملف له واصفة {tag}",
"This file has the tags {firstTags} and {lastTag}" : "هذا الملف له واصفات {firstTags} و {lastTag}",
"Open folder {name}" : "إفتح المجلد {name}",
+ "ascending" : "تصاعدياً",
+ "descending" : "تنازلياً",
+ "Sort list by {column} ({direction})" : "ترتيب القائمة بحسب {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "لم يمكن عرض هذه القائمة بالكامل بسبب إشكالية في الأداء. سيتم عرض الملفات عندما تمر عليها في القائمة",
"Search for an account" : "البحث عن حساب",
"Choose" : "إختَر",
diff --git a/apps/files/l10n/ar.json b/apps/files/l10n/ar.json
index 435c1ed052a..8fba15857aa 100644
--- a/apps/files/l10n/ar.json
+++ b/apps/files/l10n/ar.json
@@ -169,31 +169,34 @@
"File Management" : "إدارة الملفات",
"Reload current directory" : "إعادة تحميل المجلد الحالي",
"Go to the \"{dir}\" directory" : "إنتقل إلى المجلد \"{dir}\"",
+ "Drag and drop files here to upload" : "إسحَب و أفلِت الملفات هنا لرفعها",
+ "Upload successful" : "تمّ الرفع بنجاحٍ",
+ "\"{displayName}\" action executed successfully" : "\"{displayName}\" الأمر نُفّذ بنجاح",
+ "\"{displayName}\" action failed" : "\"{dispalyName}\" الأمر أخفق عند التنفيذ",
"Select the row for {displayName}" : "إختر السطر في {displayName}",
"Rename file" : "إعادة تسمية الملف",
- "A long time ago" : "منذ وقت طويل",
- "This node is unavailable" : "هذه العُقْدَة node غير متوفرة ",
- "Download file {name}" : " تنزيل الملف {name}",
"File name" : "اسم الملف",
"Folder name" : "اسم المجلد",
- "\"{displayName}\" action executed successfully" : "\"{displayName}\" الأمر نُفّذ بنجاح",
- "\"{displayName}\" action failed" : "\"{dispalyName}\" الأمر أخفق عند التنفيذ",
+ "This node is unavailable" : "هذه العُقْدَة node غير متوفرة ",
+ "Download file {name}" : " تنزيل الملف {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" ليس نوع ملف مسموحًا به.",
"{newName} already exists." : "{newName} موجود بالفعل.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\" حرفٌ غير مسموح به في اسم الملف.",
"Name cannot be empty" : "لا يمكن أن يكون الاسم فارغاً",
"Another entry with the same name already exists" : "إدخال آخر بنفس الاسم موجود بالفعل",
"Renamed \"{oldName}\" to \"{newName}\"" : "تمت إعادة تسمية \"{oldName}\" إلى \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "تعذر إعادة تسمية \"{oldName}\"، لم يعد موجودًا",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "الاسم \"{newName}\" مُستعمَلٌ سلفاً في المجلّد\"{dir}\". إختَر اسماً آخر رجاءً.",
"Could not rename \"{oldName}\"" : "تعذرت إعادة تسمية \"{oldName}\"",
+ "A long time ago" : "منذ وقت طويل",
+ "Could not copy {file}. {message}" : "تعذّر نسخ {file}. {message}",
+ "Could not move {file}. {message}" : "تعذّر نقل {file}. {message}",
"Total rows summary" : "ملخص مجموع الأسطر",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" فشل في بعض العناصر",
- "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" حزمة الأوامر نُفّذت بنجاح",
- "ascending" : "تصاعدياً",
- "descending" : "تنازلياً",
- "Sort list by {column} ({direction})" : "ترتيب القائمة بحسب {column} ({direction})",
"Select all" : "تحديد الكل ",
"Unselect all" : "إلغاء الاختيار للكل",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" فشل في بعض العناصر",
+ "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" حزمة الأوامر نُفّذت بنجاح",
+ "Sort list by {column}" : "ترتيب القائمة على أساس {column} ",
"List of files and folders." : "قائمة الملفات و المجلدات",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "لم يتم عرض هذه القائمة بالكامل لأسباب تتعلق بالأداء. سيتم عرض الملفات تباعاً أثناء التنقل عبر القائمة.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} و {summaryFolder}",
@@ -224,6 +227,8 @@
"Share" : "مُشارَكة",
"Shared by link" : "شاركته باستخدام رابط مشاركة",
"Shared" : "مُشارَكة",
+ "Switch to list view" : "التبديل إلى عرض القائمة",
+ "Switch to grid view" : "بدِّل إلى المنظور الصندوقي",
"Open the files app settings" : "إفتح إعدادات تطبيق الملفات",
"Files settings" : "إعدادات الملفات",
"File cannot be accessed" : "الملف لم يمكن الوصول إليه",
@@ -231,6 +236,7 @@
"Sort favorites first" : "فرز المفضلات أولا",
"Show hidden files" : "عرض الملفات المخفية",
"Crop image previews" : "اقتصاص صورة العروض",
+ "Enable the grid view" : "تمكين المنظور الصندوقي",
"Additional settings" : "الإعدادات المتقدمة",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "نسخ الرابط",
@@ -247,16 +253,28 @@
"Blank" : "فارغ",
"Unable to create new file from template" : "تعذر إنشاء الملف الجديد من القالب",
"Delete permanently" : "حذف بشكل دائم",
+ "Destination is not a folder" : "المَقصَد ليس مُجلّداً",
+ "This file/folder is already in that directory" : "هذا الملف/المجلد موجود سلفاً في ذلك المجلد",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "لا يمكنك نقل ملف/مجلد إلى نفسه أو إلى مجلد فرعي منه",
+ "A file or folder with that name already exists in this folder" : "ملف أو مجلد بنفس ذاك الاسم موجود سلفاً في هذا المجلد",
+ "The files is locked" : "الملفات مقفله",
+ "The file does not exist anymore" : "الملف لم يعد موجوداً",
+ "Chose destination" : "إختَر المَقصَد",
"Copy to {target}" : "أُنسُخ إلى {target}",
"Move to {target}" : "أُنقُل إلى {target}",
+ "Cancelled move or copy operation" : ".عملية النسخ أو النقل تمّ إلغاؤها",
"Open folder {displayName}" : "إفتح المجلد {displayName}",
"Open in Files" : "إفتَح في \"الملفات\"",
"Open details" : "افتح التفاصيل",
- "Created new folder \"{name}\"" : "تمّ إنشاء مجلد جديد باسم \"{name}\"",
- "Set up templates folder" : "إعداد مجلد القوالب",
- "Templates" : "القوالب",
"Create new templates folder" : "إنشيْ مجلد جديد للقوالب",
+ "Templates" : "القوالب",
"Unable to initialize the templates directory" : "تعذر تهيئة دليل القوالب",
+ "Created new folder \"{name}\"" : "تمّ إنشاء مجلد جديد باسم \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} مجلد","{folderCount} مجلد","{folderCount} مجلدان","{folderCount} مجلد","{folderCount} مجلدات","{folderCount} مجلدات"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} ملف","{fileCount} ملف","{fileCount} ملفان","{fileCount} ملف","{fileCount} ملفات","{fileCount} ملفات"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["ملف واحد 1 و {folderCount} مجلد","ملف واحد 1 و {folderCount} مجلد","ملف واحد 1 و {folderCount} مجلدان","ملف واحد 1 و {folderCount} مجلد","ملف واحد 1 و {folderCount} مجلدات","ملف واحد 1 و {folderCount} مجلدات"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} ملف و مجلد واحد 1","{fileCount} ملف و مجلد واحد 1","{fileCount} ملفان و مجلد واحد 1","{fileCount} ملف و مجلد واحد 1","{fileCount} ملفات و مجلد واحد 1","{fileCount} ملفات و مجلد واحد 1"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} ملف و {folderCount} مجلد",
"List of favorites files and folders." : "قائمة الملفات والمجلدات المفضلة.",
"No favorites yet" : "ليست عندك مفضلات بعد",
"Files and folders you mark as favorite will show up here" : "الملفات والمجلدات التي حددتها كامفضلة سوف تظهر هنا ",
@@ -276,6 +294,7 @@
"Unlimited" : "غير محدود",
"Search users" : "ابحث عن مستخدمين",
"Cancel" : "الغاء",
+ "Set up templates folder" : "إعداد مجلد القوالب",
"%s used" : "%s مُستخدَم",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "تم استخدام %1$s من %2$s",
@@ -289,6 +308,9 @@
"This file has the tag {tag}" : "هذا الملف له واصفة {tag}",
"This file has the tags {firstTags} and {lastTag}" : "هذا الملف له واصفات {firstTags} و {lastTag}",
"Open folder {name}" : "إفتح المجلد {name}",
+ "ascending" : "تصاعدياً",
+ "descending" : "تنازلياً",
+ "Sort list by {column} ({direction})" : "ترتيب القائمة بحسب {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "لم يمكن عرض هذه القائمة بالكامل بسبب إشكالية في الأداء. سيتم عرض الملفات عندما تمر عليها في القائمة",
"Search for an account" : "البحث عن حساب",
"Choose" : "إختَر",
diff --git a/apps/files/l10n/bg.js b/apps/files/l10n/bg.js
index 87182b812bd..bb36dc989f7 100644
--- a/apps/files/l10n/bg.js
+++ b/apps/files/l10n/bg.js
@@ -168,21 +168,18 @@ OC.L10N.register(
"File Management" : "Управление на файлове",
"Reload current directory" : "Презареждане на текущата директория",
"Go to the \"{dir}\" directory" : "Отидете в директорията \"{dir}\"",
+ "\"{displayName}\" action executed successfully" : "Действието „{displayName}“ е изпълнено успешно",
+ "\"{displayName}\" action failed" : "Действието „{displayName}“ е неуспешно",
"Select the row for {displayName}" : "Избиране на реда за {displayName}",
- "Download file {name}" : "Изтегляне на файл {name}",
"File name" : "Име на файл",
"Folder name" : "Име на папка",
- "\"{displayName}\" action executed successfully" : "Действието „{displayName}“ е изпълнено успешно",
- "\"{displayName}\" action failed" : "Действието „{displayName}“ е неуспешно",
+ "Download file {name}" : "Изтегляне на файл {name}",
"Name cannot be empty" : "Името не може да бъде празно",
"Total rows summary" : "Обобщение на общия брой редове",
- "\"{displayName}\" failed on some elements " : "„{displayName}“ не успя да се изпълни за някои елементи ",
- "\"{displayName}\" batch action executed successfully" : " Пакетното действие „{displayName}“ е изпълнено успешно",
- "ascending" : "възходящо",
- "descending" : "низходящо",
- "Sort list by {column} ({direction})" : "Сортиране на списъка по {column} ({direction})",
"Select all" : "Избери всички",
"Unselect all" : "Отмяна на избора на всички",
+ "\"{displayName}\" failed on some elements " : "„{displayName}“ не успя да се изпълни за някои елементи ",
+ "\"{displayName}\" batch action executed successfully" : " Пакетното действие „{displayName}“ е изпълнено успешно",
"File not found" : "Файлът не е намерен",
"Storage informations" : "Хранилище на информация",
"{usedQuotaByte} used" : "{usedQuotaByte} използвано",
@@ -208,6 +205,7 @@ OC.L10N.register(
"Share" : "Споделяне",
"Shared by link" : "Споделени с връзка",
"Shared" : "Споделен",
+ "Switch to list view" : "Превключване към изглед на списък",
"Open the files app settings" : "Отваряне на настройките на приложението за файлове",
"Files settings" : "Настройки на файловете",
"File cannot be accessed" : "Файлът не е достъпен",
@@ -231,9 +229,8 @@ OC.L10N.register(
"Unable to create new file from template" : "Не може да се създаде нов файл от шаблон",
"Delete permanently" : "Изтрий завинаги",
"Open details" : "Отваряне на подробности",
- "Set up templates folder" : "Настройка на папка за шаблони",
- "Templates" : "Шаблони",
"Create new templates folder" : "Създаване на нова папка за шаблони",
+ "Templates" : "Шаблони",
"Unable to initialize the templates directory" : "Неуспешно инициализиране на директорията с шаблони",
"No favorites yet" : "Няма любими",
"Files and folders you mark as favorite will show up here" : "Файловете и папките които маркирате като любими ще се показват тук",
@@ -249,6 +246,7 @@ OC.L10N.register(
"Unlimited" : "Неограничено",
"Search users" : "Търсене за потребители",
"Cancel" : "Отказ",
+ "Set up templates folder" : "Настройка на папка за шаблони",
"%s used" : "%s използвани",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s от %2$s използвани",
@@ -260,6 +258,9 @@ OC.L10N.register(
"Deleted shares" : "Изтрити",
"Pending shares" : "Чакащи споделяния",
"Open folder {name}" : "Отваряне на папка {name}",
+ "ascending" : "възходящо",
+ "descending" : "низходящо",
+ "Sort list by {column} ({direction})" : "Сортиране на списъка по {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Този списък не е напълно рендиран поради причини, свързани с производителността. Файловете ще бъдат рендирани, докато навигирате из списъка.",
"Search for an account" : "Търсене на профил",
"Choose" : "Изберете",
diff --git a/apps/files/l10n/bg.json b/apps/files/l10n/bg.json
index aaa53990114..bcd2c8f63d3 100644
--- a/apps/files/l10n/bg.json
+++ b/apps/files/l10n/bg.json
@@ -166,21 +166,18 @@
"File Management" : "Управление на файлове",
"Reload current directory" : "Презареждане на текущата директория",
"Go to the \"{dir}\" directory" : "Отидете в директорията \"{dir}\"",
+ "\"{displayName}\" action executed successfully" : "Действието „{displayName}“ е изпълнено успешно",
+ "\"{displayName}\" action failed" : "Действието „{displayName}“ е неуспешно",
"Select the row for {displayName}" : "Избиране на реда за {displayName}",
- "Download file {name}" : "Изтегляне на файл {name}",
"File name" : "Име на файл",
"Folder name" : "Име на папка",
- "\"{displayName}\" action executed successfully" : "Действието „{displayName}“ е изпълнено успешно",
- "\"{displayName}\" action failed" : "Действието „{displayName}“ е неуспешно",
+ "Download file {name}" : "Изтегляне на файл {name}",
"Name cannot be empty" : "Името не може да бъде празно",
"Total rows summary" : "Обобщение на общия брой редове",
- "\"{displayName}\" failed on some elements " : "„{displayName}“ не успя да се изпълни за някои елементи ",
- "\"{displayName}\" batch action executed successfully" : " Пакетното действие „{displayName}“ е изпълнено успешно",
- "ascending" : "възходящо",
- "descending" : "низходящо",
- "Sort list by {column} ({direction})" : "Сортиране на списъка по {column} ({direction})",
"Select all" : "Избери всички",
"Unselect all" : "Отмяна на избора на всички",
+ "\"{displayName}\" failed on some elements " : "„{displayName}“ не успя да се изпълни за някои елементи ",
+ "\"{displayName}\" batch action executed successfully" : " Пакетното действие „{displayName}“ е изпълнено успешно",
"File not found" : "Файлът не е намерен",
"Storage informations" : "Хранилище на информация",
"{usedQuotaByte} used" : "{usedQuotaByte} използвано",
@@ -206,6 +203,7 @@
"Share" : "Споделяне",
"Shared by link" : "Споделени с връзка",
"Shared" : "Споделен",
+ "Switch to list view" : "Превключване към изглед на списък",
"Open the files app settings" : "Отваряне на настройките на приложението за файлове",
"Files settings" : "Настройки на файловете",
"File cannot be accessed" : "Файлът не е достъпен",
@@ -229,9 +227,8 @@
"Unable to create new file from template" : "Не може да се създаде нов файл от шаблон",
"Delete permanently" : "Изтрий завинаги",
"Open details" : "Отваряне на подробности",
- "Set up templates folder" : "Настройка на папка за шаблони",
- "Templates" : "Шаблони",
"Create new templates folder" : "Създаване на нова папка за шаблони",
+ "Templates" : "Шаблони",
"Unable to initialize the templates directory" : "Неуспешно инициализиране на директорията с шаблони",
"No favorites yet" : "Няма любими",
"Files and folders you mark as favorite will show up here" : "Файловете и папките които маркирате като любими ще се показват тук",
@@ -247,6 +244,7 @@
"Unlimited" : "Неограничено",
"Search users" : "Търсене за потребители",
"Cancel" : "Отказ",
+ "Set up templates folder" : "Настройка на папка за шаблони",
"%s used" : "%s използвани",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s от %2$s използвани",
@@ -258,6 +256,9 @@
"Deleted shares" : "Изтрити",
"Pending shares" : "Чакащи споделяния",
"Open folder {name}" : "Отваряне на папка {name}",
+ "ascending" : "възходящо",
+ "descending" : "низходящо",
+ "Sort list by {column} ({direction})" : "Сортиране на списъка по {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Този списък не е напълно рендиран поради причини, свързани с производителността. Файловете ще бъдат рендирани, докато навигирате из списъка.",
"Search for an account" : "Търсене на профил",
"Choose" : "Изберете",
diff --git a/apps/files/l10n/ca.js b/apps/files/l10n/ca.js
index 8cf06a6bd07..1b8bafc2401 100644
--- a/apps/files/l10n/ca.js
+++ b/apps/files/l10n/ca.js
@@ -171,31 +171,34 @@ OC.L10N.register(
"File Management" : "Gestió de fitxers",
"Reload current directory" : "Torna a carregar la carpeta actual",
"Go to the \"{dir}\" directory" : "Ves a la carpeta «{dir}»",
+ "Drag and drop files here to upload" : "Arrossegueu i deixeu anar fitxers aquí per a pujar-los",
+ "Upload successful" : "S'ha pujat correctament",
+ "\"{displayName}\" action executed successfully" : "L'acció «{displayName}» s'ha executat correctament",
+ "\"{displayName}\" action failed" : "S'ha produït un error en l'acció «{displayName}»",
"Select the row for {displayName}" : "Selecciona la fila per a {displayName}",
"Rename file" : "Canvia el nom del fitxer",
- "A long time ago" : "Fa molt de temps",
- "This node is unavailable" : "Aquest node no està disponible",
- "Download file {name}" : "Baixa el fitxer {name}",
"File name" : "Nom del fitxer",
"Folder name" : "Nom de la carpeta",
- "\"{displayName}\" action executed successfully" : "L'acció «{displayName}» s'ha executat correctament",
- "\"{displayName}\" action failed" : "S'ha produït un error en l'acció «{displayName}»",
+ "This node is unavailable" : "Aquest node no està disponible",
+ "Download file {name}" : "Baixa el fitxer {name}",
"\"{name}\" is not an allowed filetype." : "«{name}» no és un tipus de fitxer permès.",
"{newName} already exists." : "{newName} ja existeix.",
+ "\"{char}\" is not allowed inside a file name." : "El caràcter «{char}» no es pot utilitzar en el nom dels fitxers.",
"Name cannot be empty" : "El nom no pot estar buit",
"Another entry with the same name already exists" : "Ja existeix una altra entrada amb aquest nom",
"Renamed \"{oldName}\" to \"{newName}\"" : "S'ha canviat el nom de «{oldName}» a «{newName}»",
"Could not rename \"{oldName}\", it does not exist any more" : "No s'ha pogut canviar el nom de «{oldName}», ja no existeix",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "El nom «{newName}» ja està en ús en la carpeta «{dir}». Trieu un nom diferent.",
"Could not rename \"{oldName}\"" : "No s'ha pogut canviar el nom de «{oldName}»",
+ "A long time ago" : "Fa molt de temps",
+ "Could not copy {file}. {message}" : "No s'ha pogut copiar {file}. {message}",
+ "Could not move {file}. {message}" : "No s'ha pogut moure {file}. {message}",
"Total rows summary" : "Resum de totes les files",
- "\"{displayName}\" failed on some elements " : "S'ha produït un error en l'acció «{displayName}» per a alguns elements",
- "\"{displayName}\" batch action executed successfully" : "L'acció per lots «{displayName}» s'ha executat correctament",
- "ascending" : "ascendent",
- "descending" : "descendent",
- "Sort list by {column} ({direction})" : "Ordena la llista per {column} ({direction})",
"Select all" : "Selecciona-ho tot",
"Unselect all" : "Anul·la tota la selecció",
+ "\"{displayName}\" failed on some elements " : "S'ha produït un error en l'acció «{displayName}» per a alguns elements",
+ "\"{displayName}\" batch action executed successfully" : "L'acció per lots «{displayName}» s'ha executat correctament",
+ "Sort list by {column}" : "Ordena la llista per {column}",
"List of files and folders." : "Llista de fitxers i carpetes.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Aquesta llista no es mostra completament per raons de rendiment. Es mostraran els fitxers a mesura que navegueu per la llista.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} i {summaryFolder}",
@@ -226,6 +229,8 @@ OC.L10N.register(
"Share" : "Comparteix",
"Shared by link" : "S'ha compartit amb un enllaç",
"Shared" : "S'ha compartit",
+ "Switch to list view" : "Canvia a la visualització de llista",
+ "Switch to grid view" : "Canvia a la visualització de quadrícula",
"Open the files app settings" : "Obre els paràmetres de l'aplicació Fitxers",
"Files settings" : "Paràmetres de Fitxers",
"File cannot be accessed" : "No es pot accedir al fitxer",
@@ -233,6 +238,7 @@ OC.L10N.register(
"Sort favorites first" : "Ordena primer els preferits",
"Show hidden files" : "Mostra els fitxers ocults",
"Crop image previews" : "Retalla les previsualitzacions de les imatges",
+ "Enable the grid view" : "Habilita la visualització de quadrícula",
"Additional settings" : "Paràmetres addicionals",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Copia-ho al porta-retalls",
@@ -249,14 +255,28 @@ OC.L10N.register(
"Blank" : "En blanc",
"Unable to create new file from template" : "No s'ha pogut crear el fitxer a partir de la plantilla",
"Delete permanently" : "Suprimeix permanentment",
+ "Destination is not a folder" : "La destinació no és una carpeta",
+ "This file/folder is already in that directory" : "Aquest fitxer o carpeta ja existeix en aquesta carpeta",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "No podeu moure un fitxer o carpeta a la mateixa carpeta o a una subcarpeta de la mateixa carpeta",
+ "A file or folder with that name already exists in this folder" : "Ja existeix un fitxer o carpeta amb aquest nom en aquesta carpeta",
+ "The files is locked" : "El fitxer està blocat",
+ "The file does not exist anymore" : "El fitxer ja no existeix",
+ "Chose destination" : "Tria una destinació",
+ "Copy to {target}" : "Copia a {target}",
+ "Move to {target}" : "Mou a {target}",
+ "Cancelled move or copy operation" : "S'ha cancel·lat l'operació de desplaçament o còpia",
"Open folder {displayName}" : "Obre la carpeta {displayName}",
"Open in Files" : "Obre a Fitxers",
"Open details" : "Obre els detalls",
- "Created new folder \"{name}\"" : "S'ha creat la carpeta nova «{name}»",
- "Set up templates folder" : "Configura la carpeta de plantilles",
- "Templates" : "Plantilles",
"Create new templates folder" : "Crea la carpeta de plantilles",
+ "Templates" : "Plantilles",
"Unable to initialize the templates directory" : "No s'ha pogut inicialitzar la carpeta de plantilles",
+ "Created new folder \"{name}\"" : "S'ha creat la carpeta nova «{name}»",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} carpeta","{folderCount} carpetes"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} fitxer","{fileCount} fitxers"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 fitxer i {folderCount} carpeta","1 fitxer i {folderCount} carpetes"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} fitxer i 1 carpeta","{fileCount} fitxers i 1 carpeta"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} fitxers i {folderCount} carpetes",
"List of favorites files and folders." : "Llista de fitxers i carpetes preferits.",
"No favorites yet" : "Encara no teniu preferits",
"Files and folders you mark as favorite will show up here" : "Els fitxers i les carpetes que marqueu com a preferits es mostraran aquí",
@@ -276,6 +296,7 @@ OC.L10N.register(
"Unlimited" : "Il·limitat",
"Search users" : "Cerqueu usuaris",
"Cancel" : "Cancel·la",
+ "Set up templates folder" : "Configura la carpeta de plantilles",
"%s used" : "%s en ús",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s de %2$s en ús",
@@ -289,6 +310,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Aquest fitxer té l'etiqueta {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Aquest fitxer té les etiquetes {firstTags} i {lastTag}",
"Open folder {name}" : "Obre la carpeta {name}",
+ "ascending" : "ascendent",
+ "descending" : "descendent",
+ "Sort list by {column} ({direction})" : "Ordena la llista per {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Aquesta llista no es mostra completament per raons de rendiment. Es mostraran els fitxers a mesura que navegueu per la llista.",
"Search for an account" : "Cerqueu un compte",
"Choose" : "Tria",
diff --git a/apps/files/l10n/ca.json b/apps/files/l10n/ca.json
index 9f91a697f0c..1c0c47010e4 100644
--- a/apps/files/l10n/ca.json
+++ b/apps/files/l10n/ca.json
@@ -169,31 +169,34 @@
"File Management" : "Gestió de fitxers",
"Reload current directory" : "Torna a carregar la carpeta actual",
"Go to the \"{dir}\" directory" : "Ves a la carpeta «{dir}»",
+ "Drag and drop files here to upload" : "Arrossegueu i deixeu anar fitxers aquí per a pujar-los",
+ "Upload successful" : "S'ha pujat correctament",
+ "\"{displayName}\" action executed successfully" : "L'acció «{displayName}» s'ha executat correctament",
+ "\"{displayName}\" action failed" : "S'ha produït un error en l'acció «{displayName}»",
"Select the row for {displayName}" : "Selecciona la fila per a {displayName}",
"Rename file" : "Canvia el nom del fitxer",
- "A long time ago" : "Fa molt de temps",
- "This node is unavailable" : "Aquest node no està disponible",
- "Download file {name}" : "Baixa el fitxer {name}",
"File name" : "Nom del fitxer",
"Folder name" : "Nom de la carpeta",
- "\"{displayName}\" action executed successfully" : "L'acció «{displayName}» s'ha executat correctament",
- "\"{displayName}\" action failed" : "S'ha produït un error en l'acció «{displayName}»",
+ "This node is unavailable" : "Aquest node no està disponible",
+ "Download file {name}" : "Baixa el fitxer {name}",
"\"{name}\" is not an allowed filetype." : "«{name}» no és un tipus de fitxer permès.",
"{newName} already exists." : "{newName} ja existeix.",
+ "\"{char}\" is not allowed inside a file name." : "El caràcter «{char}» no es pot utilitzar en el nom dels fitxers.",
"Name cannot be empty" : "El nom no pot estar buit",
"Another entry with the same name already exists" : "Ja existeix una altra entrada amb aquest nom",
"Renamed \"{oldName}\" to \"{newName}\"" : "S'ha canviat el nom de «{oldName}» a «{newName}»",
"Could not rename \"{oldName}\", it does not exist any more" : "No s'ha pogut canviar el nom de «{oldName}», ja no existeix",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "El nom «{newName}» ja està en ús en la carpeta «{dir}». Trieu un nom diferent.",
"Could not rename \"{oldName}\"" : "No s'ha pogut canviar el nom de «{oldName}»",
+ "A long time ago" : "Fa molt de temps",
+ "Could not copy {file}. {message}" : "No s'ha pogut copiar {file}. {message}",
+ "Could not move {file}. {message}" : "No s'ha pogut moure {file}. {message}",
"Total rows summary" : "Resum de totes les files",
- "\"{displayName}\" failed on some elements " : "S'ha produït un error en l'acció «{displayName}» per a alguns elements",
- "\"{displayName}\" batch action executed successfully" : "L'acció per lots «{displayName}» s'ha executat correctament",
- "ascending" : "ascendent",
- "descending" : "descendent",
- "Sort list by {column} ({direction})" : "Ordena la llista per {column} ({direction})",
"Select all" : "Selecciona-ho tot",
"Unselect all" : "Anul·la tota la selecció",
+ "\"{displayName}\" failed on some elements " : "S'ha produït un error en l'acció «{displayName}» per a alguns elements",
+ "\"{displayName}\" batch action executed successfully" : "L'acció per lots «{displayName}» s'ha executat correctament",
+ "Sort list by {column}" : "Ordena la llista per {column}",
"List of files and folders." : "Llista de fitxers i carpetes.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Aquesta llista no es mostra completament per raons de rendiment. Es mostraran els fitxers a mesura que navegueu per la llista.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} i {summaryFolder}",
@@ -224,6 +227,8 @@
"Share" : "Comparteix",
"Shared by link" : "S'ha compartit amb un enllaç",
"Shared" : "S'ha compartit",
+ "Switch to list view" : "Canvia a la visualització de llista",
+ "Switch to grid view" : "Canvia a la visualització de quadrícula",
"Open the files app settings" : "Obre els paràmetres de l'aplicació Fitxers",
"Files settings" : "Paràmetres de Fitxers",
"File cannot be accessed" : "No es pot accedir al fitxer",
@@ -231,6 +236,7 @@
"Sort favorites first" : "Ordena primer els preferits",
"Show hidden files" : "Mostra els fitxers ocults",
"Crop image previews" : "Retalla les previsualitzacions de les imatges",
+ "Enable the grid view" : "Habilita la visualització de quadrícula",
"Additional settings" : "Paràmetres addicionals",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Copia-ho al porta-retalls",
@@ -247,14 +253,28 @@
"Blank" : "En blanc",
"Unable to create new file from template" : "No s'ha pogut crear el fitxer a partir de la plantilla",
"Delete permanently" : "Suprimeix permanentment",
+ "Destination is not a folder" : "La destinació no és una carpeta",
+ "This file/folder is already in that directory" : "Aquest fitxer o carpeta ja existeix en aquesta carpeta",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "No podeu moure un fitxer o carpeta a la mateixa carpeta o a una subcarpeta de la mateixa carpeta",
+ "A file or folder with that name already exists in this folder" : "Ja existeix un fitxer o carpeta amb aquest nom en aquesta carpeta",
+ "The files is locked" : "El fitxer està blocat",
+ "The file does not exist anymore" : "El fitxer ja no existeix",
+ "Chose destination" : "Tria una destinació",
+ "Copy to {target}" : "Copia a {target}",
+ "Move to {target}" : "Mou a {target}",
+ "Cancelled move or copy operation" : "S'ha cancel·lat l'operació de desplaçament o còpia",
"Open folder {displayName}" : "Obre la carpeta {displayName}",
"Open in Files" : "Obre a Fitxers",
"Open details" : "Obre els detalls",
- "Created new folder \"{name}\"" : "S'ha creat la carpeta nova «{name}»",
- "Set up templates folder" : "Configura la carpeta de plantilles",
- "Templates" : "Plantilles",
"Create new templates folder" : "Crea la carpeta de plantilles",
+ "Templates" : "Plantilles",
"Unable to initialize the templates directory" : "No s'ha pogut inicialitzar la carpeta de plantilles",
+ "Created new folder \"{name}\"" : "S'ha creat la carpeta nova «{name}»",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} carpeta","{folderCount} carpetes"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} fitxer","{fileCount} fitxers"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 fitxer i {folderCount} carpeta","1 fitxer i {folderCount} carpetes"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} fitxer i 1 carpeta","{fileCount} fitxers i 1 carpeta"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} fitxers i {folderCount} carpetes",
"List of favorites files and folders." : "Llista de fitxers i carpetes preferits.",
"No favorites yet" : "Encara no teniu preferits",
"Files and folders you mark as favorite will show up here" : "Els fitxers i les carpetes que marqueu com a preferits es mostraran aquí",
@@ -274,6 +294,7 @@
"Unlimited" : "Il·limitat",
"Search users" : "Cerqueu usuaris",
"Cancel" : "Cancel·la",
+ "Set up templates folder" : "Configura la carpeta de plantilles",
"%s used" : "%s en ús",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s de %2$s en ús",
@@ -287,6 +308,9 @@
"This file has the tag {tag}" : "Aquest fitxer té l'etiqueta {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Aquest fitxer té les etiquetes {firstTags} i {lastTag}",
"Open folder {name}" : "Obre la carpeta {name}",
+ "ascending" : "ascendent",
+ "descending" : "descendent",
+ "Sort list by {column} ({direction})" : "Ordena la llista per {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Aquesta llista no es mostra completament per raons de rendiment. Es mostraran els fitxers a mesura que navegueu per la llista.",
"Search for an account" : "Cerqueu un compte",
"Choose" : "Tria",
diff --git a/apps/files/l10n/cs.js b/apps/files/l10n/cs.js
index d85e1d81d3d..43a09bcc207 100644
--- a/apps/files/l10n/cs.js
+++ b/apps/files/l10n/cs.js
@@ -171,34 +171,40 @@ OC.L10N.register(
"File Management" : "Správa souboru",
"Reload current directory" : "Znovu načíst stávající složku",
"Go to the \"{dir}\" directory" : "Přejít do složky „{dir}“",
+ "Drag and drop files here to upload" : "Soubory nahrajete jejich přetažením sem",
+ "Upload successful" : "Nahrání úspěšné",
+ "\"{displayName}\" action executed successfully" : "akce „{displayName}“ úspěšně vykonána",
+ "\"{displayName}\" action failed" : "akce „{displayName}“ se nezdařila",
"Select the row for {displayName}" : "Vyberte řádek pro {displayName}",
"Rename file" : "Přejmenovat soubor",
- "A long time ago" : "Před dlouhou dobou",
- "This node is unavailable" : "Tento uzel není k dispozici",
- "Download file {name}" : "Stáhnout soubor {name}",
"File name" : "Název souboru",
"Folder name" : "Název složky",
- "\"{displayName}\" action executed successfully" : "akce „{displayName}“ úspěšně vykonána",
- "\"{displayName}\" action failed" : "akce „{displayName}“ se nezdařila",
+ "This node is unavailable" : "Tento uzel není k dispozici",
+ "Download file {name}" : "Stáhnout soubor {name}",
"\"{name}\" is not an allowed filetype." : "„{name}“ není dovoleným typem souboru.",
"{newName} already exists." : "{newName} už existuje.",
+ "\"{char}\" is not allowed inside a file name." : "„{char}“ není povolený znak v názvu souboru.",
"Name cannot be empty" : "Je třeba zadat název",
"Another entry with the same name already exists" : "Už existuje jiná položka se stejným názevm",
"Renamed \"{oldName}\" to \"{newName}\"" : "Přejmenováno „{oldName}“ na „{newName}",
"Could not rename \"{oldName}\", it does not exist any more" : "Není možné přejmenovat „{oldName}“ – už neexistuje",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Název „{newtName}“ je už použitý ve složce „{dir}“. Zvolte jiný název.",
"Could not rename \"{oldName}\"" : "„{oldName}“ se nepodařilo přejmenovat",
+ "A long time ago" : "Před dlouhou dobou",
+ "Could not copy {file}. {message}" : "Nepodařilo se zkopírovat {file}. {message}",
+ "Could not move {file}. {message}" : "Nepodařilo se přesunout {file}. {message}",
"Total rows summary" : "Celkový souhrn řádek",
- "\"{displayName}\" failed on some elements " : "„{displayName}“ se pro některé prvky nezdařilo",
- "\"{displayName}\" batch action executed successfully" : "hromadná akce „{displayName}“ úspěšně vykonána",
- "ascending" : "vzestupně",
- "descending" : "sestupně",
- "Sort list by {column} ({direction})" : "Seřadit seznam podle {column} ({direction})",
"Select all" : "Vybrat vše",
"Unselect all" : "Zrušit výběr všeho",
+ "\"{displayName}\" failed on some elements " : "„{displayName}“ se pro některé prvky nezdařilo",
+ "\"{displayName}\" batch action executed successfully" : "hromadná akce „{displayName}“ úspěšně vykonána",
+ "Sort list by {column}" : "Seřadit podle {column}",
"List of files and folders." : "Seznam souborů a složek.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Seznam není vykreslen celý z důvodu nároků na výkon. Soubory budou dokreslovány, jak se budete posouvat seznamem.",
+ "{summaryFile} and {summaryFolder}" : "{summaryFile} a {summaryFolder}",
"File not found" : "Soubor nenalezen",
+ "_{count} file_::_{count} files_" : ["{count} soubor","{count} soubory","{count} souborů","{count} soubory"],
+ "_{count} folder_::_{count} folders_" : ["{count} složka","{count} složky","{count} složek","{count} složky"],
"Storage informations" : "Informace o úložišti",
"{usedQuotaByte} used" : "{usedQuotaByte} využito",
"{relative}% used" : "{relative}% využito",
@@ -223,6 +229,8 @@ OC.L10N.register(
"Share" : "Nasdílet",
"Shared by link" : "Sdíleno pomocí odkazu",
"Shared" : "Sdíleno",
+ "Switch to list view" : "Přepnout do zobrazení v seznamu",
+ "Switch to grid view" : "Přepnout do zobrazení v mřížce",
"Open the files app settings" : "Otevřít nastavení aplikace soubory",
"Files settings" : "Nastavení pro Soubory",
"File cannot be accessed" : "K souboru se nedaří přistoupit",
@@ -230,6 +238,7 @@ OC.L10N.register(
"Sort favorites first" : "Seřadit od oblíbených",
"Show hidden files" : "Zobrazit skryté soubory",
"Crop image previews" : "Oříznout náhledy obrázků",
+ "Enable the grid view" : "Zapnout zobrazení v mřížce",
"Additional settings" : "Další nastavení",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Zkopírovat do schránky",
@@ -246,16 +255,28 @@ OC.L10N.register(
"Blank" : "Prázdný",
"Unable to create new file from template" : "Nedaří se vytvořit soubor ze šablony",
"Delete permanently" : "Nevratně smazat",
+ "Destination is not a folder" : "Cíl není složka",
+ "This file/folder is already in that directory" : "V oné složce se už daný soubor/složka nachází",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Není možné přesunout soubor/složku do sebe samé nebo do své vlastní podložky",
+ "A file or folder with that name already exists in this folder" : "V této složce už existuje stejnojmenný soubor či složka",
+ "The files is locked" : "Soubory jsou uzamčené",
+ "The file does not exist anymore" : "Soubor už neexistuje",
+ "Chose destination" : "Zvolte cíl",
"Copy to {target}" : "Zkopírovat do {target}",
"Move to {target}" : "Přesunout do {target}",
+ "Cancelled move or copy operation" : "Operace přesunutí či zkopírování zrušena",
"Open folder {displayName}" : "Otevřít složku {displayName}",
"Open in Files" : "Otevřít v Souborech",
"Open details" : "Otevřít podorobnosti",
- "Created new folder \"{name}\"" : "Vytvořena nová složka „{name}“",
- "Set up templates folder" : "Vytvořit složku pro šablony",
- "Templates" : "Šablony",
"Create new templates folder" : "Vytvořit novou složku šablon",
+ "Templates" : "Šablony",
"Unable to initialize the templates directory" : "Nepodařilo se vytvořit složku pro šablony",
+ "Created new folder \"{name}\"" : "Vytvořena nová složka „{name}“",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} složka","{folderCount} složky","{folderCount} složek","{folderCount} složky"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} soubor","{fileCount} soubory","{fileCount} souborů","{fileCount} soubory"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 soubor a {folderCount} složka","1 soubor a {folderCount} složky","1 soubor a {folderCount} složek","1 soubor a {folderCount} složky"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} soubor a 1 složka","{fileCount} soubory a 1 složka","{fileCount} souborů a 1 složka","{fileCount} soubory a 1 složka"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} souborů a {folderCount} složek",
"List of favorites files and folders." : "Seznam oblíbených souborů a složek.",
"No favorites yet" : "Zatím nic oblíbeného",
"Files and folders you mark as favorite will show up here" : "Zde budou zobrazeny soubory a složky, které označíte jako oblíbené",
@@ -275,6 +296,7 @@ OC.L10N.register(
"Unlimited" : "Neomezeně",
"Search users" : "Hledat uživatele",
"Cancel" : "Storno",
+ "Set up templates folder" : "Vytvořit složku pro šablony",
"%s used" : "%s použito",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s z %2$s použito",
@@ -288,6 +310,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Tento soubor má štítek {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Tento soubor má štítky {firstTags} a {lastTag}",
"Open folder {name}" : "Otevřít složku {name}",
+ "ascending" : "vzestupně",
+ "descending" : "sestupně",
+ "Sort list by {column} ({direction})" : "Seřadit seznam podle {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Seznam není vykreslen celý z důvodu nároků na výkon. Soubory budou dokreslovány, jak se budete posouvat seznamem.",
"Search for an account" : "Hledat účet",
"Choose" : "Vybrat",
diff --git a/apps/files/l10n/cs.json b/apps/files/l10n/cs.json
index fd78306ed08..0907a343fd6 100644
--- a/apps/files/l10n/cs.json
+++ b/apps/files/l10n/cs.json
@@ -169,34 +169,40 @@
"File Management" : "Správa souboru",
"Reload current directory" : "Znovu načíst stávající složku",
"Go to the \"{dir}\" directory" : "Přejít do složky „{dir}“",
+ "Drag and drop files here to upload" : "Soubory nahrajete jejich přetažením sem",
+ "Upload successful" : "Nahrání úspěšné",
+ "\"{displayName}\" action executed successfully" : "akce „{displayName}“ úspěšně vykonána",
+ "\"{displayName}\" action failed" : "akce „{displayName}“ se nezdařila",
"Select the row for {displayName}" : "Vyberte řádek pro {displayName}",
"Rename file" : "Přejmenovat soubor",
- "A long time ago" : "Před dlouhou dobou",
- "This node is unavailable" : "Tento uzel není k dispozici",
- "Download file {name}" : "Stáhnout soubor {name}",
"File name" : "Název souboru",
"Folder name" : "Název složky",
- "\"{displayName}\" action executed successfully" : "akce „{displayName}“ úspěšně vykonána",
- "\"{displayName}\" action failed" : "akce „{displayName}“ se nezdařila",
+ "This node is unavailable" : "Tento uzel není k dispozici",
+ "Download file {name}" : "Stáhnout soubor {name}",
"\"{name}\" is not an allowed filetype." : "„{name}“ není dovoleným typem souboru.",
"{newName} already exists." : "{newName} už existuje.",
+ "\"{char}\" is not allowed inside a file name." : "„{char}“ není povolený znak v názvu souboru.",
"Name cannot be empty" : "Je třeba zadat název",
"Another entry with the same name already exists" : "Už existuje jiná položka se stejným názevm",
"Renamed \"{oldName}\" to \"{newName}\"" : "Přejmenováno „{oldName}“ na „{newName}",
"Could not rename \"{oldName}\", it does not exist any more" : "Není možné přejmenovat „{oldName}“ – už neexistuje",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Název „{newtName}“ je už použitý ve složce „{dir}“. Zvolte jiný název.",
"Could not rename \"{oldName}\"" : "„{oldName}“ se nepodařilo přejmenovat",
+ "A long time ago" : "Před dlouhou dobou",
+ "Could not copy {file}. {message}" : "Nepodařilo se zkopírovat {file}. {message}",
+ "Could not move {file}. {message}" : "Nepodařilo se přesunout {file}. {message}",
"Total rows summary" : "Celkový souhrn řádek",
- "\"{displayName}\" failed on some elements " : "„{displayName}“ se pro některé prvky nezdařilo",
- "\"{displayName}\" batch action executed successfully" : "hromadná akce „{displayName}“ úspěšně vykonána",
- "ascending" : "vzestupně",
- "descending" : "sestupně",
- "Sort list by {column} ({direction})" : "Seřadit seznam podle {column} ({direction})",
"Select all" : "Vybrat vše",
"Unselect all" : "Zrušit výběr všeho",
+ "\"{displayName}\" failed on some elements " : "„{displayName}“ se pro některé prvky nezdařilo",
+ "\"{displayName}\" batch action executed successfully" : "hromadná akce „{displayName}“ úspěšně vykonána",
+ "Sort list by {column}" : "Seřadit podle {column}",
"List of files and folders." : "Seznam souborů a složek.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Seznam není vykreslen celý z důvodu nároků na výkon. Soubory budou dokreslovány, jak se budete posouvat seznamem.",
+ "{summaryFile} and {summaryFolder}" : "{summaryFile} a {summaryFolder}",
"File not found" : "Soubor nenalezen",
+ "_{count} file_::_{count} files_" : ["{count} soubor","{count} soubory","{count} souborů","{count} soubory"],
+ "_{count} folder_::_{count} folders_" : ["{count} složka","{count} složky","{count} složek","{count} složky"],
"Storage informations" : "Informace o úložišti",
"{usedQuotaByte} used" : "{usedQuotaByte} využito",
"{relative}% used" : "{relative}% využito",
@@ -221,6 +227,8 @@
"Share" : "Nasdílet",
"Shared by link" : "Sdíleno pomocí odkazu",
"Shared" : "Sdíleno",
+ "Switch to list view" : "Přepnout do zobrazení v seznamu",
+ "Switch to grid view" : "Přepnout do zobrazení v mřížce",
"Open the files app settings" : "Otevřít nastavení aplikace soubory",
"Files settings" : "Nastavení pro Soubory",
"File cannot be accessed" : "K souboru se nedaří přistoupit",
@@ -228,6 +236,7 @@
"Sort favorites first" : "Seřadit od oblíbených",
"Show hidden files" : "Zobrazit skryté soubory",
"Crop image previews" : "Oříznout náhledy obrázků",
+ "Enable the grid view" : "Zapnout zobrazení v mřížce",
"Additional settings" : "Další nastavení",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Zkopírovat do schránky",
@@ -244,16 +253,28 @@
"Blank" : "Prázdný",
"Unable to create new file from template" : "Nedaří se vytvořit soubor ze šablony",
"Delete permanently" : "Nevratně smazat",
+ "Destination is not a folder" : "Cíl není složka",
+ "This file/folder is already in that directory" : "V oné složce se už daný soubor/složka nachází",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Není možné přesunout soubor/složku do sebe samé nebo do své vlastní podložky",
+ "A file or folder with that name already exists in this folder" : "V této složce už existuje stejnojmenný soubor či složka",
+ "The files is locked" : "Soubory jsou uzamčené",
+ "The file does not exist anymore" : "Soubor už neexistuje",
+ "Chose destination" : "Zvolte cíl",
"Copy to {target}" : "Zkopírovat do {target}",
"Move to {target}" : "Přesunout do {target}",
+ "Cancelled move or copy operation" : "Operace přesunutí či zkopírování zrušena",
"Open folder {displayName}" : "Otevřít složku {displayName}",
"Open in Files" : "Otevřít v Souborech",
"Open details" : "Otevřít podorobnosti",
- "Created new folder \"{name}\"" : "Vytvořena nová složka „{name}“",
- "Set up templates folder" : "Vytvořit složku pro šablony",
- "Templates" : "Šablony",
"Create new templates folder" : "Vytvořit novou složku šablon",
+ "Templates" : "Šablony",
"Unable to initialize the templates directory" : "Nepodařilo se vytvořit složku pro šablony",
+ "Created new folder \"{name}\"" : "Vytvořena nová složka „{name}“",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} složka","{folderCount} složky","{folderCount} složek","{folderCount} složky"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} soubor","{fileCount} soubory","{fileCount} souborů","{fileCount} soubory"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 soubor a {folderCount} složka","1 soubor a {folderCount} složky","1 soubor a {folderCount} složek","1 soubor a {folderCount} složky"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} soubor a 1 složka","{fileCount} soubory a 1 složka","{fileCount} souborů a 1 složka","{fileCount} soubory a 1 složka"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} souborů a {folderCount} složek",
"List of favorites files and folders." : "Seznam oblíbených souborů a složek.",
"No favorites yet" : "Zatím nic oblíbeného",
"Files and folders you mark as favorite will show up here" : "Zde budou zobrazeny soubory a složky, které označíte jako oblíbené",
@@ -273,6 +294,7 @@
"Unlimited" : "Neomezeně",
"Search users" : "Hledat uživatele",
"Cancel" : "Storno",
+ "Set up templates folder" : "Vytvořit složku pro šablony",
"%s used" : "%s použito",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s z %2$s použito",
@@ -286,6 +308,9 @@
"This file has the tag {tag}" : "Tento soubor má štítek {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Tento soubor má štítky {firstTags} a {lastTag}",
"Open folder {name}" : "Otevřít složku {name}",
+ "ascending" : "vzestupně",
+ "descending" : "sestupně",
+ "Sort list by {column} ({direction})" : "Seřadit seznam podle {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Seznam není vykreslen celý z důvodu nároků na výkon. Soubory budou dokreslovány, jak se budete posouvat seznamem.",
"Search for an account" : "Hledat účet",
"Choose" : "Vybrat",
diff --git a/apps/files/l10n/da.js b/apps/files/l10n/da.js
index a05451f2840..bac66f35690 100644
--- a/apps/files/l10n/da.js
+++ b/apps/files/l10n/da.js
@@ -32,6 +32,7 @@ OC.L10N.register(
"Move" : "Flyt",
"Copy" : "Kopier",
"Choose target folder" : "Vælg destinationsmappe",
+ "Set reminder" : "Sæt påmindelse",
"Edit locally" : "Rediger lokalt",
"Open" : "Åbn",
"Delete file" : "Slet fil",
@@ -168,10 +169,17 @@ OC.L10N.register(
"File Management" : "Filhåndtering",
"Reload current directory" : "Genindlæs den aktuelle mappe",
"Go to the \"{dir}\" directory" : "Gå til mappen \"{dir}\"",
+ "Upload successful" : "Succesfuld upload",
+ "Rename file" : "Omdøb fil",
+ "File name" : "Filnavn",
"Folder name" : "Mappenavn",
+ "Download file {name}" : "Download fil {name}",
"Name cannot be empty" : "Navn må ikke være tomt",
"Select all" : "Vælg alle",
+ "Unselect all" : "Fravælg alle",
"File not found" : "Filen blev ikke fundet",
+ "_{count} file_::_{count} files_" : ["{count} fil","{count} filer"],
+ "_{count} folder_::_{count} folders_" : ["{count} mapper","{count} mapper"],
"Storage informations" : "Lagerinformationer",
"{usedQuotaByte} used" : "{usedQuotaByte} brugt",
"{relative}% used" : "{relative}% brugt",
@@ -215,10 +223,19 @@ OC.L10N.register(
"Blank" : "Tom",
"Unable to create new file from template" : "Kan ikke oprette ny fil fra skabelonen",
"Delete permanently" : "Slet permanent",
+ "The files is locked" : "Filerne er låste",
+ "The file does not exist anymore" : "Filen findes ikke længere",
+ "Chose destination" : "Vælg destionation",
+ "Copy to {target}" : "Kopiér til {target}",
+ "Move to {target}" : "Flyt til {target}",
+ "Open in Files" : "Åben i Filer",
"Open details" : "Mere information",
- "Set up templates folder" : "Opsæt skabelonmappen",
"Templates" : "Skabeloner",
"Unable to initialize the templates directory" : "Kan ikke initialisere skabelonmappen",
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} fil","{fileCount} filer"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 fil og {folderCount} mapper","1 fil og {folderCount} mapper"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} fil og 1 mapper","{fileCount} filer og 1 mapper"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} filer og {folderCount} mapper",
"No favorites yet" : "Ingen foretrukne endnu",
"Files and folders you mark as favorite will show up here" : "Filer og mapper som du har markeret som foretrukne, vil blive vist her",
"All files" : "Alle filer",
@@ -233,6 +250,7 @@ OC.L10N.register(
"Unlimited" : "Ubegrænset",
"Search users" : "Søg efter brugere",
"Cancel" : "annuller",
+ "Set up templates folder" : "Opsæt skabelonmappen",
"%s used" : "%s brugt",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s af %2$s brugt",
@@ -245,6 +263,9 @@ OC.L10N.register(
"Pending shares" : "Afventende delinger",
"This file has the tag {tag}" : "Denne fil har tagget {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Denne fil har taggene {firstTags} og {lastTag}",
+ "ascending" : "stigende",
+ "descending" : "faldende",
+ "Sort list by {column} ({direction})" : "Sortér liste efter {column} ({direction})",
"Choose" : "Vælg"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/da.json b/apps/files/l10n/da.json
index 57f79e1a3fa..5454f810a5e 100644
--- a/apps/files/l10n/da.json
+++ b/apps/files/l10n/da.json
@@ -30,6 +30,7 @@
"Move" : "Flyt",
"Copy" : "Kopier",
"Choose target folder" : "Vælg destinationsmappe",
+ "Set reminder" : "Sæt påmindelse",
"Edit locally" : "Rediger lokalt",
"Open" : "Åbn",
"Delete file" : "Slet fil",
@@ -166,10 +167,17 @@
"File Management" : "Filhåndtering",
"Reload current directory" : "Genindlæs den aktuelle mappe",
"Go to the \"{dir}\" directory" : "Gå til mappen \"{dir}\"",
+ "Upload successful" : "Succesfuld upload",
+ "Rename file" : "Omdøb fil",
+ "File name" : "Filnavn",
"Folder name" : "Mappenavn",
+ "Download file {name}" : "Download fil {name}",
"Name cannot be empty" : "Navn må ikke være tomt",
"Select all" : "Vælg alle",
+ "Unselect all" : "Fravælg alle",
"File not found" : "Filen blev ikke fundet",
+ "_{count} file_::_{count} files_" : ["{count} fil","{count} filer"],
+ "_{count} folder_::_{count} folders_" : ["{count} mapper","{count} mapper"],
"Storage informations" : "Lagerinformationer",
"{usedQuotaByte} used" : "{usedQuotaByte} brugt",
"{relative}% used" : "{relative}% brugt",
@@ -213,10 +221,19 @@
"Blank" : "Tom",
"Unable to create new file from template" : "Kan ikke oprette ny fil fra skabelonen",
"Delete permanently" : "Slet permanent",
+ "The files is locked" : "Filerne er låste",
+ "The file does not exist anymore" : "Filen findes ikke længere",
+ "Chose destination" : "Vælg destionation",
+ "Copy to {target}" : "Kopiér til {target}",
+ "Move to {target}" : "Flyt til {target}",
+ "Open in Files" : "Åben i Filer",
"Open details" : "Mere information",
- "Set up templates folder" : "Opsæt skabelonmappen",
"Templates" : "Skabeloner",
"Unable to initialize the templates directory" : "Kan ikke initialisere skabelonmappen",
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} fil","{fileCount} filer"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 fil og {folderCount} mapper","1 fil og {folderCount} mapper"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} fil og 1 mapper","{fileCount} filer og 1 mapper"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} filer og {folderCount} mapper",
"No favorites yet" : "Ingen foretrukne endnu",
"Files and folders you mark as favorite will show up here" : "Filer og mapper som du har markeret som foretrukne, vil blive vist her",
"All files" : "Alle filer",
@@ -231,6 +248,7 @@
"Unlimited" : "Ubegrænset",
"Search users" : "Søg efter brugere",
"Cancel" : "annuller",
+ "Set up templates folder" : "Opsæt skabelonmappen",
"%s used" : "%s brugt",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s af %2$s brugt",
@@ -243,6 +261,9 @@
"Pending shares" : "Afventende delinger",
"This file has the tag {tag}" : "Denne fil har tagget {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Denne fil har taggene {firstTags} og {lastTag}",
+ "ascending" : "stigende",
+ "descending" : "faldende",
+ "Sort list by {column} ({direction})" : "Sortér liste efter {column} ({direction})",
"Choose" : "Vælg"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js
index 655b670b034..911feca050f 100644
--- a/apps/files/l10n/de.js
+++ b/apps/files/l10n/de.js
@@ -171,15 +171,14 @@ OC.L10N.register(
"File Management" : "Dateiverwaltung",
"Reload current directory" : "Aktuelles Verzeichnis neu laden",
"Go to the \"{dir}\" directory" : "In das Verzeichnis \"{dir}“ wechseln",
+ "\"{displayName}\" action executed successfully" : "Aktion \"{displayName}\" erfolgreich ausgeführt",
+ "\"{displayName}\" action failed" : "Aktion \"{displayName}\" fehlgeschlagen",
"Select the row for {displayName}" : "Zeile für {displayName} auswählen",
"Rename file" : "Datei umbenennen",
- "A long time ago" : "Vor langer Zeit",
- "This node is unavailable" : "Dieser Knoten ist nicht verfügbar.",
- "Download file {name}" : "Datei {name} herunterladen",
"File name" : "Dateiname",
"Folder name" : "Ordnername",
- "\"{displayName}\" action executed successfully" : "Aktion \"{displayName}\" erfolgreich ausgeführt",
- "\"{displayName}\" action failed" : "Aktion \"{displayName}\" fehlgeschlagen",
+ "This node is unavailable" : "Dieser Knoten ist nicht verfügbar.",
+ "Download file {name}" : "Datei {name} herunterladen",
"\"{name}\" is not an allowed filetype." : "\"{name}\" ist kein zulässiger Dateityp.",
"{newName} already exists." : "{newName} existiert bereits.",
"Name cannot be empty" : "Der Name darf nicht leer sein",
@@ -187,14 +186,12 @@ OC.L10N.register(
"Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" in \"{newName}\" umbenannt",
"Could not rename \"{oldName}\", it does not exist any more" : "\"{oldName}\" konnte nicht umbenannt werden, da es nicht mehr existiert.",
"Could not rename \"{oldName}\"" : "\"{oldName}\" konnte nicht umbenannt werden.",
+ "A long time ago" : "Vor langer Zeit",
"Total rows summary" : "Zusammenfassung aller Zeilen",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" ist bei einigen Elementen fehlgeschlagen",
- "\"{displayName}\" batch action executed successfully" : "Stapelaktion \"{displayName}\" erfolgreich ausgeführt",
- "ascending" : "Aufsteigend",
- "descending" : "Absteigend",
- "Sort list by {column} ({direction})" : "Liste sortieren nach {column} ({direction})",
"Select all" : "Alle auswählen",
"Unselect all" : "Auswahl aufheben",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" ist bei einigen Elementen fehlgeschlagen",
+ "\"{displayName}\" batch action executed successfully" : "Stapelaktion \"{displayName}\" erfolgreich ausgeführt",
"List of files and folders." : "Liste der Dateien und Ordner",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Diese Liste wird aus Performance-Gründen nicht vollständig angezeigt. Die Dateien werden angezeigt, wenn du durch die Liste navigierst.",
"File not found" : "Datei nicht gefunden",
@@ -222,6 +219,7 @@ OC.L10N.register(
"Share" : "Teilen",
"Shared by link" : "Über einen Link geteilt",
"Shared" : "Geteilt",
+ "Switch to list view" : "Zur Listenansicht wechseln",
"Open the files app settings" : "Einstellungen der Dateien-App öffnen",
"Files settings" : "Dateien-Einstellungen",
"File cannot be accessed" : "Auf die Datei kann nicht zugegriffen werden",
@@ -248,9 +246,8 @@ OC.L10N.register(
"Open folder {displayName}" : "Ordner {displayName} öffnen",
"Open in Files" : "In App \"Dateien\" öffnen",
"Open details" : "Details öffnen",
- "Set up templates folder" : "Vorlagenordner einrichten",
- "Templates" : "Vorlagen",
"Create new templates folder" : "Neuen Vorlagenordner erstellen",
+ "Templates" : "Vorlagen",
"Unable to initialize the templates directory" : "Der Vorlagenordner konnte nicht initialisiert werden",
"List of favorites files and folders." : "Liste der favorisierten Ordner und Dateien",
"No favorites yet" : "Noch keine Favoriten vorhanden",
@@ -271,6 +268,7 @@ OC.L10N.register(
"Unlimited" : "Unbegrenzt",
"Search users" : "Suche Benutzer",
"Cancel" : "Abbrechen",
+ "Set up templates folder" : "Vorlagenordner einrichten",
"%s used" : "%s verwendet",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s von %2$s verwendet",
@@ -284,6 +282,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Diese Datei trägt das Schlagwort {tag}.",
"This file has the tags {firstTags} and {lastTag}" : "Diese Datei trägt die Schlagworte {firstTags} und {lastTag}.",
"Open folder {name}" : "Ordner {name} öffnen",
+ "ascending" : "Aufsteigend",
+ "descending" : "Absteigend",
+ "Sort list by {column} ({direction})" : "Liste sortieren nach {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Diese Liste wird aus Performance-Gründen nicht vollständig angezeigt. Die Dateien werden gerendert, wenn du durch die Liste navigierst.",
"Search for an account" : "Nach einem Konto suchen",
"Choose" : "Auswählen",
diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json
index fe76d24d2a4..01abdddb75f 100644
--- a/apps/files/l10n/de.json
+++ b/apps/files/l10n/de.json
@@ -169,15 +169,14 @@
"File Management" : "Dateiverwaltung",
"Reload current directory" : "Aktuelles Verzeichnis neu laden",
"Go to the \"{dir}\" directory" : "In das Verzeichnis \"{dir}“ wechseln",
+ "\"{displayName}\" action executed successfully" : "Aktion \"{displayName}\" erfolgreich ausgeführt",
+ "\"{displayName}\" action failed" : "Aktion \"{displayName}\" fehlgeschlagen",
"Select the row for {displayName}" : "Zeile für {displayName} auswählen",
"Rename file" : "Datei umbenennen",
- "A long time ago" : "Vor langer Zeit",
- "This node is unavailable" : "Dieser Knoten ist nicht verfügbar.",
- "Download file {name}" : "Datei {name} herunterladen",
"File name" : "Dateiname",
"Folder name" : "Ordnername",
- "\"{displayName}\" action executed successfully" : "Aktion \"{displayName}\" erfolgreich ausgeführt",
- "\"{displayName}\" action failed" : "Aktion \"{displayName}\" fehlgeschlagen",
+ "This node is unavailable" : "Dieser Knoten ist nicht verfügbar.",
+ "Download file {name}" : "Datei {name} herunterladen",
"\"{name}\" is not an allowed filetype." : "\"{name}\" ist kein zulässiger Dateityp.",
"{newName} already exists." : "{newName} existiert bereits.",
"Name cannot be empty" : "Der Name darf nicht leer sein",
@@ -185,14 +184,12 @@
"Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" in \"{newName}\" umbenannt",
"Could not rename \"{oldName}\", it does not exist any more" : "\"{oldName}\" konnte nicht umbenannt werden, da es nicht mehr existiert.",
"Could not rename \"{oldName}\"" : "\"{oldName}\" konnte nicht umbenannt werden.",
+ "A long time ago" : "Vor langer Zeit",
"Total rows summary" : "Zusammenfassung aller Zeilen",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" ist bei einigen Elementen fehlgeschlagen",
- "\"{displayName}\" batch action executed successfully" : "Stapelaktion \"{displayName}\" erfolgreich ausgeführt",
- "ascending" : "Aufsteigend",
- "descending" : "Absteigend",
- "Sort list by {column} ({direction})" : "Liste sortieren nach {column} ({direction})",
"Select all" : "Alle auswählen",
"Unselect all" : "Auswahl aufheben",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" ist bei einigen Elementen fehlgeschlagen",
+ "\"{displayName}\" batch action executed successfully" : "Stapelaktion \"{displayName}\" erfolgreich ausgeführt",
"List of files and folders." : "Liste der Dateien und Ordner",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Diese Liste wird aus Performance-Gründen nicht vollständig angezeigt. Die Dateien werden angezeigt, wenn du durch die Liste navigierst.",
"File not found" : "Datei nicht gefunden",
@@ -220,6 +217,7 @@
"Share" : "Teilen",
"Shared by link" : "Über einen Link geteilt",
"Shared" : "Geteilt",
+ "Switch to list view" : "Zur Listenansicht wechseln",
"Open the files app settings" : "Einstellungen der Dateien-App öffnen",
"Files settings" : "Dateien-Einstellungen",
"File cannot be accessed" : "Auf die Datei kann nicht zugegriffen werden",
@@ -246,9 +244,8 @@
"Open folder {displayName}" : "Ordner {displayName} öffnen",
"Open in Files" : "In App \"Dateien\" öffnen",
"Open details" : "Details öffnen",
- "Set up templates folder" : "Vorlagenordner einrichten",
- "Templates" : "Vorlagen",
"Create new templates folder" : "Neuen Vorlagenordner erstellen",
+ "Templates" : "Vorlagen",
"Unable to initialize the templates directory" : "Der Vorlagenordner konnte nicht initialisiert werden",
"List of favorites files and folders." : "Liste der favorisierten Ordner und Dateien",
"No favorites yet" : "Noch keine Favoriten vorhanden",
@@ -269,6 +266,7 @@
"Unlimited" : "Unbegrenzt",
"Search users" : "Suche Benutzer",
"Cancel" : "Abbrechen",
+ "Set up templates folder" : "Vorlagenordner einrichten",
"%s used" : "%s verwendet",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s von %2$s verwendet",
@@ -282,6 +280,9 @@
"This file has the tag {tag}" : "Diese Datei trägt das Schlagwort {tag}.",
"This file has the tags {firstTags} and {lastTag}" : "Diese Datei trägt die Schlagworte {firstTags} und {lastTag}.",
"Open folder {name}" : "Ordner {name} öffnen",
+ "ascending" : "Aufsteigend",
+ "descending" : "Absteigend",
+ "Sort list by {column} ({direction})" : "Liste sortieren nach {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Diese Liste wird aus Performance-Gründen nicht vollständig angezeigt. Die Dateien werden gerendert, wenn du durch die Liste navigierst.",
"Search for an account" : "Nach einem Konto suchen",
"Choose" : "Auswählen",
diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js
index ea84a77bb62..c167c21df63 100644
--- a/apps/files/l10n/de_DE.js
+++ b/apps/files/l10n/de_DE.js
@@ -171,31 +171,34 @@ OC.L10N.register(
"File Management" : "Dateiverwaltung",
"Reload current directory" : "Aktuelles Verzeichnis neu laden",
"Go to the \"{dir}\" directory" : "In das Verzeichnis \"{dir}“ wechseln",
+ "Drag and drop files here to upload" : "Dateien zum Hochladen hierher ziehen und ablegen",
+ "Upload successful" : "Hochladen erfolgreich",
+ "\"{displayName}\" action executed successfully" : "Aktion \"{displayName}\" erfolgreich ausgeführt",
+ "\"{displayName}\" action failed" : "Aktion \"{displayName}\" fehlgeschlagen",
"Select the row for {displayName}" : "Zeile für {displayName} auswählen",
"Rename file" : "Datei umbenennen",
- "A long time ago" : "Vor langer Zeit",
- "This node is unavailable" : "Dieser Knoten ist nicht verfügbar",
- "Download file {name}" : "Datei {name} herunterladen",
"File name" : "Dateiname",
"Folder name" : "Ordnername",
- "\"{displayName}\" action executed successfully" : "Aktion \"{displayName}\" erfolgreich ausgeführt",
- "\"{displayName}\" action failed" : "Aktion \"{displayName}\" fehlgeschlagen",
+ "This node is unavailable" : "Dieser Knoten ist nicht verfügbar",
+ "Download file {name}" : "Datei {name} herunterladen",
"\"{name}\" is not an allowed filetype." : "\"{name}\" ist kein zulässiger Dateityp.",
"{newName} already exists." : "{newName} existiert bereits.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}“ ist innerhalb eines Dateinamens nicht zulässig.",
"Name cannot be empty" : "Der Name darf nicht leer sein",
"Another entry with the same name already exists" : "Ein anderer Eintrag mit diesem Namen existiert bereits",
"Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" in \"{newName}\" umbenannt",
"Could not rename \"{oldName}\", it does not exist any more" : "\"{oldName}\" konnte nicht umbenannt werden, da es nicht mehr existiert",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Der Name \"{newName}“ wird bereits im Ordner \"{dir}“ verwendet. Bitte wählen Sie einen anderen Namen.",
"Could not rename \"{oldName}\"" : "\"{oldName}\" konnte nicht umbenannt werden",
+ "A long time ago" : "Vor langer Zeit",
+ "Could not copy {file}. {message}" : "{file} konnte nicht kopiert werden. {message}",
+ "Could not move {file}. {message}" : "{file} konnte nicht verschoben werden. {message}",
"Total rows summary" : "Zusammenfassung aller Zeilen",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" ist bei einigen Elementen fehlgeschlagen",
- "\"{displayName}\" batch action executed successfully" : "Stapelaktion \"{displayName}\" erfolgreich ausgeführt",
- "ascending" : "Aufsteigend",
- "descending" : "Absteigend",
- "Sort list by {column} ({direction})" : "Liste sortieren nach {column} ({direction})",
"Select all" : "Alle auswählen",
"Unselect all" : "Auswahl aufheben",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" ist bei einigen Elementen fehlgeschlagen",
+ "\"{displayName}\" batch action executed successfully" : "Stapelaktion \"{displayName}\" erfolgreich ausgeführt",
+ "Sort list by {column}" : "Liste sortieren nach {column}",
"List of files and folders." : "Liste der Dateien und Ordner.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Diese Liste ist aus Performance-Gründen nicht vollständig gerendert. Die Dateien werden gerendert, wenn Sie durch die Liste navigieren.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} und {summaryFolder}",
@@ -226,6 +229,8 @@ OC.L10N.register(
"Share" : "Teilen",
"Shared by link" : "Über einen Link geteilt",
"Shared" : "Geteilt",
+ "Switch to list view" : "Zur Listenansicht wechseln",
+ "Switch to grid view" : "Zur Rasteransicht wechseln",
"Open the files app settings" : "Einstellungen der Dateien-App öffnen",
"Files settings" : "Dateien-Einstellungen",
"File cannot be accessed" : "Auf die Datei kann nicht zugegriffen werden",
@@ -233,6 +238,7 @@ OC.L10N.register(
"Sort favorites first" : "Favoriten zuerst sortieren",
"Show hidden files" : "Versteckte Dateien anzeigen",
"Crop image previews" : "Bildvorschauen zuschneiden",
+ "Enable the grid view" : "Rasteransicht aktivieren",
"Additional settings" : "Zusätzliche Einstellungen",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "In die Zwischenablage kopieren",
@@ -249,16 +255,28 @@ OC.L10N.register(
"Blank" : "Leer",
"Unable to create new file from template" : "Neue Datei kann nicht aus Vorlage erstellt werden",
"Delete permanently" : "Endgültig löschen",
+ "Destination is not a folder" : "Ziel ist kein Ordner",
+ "This file/folder is already in that directory" : "Diese Datei oder Ordner ist bereits in diesem Verzeichnis vorhanden",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Eine Datei oder ein Ordner kann nicht auf sich selbst oder in einen Unterordner von sich selbst verschoben werden",
+ "A file or folder with that name already exists in this folder" : "In diesem Ordner ist bereits eine Datei oder ein Ordner mit diesem Namen vorhanden",
+ "The files is locked" : "Die Datei ist gesperrt",
+ "The file does not exist anymore" : "Diese Datei existiert nicht mehr",
+ "Chose destination" : "Ziel wählen",
"Copy to {target}" : "Nach {target} kopieren",
"Move to {target}" : "Nach {target} verschieben",
+ "Cancelled move or copy operation" : "Verschieben oder kopieren abgebrochen",
"Open folder {displayName}" : "Ordner {displayName} öffnen",
"Open in Files" : "In Dateien öffnen",
"Open details" : "Details öffnen",
- "Created new folder \"{name}\"" : "Neuer Ordner \"{name}\" wurde erstellt",
- "Set up templates folder" : "Vorlagenordner einrichten",
- "Templates" : "Vorlagen",
"Create new templates folder" : "Neuen Vorlagenordner erstellen",
+ "Templates" : "Vorlagen",
"Unable to initialize the templates directory" : "Der Vorlagenordner kann nicht initialisiert werden",
+ "Created new folder \"{name}\"" : "Neuer Ordner \"{name}\" wurde erstellt",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} Ordner","{folderCount} Ordner"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} Datei","{fileCount} Dateien"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 Datei und {folderCount} Ordner","1 Datei und {folderCount} Ordner"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} Datei und 1 Ordner","{fileCount} Dateien und 1 Ordner"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} Dateien und {folderCount} Ordner",
"List of favorites files and folders." : "Liste der favorisierten Ordner und Dateien.",
"No favorites yet" : "Noch keine Favoriten vorhanden",
"Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die Sie als Favoriten kennzeichnen, werden hier erscheinen",
@@ -278,6 +296,7 @@ OC.L10N.register(
"Unlimited" : "Unbegrenzt",
"Search users" : "Suche Benutzer",
"Cancel" : "Abbrechen",
+ "Set up templates folder" : "Vorlagenordner einrichten",
"%s used" : "%s verwendet",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s von %2$s verwendet",
@@ -291,6 +310,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Diese Datei trägt das Schlagwort {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Diese Datei trägt die Schlagworte {firstTags} und {lastTag}",
"Open folder {name}" : "Ordner {name} öffnen",
+ "ascending" : "Aufsteigend",
+ "descending" : "Absteigend",
+ "Sort list by {column} ({direction})" : "Liste sortieren nach {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Diese Liste ist aus Performance-Gründen nicht vollständig gerendert. Die Dateien werden gerendert, wenn Sie durch die Liste navigieren.",
"Search for an account" : "Nach einem Konto suchen",
"Choose" : "Auswählen",
diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json
index acad738c5eb..ff4afb2fb5f 100644
--- a/apps/files/l10n/de_DE.json
+++ b/apps/files/l10n/de_DE.json
@@ -169,31 +169,34 @@
"File Management" : "Dateiverwaltung",
"Reload current directory" : "Aktuelles Verzeichnis neu laden",
"Go to the \"{dir}\" directory" : "In das Verzeichnis \"{dir}“ wechseln",
+ "Drag and drop files here to upload" : "Dateien zum Hochladen hierher ziehen und ablegen",
+ "Upload successful" : "Hochladen erfolgreich",
+ "\"{displayName}\" action executed successfully" : "Aktion \"{displayName}\" erfolgreich ausgeführt",
+ "\"{displayName}\" action failed" : "Aktion \"{displayName}\" fehlgeschlagen",
"Select the row for {displayName}" : "Zeile für {displayName} auswählen",
"Rename file" : "Datei umbenennen",
- "A long time ago" : "Vor langer Zeit",
- "This node is unavailable" : "Dieser Knoten ist nicht verfügbar",
- "Download file {name}" : "Datei {name} herunterladen",
"File name" : "Dateiname",
"Folder name" : "Ordnername",
- "\"{displayName}\" action executed successfully" : "Aktion \"{displayName}\" erfolgreich ausgeführt",
- "\"{displayName}\" action failed" : "Aktion \"{displayName}\" fehlgeschlagen",
+ "This node is unavailable" : "Dieser Knoten ist nicht verfügbar",
+ "Download file {name}" : "Datei {name} herunterladen",
"\"{name}\" is not an allowed filetype." : "\"{name}\" ist kein zulässiger Dateityp.",
"{newName} already exists." : "{newName} existiert bereits.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}“ ist innerhalb eines Dateinamens nicht zulässig.",
"Name cannot be empty" : "Der Name darf nicht leer sein",
"Another entry with the same name already exists" : "Ein anderer Eintrag mit diesem Namen existiert bereits",
"Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" in \"{newName}\" umbenannt",
"Could not rename \"{oldName}\", it does not exist any more" : "\"{oldName}\" konnte nicht umbenannt werden, da es nicht mehr existiert",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Der Name \"{newName}“ wird bereits im Ordner \"{dir}“ verwendet. Bitte wählen Sie einen anderen Namen.",
"Could not rename \"{oldName}\"" : "\"{oldName}\" konnte nicht umbenannt werden",
+ "A long time ago" : "Vor langer Zeit",
+ "Could not copy {file}. {message}" : "{file} konnte nicht kopiert werden. {message}",
+ "Could not move {file}. {message}" : "{file} konnte nicht verschoben werden. {message}",
"Total rows summary" : "Zusammenfassung aller Zeilen",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" ist bei einigen Elementen fehlgeschlagen",
- "\"{displayName}\" batch action executed successfully" : "Stapelaktion \"{displayName}\" erfolgreich ausgeführt",
- "ascending" : "Aufsteigend",
- "descending" : "Absteigend",
- "Sort list by {column} ({direction})" : "Liste sortieren nach {column} ({direction})",
"Select all" : "Alle auswählen",
"Unselect all" : "Auswahl aufheben",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" ist bei einigen Elementen fehlgeschlagen",
+ "\"{displayName}\" batch action executed successfully" : "Stapelaktion \"{displayName}\" erfolgreich ausgeführt",
+ "Sort list by {column}" : "Liste sortieren nach {column}",
"List of files and folders." : "Liste der Dateien und Ordner.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Diese Liste ist aus Performance-Gründen nicht vollständig gerendert. Die Dateien werden gerendert, wenn Sie durch die Liste navigieren.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} und {summaryFolder}",
@@ -224,6 +227,8 @@
"Share" : "Teilen",
"Shared by link" : "Über einen Link geteilt",
"Shared" : "Geteilt",
+ "Switch to list view" : "Zur Listenansicht wechseln",
+ "Switch to grid view" : "Zur Rasteransicht wechseln",
"Open the files app settings" : "Einstellungen der Dateien-App öffnen",
"Files settings" : "Dateien-Einstellungen",
"File cannot be accessed" : "Auf die Datei kann nicht zugegriffen werden",
@@ -231,6 +236,7 @@
"Sort favorites first" : "Favoriten zuerst sortieren",
"Show hidden files" : "Versteckte Dateien anzeigen",
"Crop image previews" : "Bildvorschauen zuschneiden",
+ "Enable the grid view" : "Rasteransicht aktivieren",
"Additional settings" : "Zusätzliche Einstellungen",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "In die Zwischenablage kopieren",
@@ -247,16 +253,28 @@
"Blank" : "Leer",
"Unable to create new file from template" : "Neue Datei kann nicht aus Vorlage erstellt werden",
"Delete permanently" : "Endgültig löschen",
+ "Destination is not a folder" : "Ziel ist kein Ordner",
+ "This file/folder is already in that directory" : "Diese Datei oder Ordner ist bereits in diesem Verzeichnis vorhanden",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Eine Datei oder ein Ordner kann nicht auf sich selbst oder in einen Unterordner von sich selbst verschoben werden",
+ "A file or folder with that name already exists in this folder" : "In diesem Ordner ist bereits eine Datei oder ein Ordner mit diesem Namen vorhanden",
+ "The files is locked" : "Die Datei ist gesperrt",
+ "The file does not exist anymore" : "Diese Datei existiert nicht mehr",
+ "Chose destination" : "Ziel wählen",
"Copy to {target}" : "Nach {target} kopieren",
"Move to {target}" : "Nach {target} verschieben",
+ "Cancelled move or copy operation" : "Verschieben oder kopieren abgebrochen",
"Open folder {displayName}" : "Ordner {displayName} öffnen",
"Open in Files" : "In Dateien öffnen",
"Open details" : "Details öffnen",
- "Created new folder \"{name}\"" : "Neuer Ordner \"{name}\" wurde erstellt",
- "Set up templates folder" : "Vorlagenordner einrichten",
- "Templates" : "Vorlagen",
"Create new templates folder" : "Neuen Vorlagenordner erstellen",
+ "Templates" : "Vorlagen",
"Unable to initialize the templates directory" : "Der Vorlagenordner kann nicht initialisiert werden",
+ "Created new folder \"{name}\"" : "Neuer Ordner \"{name}\" wurde erstellt",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} Ordner","{folderCount} Ordner"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} Datei","{fileCount} Dateien"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 Datei und {folderCount} Ordner","1 Datei und {folderCount} Ordner"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} Datei und 1 Ordner","{fileCount} Dateien und 1 Ordner"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} Dateien und {folderCount} Ordner",
"List of favorites files and folders." : "Liste der favorisierten Ordner und Dateien.",
"No favorites yet" : "Noch keine Favoriten vorhanden",
"Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die Sie als Favoriten kennzeichnen, werden hier erscheinen",
@@ -276,6 +294,7 @@
"Unlimited" : "Unbegrenzt",
"Search users" : "Suche Benutzer",
"Cancel" : "Abbrechen",
+ "Set up templates folder" : "Vorlagenordner einrichten",
"%s used" : "%s verwendet",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s von %2$s verwendet",
@@ -289,6 +308,9 @@
"This file has the tag {tag}" : "Diese Datei trägt das Schlagwort {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Diese Datei trägt die Schlagworte {firstTags} und {lastTag}",
"Open folder {name}" : "Ordner {name} öffnen",
+ "ascending" : "Aufsteigend",
+ "descending" : "Absteigend",
+ "Sort list by {column} ({direction})" : "Liste sortieren nach {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Diese Liste ist aus Performance-Gründen nicht vollständig gerendert. Die Dateien werden gerendert, wenn Sie durch die Liste navigieren.",
"Search for an account" : "Nach einem Konto suchen",
"Choose" : "Auswählen",
diff --git a/apps/files/l10n/el.js b/apps/files/l10n/el.js
index 602f626c273..0d02b08d80d 100644
--- a/apps/files/l10n/el.js
+++ b/apps/files/l10n/el.js
@@ -22,6 +22,8 @@ OC.L10N.register(
"An unknown error has occurred" : "Προέκυψε άγνωστο σφάλμα.",
"File could not be uploaded" : "Δεν ήταν δυνατή η μεταφόρτωση του αρχείου",
"Uploading …" : "Μεταφόρτωση σε εξέλιξη ...",
+ "{remainingTime} ({currentNumber}/{total})" : "{remainingTime} ({currentNumber}/{total})",
+ "Uploading … ({currentNumber}/{total})" : "Μεταφόρτωση … ({currentNumber}/{total})",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} από {totalSize} ({bitrate})",
"Uploading that item is not supported" : "Η μεταφόρτωση αυτού του αντικειμένου δεν υποστηρίζεται",
"Target folder does not exist any more" : "Ο φάκελος προορισμού δεν υπάρχει πια",
@@ -32,6 +34,7 @@ OC.L10N.register(
"Move" : "Μετακίνηση",
"Copy" : "Αντιγραφή",
"Choose target folder" : "Επιλογή φακέλου προορισμού",
+ "Set reminder" : "Προσθήκη υπενθύμισης",
"Edit locally" : "Επεξεργασία τοπικά",
"Open" : "Άνοιγμα",
"Delete file" : "Διαγραφή αρχείου",
@@ -168,13 +171,12 @@ OC.L10N.register(
"File Management" : "Διαχείριση αρχείων",
"Reload current directory" : "Επαναφόρτωση τρέχοντος καταλόγου",
"Go to the \"{dir}\" directory" : "Μετάβαση στον κατάλογο \"{dir}\"",
- "Download file {name}" : "Λήψη αρχείου {name}",
+ "Rename file" : "Μετονομασία αρχείου",
"File name" : "Όνομα αρχείου",
"Folder name" : "Όνομα φακέλου",
+ "Download file {name}" : "Λήψη αρχείου {name}",
"Name cannot be empty" : "Το όνομα δεν μπορεί να είναι κενό",
- "ascending" : "αύξουσα",
- "descending" : "φθίνουσα",
- "Sort list by {column} ({direction})" : "Ταξινόμηση λίστας ανά {column} ({direction})",
+ "A long time ago" : "Πριν αρκετό καιρό",
"Select all" : "Επιλογή όλων",
"Unselect all" : "Αποεπιλογή όλων",
"File not found" : "Δε βρέθηκε το αρχείο",
@@ -198,6 +200,7 @@ OC.L10N.register(
"Share" : "Διαμοιρασμός",
"Shared by link" : "Διαμοιρασμένα μέσω συνδέσμου",
"Shared" : "Κοινόχρηστα",
+ "Switch to list view" : "Αλλαγή σε προβολή λίστας",
"Open the files app settings" : "Ανοίξτε τις ρυθμίσεις της εφαρμογής αρχείων",
"Files settings" : "Ρυθμίσεις αρχείων",
"File cannot be accessed" : "Δεν είναι δυνατή η πρόσβαση στο αρχείο",
@@ -223,9 +226,8 @@ OC.L10N.register(
"Move to {target}" : "Μετακίνηση σε {target}",
"Open folder {displayName}" : "Άνοιγμα φακέλου {displayName}",
"Open details" : "Άνοιγμα λεπτομερειών",
- "Set up templates folder" : "Ρύθμιση φακέλου προτύπων",
- "Templates" : "Πρότυπα",
"Create new templates folder" : "Δημιουργία νέου φακέλου προτύπων",
+ "Templates" : "Πρότυπα",
"Unable to initialize the templates directory" : "Δεν είναι δυνατή η προετοιμασία του καταλόγου προτύπων",
"No favorites yet" : "Κανένα αγαπημένο ακόμα",
"Files and folders you mark as favorite will show up here" : "Τα αρχεία και οι φάκελοι που σημειώνονται ως αγαπημένα θα εμφανιστούν εδώ",
@@ -241,6 +243,7 @@ OC.L10N.register(
"Unlimited" : "Απεριόριστο",
"Search users" : "Αναζήτηση χρηστών",
"Cancel" : "Ακύρωση",
+ "Set up templates folder" : "Ρύθμιση φακέλου προτύπων",
"%s used" : "%s σε χρήση",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "χρησιμοποιούνται %1$s από %2$s",
@@ -254,6 +257,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Αυτό το αρχείο έχει την ετικέτα {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Αυτό το αρχείο έχει τις ετικέτες {firstTags} και {lastTag}",
"Open folder {name}" : "Άνοιγμα φακέλου {name}",
+ "ascending" : "αύξουσα",
+ "descending" : "φθίνουσα",
+ "Sort list by {column} ({direction})" : "Ταξινόμηση λίστας ανά {column} ({direction})",
"Search for an account" : "Αναζήτηση για λογαριασμό",
"Choose" : "Επιλογή",
"No files or folders have been deleted yet" : "Κανένα αρχείο ή φάκελος δεν έχει διαγραφεί ακόμα"
diff --git a/apps/files/l10n/el.json b/apps/files/l10n/el.json
index efb93324a8c..c67b8306b2e 100644
--- a/apps/files/l10n/el.json
+++ b/apps/files/l10n/el.json
@@ -20,6 +20,8 @@
"An unknown error has occurred" : "Προέκυψε άγνωστο σφάλμα.",
"File could not be uploaded" : "Δεν ήταν δυνατή η μεταφόρτωση του αρχείου",
"Uploading …" : "Μεταφόρτωση σε εξέλιξη ...",
+ "{remainingTime} ({currentNumber}/{total})" : "{remainingTime} ({currentNumber}/{total})",
+ "Uploading … ({currentNumber}/{total})" : "Μεταφόρτωση … ({currentNumber}/{total})",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} από {totalSize} ({bitrate})",
"Uploading that item is not supported" : "Η μεταφόρτωση αυτού του αντικειμένου δεν υποστηρίζεται",
"Target folder does not exist any more" : "Ο φάκελος προορισμού δεν υπάρχει πια",
@@ -30,6 +32,7 @@
"Move" : "Μετακίνηση",
"Copy" : "Αντιγραφή",
"Choose target folder" : "Επιλογή φακέλου προορισμού",
+ "Set reminder" : "Προσθήκη υπενθύμισης",
"Edit locally" : "Επεξεργασία τοπικά",
"Open" : "Άνοιγμα",
"Delete file" : "Διαγραφή αρχείου",
@@ -166,13 +169,12 @@
"File Management" : "Διαχείριση αρχείων",
"Reload current directory" : "Επαναφόρτωση τρέχοντος καταλόγου",
"Go to the \"{dir}\" directory" : "Μετάβαση στον κατάλογο \"{dir}\"",
- "Download file {name}" : "Λήψη αρχείου {name}",
+ "Rename file" : "Μετονομασία αρχείου",
"File name" : "Όνομα αρχείου",
"Folder name" : "Όνομα φακέλου",
+ "Download file {name}" : "Λήψη αρχείου {name}",
"Name cannot be empty" : "Το όνομα δεν μπορεί να είναι κενό",
- "ascending" : "αύξουσα",
- "descending" : "φθίνουσα",
- "Sort list by {column} ({direction})" : "Ταξινόμηση λίστας ανά {column} ({direction})",
+ "A long time ago" : "Πριν αρκετό καιρό",
"Select all" : "Επιλογή όλων",
"Unselect all" : "Αποεπιλογή όλων",
"File not found" : "Δε βρέθηκε το αρχείο",
@@ -196,6 +198,7 @@
"Share" : "Διαμοιρασμός",
"Shared by link" : "Διαμοιρασμένα μέσω συνδέσμου",
"Shared" : "Κοινόχρηστα",
+ "Switch to list view" : "Αλλαγή σε προβολή λίστας",
"Open the files app settings" : "Ανοίξτε τις ρυθμίσεις της εφαρμογής αρχείων",
"Files settings" : "Ρυθμίσεις αρχείων",
"File cannot be accessed" : "Δεν είναι δυνατή η πρόσβαση στο αρχείο",
@@ -221,9 +224,8 @@
"Move to {target}" : "Μετακίνηση σε {target}",
"Open folder {displayName}" : "Άνοιγμα φακέλου {displayName}",
"Open details" : "Άνοιγμα λεπτομερειών",
- "Set up templates folder" : "Ρύθμιση φακέλου προτύπων",
- "Templates" : "Πρότυπα",
"Create new templates folder" : "Δημιουργία νέου φακέλου προτύπων",
+ "Templates" : "Πρότυπα",
"Unable to initialize the templates directory" : "Δεν είναι δυνατή η προετοιμασία του καταλόγου προτύπων",
"No favorites yet" : "Κανένα αγαπημένο ακόμα",
"Files and folders you mark as favorite will show up here" : "Τα αρχεία και οι φάκελοι που σημειώνονται ως αγαπημένα θα εμφανιστούν εδώ",
@@ -239,6 +241,7 @@
"Unlimited" : "Απεριόριστο",
"Search users" : "Αναζήτηση χρηστών",
"Cancel" : "Ακύρωση",
+ "Set up templates folder" : "Ρύθμιση φακέλου προτύπων",
"%s used" : "%s σε χρήση",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "χρησιμοποιούνται %1$s από %2$s",
@@ -252,6 +255,9 @@
"This file has the tag {tag}" : "Αυτό το αρχείο έχει την ετικέτα {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Αυτό το αρχείο έχει τις ετικέτες {firstTags} και {lastTag}",
"Open folder {name}" : "Άνοιγμα φακέλου {name}",
+ "ascending" : "αύξουσα",
+ "descending" : "φθίνουσα",
+ "Sort list by {column} ({direction})" : "Ταξινόμηση λίστας ανά {column} ({direction})",
"Search for an account" : "Αναζήτηση για λογαριασμό",
"Choose" : "Επιλογή",
"No files or folders have been deleted yet" : "Κανένα αρχείο ή φάκελος δεν έχει διαγραφεί ακόμα"
diff --git a/apps/files/l10n/en_GB.js b/apps/files/l10n/en_GB.js
index 1b6fe15dfa3..344896c36f1 100644
--- a/apps/files/l10n/en_GB.js
+++ b/apps/files/l10n/en_GB.js
@@ -171,31 +171,34 @@ OC.L10N.register(
"File Management" : "File Management",
"Reload current directory" : "Reload current directory",
"Go to the \"{dir}\" directory" : "Go to the \"{dir}\" directory",
+ "Drag and drop files here to upload" : "Drag and drop files here to upload",
+ "Upload successful" : "Upload successful",
+ "\"{displayName}\" action executed successfully" : "\"{displayName}\" action executed successfully",
+ "\"{displayName}\" action failed" : "\"{displayName}\" action failed",
"Select the row for {displayName}" : "Select the row for {displayName}",
"Rename file" : "Rename file",
- "A long time ago" : "A long time ago",
- "This node is unavailable" : "This node is unavailable",
- "Download file {name}" : "Download file {name}",
"File name" : "File name",
"Folder name" : "Folder name",
- "\"{displayName}\" action executed successfully" : "\"{displayName}\" action executed successfully",
- "\"{displayName}\" action failed" : "\"{displayName}\" action failed",
+ "This node is unavailable" : "This node is unavailable",
+ "Download file {name}" : "Download file {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" is not an allowed filetype.",
"{newName} already exists." : "{newName} already exists.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\" is not allowed inside a file name.",
"Name cannot be empty" : "Name cannot be empty",
"Another entry with the same name already exists" : "Another entry with the same name already exists",
"Renamed \"{oldName}\" to \"{newName}\"" : "Renamed \"{oldName}\" to \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Could not rename \"{oldName}\", it does not exist any more",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name.",
"Could not rename \"{oldName}\"" : "Could not rename \"{oldName}\"",
+ "A long time ago" : "A long time ago",
+ "Could not copy {file}. {message}" : "Could not copy {file}. {message}",
+ "Could not move {file}. {message}" : "Could not move {file}. {message}",
"Total rows summary" : "Total rows summary",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" failed on some elements ",
- "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" batch action executed successfully",
- "ascending" : "ascending",
- "descending" : "descending",
- "Sort list by {column} ({direction})" : "Sort list by {column} ({direction})",
"Select all" : "Select all",
"Unselect all" : "Unselect all",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" failed on some elements ",
+ "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" batch action executed successfully",
+ "Sort list by {column}" : "Sort list by {column}",
"List of files and folders." : "List of files and folders.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} and {summaryFolder}",
@@ -226,6 +229,8 @@ OC.L10N.register(
"Share" : "Share",
"Shared by link" : "Shared by link",
"Shared" : "Shared",
+ "Switch to list view" : "Switch to list view",
+ "Switch to grid view" : "Switch to grid view",
"Open the files app settings" : "Open the files app settings",
"Files settings" : "Files settings",
"File cannot be accessed" : "File cannot be accessed",
@@ -233,6 +238,7 @@ OC.L10N.register(
"Sort favorites first" : "Sort favourites first",
"Show hidden files" : "Show hidden files",
"Crop image previews" : "Crop image previews",
+ "Enable the grid view" : "Enable the grid view",
"Additional settings" : "Additional settings",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Copy to clipboard",
@@ -249,16 +255,28 @@ OC.L10N.register(
"Blank" : "Blank",
"Unable to create new file from template" : "Unable to create new file from template",
"Delete permanently" : "Delete permanently",
+ "Destination is not a folder" : "Destination is not a folder",
+ "This file/folder is already in that directory" : "This file/folder is already in that directory",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "You cannot move a file/folder onto itself or into a subfolder of itself",
+ "A file or folder with that name already exists in this folder" : "A file or folder with that name already exists in this folder",
+ "The files is locked" : "The files is locked",
+ "The file does not exist anymore" : "The file does not exist anymore",
+ "Chose destination" : "Choose destination",
"Copy to {target}" : "Copy to {target}",
"Move to {target}" : "Move to {target}",
+ "Cancelled move or copy operation" : "Cancelled move or copy operation",
"Open folder {displayName}" : "Open folder {displayName}",
"Open in Files" : "Open in Files",
"Open details" : "Open details",
- "Created new folder \"{name}\"" : "Created new folder \"{name}\"",
- "Set up templates folder" : "Set up templates folder",
- "Templates" : "Templates",
"Create new templates folder" : "Create new templates folder",
+ "Templates" : "Templates",
"Unable to initialize the templates directory" : "Unable to initialize the templates directory",
+ "Created new folder \"{name}\"" : "Created new folder \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} folder","{folderCount} folders"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} file","{fileCount} files"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 file and {folderCount} folder","1 file and {folderCount} folders"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} file and 1 folder","{fileCount} files and 1 folder"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} files and {folderCount} folders",
"List of favorites files and folders." : "List of favourites files and folders.",
"No favorites yet" : "No favourites yet",
"Files and folders you mark as favorite will show up here" : "Files and folders you mark as favourite will show up here",
@@ -278,6 +296,7 @@ OC.L10N.register(
"Unlimited" : "Unlimited",
"Search users" : "Search users",
"Cancel" : "Cancel",
+ "Set up templates folder" : "Set up templates folder",
"%s used" : "%s used",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s of %2$s used",
@@ -291,6 +310,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "This file has the tag {tag}",
"This file has the tags {firstTags} and {lastTag}" : "This file has the tags {firstTags} and {lastTag}",
"Open folder {name}" : "Open folder {name}",
+ "ascending" : "ascending",
+ "descending" : "descending",
+ "Sort list by {column} ({direction})" : "Sort list by {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list.",
"Search for an account" : "Search for an account",
"Choose" : "Choose",
diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json
index f46eabd8c40..14445bd6f00 100644
--- a/apps/files/l10n/en_GB.json
+++ b/apps/files/l10n/en_GB.json
@@ -169,31 +169,34 @@
"File Management" : "File Management",
"Reload current directory" : "Reload current directory",
"Go to the \"{dir}\" directory" : "Go to the \"{dir}\" directory",
+ "Drag and drop files here to upload" : "Drag and drop files here to upload",
+ "Upload successful" : "Upload successful",
+ "\"{displayName}\" action executed successfully" : "\"{displayName}\" action executed successfully",
+ "\"{displayName}\" action failed" : "\"{displayName}\" action failed",
"Select the row for {displayName}" : "Select the row for {displayName}",
"Rename file" : "Rename file",
- "A long time ago" : "A long time ago",
- "This node is unavailable" : "This node is unavailable",
- "Download file {name}" : "Download file {name}",
"File name" : "File name",
"Folder name" : "Folder name",
- "\"{displayName}\" action executed successfully" : "\"{displayName}\" action executed successfully",
- "\"{displayName}\" action failed" : "\"{displayName}\" action failed",
+ "This node is unavailable" : "This node is unavailable",
+ "Download file {name}" : "Download file {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" is not an allowed filetype.",
"{newName} already exists." : "{newName} already exists.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\" is not allowed inside a file name.",
"Name cannot be empty" : "Name cannot be empty",
"Another entry with the same name already exists" : "Another entry with the same name already exists",
"Renamed \"{oldName}\" to \"{newName}\"" : "Renamed \"{oldName}\" to \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Could not rename \"{oldName}\", it does not exist any more",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name.",
"Could not rename \"{oldName}\"" : "Could not rename \"{oldName}\"",
+ "A long time ago" : "A long time ago",
+ "Could not copy {file}. {message}" : "Could not copy {file}. {message}",
+ "Could not move {file}. {message}" : "Could not move {file}. {message}",
"Total rows summary" : "Total rows summary",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" failed on some elements ",
- "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" batch action executed successfully",
- "ascending" : "ascending",
- "descending" : "descending",
- "Sort list by {column} ({direction})" : "Sort list by {column} ({direction})",
"Select all" : "Select all",
"Unselect all" : "Unselect all",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" failed on some elements ",
+ "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" batch action executed successfully",
+ "Sort list by {column}" : "Sort list by {column}",
"List of files and folders." : "List of files and folders.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} and {summaryFolder}",
@@ -224,6 +227,8 @@
"Share" : "Share",
"Shared by link" : "Shared by link",
"Shared" : "Shared",
+ "Switch to list view" : "Switch to list view",
+ "Switch to grid view" : "Switch to grid view",
"Open the files app settings" : "Open the files app settings",
"Files settings" : "Files settings",
"File cannot be accessed" : "File cannot be accessed",
@@ -231,6 +236,7 @@
"Sort favorites first" : "Sort favourites first",
"Show hidden files" : "Show hidden files",
"Crop image previews" : "Crop image previews",
+ "Enable the grid view" : "Enable the grid view",
"Additional settings" : "Additional settings",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Copy to clipboard",
@@ -247,16 +253,28 @@
"Blank" : "Blank",
"Unable to create new file from template" : "Unable to create new file from template",
"Delete permanently" : "Delete permanently",
+ "Destination is not a folder" : "Destination is not a folder",
+ "This file/folder is already in that directory" : "This file/folder is already in that directory",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "You cannot move a file/folder onto itself or into a subfolder of itself",
+ "A file or folder with that name already exists in this folder" : "A file or folder with that name already exists in this folder",
+ "The files is locked" : "The files is locked",
+ "The file does not exist anymore" : "The file does not exist anymore",
+ "Chose destination" : "Choose destination",
"Copy to {target}" : "Copy to {target}",
"Move to {target}" : "Move to {target}",
+ "Cancelled move or copy operation" : "Cancelled move or copy operation",
"Open folder {displayName}" : "Open folder {displayName}",
"Open in Files" : "Open in Files",
"Open details" : "Open details",
- "Created new folder \"{name}\"" : "Created new folder \"{name}\"",
- "Set up templates folder" : "Set up templates folder",
- "Templates" : "Templates",
"Create new templates folder" : "Create new templates folder",
+ "Templates" : "Templates",
"Unable to initialize the templates directory" : "Unable to initialize the templates directory",
+ "Created new folder \"{name}\"" : "Created new folder \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} folder","{folderCount} folders"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} file","{fileCount} files"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 file and {folderCount} folder","1 file and {folderCount} folders"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} file and 1 folder","{fileCount} files and 1 folder"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} files and {folderCount} folders",
"List of favorites files and folders." : "List of favourites files and folders.",
"No favorites yet" : "No favourites yet",
"Files and folders you mark as favorite will show up here" : "Files and folders you mark as favourite will show up here",
@@ -276,6 +294,7 @@
"Unlimited" : "Unlimited",
"Search users" : "Search users",
"Cancel" : "Cancel",
+ "Set up templates folder" : "Set up templates folder",
"%s used" : "%s used",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s of %2$s used",
@@ -289,6 +308,9 @@
"This file has the tag {tag}" : "This file has the tag {tag}",
"This file has the tags {firstTags} and {lastTag}" : "This file has the tags {firstTags} and {lastTag}",
"Open folder {name}" : "Open folder {name}",
+ "ascending" : "ascending",
+ "descending" : "descending",
+ "Sort list by {column} ({direction})" : "Sort list by {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list.",
"Search for an account" : "Search for an account",
"Choose" : "Choose",
diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js
index d0fa90f01cc..2d489c3520d 100644
--- a/apps/files/l10n/es.js
+++ b/apps/files/l10n/es.js
@@ -171,31 +171,34 @@ OC.L10N.register(
"File Management" : "Gestión de archivos",
"Reload current directory" : "Recargar directorio actual",
"Go to the \"{dir}\" directory" : "Ir al directorio \"{dir}\"",
+ "Drag and drop files here to upload" : "Arrastre y suelte archivos aquí para subirlos",
+ "Upload successful" : "Subida exitosa",
+ "\"{displayName}\" action executed successfully" : "la acción \"{displayName}\" se ejecutó exitósamente",
+ "\"{displayName}\" action failed" : "la acción \"{displayName}\" falló",
"Select the row for {displayName}" : "Seleccione la fila para {displayName}",
"Rename file" : "Renombrar archivo",
- "A long time ago" : "Hace mucho tiempo",
- "This node is unavailable" : "Este nodo no está disponible",
- "Download file {name}" : "Descargar archivo {name}",
"File name" : "Nombre del archivo",
"Folder name" : "Nombre de la carpeta",
- "\"{displayName}\" action executed successfully" : "la acción \"{displayName}\" se ejecutó exitósamente",
- "\"{displayName}\" action failed" : "la acción \"{displayName}\" falló",
+ "This node is unavailable" : "Este nodo no está disponible",
+ "Download file {name}" : "Descargar archivo {name}",
"\"{name}\" is not an allowed filetype." : "\" {name}\" no es un tipo de archivo permitido.",
"{newName} already exists." : "{newName} ya existe.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\" no está permitido dentro del nombre de un archivo.",
"Name cannot be empty" : "El nombre no puede estar vacío",
"Another entry with the same name already exists" : "Ya existe otra entrada con el mismo nombre",
"Renamed \"{oldName}\" to \"{newName}\"" : "Renombrado \"{oldName}\" a \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "No se ha podido renombrar \"{oldName}\", ya no existe.",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "El nombre \"{newName}\" ya está en uso en la carpeta \"{dir}\". Por favor, escoja un nombre diferente.",
"Could not rename \"{oldName}\"" : "No se ha podido renombrar \"{oldName}\"",
+ "A long time ago" : "Hace mucho tiempo",
+ "Could not copy {file}. {message}" : "No se pudo copiar {file}. {message}",
+ "Could not move {file}. {message}" : "No se pudo mover {file}. {message}",
"Total rows summary" : "Resumen de filas totales",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" fallo en algunos elementos",
- "\"{displayName}\" batch action executed successfully" : "la acción en lotes \"{displayName}\" se ejecutó exitósamente",
- "ascending" : "ascendente",
- "descending" : "descendente",
- "Sort list by {column} ({direction})" : "Ordenar lista por {column} ({direction})",
"Select all" : "Seleccionar todo",
"Unselect all" : "Desmarrcar todos",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" fallo en algunos elementos",
+ "\"{displayName}\" batch action executed successfully" : "la acción en lotes \"{displayName}\" se ejecutó exitósamente",
+ "Sort list by {column}" : "Ordenar lista por {column}",
"List of files and folders." : "Lista de archivos y carpetas.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Esta lista no se muestra completamente por motivos de rendimiento. Los archivos se mostrarán a medida que navega por la lista.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} y {summaryFolder}",
@@ -226,6 +229,7 @@ OC.L10N.register(
"Share" : "Compartir",
"Shared by link" : "Compartido por enlace",
"Shared" : "Compartido",
+ "Switch to list view" : "Cambiar a vista de lista",
"Open the files app settings" : "Abrir la configuración de la app Archivos",
"Files settings" : "Configuración de archivos",
"File cannot be accessed" : "El archivo no puede ser accesado",
@@ -249,16 +253,28 @@ OC.L10N.register(
"Blank" : "Vacío",
"Unable to create new file from template" : "No se ha podido crear un nuevo archivo desde la plantilla",
"Delete permanently" : "Eliminar de forma definitiva",
+ "Destination is not a folder" : "El destino no es una carpeta",
+ "This file/folder is already in that directory" : "Este archivo/carpeta ya está en ese directorio",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "No puede mover un archivo/carpeta a sí mismo o a una sub-carpeta de sí mismo",
+ "A file or folder with that name already exists in this folder" : "Un archivo o carpeta con ese nombre ya existe en esta carpeta",
+ "The files is locked" : "El archivo está bloqueado",
+ "The file does not exist anymore" : "El archivo ya no existe",
+ "Chose destination" : "Seleccione el destino",
"Copy to {target}" : "Copiar a {target}",
"Move to {target}" : "Mover a {target}",
+ "Cancelled move or copy operation" : "Se canceló la operación de mover o copiar",
"Open folder {displayName}" : "Abrir carpeta {displayName}",
"Open in Files" : "Abrir en Archivos",
"Open details" : "Abrir detalles",
- "Created new folder \"{name}\"" : "Se creó la carpeta nueva \"{name}\"",
- "Set up templates folder" : "Configura una carpeta para plantillas",
- "Templates" : "Plantillas",
"Create new templates folder" : "Crear nueva carpeta de plantillas",
+ "Templates" : "Plantillas",
"Unable to initialize the templates directory" : "No se ha podido iniciar la carpeta de plantillas",
+ "Created new folder \"{name}\"" : "Se creó la carpeta nueva \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} carpeta","{folderCount} carpetas","{folderCount} carpetas"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} archivo","{fileCount} archivos","{fileCount} archivos"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 archivo y {folderCount} carpeta","1 archivo y {folderCount} carpetas","1 archivo y {folderCount} carpetas"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} archivo y 1 carpeta","{fileCount} archivos y 1 carpeta","{fileCount} archivos y 1 carpeta"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} archivos y {folderCount} carpetas",
"List of favorites files and folders." : "Lista de archivos y carpetas favoritos.",
"No favorites yet" : "Aún no hay favoritos",
"Files and folders you mark as favorite will show up here" : "Aquí aparecerán los archivos y carpetas que has marcado como favoritos",
@@ -278,6 +294,7 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"Search users" : "Buscar usuarios",
"Cancel" : "Cancelar",
+ "Set up templates folder" : "Configura una carpeta para plantillas",
"%s used" : "usado %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s de %2$s usados",
@@ -291,6 +308,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Este archivo tiene la etiqueta {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Este archivo tiene las etiquetas {firstTags} y {lastTag}",
"Open folder {name}" : "Abrir carpeta {name}",
+ "ascending" : "ascendente",
+ "descending" : "descendente",
+ "Sort list by {column} ({direction})" : "Ordenar lista por {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista no se renderiza completa por razones de rendimiento. Los archivos serán renderizados mientras ud. navegue por la lista.",
"Search for an account" : "Buscar una cuenta",
"Choose" : "Selecciona",
diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json
index 96c2d2c959e..a220c64b0f1 100644
--- a/apps/files/l10n/es.json
+++ b/apps/files/l10n/es.json
@@ -169,31 +169,34 @@
"File Management" : "Gestión de archivos",
"Reload current directory" : "Recargar directorio actual",
"Go to the \"{dir}\" directory" : "Ir al directorio \"{dir}\"",
+ "Drag and drop files here to upload" : "Arrastre y suelte archivos aquí para subirlos",
+ "Upload successful" : "Subida exitosa",
+ "\"{displayName}\" action executed successfully" : "la acción \"{displayName}\" se ejecutó exitósamente",
+ "\"{displayName}\" action failed" : "la acción \"{displayName}\" falló",
"Select the row for {displayName}" : "Seleccione la fila para {displayName}",
"Rename file" : "Renombrar archivo",
- "A long time ago" : "Hace mucho tiempo",
- "This node is unavailable" : "Este nodo no está disponible",
- "Download file {name}" : "Descargar archivo {name}",
"File name" : "Nombre del archivo",
"Folder name" : "Nombre de la carpeta",
- "\"{displayName}\" action executed successfully" : "la acción \"{displayName}\" se ejecutó exitósamente",
- "\"{displayName}\" action failed" : "la acción \"{displayName}\" falló",
+ "This node is unavailable" : "Este nodo no está disponible",
+ "Download file {name}" : "Descargar archivo {name}",
"\"{name}\" is not an allowed filetype." : "\" {name}\" no es un tipo de archivo permitido.",
"{newName} already exists." : "{newName} ya existe.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\" no está permitido dentro del nombre de un archivo.",
"Name cannot be empty" : "El nombre no puede estar vacío",
"Another entry with the same name already exists" : "Ya existe otra entrada con el mismo nombre",
"Renamed \"{oldName}\" to \"{newName}\"" : "Renombrado \"{oldName}\" a \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "No se ha podido renombrar \"{oldName}\", ya no existe.",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "El nombre \"{newName}\" ya está en uso en la carpeta \"{dir}\". Por favor, escoja un nombre diferente.",
"Could not rename \"{oldName}\"" : "No se ha podido renombrar \"{oldName}\"",
+ "A long time ago" : "Hace mucho tiempo",
+ "Could not copy {file}. {message}" : "No se pudo copiar {file}. {message}",
+ "Could not move {file}. {message}" : "No se pudo mover {file}. {message}",
"Total rows summary" : "Resumen de filas totales",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" fallo en algunos elementos",
- "\"{displayName}\" batch action executed successfully" : "la acción en lotes \"{displayName}\" se ejecutó exitósamente",
- "ascending" : "ascendente",
- "descending" : "descendente",
- "Sort list by {column} ({direction})" : "Ordenar lista por {column} ({direction})",
"Select all" : "Seleccionar todo",
"Unselect all" : "Desmarrcar todos",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" fallo en algunos elementos",
+ "\"{displayName}\" batch action executed successfully" : "la acción en lotes \"{displayName}\" se ejecutó exitósamente",
+ "Sort list by {column}" : "Ordenar lista por {column}",
"List of files and folders." : "Lista de archivos y carpetas.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Esta lista no se muestra completamente por motivos de rendimiento. Los archivos se mostrarán a medida que navega por la lista.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} y {summaryFolder}",
@@ -224,6 +227,7 @@
"Share" : "Compartir",
"Shared by link" : "Compartido por enlace",
"Shared" : "Compartido",
+ "Switch to list view" : "Cambiar a vista de lista",
"Open the files app settings" : "Abrir la configuración de la app Archivos",
"Files settings" : "Configuración de archivos",
"File cannot be accessed" : "El archivo no puede ser accesado",
@@ -247,16 +251,28 @@
"Blank" : "Vacío",
"Unable to create new file from template" : "No se ha podido crear un nuevo archivo desde la plantilla",
"Delete permanently" : "Eliminar de forma definitiva",
+ "Destination is not a folder" : "El destino no es una carpeta",
+ "This file/folder is already in that directory" : "Este archivo/carpeta ya está en ese directorio",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "No puede mover un archivo/carpeta a sí mismo o a una sub-carpeta de sí mismo",
+ "A file or folder with that name already exists in this folder" : "Un archivo o carpeta con ese nombre ya existe en esta carpeta",
+ "The files is locked" : "El archivo está bloqueado",
+ "The file does not exist anymore" : "El archivo ya no existe",
+ "Chose destination" : "Seleccione el destino",
"Copy to {target}" : "Copiar a {target}",
"Move to {target}" : "Mover a {target}",
+ "Cancelled move or copy operation" : "Se canceló la operación de mover o copiar",
"Open folder {displayName}" : "Abrir carpeta {displayName}",
"Open in Files" : "Abrir en Archivos",
"Open details" : "Abrir detalles",
- "Created new folder \"{name}\"" : "Se creó la carpeta nueva \"{name}\"",
- "Set up templates folder" : "Configura una carpeta para plantillas",
- "Templates" : "Plantillas",
"Create new templates folder" : "Crear nueva carpeta de plantillas",
+ "Templates" : "Plantillas",
"Unable to initialize the templates directory" : "No se ha podido iniciar la carpeta de plantillas",
+ "Created new folder \"{name}\"" : "Se creó la carpeta nueva \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} carpeta","{folderCount} carpetas","{folderCount} carpetas"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} archivo","{fileCount} archivos","{fileCount} archivos"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 archivo y {folderCount} carpeta","1 archivo y {folderCount} carpetas","1 archivo y {folderCount} carpetas"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} archivo y 1 carpeta","{fileCount} archivos y 1 carpeta","{fileCount} archivos y 1 carpeta"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} archivos y {folderCount} carpetas",
"List of favorites files and folders." : "Lista de archivos y carpetas favoritos.",
"No favorites yet" : "Aún no hay favoritos",
"Files and folders you mark as favorite will show up here" : "Aquí aparecerán los archivos y carpetas que has marcado como favoritos",
@@ -276,6 +292,7 @@
"Unlimited" : "Ilimitado",
"Search users" : "Buscar usuarios",
"Cancel" : "Cancelar",
+ "Set up templates folder" : "Configura una carpeta para plantillas",
"%s used" : "usado %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s de %2$s usados",
@@ -289,6 +306,9 @@
"This file has the tag {tag}" : "Este archivo tiene la etiqueta {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Este archivo tiene las etiquetas {firstTags} y {lastTag}",
"Open folder {name}" : "Abrir carpeta {name}",
+ "ascending" : "ascendente",
+ "descending" : "descendente",
+ "Sort list by {column} ({direction})" : "Ordenar lista por {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista no se renderiza completa por razones de rendimiento. Los archivos serán renderizados mientras ud. navegue por la lista.",
"Search for an account" : "Buscar una cuenta",
"Choose" : "Selecciona",
diff --git a/apps/files/l10n/es_EC.js b/apps/files/l10n/es_EC.js
index 271c16ba8e7..89f18ab7b50 100644
--- a/apps/files/l10n/es_EC.js
+++ b/apps/files/l10n/es_EC.js
@@ -168,14 +168,13 @@ OC.L10N.register(
"File Management" : "Gestión de archivos.",
"Reload current directory" : "Recargar directorio actual.",
"Go to the \"{dir}\" directory" : "Ir al directorio \"{dir}\".",
+ "\"{displayName}\" action executed successfully" : "La acción \"{displayName}\" se ejecutó correctamente.",
+ "\"{displayName}\" action failed" : "La acción \"{displayName}\" falló.",
"Select the row for {displayName}" : "Seleccionar la fila para {displayName}.",
"Rename file" : "Renombrar archivo.",
- "A long time ago" : "Hace mucho tiempo.",
- "Download file {name}" : "Descargar archivo {name}.",
"File name" : "Nombre de archivo.",
"Folder name" : "Nombre de la carpeta",
- "\"{displayName}\" action executed successfully" : "La acción \"{displayName}\" se ejecutó correctamente.",
- "\"{displayName}\" action failed" : "La acción \"{displayName}\" falló.",
+ "Download file {name}" : "Descargar archivo {name}.",
"\"{name}\" is not an allowed filetype." : "\"{name}\" no es un tipo de archivo permitido.",
"{newName} already exists." : "{newName} ya existe.",
"Name cannot be empty" : "El nombre no puede estar en blanco",
@@ -183,14 +182,12 @@ OC.L10N.register(
"Renamed \"{oldName}\" to \"{newName}\"" : "Cambiaste el nombre de \"{oldName}\" a \"{newName}\".",
"Could not rename \"{oldName}\", it does not exist any more" : "No se pudo cambiar el nombre de \"{oldName}\", ya no existe.",
"Could not rename \"{oldName}\"" : "No se pudo cambiar el nombre de \"{oldName}\".",
+ "A long time ago" : "Hace mucho tiempo.",
"Total rows summary" : "Resumen total de filas.",
- "\"{displayName}\" failed on some elements " : "La acción \"{displayName}\" falló en algunos elementos.",
- "\"{displayName}\" batch action executed successfully" : "La acción en lote \"{displayName}\" se ejecutó correctamente.",
- "ascending" : "ascendente",
- "descending" : "descendente",
- "Sort list by {column} ({direction})" : "Ordenar lista por {column} ({direction}).",
"Select all" : "Seleccionar todo",
"Unselect all" : "Desmarcar todo.",
+ "\"{displayName}\" failed on some elements " : "La acción \"{displayName}\" falló en algunos elementos.",
+ "\"{displayName}\" batch action executed successfully" : "La acción en lote \"{displayName}\" se ejecutó correctamente.",
"List of files and folders." : "Lista de archivos y carpetas. ",
"Storage informations" : "Información de almacenamiento.",
"{usedQuotaByte} used" : "{usedQuotaByte} usados.",
@@ -215,6 +212,7 @@ OC.L10N.register(
"Go back" : "Regresar",
"Shared by link" : "Compartido por liga",
"Shared" : "Compartido",
+ "Switch to list view" : "Cambiar a vista de lista",
"Open the files app settings" : "Abrir la configuración de la aplicación de archivos.",
"Files settings" : "Configuración de archivos.",
"File cannot be accessed" : "No se puede acceder al archivo.",
@@ -240,9 +238,8 @@ OC.L10N.register(
"Delete permanently" : "Borrar permanentemente",
"Open folder {displayName}" : "Abrir carpeta {displayName}.",
"Open details" : "Abrir detalles.",
- "Set up templates folder" : "Configurar carpeta de plantillas.",
- "Templates" : "Plantillas",
"Create new templates folder" : "Crear nueva carpeta de plantillas.",
+ "Templates" : "Plantillas",
"Unable to initialize the templates directory" : "No se pudo inicializar el directorio de plantillas.",
"List of favorites files and folders." : "Lista de archivos y carpetas favoritos.",
"No favorites yet" : "Aún no hay favoritos",
@@ -259,6 +256,7 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"Search users" : "Buscar usuarios.",
"Cancel" : "Cancelar",
+ "Set up templates folder" : "Configurar carpeta de plantillas.",
"%s used" : "%s usado",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s de %2$s usados",
@@ -272,6 +270,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Este archivo tiene la etiqueta {tag}.",
"This file has the tags {firstTags} and {lastTag}" : "Este archivo tiene las etiquetas {firstTags} y {lastTag}.",
"Open folder {name}" : "Abrir carpeta {name}",
+ "ascending" : "ascendente",
+ "descending" : "descendente",
+ "Sort list by {column} ({direction})" : "Ordenar lista por {column} ({direction}).",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista no se muestra completamente por motivos de rendimiento. Los archivos se mostrarán a medida que navegas por la lista.",
"Search for an account" : "Buscar una cuenta",
"Choose" : "Seleccionar",
diff --git a/apps/files/l10n/es_EC.json b/apps/files/l10n/es_EC.json
index 9cb792e487b..a3835d3fcb4 100644
--- a/apps/files/l10n/es_EC.json
+++ b/apps/files/l10n/es_EC.json
@@ -166,14 +166,13 @@
"File Management" : "Gestión de archivos.",
"Reload current directory" : "Recargar directorio actual.",
"Go to the \"{dir}\" directory" : "Ir al directorio \"{dir}\".",
+ "\"{displayName}\" action executed successfully" : "La acción \"{displayName}\" se ejecutó correctamente.",
+ "\"{displayName}\" action failed" : "La acción \"{displayName}\" falló.",
"Select the row for {displayName}" : "Seleccionar la fila para {displayName}.",
"Rename file" : "Renombrar archivo.",
- "A long time ago" : "Hace mucho tiempo.",
- "Download file {name}" : "Descargar archivo {name}.",
"File name" : "Nombre de archivo.",
"Folder name" : "Nombre de la carpeta",
- "\"{displayName}\" action executed successfully" : "La acción \"{displayName}\" se ejecutó correctamente.",
- "\"{displayName}\" action failed" : "La acción \"{displayName}\" falló.",
+ "Download file {name}" : "Descargar archivo {name}.",
"\"{name}\" is not an allowed filetype." : "\"{name}\" no es un tipo de archivo permitido.",
"{newName} already exists." : "{newName} ya existe.",
"Name cannot be empty" : "El nombre no puede estar en blanco",
@@ -181,14 +180,12 @@
"Renamed \"{oldName}\" to \"{newName}\"" : "Cambiaste el nombre de \"{oldName}\" a \"{newName}\".",
"Could not rename \"{oldName}\", it does not exist any more" : "No se pudo cambiar el nombre de \"{oldName}\", ya no existe.",
"Could not rename \"{oldName}\"" : "No se pudo cambiar el nombre de \"{oldName}\".",
+ "A long time ago" : "Hace mucho tiempo.",
"Total rows summary" : "Resumen total de filas.",
- "\"{displayName}\" failed on some elements " : "La acción \"{displayName}\" falló en algunos elementos.",
- "\"{displayName}\" batch action executed successfully" : "La acción en lote \"{displayName}\" se ejecutó correctamente.",
- "ascending" : "ascendente",
- "descending" : "descendente",
- "Sort list by {column} ({direction})" : "Ordenar lista por {column} ({direction}).",
"Select all" : "Seleccionar todo",
"Unselect all" : "Desmarcar todo.",
+ "\"{displayName}\" failed on some elements " : "La acción \"{displayName}\" falló en algunos elementos.",
+ "\"{displayName}\" batch action executed successfully" : "La acción en lote \"{displayName}\" se ejecutó correctamente.",
"List of files and folders." : "Lista de archivos y carpetas. ",
"Storage informations" : "Información de almacenamiento.",
"{usedQuotaByte} used" : "{usedQuotaByte} usados.",
@@ -213,6 +210,7 @@
"Go back" : "Regresar",
"Shared by link" : "Compartido por liga",
"Shared" : "Compartido",
+ "Switch to list view" : "Cambiar a vista de lista",
"Open the files app settings" : "Abrir la configuración de la aplicación de archivos.",
"Files settings" : "Configuración de archivos.",
"File cannot be accessed" : "No se puede acceder al archivo.",
@@ -238,9 +236,8 @@
"Delete permanently" : "Borrar permanentemente",
"Open folder {displayName}" : "Abrir carpeta {displayName}.",
"Open details" : "Abrir detalles.",
- "Set up templates folder" : "Configurar carpeta de plantillas.",
- "Templates" : "Plantillas",
"Create new templates folder" : "Crear nueva carpeta de plantillas.",
+ "Templates" : "Plantillas",
"Unable to initialize the templates directory" : "No se pudo inicializar el directorio de plantillas.",
"List of favorites files and folders." : "Lista de archivos y carpetas favoritos.",
"No favorites yet" : "Aún no hay favoritos",
@@ -257,6 +254,7 @@
"Unlimited" : "Ilimitado",
"Search users" : "Buscar usuarios.",
"Cancel" : "Cancelar",
+ "Set up templates folder" : "Configurar carpeta de plantillas.",
"%s used" : "%s usado",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s de %2$s usados",
@@ -270,6 +268,9 @@
"This file has the tag {tag}" : "Este archivo tiene la etiqueta {tag}.",
"This file has the tags {firstTags} and {lastTag}" : "Este archivo tiene las etiquetas {firstTags} y {lastTag}.",
"Open folder {name}" : "Abrir carpeta {name}",
+ "ascending" : "ascendente",
+ "descending" : "descendente",
+ "Sort list by {column} ({direction})" : "Ordenar lista por {column} ({direction}).",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista no se muestra completamente por motivos de rendimiento. Los archivos se mostrarán a medida que navegas por la lista.",
"Search for an account" : "Buscar una cuenta",
"Choose" : "Seleccionar",
diff --git a/apps/files/l10n/es_MX.js b/apps/files/l10n/es_MX.js
index 124405a2f50..45b68f0b718 100644
--- a/apps/files/l10n/es_MX.js
+++ b/apps/files/l10n/es_MX.js
@@ -208,7 +208,6 @@ OC.L10N.register(
"Blank" : "Vacío",
"Unable to create new file from template" : "No se ha podido crear un nuevo archivo desde la plantilla",
"Delete permanently" : "Borrar permanentemente",
- "Set up templates folder" : "Configura una carpeta para plantillas",
"Templates" : "Plantillas",
"Unable to initialize the templates directory" : "No se ha podido iniciar la carpeta de plantillas",
"No favorites yet" : "Aún no hay favoritos",
@@ -225,6 +224,7 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"Search users" : "Buscar usuarios",
"Cancel" : "Cancelar",
+ "Set up templates folder" : "Configura una carpeta para plantillas",
"%s used" : "%s usado",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s de %2$s usados",
diff --git a/apps/files/l10n/es_MX.json b/apps/files/l10n/es_MX.json
index 62540eee9cd..54557382128 100644
--- a/apps/files/l10n/es_MX.json
+++ b/apps/files/l10n/es_MX.json
@@ -206,7 +206,6 @@
"Blank" : "Vacío",
"Unable to create new file from template" : "No se ha podido crear un nuevo archivo desde la plantilla",
"Delete permanently" : "Borrar permanentemente",
- "Set up templates folder" : "Configura una carpeta para plantillas",
"Templates" : "Plantillas",
"Unable to initialize the templates directory" : "No se ha podido iniciar la carpeta de plantillas",
"No favorites yet" : "Aún no hay favoritos",
@@ -223,6 +222,7 @@
"Unlimited" : "Ilimitado",
"Search users" : "Buscar usuarios",
"Cancel" : "Cancelar",
+ "Set up templates folder" : "Configura una carpeta para plantillas",
"%s used" : "%s usado",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s de %2$s usados",
diff --git a/apps/files/l10n/et_EE.js b/apps/files/l10n/et_EE.js
index 808822947f9..0663244627c 100644
--- a/apps/files/l10n/et_EE.js
+++ b/apps/files/l10n/et_EE.js
@@ -148,8 +148,8 @@ OC.L10N.register(
"File Management" : "Failihaldus",
"Reload current directory" : "Värskenda jooksvat kataloogi",
"Go to the \"{dir}\" directory" : "Mine kataloogi \"{dir}\"",
- "Download file {name}" : "Laadi fail {name} alla",
"Folder name" : "Kausta nimi",
+ "Download file {name}" : "Laadi fail {name} alla",
"Select all" : "Vali kõik",
"File not found" : "Faili ei leitud",
"{usedQuotaByte} used" : "{usedQuotaByte} kasutusel",
@@ -177,9 +177,8 @@ OC.L10N.register(
"Unable to create new file from template" : "Faili loomine mallist ebaõnnestus",
"Delete permanently" : "Kustuta jäädavalt",
"Open folder {displayName}" : "Ava kaust {displayName}",
- "Set up templates folder" : "Seadista mallide kaust",
- "Templates" : "Mallid",
"Create new templates folder" : "Loo uus mallide kaust",
+ "Templates" : "Mallid",
"Unable to initialize the templates directory" : "Mallide kausta loomine ebaõnnestus",
"No favorites yet" : "Lemmikuid veel pole",
"Files and folders you mark as favorite will show up here" : "Siin kuvatakse faile ja kaustasid, mille oled märkinud lemmikuteks",
@@ -194,6 +193,7 @@ OC.L10N.register(
"Unlimited" : "Piiramatult",
"Search users" : "Otsi kasutajaid",
"Cancel" : "Loobu",
+ "Set up templates folder" : "Seadista mallide kaust",
"%s used" : "%s kasutusel",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s / %2$s kasutusel",
diff --git a/apps/files/l10n/et_EE.json b/apps/files/l10n/et_EE.json
index 80654e27afa..4bd311fc87b 100644
--- a/apps/files/l10n/et_EE.json
+++ b/apps/files/l10n/et_EE.json
@@ -146,8 +146,8 @@
"File Management" : "Failihaldus",
"Reload current directory" : "Värskenda jooksvat kataloogi",
"Go to the \"{dir}\" directory" : "Mine kataloogi \"{dir}\"",
- "Download file {name}" : "Laadi fail {name} alla",
"Folder name" : "Kausta nimi",
+ "Download file {name}" : "Laadi fail {name} alla",
"Select all" : "Vali kõik",
"File not found" : "Faili ei leitud",
"{usedQuotaByte} used" : "{usedQuotaByte} kasutusel",
@@ -175,9 +175,8 @@
"Unable to create new file from template" : "Faili loomine mallist ebaõnnestus",
"Delete permanently" : "Kustuta jäädavalt",
"Open folder {displayName}" : "Ava kaust {displayName}",
- "Set up templates folder" : "Seadista mallide kaust",
- "Templates" : "Mallid",
"Create new templates folder" : "Loo uus mallide kaust",
+ "Templates" : "Mallid",
"Unable to initialize the templates directory" : "Mallide kausta loomine ebaõnnestus",
"No favorites yet" : "Lemmikuid veel pole",
"Files and folders you mark as favorite will show up here" : "Siin kuvatakse faile ja kaustasid, mille oled märkinud lemmikuteks",
@@ -192,6 +191,7 @@
"Unlimited" : "Piiramatult",
"Search users" : "Otsi kasutajaid",
"Cancel" : "Loobu",
+ "Set up templates folder" : "Seadista mallide kaust",
"%s used" : "%s kasutusel",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s / %2$s kasutusel",
diff --git a/apps/files/l10n/eu.js b/apps/files/l10n/eu.js
index 10aa8f6aa79..c820d7ece77 100644
--- a/apps/files/l10n/eu.js
+++ b/apps/files/l10n/eu.js
@@ -12,20 +12,20 @@ OC.L10N.register(
"Close" : "Itxi",
"Could not create folder \"{dir}\"" : "Ezin izan da \"{dir}\" karpeta sortu",
"This will stop your current uploads." : "Honek martxan dauzkazun igoerak geldituko ditu.",
- "Upload cancelled." : "Karga bertan behera utzi da.",
+ "Upload cancelled." : "Igotzea bertan behera utzi da.",
"Processing files …" : "Fitxategiak prozesatzen...",
"…" : "…",
- "Unable to upload {filename} as it is a directory or has 0 bytes" : "Ezin da {filename} kargatu karpeta bat delako edo 0 byte dituelako",
- "Not enough free space, you are uploading {size1} but only {size2} is left" : "Ez dago leku nahikorik, {size1} kargatzen ari zara baina {size2} daude libre soilik",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "Ezin da {filename} igo karpeta bat delako edo 0 byte dituelako",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "Ez dago leku nahikorik, {size1} igotzen ari zara baina {size2} soilik daude libre",
"Target folder \"{dir}\" does not exist any more" : "\"{dir}\" helburuko karpeta ez da existitzen jadanik",
"Not enough free space" : "Ez dago leku libre nahikorik",
"An unknown error has occurred" : "Errore ezezagun bat gertatu da",
- "File could not be uploaded" : "Fitxategia ezin izan da kargatu",
- "Uploading …" : "Kargatzen...",
+ "File could not be uploaded" : "Fitxategia ezin izan da igo",
+ "Uploading …" : "Igotzen...",
"{remainingTime} ({currentNumber}/{total})" : "{remainingTime} ({currentNumber}/{total})",
- "Uploading … ({currentNumber}/{total})" : "Kargatzen … ({currentNumber}/{total})",
+ "Uploading … ({currentNumber}/{total})" : "Igotzen … ({currentNumber}/{total})",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})",
- "Uploading that item is not supported" : "Ez da onartzen elementu hori kargatzea",
+ "Uploading that item is not supported" : "Ez da onartzen elementu hori igotzea",
"Target folder does not exist any more" : "Helburuko karpeta ez da existitzen jadanik",
"Operation is blocked by access control" : "Sarbide kontrolak eragiketa blokeatu du",
"Error when assembling chunks, status code {status}" : "Errorea zatiak elkartzean, egoera kodea {status}",
@@ -79,8 +79,8 @@ OC.L10N.register(
"_%n file_::_%n files_" : ["Fitxategi %n","%n fitxategi"],
"{dirs} and {files}" : "{dirs} eta {files}",
"_including %n hidden_::_including %n hidden_" : ["ezkutuko %n barne","ezkutuko %n barne"],
- "You do not have permission to upload or create files here" : "Ez duzu hemen fitxategiak kargatzeko edo sortzeko baimenik",
- "_Uploading %n file_::_Uploading %n files_" : ["Fitxategi %n kargatzen","%n fitxategi kargatzen"],
+ "You do not have permission to upload or create files here" : "Ez duzu hemen fitxategiak igotzeko edo sortzeko baimenik",
+ "_Uploading %n file_::_Uploading %n files_" : ["Fitxategi %n kargatzen","%n fitxategi igotzen"],
"New" : "Berria",
"New file/folder menu" : "Fitxategi/karpeta berri menua",
"Select file range" : "Hautatu fitxategi-barrutia",
@@ -109,7 +109,7 @@ OC.L10N.register(
"Copy direct link (only works for users who have access to this file/folder)" : "Kopiatu esteka zuzena (fitxategi/karpeta honetara sarbidea duten erabiltzaileentzat bakarrik balio du)",
"New folder" : "Karpeta berria",
"Create new folder" : "Sortu karpeta berria",
- "Upload file" : "Kargatu fitxategia",
+ "Upload file" : "Igo fitxategia",
"Recent" : "Azkenak",
"Not favorited" : "Ez da gogokoa",
"Remove from favorites" : "Kendu gogokoetatik",
@@ -156,7 +156,7 @@ OC.L10N.register(
"A file has been added to or removed from your <strong>favorites</strong>" : "Fitxategi bat gehitu edo kendu da zure <strong>gogokoetatik</strong>",
"A file or folder has been <strong>changed</strong>" : "Fitxategi edo karpeta bat <strong>aldatu da</strong>",
"A favorite file or folder has been <strong>changed</strong>" : "Gogoko fitxategi edo karpeta bat <strong>aldatu</strong> egin da.",
- "Upload (max. %s)" : "Kargatu (%s gehienez)",
+ "Upload (max. %s)" : "Igo (%s gehienez)",
"Accept" : "Onartu",
"Reject" : "Ukatu",
"Incoming ownership transfer from {user}" : "{user}(r)en jabetza-transferentzia",
@@ -171,33 +171,39 @@ OC.L10N.register(
"File Management" : "Fitxategi-kudeaketa",
"Reload current directory" : "Birkargatu uneko direktorioa",
"Go to the \"{dir}\" directory" : "Joan \"{dir}\" direktoriora",
+ "Drag and drop files here to upload" : "Jaregin fitxategiak hemen igotzeko",
+ "Upload successful" : "Igoera ongi burutu da",
+ "\"{displayName}\" action executed successfully" : "\"{displayName}\" ekintza behar bezala exekutatu da",
+ "\"{displayName}\" action failed" : "\"{displayName}\" ekintzak huts egin du",
"Select the row for {displayName}" : "Hautatu {displayName} errenkada",
"Rename file" : "Berrizendatu fitxategia",
- "A long time ago" : "Orain dela denbora asko",
- "This node is unavailable" : "Nodo hori ez dago erabilgarri",
- "Download file {name}" : "Deskargatu {name} fitxategia ",
"File name" : "Fitxategi izena",
"Folder name" : "Karpetaren izena",
- "\"{displayName}\" action executed successfully" : "\"{displayName}\" ekintza behar bezala exekutatu da",
- "\"{displayName}\" action failed" : "\"{displayName}\" ekintzak huts egin du",
+ "This node is unavailable" : "Nodo hori ez dago erabilgarri",
+ "Download file {name}" : "Deskargatu {name} fitxategia ",
"\"{name}\" is not an allowed filetype." : "\"{name}\" fitxategi-mota ez da onartzen.",
"{newName} already exists." : "{newName} badago aurretik.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\" ez da onartze fitxategi-izenen barnean.",
"Name cannot be empty" : "Izena ezin da hutsik egon",
"Another entry with the same name already exists" : "Badago izen hori duen beste sarrera bat",
"Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" \"{newName}\"(e)ra berrizendatu da.",
"Could not rename \"{oldName}\", it does not exist any more" : "Ezin izan da \"{oldName}\" berrizendatu, ez da existitzen dagoeneko",
+ "The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{newName}\" izena \"{dir}\" karpetan dagoeneko erabiltzen da. Mesedez aukeratu beste izen bat.",
"Could not rename \"{oldName}\"" : "Ezin izan da \"{oldName}\" berrizendatu ",
+ "A long time ago" : "Orain dela denbora asko",
+ "Could not copy {file}. {message}" : "Ezin izan da {file} kopiatu. {message}",
+ "Could not move {file}. {message}" : "Ezin izan da {file} mugitu. {message}",
"Total rows summary" : "Errenkaden guztirako laburpena",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\"-k huts egin du elementu batzuetan",
- "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" multzoko ekintza behar bezala exekutatu da",
- "ascending" : "goranzkoa",
- "descending" : "beheranzkoa",
- "Sort list by {column} ({direction})" : "Ordenatu zerrenda {zutabea} ({norabidea}) arabera",
"Select all" : "Hautatu dena",
"Unselect all" : "Desautatu dena",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\"-k huts egin du elementu batzuetan",
+ "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" multzoko ekintza behar bezala exekutatu da",
"List of files and folders." : "Fitxategi eta karpeten zerrenda.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Zerrenda hau ez da guztiz ikusten errendimendu arrazoiengatik. Fitxategiak zerrendan zehar nabigatzen duten heinean bistaratuko dira.",
+ "{summaryFile} and {summaryFolder}" : "{summaryFile} eta {summaryFolder}",
"File not found" : "Ez da fitxategia aurkitu",
+ "_{count} file_::_{count} files_" : ["fitxategi {count}","{count} fitxategi"],
+ "_{count} folder_::_{count} folders_" : ["karpeta {count}","{count} karpeta"],
"Storage informations" : "Biltegiaren informazioak",
"{usedQuotaByte} used" : "{usedQuotaByte} erabilita",
"{relative}% used" : "%{relative} erabilita",
@@ -216,12 +222,13 @@ OC.L10N.register(
"Select file or folder to link to" : "Hautatu estekatzeko fitxategia edo karpeta",
"Loading current folder" : "Uneko karpeta kargatzen",
"No files in here" : "Ez dago fitxategirik hemen",
- "Upload some content or sync with your devices!" : "Kargatu edukiren bat edo sinkronizatu zure gailuekin!",
+ "Upload some content or sync with your devices!" : "Igo edukiren bat edo sinkronizatu zure gailuekin!",
"Go to the previous folder" : "Joan aurreko karpetara",
"Go back" : "Atzera",
"Share" : "Partekatu",
"Shared by link" : "Esteka bidez partekatuta",
"Shared" : "Partekatuta",
+ "Switch to list view" : "Aldatu zerrenda ikuspegira",
"Open the files app settings" : "Ireki Fitxategiak aplikazioaren ezarpenak",
"Files settings" : "FItxategien ezarpenak",
"File cannot be accessed" : "Ezin da fitxategia atzitu",
@@ -245,15 +252,28 @@ OC.L10N.register(
"Blank" : "Hutsik",
"Unable to create new file from template" : "Ezin da fitxategi berria sortu txantiloitik",
"Delete permanently" : "Ezabatu betirako",
+ "Destination is not a folder" : "Helburua ez da karpeta bat",
+ "This file/folder is already in that directory" : "Fitxategi/karpeta hau dagoeneko karpeta horretan dago",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Ezin duzu fitxategi/karpeta bat berera edo bere azpikarpeta batera mugitu",
+ "A file or folder with that name already exists in this folder" : "Izen hori duen fitxategi edo karpeta bat dago karpena honetan",
+ "The files is locked" : "Fixategiak blokeatuta dago",
+ "The file does not exist anymore" : "Fitxategia ez da existizen dagoeneko",
+ "Chose destination" : "Aukeratu helburua",
"Copy to {target}" : "Kopiatu hona: {target}",
"Move to {target}" : "Mugitu hona: {target}",
+ "Cancelled move or copy operation" : "Mugitze edo kopiatze operazioa utzi da",
"Open folder {displayName}" : "Ireki {displayName} karpeta",
"Open in Files" : "Ireki Fitxategiak aplikazioan",
"Open details" : "Ireki xehetasunak",
- "Set up templates folder" : "Konfiguratu txantiloien karpeta",
- "Templates" : "Txantiloiak",
"Create new templates folder" : "Sortu txantiloi karpeta berria",
+ "Templates" : "Txantiloiak",
"Unable to initialize the templates directory" : "Ezin da txantiloien direktorioa hasieratu",
+ "Created new folder \"{name}\"" : "\"{name}\" karpeta berria sortu da",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["Karpeta {folderCount}","{folderCount} karpeta"],
+ "_{fileCount} file_::_{fileCount} files_" : ["Fitxategi {fileCount}","{fileCount} fitxategi"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["Fitxategi 1 eta karpeta {folderCount}","Fitxategi 1 eta {folderCount} karpeta"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["Fitxategi {fileCount} eta karpeta 1","{fileCount} fitxategi eta karpeta 1"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} fitxategi eta {folderCount} fitxategi",
"List of favorites files and folders." : "Fitxategi eta karpeta gogokoen zerrenda.",
"No favorites yet" : "Gogokorik ez oraindik",
"Files and folders you mark as favorite will show up here" : "Gogokotzat markatutako fitxategi eta karpetak hemen agertuko dira",
@@ -264,8 +284,8 @@ OC.L10N.register(
"Files and folders you recently modified will show up here." : "Azkenaldian aldatu dituzun fitxategi eta karpetak hemen agertuko dira.",
"Toggle %1$s sublist" : "Txandakatu %1$sazpizerrenda",
"No entries found in this folder" : "Ez da sarrerarik aurkitu karpeta honetan",
- "Upload too large" : "Kargatzea handiegia da",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Kargatzen saiatzen ari zaren fitxategiek zerbitzari honek onartzen duen gehienezko tamaina gainditzen dute.",
+ "Upload too large" : "Igotzekoa handiegia da",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Igotzen saiatzen ari zaren fitxategiek zerbitzari honek onartzen duen gehienezko tamaina gainditzen dute.",
"Text file" : "Testu-fitxategia",
"New text file.txt" : "Testu-fitxategi berria.txt",
"Storage invalid" : "Biltegi baliogabea",
@@ -273,6 +293,7 @@ OC.L10N.register(
"Unlimited" : "Mugarik gabe",
"Search users" : "Bilatu erabiltzaileak",
"Cancel" : "Utzi",
+ "Set up templates folder" : "Konfiguratu txantiloien karpeta",
"%s used" : "%s erabilita",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s / %2$s erabilita",
@@ -286,6 +307,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Fitxategi honek {tag} etiketa dauka",
"This file has the tags {firstTags} and {lastTag}" : "Fitxategi honek {firstTags} eta {lastTag} etiketak ditu",
"Open folder {name}" : "Ireki {name} karpeta",
+ "ascending" : "goranzkoa",
+ "descending" : "beheranzkoa",
+ "Sort list by {column} ({direction})" : "Ordenatu zerrenda {zutabea} ({norabidea}) arabera",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Zerrenda hau ez da guztiz ikusten errendimendu arrazoiengatik. Fitxategiak zerrendan zehar nabigatzen duten heinean bistaratuko dira.",
"Search for an account" : "Bilatu kontu bat",
"Choose" : "Aukeratu",
diff --git a/apps/files/l10n/eu.json b/apps/files/l10n/eu.json
index 91e2803415b..12ddb8cfb84 100644
--- a/apps/files/l10n/eu.json
+++ b/apps/files/l10n/eu.json
@@ -10,20 +10,20 @@
"Close" : "Itxi",
"Could not create folder \"{dir}\"" : "Ezin izan da \"{dir}\" karpeta sortu",
"This will stop your current uploads." : "Honek martxan dauzkazun igoerak geldituko ditu.",
- "Upload cancelled." : "Karga bertan behera utzi da.",
+ "Upload cancelled." : "Igotzea bertan behera utzi da.",
"Processing files …" : "Fitxategiak prozesatzen...",
"…" : "…",
- "Unable to upload {filename} as it is a directory or has 0 bytes" : "Ezin da {filename} kargatu karpeta bat delako edo 0 byte dituelako",
- "Not enough free space, you are uploading {size1} but only {size2} is left" : "Ez dago leku nahikorik, {size1} kargatzen ari zara baina {size2} daude libre soilik",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "Ezin da {filename} igo karpeta bat delako edo 0 byte dituelako",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "Ez dago leku nahikorik, {size1} igotzen ari zara baina {size2} soilik daude libre",
"Target folder \"{dir}\" does not exist any more" : "\"{dir}\" helburuko karpeta ez da existitzen jadanik",
"Not enough free space" : "Ez dago leku libre nahikorik",
"An unknown error has occurred" : "Errore ezezagun bat gertatu da",
- "File could not be uploaded" : "Fitxategia ezin izan da kargatu",
- "Uploading …" : "Kargatzen...",
+ "File could not be uploaded" : "Fitxategia ezin izan da igo",
+ "Uploading …" : "Igotzen...",
"{remainingTime} ({currentNumber}/{total})" : "{remainingTime} ({currentNumber}/{total})",
- "Uploading … ({currentNumber}/{total})" : "Kargatzen … ({currentNumber}/{total})",
+ "Uploading … ({currentNumber}/{total})" : "Igotzen … ({currentNumber}/{total})",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})",
- "Uploading that item is not supported" : "Ez da onartzen elementu hori kargatzea",
+ "Uploading that item is not supported" : "Ez da onartzen elementu hori igotzea",
"Target folder does not exist any more" : "Helburuko karpeta ez da existitzen jadanik",
"Operation is blocked by access control" : "Sarbide kontrolak eragiketa blokeatu du",
"Error when assembling chunks, status code {status}" : "Errorea zatiak elkartzean, egoera kodea {status}",
@@ -77,8 +77,8 @@
"_%n file_::_%n files_" : ["Fitxategi %n","%n fitxategi"],
"{dirs} and {files}" : "{dirs} eta {files}",
"_including %n hidden_::_including %n hidden_" : ["ezkutuko %n barne","ezkutuko %n barne"],
- "You do not have permission to upload or create files here" : "Ez duzu hemen fitxategiak kargatzeko edo sortzeko baimenik",
- "_Uploading %n file_::_Uploading %n files_" : ["Fitxategi %n kargatzen","%n fitxategi kargatzen"],
+ "You do not have permission to upload or create files here" : "Ez duzu hemen fitxategiak igotzeko edo sortzeko baimenik",
+ "_Uploading %n file_::_Uploading %n files_" : ["Fitxategi %n kargatzen","%n fitxategi igotzen"],
"New" : "Berria",
"New file/folder menu" : "Fitxategi/karpeta berri menua",
"Select file range" : "Hautatu fitxategi-barrutia",
@@ -107,7 +107,7 @@
"Copy direct link (only works for users who have access to this file/folder)" : "Kopiatu esteka zuzena (fitxategi/karpeta honetara sarbidea duten erabiltzaileentzat bakarrik balio du)",
"New folder" : "Karpeta berria",
"Create new folder" : "Sortu karpeta berria",
- "Upload file" : "Kargatu fitxategia",
+ "Upload file" : "Igo fitxategia",
"Recent" : "Azkenak",
"Not favorited" : "Ez da gogokoa",
"Remove from favorites" : "Kendu gogokoetatik",
@@ -154,7 +154,7 @@
"A file has been added to or removed from your <strong>favorites</strong>" : "Fitxategi bat gehitu edo kendu da zure <strong>gogokoetatik</strong>",
"A file or folder has been <strong>changed</strong>" : "Fitxategi edo karpeta bat <strong>aldatu da</strong>",
"A favorite file or folder has been <strong>changed</strong>" : "Gogoko fitxategi edo karpeta bat <strong>aldatu</strong> egin da.",
- "Upload (max. %s)" : "Kargatu (%s gehienez)",
+ "Upload (max. %s)" : "Igo (%s gehienez)",
"Accept" : "Onartu",
"Reject" : "Ukatu",
"Incoming ownership transfer from {user}" : "{user}(r)en jabetza-transferentzia",
@@ -169,33 +169,39 @@
"File Management" : "Fitxategi-kudeaketa",
"Reload current directory" : "Birkargatu uneko direktorioa",
"Go to the \"{dir}\" directory" : "Joan \"{dir}\" direktoriora",
+ "Drag and drop files here to upload" : "Jaregin fitxategiak hemen igotzeko",
+ "Upload successful" : "Igoera ongi burutu da",
+ "\"{displayName}\" action executed successfully" : "\"{displayName}\" ekintza behar bezala exekutatu da",
+ "\"{displayName}\" action failed" : "\"{displayName}\" ekintzak huts egin du",
"Select the row for {displayName}" : "Hautatu {displayName} errenkada",
"Rename file" : "Berrizendatu fitxategia",
- "A long time ago" : "Orain dela denbora asko",
- "This node is unavailable" : "Nodo hori ez dago erabilgarri",
- "Download file {name}" : "Deskargatu {name} fitxategia ",
"File name" : "Fitxategi izena",
"Folder name" : "Karpetaren izena",
- "\"{displayName}\" action executed successfully" : "\"{displayName}\" ekintza behar bezala exekutatu da",
- "\"{displayName}\" action failed" : "\"{displayName}\" ekintzak huts egin du",
+ "This node is unavailable" : "Nodo hori ez dago erabilgarri",
+ "Download file {name}" : "Deskargatu {name} fitxategia ",
"\"{name}\" is not an allowed filetype." : "\"{name}\" fitxategi-mota ez da onartzen.",
"{newName} already exists." : "{newName} badago aurretik.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\" ez da onartze fitxategi-izenen barnean.",
"Name cannot be empty" : "Izena ezin da hutsik egon",
"Another entry with the same name already exists" : "Badago izen hori duen beste sarrera bat",
"Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" \"{newName}\"(e)ra berrizendatu da.",
"Could not rename \"{oldName}\", it does not exist any more" : "Ezin izan da \"{oldName}\" berrizendatu, ez da existitzen dagoeneko",
+ "The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{newName}\" izena \"{dir}\" karpetan dagoeneko erabiltzen da. Mesedez aukeratu beste izen bat.",
"Could not rename \"{oldName}\"" : "Ezin izan da \"{oldName}\" berrizendatu ",
+ "A long time ago" : "Orain dela denbora asko",
+ "Could not copy {file}. {message}" : "Ezin izan da {file} kopiatu. {message}",
+ "Could not move {file}. {message}" : "Ezin izan da {file} mugitu. {message}",
"Total rows summary" : "Errenkaden guztirako laburpena",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\"-k huts egin du elementu batzuetan",
- "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" multzoko ekintza behar bezala exekutatu da",
- "ascending" : "goranzkoa",
- "descending" : "beheranzkoa",
- "Sort list by {column} ({direction})" : "Ordenatu zerrenda {zutabea} ({norabidea}) arabera",
"Select all" : "Hautatu dena",
"Unselect all" : "Desautatu dena",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\"-k huts egin du elementu batzuetan",
+ "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" multzoko ekintza behar bezala exekutatu da",
"List of files and folders." : "Fitxategi eta karpeten zerrenda.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Zerrenda hau ez da guztiz ikusten errendimendu arrazoiengatik. Fitxategiak zerrendan zehar nabigatzen duten heinean bistaratuko dira.",
+ "{summaryFile} and {summaryFolder}" : "{summaryFile} eta {summaryFolder}",
"File not found" : "Ez da fitxategia aurkitu",
+ "_{count} file_::_{count} files_" : ["fitxategi {count}","{count} fitxategi"],
+ "_{count} folder_::_{count} folders_" : ["karpeta {count}","{count} karpeta"],
"Storage informations" : "Biltegiaren informazioak",
"{usedQuotaByte} used" : "{usedQuotaByte} erabilita",
"{relative}% used" : "%{relative} erabilita",
@@ -214,12 +220,13 @@
"Select file or folder to link to" : "Hautatu estekatzeko fitxategia edo karpeta",
"Loading current folder" : "Uneko karpeta kargatzen",
"No files in here" : "Ez dago fitxategirik hemen",
- "Upload some content or sync with your devices!" : "Kargatu edukiren bat edo sinkronizatu zure gailuekin!",
+ "Upload some content or sync with your devices!" : "Igo edukiren bat edo sinkronizatu zure gailuekin!",
"Go to the previous folder" : "Joan aurreko karpetara",
"Go back" : "Atzera",
"Share" : "Partekatu",
"Shared by link" : "Esteka bidez partekatuta",
"Shared" : "Partekatuta",
+ "Switch to list view" : "Aldatu zerrenda ikuspegira",
"Open the files app settings" : "Ireki Fitxategiak aplikazioaren ezarpenak",
"Files settings" : "FItxategien ezarpenak",
"File cannot be accessed" : "Ezin da fitxategia atzitu",
@@ -243,15 +250,28 @@
"Blank" : "Hutsik",
"Unable to create new file from template" : "Ezin da fitxategi berria sortu txantiloitik",
"Delete permanently" : "Ezabatu betirako",
+ "Destination is not a folder" : "Helburua ez da karpeta bat",
+ "This file/folder is already in that directory" : "Fitxategi/karpeta hau dagoeneko karpeta horretan dago",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Ezin duzu fitxategi/karpeta bat berera edo bere azpikarpeta batera mugitu",
+ "A file or folder with that name already exists in this folder" : "Izen hori duen fitxategi edo karpeta bat dago karpena honetan",
+ "The files is locked" : "Fixategiak blokeatuta dago",
+ "The file does not exist anymore" : "Fitxategia ez da existizen dagoeneko",
+ "Chose destination" : "Aukeratu helburua",
"Copy to {target}" : "Kopiatu hona: {target}",
"Move to {target}" : "Mugitu hona: {target}",
+ "Cancelled move or copy operation" : "Mugitze edo kopiatze operazioa utzi da",
"Open folder {displayName}" : "Ireki {displayName} karpeta",
"Open in Files" : "Ireki Fitxategiak aplikazioan",
"Open details" : "Ireki xehetasunak",
- "Set up templates folder" : "Konfiguratu txantiloien karpeta",
- "Templates" : "Txantiloiak",
"Create new templates folder" : "Sortu txantiloi karpeta berria",
+ "Templates" : "Txantiloiak",
"Unable to initialize the templates directory" : "Ezin da txantiloien direktorioa hasieratu",
+ "Created new folder \"{name}\"" : "\"{name}\" karpeta berria sortu da",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["Karpeta {folderCount}","{folderCount} karpeta"],
+ "_{fileCount} file_::_{fileCount} files_" : ["Fitxategi {fileCount}","{fileCount} fitxategi"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["Fitxategi 1 eta karpeta {folderCount}","Fitxategi 1 eta {folderCount} karpeta"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["Fitxategi {fileCount} eta karpeta 1","{fileCount} fitxategi eta karpeta 1"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} fitxategi eta {folderCount} fitxategi",
"List of favorites files and folders." : "Fitxategi eta karpeta gogokoen zerrenda.",
"No favorites yet" : "Gogokorik ez oraindik",
"Files and folders you mark as favorite will show up here" : "Gogokotzat markatutako fitxategi eta karpetak hemen agertuko dira",
@@ -262,8 +282,8 @@
"Files and folders you recently modified will show up here." : "Azkenaldian aldatu dituzun fitxategi eta karpetak hemen agertuko dira.",
"Toggle %1$s sublist" : "Txandakatu %1$sazpizerrenda",
"No entries found in this folder" : "Ez da sarrerarik aurkitu karpeta honetan",
- "Upload too large" : "Kargatzea handiegia da",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Kargatzen saiatzen ari zaren fitxategiek zerbitzari honek onartzen duen gehienezko tamaina gainditzen dute.",
+ "Upload too large" : "Igotzekoa handiegia da",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Igotzen saiatzen ari zaren fitxategiek zerbitzari honek onartzen duen gehienezko tamaina gainditzen dute.",
"Text file" : "Testu-fitxategia",
"New text file.txt" : "Testu-fitxategi berria.txt",
"Storage invalid" : "Biltegi baliogabea",
@@ -271,6 +291,7 @@
"Unlimited" : "Mugarik gabe",
"Search users" : "Bilatu erabiltzaileak",
"Cancel" : "Utzi",
+ "Set up templates folder" : "Konfiguratu txantiloien karpeta",
"%s used" : "%s erabilita",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s / %2$s erabilita",
@@ -284,6 +305,9 @@
"This file has the tag {tag}" : "Fitxategi honek {tag} etiketa dauka",
"This file has the tags {firstTags} and {lastTag}" : "Fitxategi honek {firstTags} eta {lastTag} etiketak ditu",
"Open folder {name}" : "Ireki {name} karpeta",
+ "ascending" : "goranzkoa",
+ "descending" : "beheranzkoa",
+ "Sort list by {column} ({direction})" : "Ordenatu zerrenda {zutabea} ({norabidea}) arabera",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Zerrenda hau ez da guztiz ikusten errendimendu arrazoiengatik. Fitxategiak zerrendan zehar nabigatzen duten heinean bistaratuko dira.",
"Search for an account" : "Bilatu kontu bat",
"Choose" : "Aukeratu",
diff --git a/apps/files/l10n/fa.js b/apps/files/l10n/fa.js
index edb716ac1aa..a8a39595a37 100644
--- a/apps/files/l10n/fa.js
+++ b/apps/files/l10n/fa.js
@@ -169,14 +169,13 @@ OC.L10N.register(
"File Management" : "مدیریت فایل",
"Reload current directory" : "دایرکتوری فعلی را دوباره بارگیری کنید",
"Go to the \"{dir}\" directory" : "به دایرکتوری \"{dir}\" بروید",
+ "\"{displayName}\" action executed successfully" : "عملکرد \"{displayName}\" با موفقیت اجرا شد",
+ "\"{displayName}\" action failed" : "اقدام \"{displayName}\" ناموفق بود",
"Select the row for {displayName}" : "ردیف {displayName} را انتخاب کنید",
"Rename file" : "تغییر نام فایل",
- "A long time ago" : "مدت ها پیش",
- "Download file {name}" : "دانلود فایل {name}",
"File name" : "نام فایل",
"Folder name" : "نام پوشه",
- "\"{displayName}\" action executed successfully" : "عملکرد \"{displayName}\" با موفقیت اجرا شد",
- "\"{displayName}\" action failed" : "اقدام \"{displayName}\" ناموفق بود",
+ "Download file {name}" : "دانلود فایل {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" یک نوع فایل مجاز نیست.",
"{newName} already exists." : "{newName} از قبل وجود دارد.",
"Name cannot be empty" : "نام نمی‌تواند خالی باشد",
@@ -184,14 +183,12 @@ OC.L10N.register(
"Renamed \"{oldName}\" to \"{newName}\"" : "تغییر نام \"{oldName}\" به \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "نمی‌توان نام «{oldName}» را تغییر داد، دیگر وجود ندارد",
"Could not rename \"{oldName}\"" : "تغییر نام \"{oldName}\" ممکن نیست",
+ "A long time ago" : "مدت ها پیش",
"Total rows summary" : "خلاصه کل ردیف ها",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" در برخی از عناصر ناموفق بود",
- "\"{displayName}\" batch action executed successfully" : "عملکرد دسته‌ای \"{displayName}\" با موفقیت اجرا شد",
- "ascending" : "صعودی",
- "descending" : "نزولی",
- "Sort list by {column} ({direction})" : "مرتب سازی لیست بر اساس {ستون} ({direction})",
"Select all" : "انتخاب همه",
"Unselect all" : "همه را لغو انتخاب کنید",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" در برخی از عناصر ناموفق بود",
+ "\"{displayName}\" batch action executed successfully" : "عملکرد دسته‌ای \"{displayName}\" با موفقیت اجرا شد",
"List of files and folders." : "لیست فایل ها و پوشه ها",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "این لیست به دلایل عملکرد به طور کامل ارائه نشده است. در حین حرکت در لیست، فایل ها ارائه می شوند.",
"File not found" : "فایل یافت نشد",
@@ -219,6 +216,7 @@ OC.L10N.register(
"Share" : "اشتراک‌گذاری",
"Shared by link" : "اشتراک گذاشته شده از طریق لینک",
"Shared" : "به اشتراک گزاشته شده ",
+ "Switch to list view" : "Switch to list view",
"Open the files app settings" : "تنظیمات برنامه فایل ها را باز کنید",
"Files settings" : "تنظیمات پرونده‌ها",
"File cannot be accessed" : "فایل قابل دسترسی نیست",
@@ -245,9 +243,8 @@ OC.L10N.register(
"Open folder {displayName}" : "باز کردن پوشه {displayName}",
"Open in Files" : "در فایل باز کنید",
"Open details" : "باز کردن جزئیات",
- "Set up templates folder" : "پوشه قالب ها را تنظیم کنید",
- "Templates" : "قالب‌ها",
"Create new templates folder" : "پوشه قالب های جدید ایجاد کنید",
+ "Templates" : "قالب‌ها",
"Unable to initialize the templates directory" : "راه اندازی دایرکتوری الگوها ممکن نیست",
"List of favorites files and folders." : "لیست فایل ها و پوشه های مورد علاقه",
"No favorites yet" : "هنوز مورد دلخواه وجود ندارد",
@@ -267,6 +264,7 @@ OC.L10N.register(
"Unlimited" : "نامحدود",
"Search users" : "جستجوی کاربران",
"Cancel" : "لغو",
+ "Set up templates folder" : "پوشه قالب ها را تنظیم کنید",
"%s used" : "%sاستفاده شده",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s از %2$s استفاده شده ",
@@ -280,6 +278,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "این فایل دارای تگ {tag} است",
"This file has the tags {firstTags} and {lastTag}" : "این فایل دارای تگ‌های {firstTags} و {lastTag} است.",
"Open folder {name}" : "باز کردن پوشه {name}",
+ "ascending" : "صعودی",
+ "descending" : "نزولی",
+ "Sort list by {column} ({direction})" : "مرتب سازی لیست بر اساس {ستون} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "این لیست به دلایل اجرایی به طور کامل ارائه نشده است. در حین حرکت در لیست، فایل ها ارائه می شوند.",
"Search for an account" : "جستجو برای یک حساب کاربری",
"Choose" : "انتخاب کنید",
diff --git a/apps/files/l10n/fa.json b/apps/files/l10n/fa.json
index 3221d6da328..ad117d7784b 100644
--- a/apps/files/l10n/fa.json
+++ b/apps/files/l10n/fa.json
@@ -167,14 +167,13 @@
"File Management" : "مدیریت فایل",
"Reload current directory" : "دایرکتوری فعلی را دوباره بارگیری کنید",
"Go to the \"{dir}\" directory" : "به دایرکتوری \"{dir}\" بروید",
+ "\"{displayName}\" action executed successfully" : "عملکرد \"{displayName}\" با موفقیت اجرا شد",
+ "\"{displayName}\" action failed" : "اقدام \"{displayName}\" ناموفق بود",
"Select the row for {displayName}" : "ردیف {displayName} را انتخاب کنید",
"Rename file" : "تغییر نام فایل",
- "A long time ago" : "مدت ها پیش",
- "Download file {name}" : "دانلود فایل {name}",
"File name" : "نام فایل",
"Folder name" : "نام پوشه",
- "\"{displayName}\" action executed successfully" : "عملکرد \"{displayName}\" با موفقیت اجرا شد",
- "\"{displayName}\" action failed" : "اقدام \"{displayName}\" ناموفق بود",
+ "Download file {name}" : "دانلود فایل {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" یک نوع فایل مجاز نیست.",
"{newName} already exists." : "{newName} از قبل وجود دارد.",
"Name cannot be empty" : "نام نمی‌تواند خالی باشد",
@@ -182,14 +181,12 @@
"Renamed \"{oldName}\" to \"{newName}\"" : "تغییر نام \"{oldName}\" به \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "نمی‌توان نام «{oldName}» را تغییر داد، دیگر وجود ندارد",
"Could not rename \"{oldName}\"" : "تغییر نام \"{oldName}\" ممکن نیست",
+ "A long time ago" : "مدت ها پیش",
"Total rows summary" : "خلاصه کل ردیف ها",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" در برخی از عناصر ناموفق بود",
- "\"{displayName}\" batch action executed successfully" : "عملکرد دسته‌ای \"{displayName}\" با موفقیت اجرا شد",
- "ascending" : "صعودی",
- "descending" : "نزولی",
- "Sort list by {column} ({direction})" : "مرتب سازی لیست بر اساس {ستون} ({direction})",
"Select all" : "انتخاب همه",
"Unselect all" : "همه را لغو انتخاب کنید",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" در برخی از عناصر ناموفق بود",
+ "\"{displayName}\" batch action executed successfully" : "عملکرد دسته‌ای \"{displayName}\" با موفقیت اجرا شد",
"List of files and folders." : "لیست فایل ها و پوشه ها",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "این لیست به دلایل عملکرد به طور کامل ارائه نشده است. در حین حرکت در لیست، فایل ها ارائه می شوند.",
"File not found" : "فایل یافت نشد",
@@ -217,6 +214,7 @@
"Share" : "اشتراک‌گذاری",
"Shared by link" : "اشتراک گذاشته شده از طریق لینک",
"Shared" : "به اشتراک گزاشته شده ",
+ "Switch to list view" : "Switch to list view",
"Open the files app settings" : "تنظیمات برنامه فایل ها را باز کنید",
"Files settings" : "تنظیمات پرونده‌ها",
"File cannot be accessed" : "فایل قابل دسترسی نیست",
@@ -243,9 +241,8 @@
"Open folder {displayName}" : "باز کردن پوشه {displayName}",
"Open in Files" : "در فایل باز کنید",
"Open details" : "باز کردن جزئیات",
- "Set up templates folder" : "پوشه قالب ها را تنظیم کنید",
- "Templates" : "قالب‌ها",
"Create new templates folder" : "پوشه قالب های جدید ایجاد کنید",
+ "Templates" : "قالب‌ها",
"Unable to initialize the templates directory" : "راه اندازی دایرکتوری الگوها ممکن نیست",
"List of favorites files and folders." : "لیست فایل ها و پوشه های مورد علاقه",
"No favorites yet" : "هنوز مورد دلخواه وجود ندارد",
@@ -265,6 +262,7 @@
"Unlimited" : "نامحدود",
"Search users" : "جستجوی کاربران",
"Cancel" : "لغو",
+ "Set up templates folder" : "پوشه قالب ها را تنظیم کنید",
"%s used" : "%sاستفاده شده",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s از %2$s استفاده شده ",
@@ -278,6 +276,9 @@
"This file has the tag {tag}" : "این فایل دارای تگ {tag} است",
"This file has the tags {firstTags} and {lastTag}" : "این فایل دارای تگ‌های {firstTags} و {lastTag} است.",
"Open folder {name}" : "باز کردن پوشه {name}",
+ "ascending" : "صعودی",
+ "descending" : "نزولی",
+ "Sort list by {column} ({direction})" : "مرتب سازی لیست بر اساس {ستون} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "این لیست به دلایل اجرایی به طور کامل ارائه نشده است. در حین حرکت در لیست، فایل ها ارائه می شوند.",
"Search for an account" : "جستجو برای یک حساب کاربری",
"Choose" : "انتخاب کنید",
diff --git a/apps/files/l10n/fi.js b/apps/files/l10n/fi.js
index ab51c038ece..fe2b6a33ef9 100644
--- a/apps/files/l10n/fi.js
+++ b/apps/files/l10n/fi.js
@@ -22,6 +22,7 @@ OC.L10N.register(
"An unknown error has occurred" : "Tapahtui tuntematon virhe",
"File could not be uploaded" : "Tiedostoa ei voi lähettää",
"Uploading …" : "Lähetetään…",
+ "{remainingTime} ({currentNumber}/{total})" : "{remainingTime} ({currentNumber}/{total})",
"Uploading … ({currentNumber}/{total})" : "Lähetetään… ({currentNumber}/{total})",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize}/{totalSize} ({bitrate})",
"Uploading that item is not supported" : "Kyseisen kohteen lähettäminen ei ole tuettu",
@@ -170,24 +171,27 @@ OC.L10N.register(
"File Management" : "Tiedostohallinta",
"Reload current directory" : "Lataa nykyinen kansio uudelleen",
"Go to the \"{dir}\" directory" : "Siirry kansioon \"{dir}\"",
+ "Drag and drop files here to upload" : "Vedä ja pudota tiedostot tähän lähettääksesi",
+ "Upload successful" : "Lähetys onnistui",
"Rename file" : "Nimeä tiedosto uudelleen",
- "A long time ago" : "Kauan aikaa sitten",
- "Download file {name}" : "Lataa tiedosto {name}",
"File name" : "Tiedostonimi",
"Folder name" : "Kansion nimi",
+ "Download file {name}" : "Lataa tiedosto {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" ei ole sallittu tiedostotyyppi.",
"{newName} already exists." : "{newName} on jo olemassa.",
+ "\"{char}\" is not allowed inside a file name." : "Merkki \"{char}\" ei ole sallittu tiedostonimessä.",
"Name cannot be empty" : "Nimi ei voi olla tyhjä",
"Another entry with the same name already exists" : "Toinen tietue samalla nimellä on jo olemassa",
"Renamed \"{oldName}\" to \"{newName}\"" : "Kohteen \"{oldName}\" uudeksi nimeksi asetettiin \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Kohdetta \"{oldName}\" ei voitu nimetä uudelleen, koska sitä ei ole enää olemassa",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Nimi \"{newName}\" on jo käytössä kansiossa \"{dir}\". Valitse toinen nimi.",
"Could not rename \"{oldName}\"" : "Ei voitu nimetä uudelleen \"{oldName}\"",
- "ascending" : "nousevasti",
- "descending" : "laskevasti",
- "Sort list by {column} ({direction})" : "Järjestä luettelo sarakkeen {column} mukaan ({direction})",
+ "A long time ago" : "Kauan aikaa sitten",
+ "Could not copy {file}. {message}" : "Tiedostoa {file} ei voitu kopioida. {message}",
+ "Could not move {file}. {message}" : "Tiedostoa {file} ei voitu siirtää. {message}",
"Select all" : "Valitse kaikki",
"Unselect all" : "Poista valinnat",
+ "Sort list by {column}" : "Järjestä luettelo sarakkeen {column} mukaan",
"List of files and folders." : "Luettelo tiedostoista ja kansioista.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Tätä luetteloa ei ole esitetty täysin suorituskykyyn liittyvistä syistä. Tiedostot esitetään sitä mukaa, kun selaat luetteloa.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} ja {summaryFolder}",
@@ -218,6 +222,8 @@ OC.L10N.register(
"Share" : "Jaa",
"Shared by link" : "Jaettu linkillä",
"Shared" : "Jaettu",
+ "Switch to list view" : "Vaihda taulukkonäkymään",
+ "Switch to grid view" : "Vaihda ruudukkonäkymään",
"Open the files app settings" : "Avaa tiedostosovelluksen asetukset",
"Files settings" : "Tiedostojen asetukset",
"File cannot be accessed" : "Tiedostoa ei voi käyttää",
@@ -225,6 +231,7 @@ OC.L10N.register(
"Sort favorites first" : "Järjestä suosikit ensiksi",
"Show hidden files" : "Näytä piilotetut tiedostot",
"Crop image previews" : "Rajaa kuvien esikatseluja",
+ "Enable the grid view" : "Käytä ruudukkonäkymää",
"Additional settings" : "Lisäasetukset",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopioi leikepöydälle",
@@ -241,14 +248,25 @@ OC.L10N.register(
"Blank" : "Tyhjä",
"Unable to create new file from template" : "Uutta tiedostoa mallipohjasta ei voi luoda",
"Delete permanently" : "Poista pysyvästi",
+ "Destination is not a folder" : "Kohde ei ole kansio",
+ "This file/folder is already in that directory" : "Tämä tiedosto/kansio on jo kyseisessä kansiossa",
+ "A file or folder with that name already exists in this folder" : "Tiedosto tai kansio tällä nimellä on jo olemassa tässä kansiossa",
+ "The file does not exist anymore" : "Tiedostoa ei ole enää olemassa",
+ "Chose destination" : "Valitse kohde",
+ "Copy to {target}" : "Kopioi kohteeseen {target}",
+ "Move to {target}" : "Siirrä kohteeseen {target}",
"Open folder {displayName}" : "Avaa kansio {displayName}",
"Open in Files" : "Avaa tiedostosovelluksessa",
"Open details" : "Avaa yksityiskohdat",
- "Created new folder \"{name}\"" : "Luotu uusi kansio \"{name}\"",
- "Set up templates folder" : "Aseta mallipohjien kansio",
- "Templates" : "Mallipohjat",
"Create new templates folder" : "Luo uusi mallipohjien kansio",
+ "Templates" : "Mallipohjat",
"Unable to initialize the templates directory" : "Mallipohjien kansiota ei voitu alustaa",
+ "Created new folder \"{name}\"" : "Luotu uusi kansio \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} kansio","{folderCount} kansiota"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} tiedosto","{fileCount} tiedostoa"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 tiedosto ja {folderCount} kansio","1 tiedosto ja {folderCount} kansiota"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} tiedosto ja 1 kansio","{fileCount} tiedostoa ja 1 kansio"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} tiedostoa ja {folderCount} kansiota",
"List of favorites files and folders." : "Luettelo suosikkitiedostoista ja -kansioista.",
"No favorites yet" : "Ei vielä suosikkeja",
"Files and folders you mark as favorite will show up here" : "Suosikeiksi merkitsemäsi tiedostot ja kansiot näkyvät täällä",
@@ -267,6 +285,7 @@ OC.L10N.register(
"Unlimited" : "Rajoittamaton",
"Search users" : "Etsi käyttäjistä",
"Cancel" : "Peruuta",
+ "Set up templates folder" : "Aseta mallipohjien kansio",
"%s used" : "%s käytetty",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s/%2$s käytetty",
@@ -280,6 +299,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Tällä tiedostolla on tunniste {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Tällä tiedostolla on tunnisteet {firstTags} ja {lastTag}",
"Open folder {name}" : "Avaa kansio {name}",
+ "ascending" : "nousevasti",
+ "descending" : "laskevasti",
+ "Sort list by {column} ({direction})" : "Järjestä luettelo sarakkeen {column} mukaan ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Tätä luetteloa ei ole esitetty täysin suorituskykyyn liittyvistä syistä. Tiedostot esitetään sitä mukaa, kun selaat luetteloa.",
"Search for an account" : "Etsi tiliä",
"Choose" : "Valitse",
diff --git a/apps/files/l10n/fi.json b/apps/files/l10n/fi.json
index e73adc315e4..96eb8649ee7 100644
--- a/apps/files/l10n/fi.json
+++ b/apps/files/l10n/fi.json
@@ -20,6 +20,7 @@
"An unknown error has occurred" : "Tapahtui tuntematon virhe",
"File could not be uploaded" : "Tiedostoa ei voi lähettää",
"Uploading …" : "Lähetetään…",
+ "{remainingTime} ({currentNumber}/{total})" : "{remainingTime} ({currentNumber}/{total})",
"Uploading … ({currentNumber}/{total})" : "Lähetetään… ({currentNumber}/{total})",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize}/{totalSize} ({bitrate})",
"Uploading that item is not supported" : "Kyseisen kohteen lähettäminen ei ole tuettu",
@@ -168,24 +169,27 @@
"File Management" : "Tiedostohallinta",
"Reload current directory" : "Lataa nykyinen kansio uudelleen",
"Go to the \"{dir}\" directory" : "Siirry kansioon \"{dir}\"",
+ "Drag and drop files here to upload" : "Vedä ja pudota tiedostot tähän lähettääksesi",
+ "Upload successful" : "Lähetys onnistui",
"Rename file" : "Nimeä tiedosto uudelleen",
- "A long time ago" : "Kauan aikaa sitten",
- "Download file {name}" : "Lataa tiedosto {name}",
"File name" : "Tiedostonimi",
"Folder name" : "Kansion nimi",
+ "Download file {name}" : "Lataa tiedosto {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" ei ole sallittu tiedostotyyppi.",
"{newName} already exists." : "{newName} on jo olemassa.",
+ "\"{char}\" is not allowed inside a file name." : "Merkki \"{char}\" ei ole sallittu tiedostonimessä.",
"Name cannot be empty" : "Nimi ei voi olla tyhjä",
"Another entry with the same name already exists" : "Toinen tietue samalla nimellä on jo olemassa",
"Renamed \"{oldName}\" to \"{newName}\"" : "Kohteen \"{oldName}\" uudeksi nimeksi asetettiin \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Kohdetta \"{oldName}\" ei voitu nimetä uudelleen, koska sitä ei ole enää olemassa",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Nimi \"{newName}\" on jo käytössä kansiossa \"{dir}\". Valitse toinen nimi.",
"Could not rename \"{oldName}\"" : "Ei voitu nimetä uudelleen \"{oldName}\"",
- "ascending" : "nousevasti",
- "descending" : "laskevasti",
- "Sort list by {column} ({direction})" : "Järjestä luettelo sarakkeen {column} mukaan ({direction})",
+ "A long time ago" : "Kauan aikaa sitten",
+ "Could not copy {file}. {message}" : "Tiedostoa {file} ei voitu kopioida. {message}",
+ "Could not move {file}. {message}" : "Tiedostoa {file} ei voitu siirtää. {message}",
"Select all" : "Valitse kaikki",
"Unselect all" : "Poista valinnat",
+ "Sort list by {column}" : "Järjestä luettelo sarakkeen {column} mukaan",
"List of files and folders." : "Luettelo tiedostoista ja kansioista.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Tätä luetteloa ei ole esitetty täysin suorituskykyyn liittyvistä syistä. Tiedostot esitetään sitä mukaa, kun selaat luetteloa.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} ja {summaryFolder}",
@@ -216,6 +220,8 @@
"Share" : "Jaa",
"Shared by link" : "Jaettu linkillä",
"Shared" : "Jaettu",
+ "Switch to list view" : "Vaihda taulukkonäkymään",
+ "Switch to grid view" : "Vaihda ruudukkonäkymään",
"Open the files app settings" : "Avaa tiedostosovelluksen asetukset",
"Files settings" : "Tiedostojen asetukset",
"File cannot be accessed" : "Tiedostoa ei voi käyttää",
@@ -223,6 +229,7 @@
"Sort favorites first" : "Järjestä suosikit ensiksi",
"Show hidden files" : "Näytä piilotetut tiedostot",
"Crop image previews" : "Rajaa kuvien esikatseluja",
+ "Enable the grid view" : "Käytä ruudukkonäkymää",
"Additional settings" : "Lisäasetukset",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopioi leikepöydälle",
@@ -239,14 +246,25 @@
"Blank" : "Tyhjä",
"Unable to create new file from template" : "Uutta tiedostoa mallipohjasta ei voi luoda",
"Delete permanently" : "Poista pysyvästi",
+ "Destination is not a folder" : "Kohde ei ole kansio",
+ "This file/folder is already in that directory" : "Tämä tiedosto/kansio on jo kyseisessä kansiossa",
+ "A file or folder with that name already exists in this folder" : "Tiedosto tai kansio tällä nimellä on jo olemassa tässä kansiossa",
+ "The file does not exist anymore" : "Tiedostoa ei ole enää olemassa",
+ "Chose destination" : "Valitse kohde",
+ "Copy to {target}" : "Kopioi kohteeseen {target}",
+ "Move to {target}" : "Siirrä kohteeseen {target}",
"Open folder {displayName}" : "Avaa kansio {displayName}",
"Open in Files" : "Avaa tiedostosovelluksessa",
"Open details" : "Avaa yksityiskohdat",
- "Created new folder \"{name}\"" : "Luotu uusi kansio \"{name}\"",
- "Set up templates folder" : "Aseta mallipohjien kansio",
- "Templates" : "Mallipohjat",
"Create new templates folder" : "Luo uusi mallipohjien kansio",
+ "Templates" : "Mallipohjat",
"Unable to initialize the templates directory" : "Mallipohjien kansiota ei voitu alustaa",
+ "Created new folder \"{name}\"" : "Luotu uusi kansio \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} kansio","{folderCount} kansiota"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} tiedosto","{fileCount} tiedostoa"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 tiedosto ja {folderCount} kansio","1 tiedosto ja {folderCount} kansiota"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} tiedosto ja 1 kansio","{fileCount} tiedostoa ja 1 kansio"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} tiedostoa ja {folderCount} kansiota",
"List of favorites files and folders." : "Luettelo suosikkitiedostoista ja -kansioista.",
"No favorites yet" : "Ei vielä suosikkeja",
"Files and folders you mark as favorite will show up here" : "Suosikeiksi merkitsemäsi tiedostot ja kansiot näkyvät täällä",
@@ -265,6 +283,7 @@
"Unlimited" : "Rajoittamaton",
"Search users" : "Etsi käyttäjistä",
"Cancel" : "Peruuta",
+ "Set up templates folder" : "Aseta mallipohjien kansio",
"%s used" : "%s käytetty",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s/%2$s käytetty",
@@ -278,6 +297,9 @@
"This file has the tag {tag}" : "Tällä tiedostolla on tunniste {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Tällä tiedostolla on tunnisteet {firstTags} ja {lastTag}",
"Open folder {name}" : "Avaa kansio {name}",
+ "ascending" : "nousevasti",
+ "descending" : "laskevasti",
+ "Sort list by {column} ({direction})" : "Järjestä luettelo sarakkeen {column} mukaan ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Tätä luetteloa ei ole esitetty täysin suorituskykyyn liittyvistä syistä. Tiedostot esitetään sitä mukaa, kun selaat luetteloa.",
"Search for an account" : "Etsi tiliä",
"Choose" : "Valitse",
diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js
index 9282a091451..7344f3a5191 100644
--- a/apps/files/l10n/fr.js
+++ b/apps/files/l10n/fr.js
@@ -110,7 +110,7 @@ OC.L10N.register(
"New folder" : "Nouveau dossier",
"Create new folder" : "Créer un nouveau dossier",
"Upload file" : "Téléverser un fichier",
- "Recent" : "Récent",
+ "Recent" : "Récents",
"Not favorited" : "Non marqué comme favori",
"Remove from favorites" : "Retirer des favoris",
"Add to favorites" : "Ajouter aux favoris",
@@ -171,31 +171,34 @@ OC.L10N.register(
"File Management" : "Gestion de fichiers",
"Reload current directory" : "Rafraîchir le dossier courant",
"Go to the \"{dir}\" directory" : "Aller au dossier \"{dir}\"",
+ "Drag and drop files here to upload" : "Glissez-déposez les fichiers ici pour les téléverser",
+ "Upload successful" : "Téléversement réussi",
+ "\"{displayName}\" action executed successfully" : "Action \"{displayName}\" exécutée avec succès",
+ "\"{displayName}\" action failed" : "Échec de l'action \"{displayName}\"",
"Select the row for {displayName}" : "Sélectionner la ligne pour {displayName}",
"Rename file" : "Renommer le fichier",
- "A long time ago" : "Il y a longtemps",
- "This node is unavailable" : "Ce nœud est indisponible ",
- "Download file {name}" : "Télécharger le fichier {name}",
"File name" : "Nom du fichier",
"Folder name" : "Nom du dossier",
- "\"{displayName}\" action executed successfully" : "Action \"{displayName}\" exécutée avec succès",
- "\"{displayName}\" action failed" : "Échec de l'action \"{displayName}\"",
+ "This node is unavailable" : "Ce nœud est indisponible ",
+ "Download file {name}" : "Télécharger le fichier {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" n'est pas un type de fichier autorisé.",
"{newName} already exists." : "{newName} existe déjà.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\" n'est pas autorisé dans un nom de fichier.",
"Name cannot be empty" : "Le nom ne peut pas être vide",
"Another entry with the same name already exists" : "Une autre entrée avec le même nom existe déjà",
"Renamed \"{oldName}\" to \"{newName}\"" : "Renommer \"{oldName}\" en \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Impossible de renommer \"{oldName}\", il n'existe plus.",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Le nom \"{newName}\" est déjà utilisé dans le dossier \"{dir}\". Veuillez choisir un autre nom.",
"Could not rename \"{oldName}\"" : "Impossible de renommer \"{oldName}\"",
+ "A long time ago" : "Il y a longtemps",
+ "Could not copy {file}. {message}" : "Impossible de copier {file}. {message}",
+ "Could not move {file}. {message}" : "Impossible de déplacer {file}. {message}",
"Total rows summary" : "Récapitulatif du nombre total de lignes",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" a échoué sur certains éléments",
- "\"{displayName}\" batch action executed successfully" : "Le traitement par lot \"{displayName}\" a été exécuté avec succès",
- "ascending" : "ascendant",
- "descending" : "descendant",
- "Sort list by {column} ({direction})" : "Trier la liste par {column} ({direction})",
"Select all" : "Tout sélectionner",
"Unselect all" : "Tout désélectionner",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" a échoué sur certains éléments",
+ "\"{displayName}\" batch action executed successfully" : "Le traitement par lot \"{displayName}\" a été exécuté avec succès",
+ "Sort list by {column}" : "Trier la liste par {column}",
"List of files and folders." : "Liste des fichiers et dossiers.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Cette liste n'est pas entièrement affichée pour des raisons de performances. Les fichiers seront affichés au fur et à mesure que vous naviguerez dans la liste.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} et {summaryFolder}",
@@ -226,6 +229,8 @@ OC.L10N.register(
"Share" : "Partager",
"Shared by link" : "Partagés par lien",
"Shared" : "Partagé",
+ "Switch to list view" : "Basculer en mode liste",
+ "Switch to grid view" : "Basculer en vue mosaïque",
"Open the files app settings" : "Ouvrir les paramètres de l'application Fichiers",
"Files settings" : "Paramètres de Fichiers",
"File cannot be accessed" : "Impossible d'accéder au fichier",
@@ -233,6 +238,7 @@ OC.L10N.register(
"Sort favorites first" : "Trier les favoris d'abord",
"Show hidden files" : "Afficher les fichiers masqués",
"Crop image previews" : "Afficher en miniatures carrées",
+ "Enable the grid view" : "Activer la vue mosaïque",
"Additional settings" : "Paramètres supplémentaires",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Copier dans le presse-papiers",
@@ -249,16 +255,28 @@ OC.L10N.register(
"Blank" : "Vide",
"Unable to create new file from template" : "Impossible de créer un nouveau fichier à partir du modèle",
"Delete permanently" : "Supprimer définitivement",
+ "Destination is not a folder" : "La destination n'est pas un dossier",
+ "This file/folder is already in that directory" : "Ce fichier/dossier se trouve déjà dans ce dossier",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Vous ne pouvez pas déplacer un fichier/dossier sur lui-même ou dans un sous-dossier de celui-ci",
+ "A file or folder with that name already exists in this folder" : "Un fichier ou un dossier portant ce nom existe déjà dans ce dossier",
+ "The files is locked" : "Le fichier est verrouillé",
+ "The file does not exist anymore" : "Le fichier n'existe plus",
+ "Chose destination" : "Choisir la destination",
"Copy to {target}" : "Copier vers {target}",
"Move to {target}" : "Déplacer vers {target}",
+ "Cancelled move or copy operation" : "Opération de déplacement ou de copie annulée",
"Open folder {displayName}" : "Ouvrir le dossier {displayName}",
"Open in Files" : "Ouvrir dans Fichiers",
"Open details" : "Ouvrir les détails",
- "Created new folder \"{name}\"" : "Nouveau dossier \"{name}\" créé",
- "Set up templates folder" : "Configurer le dossier des modèles",
- "Templates" : "Modèles",
"Create new templates folder" : "Créer un nouveau dossier de modèles",
+ "Templates" : "Modèles",
"Unable to initialize the templates directory" : "Impossible d'initialiser le dossier des modèles",
+ "Created new folder \"{name}\"" : "Nouveau dossier \"{name}\" créé",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} dossier","{folderCount} dossiers","{folderCount} dossiers"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} fichier","{fileCount} fichiers","{fileCount} fichiers"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 fichier et {folderCount} dossier","1 fichier et {folderCount} dossiers","1 fichier et {folderCount} dossiers"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} fichier et 1 dossier","{fileCount} fichiers et 1 dossier","{fileCount} fichiers et 1 dossier"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} fichiers et {folderCount} dossiers",
"List of favorites files and folders." : "Liste des fichiers et dossiers favoris.",
"No favorites yet" : "Aucun favori pour l'instant",
"Files and folders you mark as favorite will show up here" : "Les fichiers et dossiers ajoutés à vos favoris apparaîtront ici",
@@ -278,6 +296,7 @@ OC.L10N.register(
"Unlimited" : "Illimité",
"Search users" : "Rechercher des utilisateurs",
"Cancel" : "Annuler",
+ "Set up templates folder" : "Configurer le dossier des modèles",
"%s used" : "%s utilisés",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s utilisés sur %2$s",
@@ -291,6 +310,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Ce fichier a l'étiquette {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Ce fichier a les étiquettes {firstTags} et {lastTag}",
"Open folder {name}" : "Ouvrir le dossier {name}",
+ "ascending" : "ascendant",
+ "descending" : "descendant",
+ "Sort list by {column} ({direction})" : "Trier la liste par {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Cette liste n'est pas affichée en totalité pour des raisons de performances. Les fichiers seront affichés au fur et à mesure que vous parcourrez la liste.",
"Search for an account" : "Chercher un compte",
"Choose" : "Choisir",
diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json
index 0a195d7b303..86a70b36a43 100644
--- a/apps/files/l10n/fr.json
+++ b/apps/files/l10n/fr.json
@@ -108,7 +108,7 @@
"New folder" : "Nouveau dossier",
"Create new folder" : "Créer un nouveau dossier",
"Upload file" : "Téléverser un fichier",
- "Recent" : "Récent",
+ "Recent" : "Récents",
"Not favorited" : "Non marqué comme favori",
"Remove from favorites" : "Retirer des favoris",
"Add to favorites" : "Ajouter aux favoris",
@@ -169,31 +169,34 @@
"File Management" : "Gestion de fichiers",
"Reload current directory" : "Rafraîchir le dossier courant",
"Go to the \"{dir}\" directory" : "Aller au dossier \"{dir}\"",
+ "Drag and drop files here to upload" : "Glissez-déposez les fichiers ici pour les téléverser",
+ "Upload successful" : "Téléversement réussi",
+ "\"{displayName}\" action executed successfully" : "Action \"{displayName}\" exécutée avec succès",
+ "\"{displayName}\" action failed" : "Échec de l'action \"{displayName}\"",
"Select the row for {displayName}" : "Sélectionner la ligne pour {displayName}",
"Rename file" : "Renommer le fichier",
- "A long time ago" : "Il y a longtemps",
- "This node is unavailable" : "Ce nœud est indisponible ",
- "Download file {name}" : "Télécharger le fichier {name}",
"File name" : "Nom du fichier",
"Folder name" : "Nom du dossier",
- "\"{displayName}\" action executed successfully" : "Action \"{displayName}\" exécutée avec succès",
- "\"{displayName}\" action failed" : "Échec de l'action \"{displayName}\"",
+ "This node is unavailable" : "Ce nœud est indisponible ",
+ "Download file {name}" : "Télécharger le fichier {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" n'est pas un type de fichier autorisé.",
"{newName} already exists." : "{newName} existe déjà.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\" n'est pas autorisé dans un nom de fichier.",
"Name cannot be empty" : "Le nom ne peut pas être vide",
"Another entry with the same name already exists" : "Une autre entrée avec le même nom existe déjà",
"Renamed \"{oldName}\" to \"{newName}\"" : "Renommer \"{oldName}\" en \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Impossible de renommer \"{oldName}\", il n'existe plus.",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Le nom \"{newName}\" est déjà utilisé dans le dossier \"{dir}\". Veuillez choisir un autre nom.",
"Could not rename \"{oldName}\"" : "Impossible de renommer \"{oldName}\"",
+ "A long time ago" : "Il y a longtemps",
+ "Could not copy {file}. {message}" : "Impossible de copier {file}. {message}",
+ "Could not move {file}. {message}" : "Impossible de déplacer {file}. {message}",
"Total rows summary" : "Récapitulatif du nombre total de lignes",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" a échoué sur certains éléments",
- "\"{displayName}\" batch action executed successfully" : "Le traitement par lot \"{displayName}\" a été exécuté avec succès",
- "ascending" : "ascendant",
- "descending" : "descendant",
- "Sort list by {column} ({direction})" : "Trier la liste par {column} ({direction})",
"Select all" : "Tout sélectionner",
"Unselect all" : "Tout désélectionner",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" a échoué sur certains éléments",
+ "\"{displayName}\" batch action executed successfully" : "Le traitement par lot \"{displayName}\" a été exécuté avec succès",
+ "Sort list by {column}" : "Trier la liste par {column}",
"List of files and folders." : "Liste des fichiers et dossiers.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Cette liste n'est pas entièrement affichée pour des raisons de performances. Les fichiers seront affichés au fur et à mesure que vous naviguerez dans la liste.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} et {summaryFolder}",
@@ -224,6 +227,8 @@
"Share" : "Partager",
"Shared by link" : "Partagés par lien",
"Shared" : "Partagé",
+ "Switch to list view" : "Basculer en mode liste",
+ "Switch to grid view" : "Basculer en vue mosaïque",
"Open the files app settings" : "Ouvrir les paramètres de l'application Fichiers",
"Files settings" : "Paramètres de Fichiers",
"File cannot be accessed" : "Impossible d'accéder au fichier",
@@ -231,6 +236,7 @@
"Sort favorites first" : "Trier les favoris d'abord",
"Show hidden files" : "Afficher les fichiers masqués",
"Crop image previews" : "Afficher en miniatures carrées",
+ "Enable the grid view" : "Activer la vue mosaïque",
"Additional settings" : "Paramètres supplémentaires",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Copier dans le presse-papiers",
@@ -247,16 +253,28 @@
"Blank" : "Vide",
"Unable to create new file from template" : "Impossible de créer un nouveau fichier à partir du modèle",
"Delete permanently" : "Supprimer définitivement",
+ "Destination is not a folder" : "La destination n'est pas un dossier",
+ "This file/folder is already in that directory" : "Ce fichier/dossier se trouve déjà dans ce dossier",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Vous ne pouvez pas déplacer un fichier/dossier sur lui-même ou dans un sous-dossier de celui-ci",
+ "A file or folder with that name already exists in this folder" : "Un fichier ou un dossier portant ce nom existe déjà dans ce dossier",
+ "The files is locked" : "Le fichier est verrouillé",
+ "The file does not exist anymore" : "Le fichier n'existe plus",
+ "Chose destination" : "Choisir la destination",
"Copy to {target}" : "Copier vers {target}",
"Move to {target}" : "Déplacer vers {target}",
+ "Cancelled move or copy operation" : "Opération de déplacement ou de copie annulée",
"Open folder {displayName}" : "Ouvrir le dossier {displayName}",
"Open in Files" : "Ouvrir dans Fichiers",
"Open details" : "Ouvrir les détails",
- "Created new folder \"{name}\"" : "Nouveau dossier \"{name}\" créé",
- "Set up templates folder" : "Configurer le dossier des modèles",
- "Templates" : "Modèles",
"Create new templates folder" : "Créer un nouveau dossier de modèles",
+ "Templates" : "Modèles",
"Unable to initialize the templates directory" : "Impossible d'initialiser le dossier des modèles",
+ "Created new folder \"{name}\"" : "Nouveau dossier \"{name}\" créé",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} dossier","{folderCount} dossiers","{folderCount} dossiers"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} fichier","{fileCount} fichiers","{fileCount} fichiers"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 fichier et {folderCount} dossier","1 fichier et {folderCount} dossiers","1 fichier et {folderCount} dossiers"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} fichier et 1 dossier","{fileCount} fichiers et 1 dossier","{fileCount} fichiers et 1 dossier"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} fichiers et {folderCount} dossiers",
"List of favorites files and folders." : "Liste des fichiers et dossiers favoris.",
"No favorites yet" : "Aucun favori pour l'instant",
"Files and folders you mark as favorite will show up here" : "Les fichiers et dossiers ajoutés à vos favoris apparaîtront ici",
@@ -276,6 +294,7 @@
"Unlimited" : "Illimité",
"Search users" : "Rechercher des utilisateurs",
"Cancel" : "Annuler",
+ "Set up templates folder" : "Configurer le dossier des modèles",
"%s used" : "%s utilisés",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s utilisés sur %2$s",
@@ -289,6 +308,9 @@
"This file has the tag {tag}" : "Ce fichier a l'étiquette {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Ce fichier a les étiquettes {firstTags} et {lastTag}",
"Open folder {name}" : "Ouvrir le dossier {name}",
+ "ascending" : "ascendant",
+ "descending" : "descendant",
+ "Sort list by {column} ({direction})" : "Trier la liste par {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Cette liste n'est pas affichée en totalité pour des raisons de performances. Les fichiers seront affichés au fur et à mesure que vous parcourrez la liste.",
"Search for an account" : "Chercher un compte",
"Choose" : "Choisir",
diff --git a/apps/files/l10n/gl.js b/apps/files/l10n/gl.js
index 534345f30c1..ae6436eb46d 100644
--- a/apps/files/l10n/gl.js
+++ b/apps/files/l10n/gl.js
@@ -171,31 +171,34 @@ OC.L10N.register(
"File Management" : "Xestión de ficheiros",
"Reload current directory" : "Recargar o directorio actual",
"Go to the \"{dir}\" directory" : "Vaia ao directorio «{dir}».",
+ "Drag and drop files here to upload" : "Arrastre e solte os ficheiros aquí para envialos",
+ "Upload successful" : "Envío satisfactorio",
+ "\"{displayName}\" action executed successfully" : "A acción «{displayName}» executouse correctamente",
+ "\"{displayName}\" action failed" : "A acción «{displayName}» fallou",
"Select the row for {displayName}" : "Seleccione a fila para {displayName}",
"Rename file" : "Renomear o ficheiro",
- "A long time ago" : "Hai moito tempo",
- "This node is unavailable" : "Este nodo non está dispoñíbel",
- "Download file {name}" : "Descargar o ficheiro {name}",
"File name" : "Nome de ficheiro",
"Folder name" : "Nome do cartafol",
- "\"{displayName}\" action executed successfully" : "A acción «{displayName}» executouse correctamente",
- "\"{displayName}\" action failed" : "A acción «{displayName}» fallou",
+ "This node is unavailable" : "Este nodo non está dispoñíbel",
+ "Download file {name}" : "Descargar o ficheiro {name}",
"\"{name}\" is not an allowed filetype." : "«{name}» non é un tipo de ficheiro permitido.",
"{newName} already exists." : "Xa existe {newName}",
+ "\"{char}\" is not allowed inside a file name." : "«{char}» non está permitido nun nome de ficheiro.",
"Name cannot be empty" : "O nome non pode estar baleiro",
"Another entry with the same name already exists" : "Xa existe outra entrada co mesmo nome",
"Renamed \"{oldName}\" to \"{newName}\"" : "Cambiouse o nome de «{oldName}» a «{newName}»",
"Could not rename \"{oldName}\", it does not exist any more" : "Non foi posíbel renomear «{oldName}», xa non existe",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "O nome «{newName}» xa se utiliza no cartafol «{dir}». Escolla un nome diferente.",
"Could not rename \"{oldName}\"" : "Non foi posíbel renomear «{oldName}»",
+ "A long time ago" : "Hai moito tempo",
+ "Could not copy {file}. {message}" : "Non foi posíbel copiar {file}. {mensaxe}",
+ "Could not move {file}. {message}" : "Non foi posíbel mover {file}. {mensaxe}",
"Total rows summary" : "Resumo total de filas",
- "\"{displayName}\" failed on some elements " : "Produciuse un fallo nalgúns elementos de «{displayName}» ",
- "\"{displayName}\" batch action executed successfully" : "A acción por lotes «{displayName}» executouse correctamente",
- "ascending" : "ascendente",
- "descending" : "descendente",
- "Sort list by {column} ({direction})" : "Ordenar a lista por {column} ({direction})",
"Select all" : "Seleccionar todo",
"Unselect all" : "Desmarcar todo",
+ "\"{displayName}\" failed on some elements " : "Produciuse un fallo nalgúns elementos de «{displayName}» ",
+ "\"{displayName}\" batch action executed successfully" : "A acción por lotes «{displayName}» executouse correctamente",
+ "Sort list by {column}" : "Ordenar a lista por {column}",
"List of files and folders." : "Lista de ficheiros e cartafoles",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Esta lista non se representa de xeito completo por mor do rendemento. Os ficheiros represéntanse mentres se despraza pola lista.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} e {summaryFolder}",
@@ -226,6 +229,8 @@ OC.L10N.register(
"Share" : "Compartir",
"Shared by link" : "Compartido por ligazón",
"Shared" : "Compartido",
+ "Switch to list view" : "Cambiar á vista de lista",
+ "Switch to grid view" : "Cambiar á vista de grade",
"Open the files app settings" : "Abrir os axustes da aplicación de ficheiros",
"Files settings" : "Axustes de Ficheiros",
"File cannot be accessed" : "Non é posíbel acceder ao ficheiro",
@@ -233,6 +238,7 @@ OC.L10N.register(
"Sort favorites first" : "Ordene antes os favoritos",
"Show hidden files" : "Amosar os ficheiros agochados",
"Crop image previews" : "Recortar a vista previa das imaxes",
+ "Enable the grid view" : "Activar á vista de grade",
"Additional settings" : "Axustes adicionais",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar no portapapeis.",
@@ -249,16 +255,28 @@ OC.L10N.register(
"Blank" : "Baleiro",
"Unable to create new file from template" : "Non é posíbel crear un novo ficheiro a partir do modelo",
"Delete permanently" : "Eliminar definitivamente",
+ "Destination is not a folder" : "O destino non é un cartafol",
+ "This file/folder is already in that directory" : "Este ficheiro/cartafol xa está nese directorio",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Non é posíbel mover un ficheiro/cartafol sobre si mesmo ou a un subcartafol de si mesmo",
+ "A file or folder with that name already exists in this folder" : "Neste cartafol xa existe un ficheiro ou cartafol con ese nome",
+ "The files is locked" : "Os ficheiros están bloqueados",
+ "The file does not exist anymore" : "O ficheiro xa non existe",
+ "Chose destination" : "Escoller o destino",
"Copy to {target}" : "Copiar en {target}",
"Move to {target}" : "Mover a {target}",
+ "Cancelled move or copy operation" : "Foi cancelada a operación de movemento ou copia",
"Open folder {displayName}" : "Abrir o cartafol {displayName}",
"Open in Files" : "Abrir en Ficheiros",
"Open details" : "Abrir detalles",
- "Created new folder \"{name}\"" : "Creouse un novo cartafol «{name}»",
- "Set up templates folder" : "Estabelecer un cartafol de modelos",
- "Templates" : "Modelos",
"Create new templates folder" : "Crear un novo cartafol de modelos",
+ "Templates" : "Modelos",
"Unable to initialize the templates directory" : "Non é posíbel iniciar o directorio de modelos",
+ "Created new folder \"{name}\"" : "Creouse un novo cartafol «{name}»",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} cartafol","{folderCount} cartafoles"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} ficheiro","{fileCount} ficheiros"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 ficheiro e {folderCount} cartafol","1 ficheiro e {folderCount} cartafoles"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} ficheiro e 1 cartafol","{fileCount} ficheiros e 1 cartafol"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} ficheiros e {folderCount} cartafoles",
"List of favorites files and folders." : "Lista de ficheiros e cartafoles favoritos.",
"No favorites yet" : "Aínda non hai favoritos",
"Files and folders you mark as favorite will show up here" : "Os ficheiros e cartafoles que marque como favoritos amosaranse aquí",
@@ -278,6 +296,7 @@ OC.L10N.register(
"Unlimited" : "Sen límites",
"Search users" : "Buscar usuarios",
"Cancel" : "Cancelar",
+ "Set up templates folder" : "Estabelecer un cartafol de modelos",
"%s used" : "%s utilizado",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s de %2$s utilizado",
@@ -291,6 +310,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Este ficheiro ten a etiqueta {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Este ficheiro ten as etiquetas {firstTags} e {lastTag}",
"Open folder {name}" : "Abrir o cartafol {name}",
+ "ascending" : "ascendente",
+ "descending" : "descendente",
+ "Sort list by {column} ({direction})" : "Ordenar a lista por {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista non se representa de xeito completo por mor do rendemento. Os ficheiros represéntanse se despraza pola lista.",
"Search for an account" : "Buscar por unha conta",
"Choose" : "Escoller",
diff --git a/apps/files/l10n/gl.json b/apps/files/l10n/gl.json
index 46c240571bf..8df43751857 100644
--- a/apps/files/l10n/gl.json
+++ b/apps/files/l10n/gl.json
@@ -169,31 +169,34 @@
"File Management" : "Xestión de ficheiros",
"Reload current directory" : "Recargar o directorio actual",
"Go to the \"{dir}\" directory" : "Vaia ao directorio «{dir}».",
+ "Drag and drop files here to upload" : "Arrastre e solte os ficheiros aquí para envialos",
+ "Upload successful" : "Envío satisfactorio",
+ "\"{displayName}\" action executed successfully" : "A acción «{displayName}» executouse correctamente",
+ "\"{displayName}\" action failed" : "A acción «{displayName}» fallou",
"Select the row for {displayName}" : "Seleccione a fila para {displayName}",
"Rename file" : "Renomear o ficheiro",
- "A long time ago" : "Hai moito tempo",
- "This node is unavailable" : "Este nodo non está dispoñíbel",
- "Download file {name}" : "Descargar o ficheiro {name}",
"File name" : "Nome de ficheiro",
"Folder name" : "Nome do cartafol",
- "\"{displayName}\" action executed successfully" : "A acción «{displayName}» executouse correctamente",
- "\"{displayName}\" action failed" : "A acción «{displayName}» fallou",
+ "This node is unavailable" : "Este nodo non está dispoñíbel",
+ "Download file {name}" : "Descargar o ficheiro {name}",
"\"{name}\" is not an allowed filetype." : "«{name}» non é un tipo de ficheiro permitido.",
"{newName} already exists." : "Xa existe {newName}",
+ "\"{char}\" is not allowed inside a file name." : "«{char}» non está permitido nun nome de ficheiro.",
"Name cannot be empty" : "O nome non pode estar baleiro",
"Another entry with the same name already exists" : "Xa existe outra entrada co mesmo nome",
"Renamed \"{oldName}\" to \"{newName}\"" : "Cambiouse o nome de «{oldName}» a «{newName}»",
"Could not rename \"{oldName}\", it does not exist any more" : "Non foi posíbel renomear «{oldName}», xa non existe",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "O nome «{newName}» xa se utiliza no cartafol «{dir}». Escolla un nome diferente.",
"Could not rename \"{oldName}\"" : "Non foi posíbel renomear «{oldName}»",
+ "A long time ago" : "Hai moito tempo",
+ "Could not copy {file}. {message}" : "Non foi posíbel copiar {file}. {mensaxe}",
+ "Could not move {file}. {message}" : "Non foi posíbel mover {file}. {mensaxe}",
"Total rows summary" : "Resumo total de filas",
- "\"{displayName}\" failed on some elements " : "Produciuse un fallo nalgúns elementos de «{displayName}» ",
- "\"{displayName}\" batch action executed successfully" : "A acción por lotes «{displayName}» executouse correctamente",
- "ascending" : "ascendente",
- "descending" : "descendente",
- "Sort list by {column} ({direction})" : "Ordenar a lista por {column} ({direction})",
"Select all" : "Seleccionar todo",
"Unselect all" : "Desmarcar todo",
+ "\"{displayName}\" failed on some elements " : "Produciuse un fallo nalgúns elementos de «{displayName}» ",
+ "\"{displayName}\" batch action executed successfully" : "A acción por lotes «{displayName}» executouse correctamente",
+ "Sort list by {column}" : "Ordenar a lista por {column}",
"List of files and folders." : "Lista de ficheiros e cartafoles",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Esta lista non se representa de xeito completo por mor do rendemento. Os ficheiros represéntanse mentres se despraza pola lista.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} e {summaryFolder}",
@@ -224,6 +227,8 @@
"Share" : "Compartir",
"Shared by link" : "Compartido por ligazón",
"Shared" : "Compartido",
+ "Switch to list view" : "Cambiar á vista de lista",
+ "Switch to grid view" : "Cambiar á vista de grade",
"Open the files app settings" : "Abrir os axustes da aplicación de ficheiros",
"Files settings" : "Axustes de Ficheiros",
"File cannot be accessed" : "Non é posíbel acceder ao ficheiro",
@@ -231,6 +236,7 @@
"Sort favorites first" : "Ordene antes os favoritos",
"Show hidden files" : "Amosar os ficheiros agochados",
"Crop image previews" : "Recortar a vista previa das imaxes",
+ "Enable the grid view" : "Activar á vista de grade",
"Additional settings" : "Axustes adicionais",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar no portapapeis.",
@@ -247,16 +253,28 @@
"Blank" : "Baleiro",
"Unable to create new file from template" : "Non é posíbel crear un novo ficheiro a partir do modelo",
"Delete permanently" : "Eliminar definitivamente",
+ "Destination is not a folder" : "O destino non é un cartafol",
+ "This file/folder is already in that directory" : "Este ficheiro/cartafol xa está nese directorio",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Non é posíbel mover un ficheiro/cartafol sobre si mesmo ou a un subcartafol de si mesmo",
+ "A file or folder with that name already exists in this folder" : "Neste cartafol xa existe un ficheiro ou cartafol con ese nome",
+ "The files is locked" : "Os ficheiros están bloqueados",
+ "The file does not exist anymore" : "O ficheiro xa non existe",
+ "Chose destination" : "Escoller o destino",
"Copy to {target}" : "Copiar en {target}",
"Move to {target}" : "Mover a {target}",
+ "Cancelled move or copy operation" : "Foi cancelada a operación de movemento ou copia",
"Open folder {displayName}" : "Abrir o cartafol {displayName}",
"Open in Files" : "Abrir en Ficheiros",
"Open details" : "Abrir detalles",
- "Created new folder \"{name}\"" : "Creouse un novo cartafol «{name}»",
- "Set up templates folder" : "Estabelecer un cartafol de modelos",
- "Templates" : "Modelos",
"Create new templates folder" : "Crear un novo cartafol de modelos",
+ "Templates" : "Modelos",
"Unable to initialize the templates directory" : "Non é posíbel iniciar o directorio de modelos",
+ "Created new folder \"{name}\"" : "Creouse un novo cartafol «{name}»",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} cartafol","{folderCount} cartafoles"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} ficheiro","{fileCount} ficheiros"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 ficheiro e {folderCount} cartafol","1 ficheiro e {folderCount} cartafoles"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} ficheiro e 1 cartafol","{fileCount} ficheiros e 1 cartafol"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} ficheiros e {folderCount} cartafoles",
"List of favorites files and folders." : "Lista de ficheiros e cartafoles favoritos.",
"No favorites yet" : "Aínda non hai favoritos",
"Files and folders you mark as favorite will show up here" : "Os ficheiros e cartafoles que marque como favoritos amosaranse aquí",
@@ -276,6 +294,7 @@
"Unlimited" : "Sen límites",
"Search users" : "Buscar usuarios",
"Cancel" : "Cancelar",
+ "Set up templates folder" : "Estabelecer un cartafol de modelos",
"%s used" : "%s utilizado",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s de %2$s utilizado",
@@ -289,6 +308,9 @@
"This file has the tag {tag}" : "Este ficheiro ten a etiqueta {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Este ficheiro ten as etiquetas {firstTags} e {lastTag}",
"Open folder {name}" : "Abrir o cartafol {name}",
+ "ascending" : "ascendente",
+ "descending" : "descendente",
+ "Sort list by {column} ({direction})" : "Ordenar a lista por {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista non se representa de xeito completo por mor do rendemento. Os ficheiros represéntanse se despraza pola lista.",
"Search for an account" : "Buscar por unha conta",
"Choose" : "Escoller",
diff --git a/apps/files/l10n/hr.js b/apps/files/l10n/hr.js
index 6a4eb96f80c..f2df9637d97 100644
--- a/apps/files/l10n/hr.js
+++ b/apps/files/l10n/hr.js
@@ -174,6 +174,7 @@ OC.L10N.register(
"Share" : "Dijeli",
"Shared by link" : "Podijeljeno putem poveznice",
"Shared" : "Dijeljeno",
+ "Switch to list view" : "Prebacite na prikaz popisa",
"Show hidden files" : "Prikaz skrivenih datoteka",
"Crop image previews" : "Obreži pretpreglede slika",
"Additional settings" : "Dodatne postavke",
@@ -190,7 +191,6 @@ OC.L10N.register(
"Unable to create new file from template" : "Nije moguće stvoriti novu datoteku iz predloška",
"Delete permanently" : "Trajno izbrišite",
"Open details" : "Otvori pojedinosti",
- "Set up templates folder" : "Postavi mapu predložaka",
"Templates" : "Predlošci",
"Unable to initialize the templates directory" : "Nije moguće inicijalizirati direktorij predložaka",
"No favorites yet" : "Još nema favorita",
@@ -207,6 +207,7 @@ OC.L10N.register(
"Unlimited" : "Neograničeno",
"Search users" : "Pretraži korisnike",
"Cancel" : "Odustani",
+ "Set up templates folder" : "Postavi mapu predložaka",
"%s used" : "Iskorišteno %s",
"%1$s of %2$s used" : "Iskorišteno %1$s od %2$s",
"Toggle grid view" : "Uključi/isključi prikaz rešetke",
diff --git a/apps/files/l10n/hr.json b/apps/files/l10n/hr.json
index 37723afead0..84bdb989b87 100644
--- a/apps/files/l10n/hr.json
+++ b/apps/files/l10n/hr.json
@@ -172,6 +172,7 @@
"Share" : "Dijeli",
"Shared by link" : "Podijeljeno putem poveznice",
"Shared" : "Dijeljeno",
+ "Switch to list view" : "Prebacite na prikaz popisa",
"Show hidden files" : "Prikaz skrivenih datoteka",
"Crop image previews" : "Obreži pretpreglede slika",
"Additional settings" : "Dodatne postavke",
@@ -188,7 +189,6 @@
"Unable to create new file from template" : "Nije moguće stvoriti novu datoteku iz predloška",
"Delete permanently" : "Trajno izbrišite",
"Open details" : "Otvori pojedinosti",
- "Set up templates folder" : "Postavi mapu predložaka",
"Templates" : "Predlošci",
"Unable to initialize the templates directory" : "Nije moguće inicijalizirati direktorij predložaka",
"No favorites yet" : "Još nema favorita",
@@ -205,6 +205,7 @@
"Unlimited" : "Neograničeno",
"Search users" : "Pretraži korisnike",
"Cancel" : "Odustani",
+ "Set up templates folder" : "Postavi mapu predložaka",
"%s used" : "Iskorišteno %s",
"%1$s of %2$s used" : "Iskorišteno %1$s od %2$s",
"Toggle grid view" : "Uključi/isključi prikaz rešetke",
diff --git a/apps/files/l10n/hu.js b/apps/files/l10n/hu.js
index 0cf75d023bb..4c0e53f83d0 100644
--- a/apps/files/l10n/hu.js
+++ b/apps/files/l10n/hu.js
@@ -22,6 +22,8 @@ OC.L10N.register(
"An unknown error has occurred" : "Ismeretlen hiba történt",
"File could not be uploaded" : "A fájlt nem lehetett feltölteni",
"Uploading …" : "Feltöltés…",
+ "{remainingTime} ({currentNumber}/{total})" : "{remainingTime} ({currentNumber}/{total})",
+ "Uploading … ({currentNumber}/{total})" : "Feltöltés … ({currentNumber}/{total})",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})",
"Uploading that item is not supported" : "Ezen elem feltöltése nem támogatott",
"Target folder does not exist any more" : "A célmappa már nem létezik",
@@ -32,6 +34,7 @@ OC.L10N.register(
"Move" : "Áthelyezés",
"Copy" : "Másolás",
"Choose target folder" : "Válasszon célmappát",
+ "Set reminder" : "Emlékeztető beállítása",
"Edit locally" : "Szerkesztés helyileg",
"Open" : "Megnyitás",
"Delete file" : "Fájl törlése",
@@ -168,22 +171,40 @@ OC.L10N.register(
"File Management" : "Fájlkezelés",
"Reload current directory" : "Jelenlegi könyvtár újratöltése",
"Go to the \"{dir}\" directory" : "Ugrás a(z) „{dir}” könyvtárhoz",
+ "Drag and drop files here to upload" : "Húzza ide a fájlokat a feltöltéshez",
+ "Upload successful" : "Sikeres feltölés",
+ "\"{displayName}\" action executed successfully" : "A(z) „{displayName}” művelet sikeresen végrehajtva",
+ "\"{displayName}\" action failed" : "A(z) „{displayName}” művelet sikertelen",
"Select the row for {displayName}" : "A(z) {displayName} sorának kiválasztása",
- "Download file {name}" : "A(z) {name} fájl letöltése",
+ "Rename file" : "Fájl átnevezése",
"File name" : "Fájlnév",
"Folder name" : "Mappanév",
- "\"{displayName}\" action executed successfully" : "A(z) „{displayName}” művelet sikeresen végrehajtva",
- "\"{displayName}\" action failed" : "A(z) „{displayName}” művelet sikertelen",
+ "This node is unavailable" : "Ez a node nem érhető el",
+ "Download file {name}" : "A(z) {name} fájl letöltése",
+ "\"{name}\" is not an allowed filetype." : "\"{name}\" nem engedélyezett fájltipus.",
+ "{newName} already exists." : "{newName} már létezik.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\"nem szerepelhet fájlnévben.",
"Name cannot be empty" : "A név nem lehet üres",
+ "Another entry with the same name already exists" : "Egy másik bejegyzés már létezik ezzel a névvel",
+ "Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" átnevezve: \"{newName}\"",
+ "Could not rename \"{oldName}\", it does not exist any more" : "\"{oldName}\" átnevezése nem lehetséges, mert már nem létezik",
+ "The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "A név \"{newName}\" már használatban van a(z) \"{dir}\" mappában. Kérem használjon másik nevet.",
+ "Could not rename \"{oldName}\"" : "\"{oldName}\" átnevezése nem lehetséges",
+ "A long time ago" : "Réges régen",
+ "Could not copy {file}. {message}" : "{file} másolása nem lehetséges. {message}",
+ "Could not move {file}. {message}" : "{file} mozgatása nem lehetséges. {message}",
"Total rows summary" : "Összes sor összegzése",
- "\"{displayName}\" failed on some elements " : "A(z) „{displayName}” sikertelen volt néhány elemen",
- "\"{displayName}\" batch action executed successfully" : "A(z) „{displayName}” tömeges művelet sikeresen végrehajtva",
- "ascending" : "növekvő",
- "descending" : "csökkenő",
- "Sort list by {column} ({direction})" : "Lista rendezése {column} alapján ({direction})",
"Select all" : "Összes kijelölése",
"Unselect all" : "Kijelölés megszüntetése",
+ "\"{displayName}\" failed on some elements " : "A(z) „{displayName}” sikertelen volt néhány elemen",
+ "\"{displayName}\" batch action executed successfully" : "A(z) „{displayName}” tömeges művelet sikeresen végrehajtva",
+ "Sort list by {column}" : "Lista rendezése {column} szerint",
+ "List of files and folders." : "Fájlok és mappák listázása",
+ "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Ez a lista teljesítménybeli okokból nincs teljes egészében megjelenítve. A fájlok a listában navigálás során jelennek meg, ",
+ "{summaryFile} and {summaryFolder}" : "{summaryFile} és {summaryFolder}",
"File not found" : "Fájl nincs meg!",
+ "_{count} file_::_{count} files_" : ["{count} fájl","{count} fájl"],
+ "_{count} folder_::_{count} folders_" : ["{count} mappa","{count} mappa"],
"Storage informations" : "Tárhely-információk",
"{usedQuotaByte} used" : "{usedQuotaByte} felhasználva",
"{relative}% used" : "{relative}% felhasználva",
@@ -208,12 +229,16 @@ OC.L10N.register(
"Share" : "Megosztás",
"Shared by link" : "Megosztva hivatkozással",
"Shared" : "Megosztva",
+ "Switch to list view" : "Váltás listanézetre",
+ "Switch to grid view" : "Váltás rácsnézetre",
"Open the files app settings" : "Nyissa meg a Fájlok lalkalmazás beállításait",
"Files settings" : "Fájlok beállításai",
"File cannot be accessed" : "A fájl nem érhető el",
"You might not have have permissions to view it, ask the sender to share it" : "Lehet, hogy nincs jogosultsága, hogy megtekintse, kérje meg a küldőt, hogy ossza meg",
+ "Sort favorites first" : "Kedvencek rendezése",
"Show hidden files" : "Rejtett fájlok megjelenítése",
"Crop image previews" : "Kép előnézetek vágása",
+ "Enable the grid view" : "Rácsnézet engedélyezése",
"Additional settings" : "További beállítások",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Másolás a vágólapra",
@@ -230,17 +255,36 @@ OC.L10N.register(
"Blank" : "Üres",
"Unable to create new file from template" : "Nem lehet új fájlt létrehozni a sablonból",
"Delete permanently" : "Végleges törlés",
+ "Destination is not a folder" : "A cél nem mappa",
+ "This file/folder is already in that directory" : "Ez a fájl/mappa már létezik a mappában",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "A fájl/mappa mozgatása nem lehetséges önmagába, vagy magából eredő almappába",
+ "A file or folder with that name already exists in this folder" : "Egy fájl vagy mappa már létezik ezen a néven ebben a mappában",
+ "The files is locked" : "Ez a fájl zárolva van",
+ "The file does not exist anymore" : "Ez a fájl már nem létezik",
+ "Chose destination" : "Válasszon célt",
"Copy to {target}" : "Másolás ide: {target}",
"Move to {target}" : "Áthelyezés ide: {target}",
+ "Cancelled move or copy operation" : "A mozgatás vagy másolás művelet megszakítva",
"Open folder {displayName}" : "A(z) {displayName} mappa megnyitása",
+ "Open in Files" : "Megnyitás a Files-ban",
"Open details" : "Részletek megnyitása",
- "Set up templates folder" : "Személyes sablonmappa beállítása",
- "Templates" : "Sablonok",
"Create new templates folder" : "Új sablonmappa létrehozása",
+ "Templates" : "Sablonok",
"Unable to initialize the templates directory" : "A sablonkönyvtár előkészítése sikertelen",
+ "Created new folder \"{name}\"" : "Új mappa létzehozva \"{name}\" néven",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} mappa","{folderCount} mappa"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} fájl","{fileCount} fájl"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 fájl és {folderCount} mappa","1 fájl és {folderCount} mappa"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} fájl és 1 mappa","{fileCount} fájl és 1 mappa"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} fájl és {folderCount} mappa",
+ "List of favorites files and folders." : "Kedvenc fájlok és mappák listázása.",
"No favorites yet" : "Még nincsenek kedvencek",
"Files and folders you mark as favorite will show up here" : "A kedvencnek jelölt fájlokat és mappákat itt találja meg",
"All files" : "Az összes fájl",
+ "List of your files and folders." : "Saját fájlok és mappák listázása.",
+ "List of recently modified files and folders." : "Közelmúltban mósosított fájlok és mappák listázása.",
+ "No recently modified files" : "Nincs a közelmúltban módosított fájl",
+ "Files and folders you recently modified will show up here." : "Az Ön által módosított fájlok és mappák itt jelennek meg.",
"Toggle %1$s sublist" : "%1$s allista be/ki",
"No entries found in this folder" : "Nincsenek bejegyzések ebben a mappában",
"Upload too large" : "A feltöltés túl nagy",
@@ -252,6 +296,7 @@ OC.L10N.register(
"Unlimited" : "Korlátlan",
"Search users" : "Fehasználók keresése",
"Cancel" : "Mégse",
+ "Set up templates folder" : "Személyes sablonmappa beállítása",
"%s used" : "%s használt",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s / %2$s felhasználva",
@@ -265,6 +310,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Ennek a fájlnak ez a címkéje: {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Ennek a fájlnak ezek a címkéi: {firstTags} és {lastTag}",
"Open folder {name}" : "A(z) {name} mappa megnyitása",
+ "ascending" : "növekvő",
+ "descending" : "csökkenő",
+ "Sort list by {column} ({direction})" : "Lista rendezése {column} alapján ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Ez a lista teljesítménybeli okokból nincs teljes egészében megjelenítve. A fájlok a listában navigálás során jelennek meg, ",
"Search for an account" : "Fiók keresése",
"Choose" : "Válasszon",
diff --git a/apps/files/l10n/hu.json b/apps/files/l10n/hu.json
index 4d2f2af803c..f8fd9097e5c 100644
--- a/apps/files/l10n/hu.json
+++ b/apps/files/l10n/hu.json
@@ -20,6 +20,8 @@
"An unknown error has occurred" : "Ismeretlen hiba történt",
"File could not be uploaded" : "A fájlt nem lehetett feltölteni",
"Uploading …" : "Feltöltés…",
+ "{remainingTime} ({currentNumber}/{total})" : "{remainingTime} ({currentNumber}/{total})",
+ "Uploading … ({currentNumber}/{total})" : "Feltöltés … ({currentNumber}/{total})",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})",
"Uploading that item is not supported" : "Ezen elem feltöltése nem támogatott",
"Target folder does not exist any more" : "A célmappa már nem létezik",
@@ -30,6 +32,7 @@
"Move" : "Áthelyezés",
"Copy" : "Másolás",
"Choose target folder" : "Válasszon célmappát",
+ "Set reminder" : "Emlékeztető beállítása",
"Edit locally" : "Szerkesztés helyileg",
"Open" : "Megnyitás",
"Delete file" : "Fájl törlése",
@@ -166,22 +169,40 @@
"File Management" : "Fájlkezelés",
"Reload current directory" : "Jelenlegi könyvtár újratöltése",
"Go to the \"{dir}\" directory" : "Ugrás a(z) „{dir}” könyvtárhoz",
+ "Drag and drop files here to upload" : "Húzza ide a fájlokat a feltöltéshez",
+ "Upload successful" : "Sikeres feltölés",
+ "\"{displayName}\" action executed successfully" : "A(z) „{displayName}” művelet sikeresen végrehajtva",
+ "\"{displayName}\" action failed" : "A(z) „{displayName}” művelet sikertelen",
"Select the row for {displayName}" : "A(z) {displayName} sorának kiválasztása",
- "Download file {name}" : "A(z) {name} fájl letöltése",
+ "Rename file" : "Fájl átnevezése",
"File name" : "Fájlnév",
"Folder name" : "Mappanév",
- "\"{displayName}\" action executed successfully" : "A(z) „{displayName}” művelet sikeresen végrehajtva",
- "\"{displayName}\" action failed" : "A(z) „{displayName}” művelet sikertelen",
+ "This node is unavailable" : "Ez a node nem érhető el",
+ "Download file {name}" : "A(z) {name} fájl letöltése",
+ "\"{name}\" is not an allowed filetype." : "\"{name}\" nem engedélyezett fájltipus.",
+ "{newName} already exists." : "{newName} már létezik.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\"nem szerepelhet fájlnévben.",
"Name cannot be empty" : "A név nem lehet üres",
+ "Another entry with the same name already exists" : "Egy másik bejegyzés már létezik ezzel a névvel",
+ "Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" átnevezve: \"{newName}\"",
+ "Could not rename \"{oldName}\", it does not exist any more" : "\"{oldName}\" átnevezése nem lehetséges, mert már nem létezik",
+ "The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "A név \"{newName}\" már használatban van a(z) \"{dir}\" mappában. Kérem használjon másik nevet.",
+ "Could not rename \"{oldName}\"" : "\"{oldName}\" átnevezése nem lehetséges",
+ "A long time ago" : "Réges régen",
+ "Could not copy {file}. {message}" : "{file} másolása nem lehetséges. {message}",
+ "Could not move {file}. {message}" : "{file} mozgatása nem lehetséges. {message}",
"Total rows summary" : "Összes sor összegzése",
- "\"{displayName}\" failed on some elements " : "A(z) „{displayName}” sikertelen volt néhány elemen",
- "\"{displayName}\" batch action executed successfully" : "A(z) „{displayName}” tömeges művelet sikeresen végrehajtva",
- "ascending" : "növekvő",
- "descending" : "csökkenő",
- "Sort list by {column} ({direction})" : "Lista rendezése {column} alapján ({direction})",
"Select all" : "Összes kijelölése",
"Unselect all" : "Kijelölés megszüntetése",
+ "\"{displayName}\" failed on some elements " : "A(z) „{displayName}” sikertelen volt néhány elemen",
+ "\"{displayName}\" batch action executed successfully" : "A(z) „{displayName}” tömeges művelet sikeresen végrehajtva",
+ "Sort list by {column}" : "Lista rendezése {column} szerint",
+ "List of files and folders." : "Fájlok és mappák listázása",
+ "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Ez a lista teljesítménybeli okokból nincs teljes egészében megjelenítve. A fájlok a listában navigálás során jelennek meg, ",
+ "{summaryFile} and {summaryFolder}" : "{summaryFile} és {summaryFolder}",
"File not found" : "Fájl nincs meg!",
+ "_{count} file_::_{count} files_" : ["{count} fájl","{count} fájl"],
+ "_{count} folder_::_{count} folders_" : ["{count} mappa","{count} mappa"],
"Storage informations" : "Tárhely-információk",
"{usedQuotaByte} used" : "{usedQuotaByte} felhasználva",
"{relative}% used" : "{relative}% felhasználva",
@@ -206,12 +227,16 @@
"Share" : "Megosztás",
"Shared by link" : "Megosztva hivatkozással",
"Shared" : "Megosztva",
+ "Switch to list view" : "Váltás listanézetre",
+ "Switch to grid view" : "Váltás rácsnézetre",
"Open the files app settings" : "Nyissa meg a Fájlok lalkalmazás beállításait",
"Files settings" : "Fájlok beállításai",
"File cannot be accessed" : "A fájl nem érhető el",
"You might not have have permissions to view it, ask the sender to share it" : "Lehet, hogy nincs jogosultsága, hogy megtekintse, kérje meg a küldőt, hogy ossza meg",
+ "Sort favorites first" : "Kedvencek rendezése",
"Show hidden files" : "Rejtett fájlok megjelenítése",
"Crop image previews" : "Kép előnézetek vágása",
+ "Enable the grid view" : "Rácsnézet engedélyezése",
"Additional settings" : "További beállítások",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Másolás a vágólapra",
@@ -228,17 +253,36 @@
"Blank" : "Üres",
"Unable to create new file from template" : "Nem lehet új fájlt létrehozni a sablonból",
"Delete permanently" : "Végleges törlés",
+ "Destination is not a folder" : "A cél nem mappa",
+ "This file/folder is already in that directory" : "Ez a fájl/mappa már létezik a mappában",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "A fájl/mappa mozgatása nem lehetséges önmagába, vagy magából eredő almappába",
+ "A file or folder with that name already exists in this folder" : "Egy fájl vagy mappa már létezik ezen a néven ebben a mappában",
+ "The files is locked" : "Ez a fájl zárolva van",
+ "The file does not exist anymore" : "Ez a fájl már nem létezik",
+ "Chose destination" : "Válasszon célt",
"Copy to {target}" : "Másolás ide: {target}",
"Move to {target}" : "Áthelyezés ide: {target}",
+ "Cancelled move or copy operation" : "A mozgatás vagy másolás művelet megszakítva",
"Open folder {displayName}" : "A(z) {displayName} mappa megnyitása",
+ "Open in Files" : "Megnyitás a Files-ban",
"Open details" : "Részletek megnyitása",
- "Set up templates folder" : "Személyes sablonmappa beállítása",
- "Templates" : "Sablonok",
"Create new templates folder" : "Új sablonmappa létrehozása",
+ "Templates" : "Sablonok",
"Unable to initialize the templates directory" : "A sablonkönyvtár előkészítése sikertelen",
+ "Created new folder \"{name}\"" : "Új mappa létzehozva \"{name}\" néven",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} mappa","{folderCount} mappa"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} fájl","{fileCount} fájl"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 fájl és {folderCount} mappa","1 fájl és {folderCount} mappa"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} fájl és 1 mappa","{fileCount} fájl és 1 mappa"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} fájl és {folderCount} mappa",
+ "List of favorites files and folders." : "Kedvenc fájlok és mappák listázása.",
"No favorites yet" : "Még nincsenek kedvencek",
"Files and folders you mark as favorite will show up here" : "A kedvencnek jelölt fájlokat és mappákat itt találja meg",
"All files" : "Az összes fájl",
+ "List of your files and folders." : "Saját fájlok és mappák listázása.",
+ "List of recently modified files and folders." : "Közelmúltban mósosított fájlok és mappák listázása.",
+ "No recently modified files" : "Nincs a közelmúltban módosított fájl",
+ "Files and folders you recently modified will show up here." : "Az Ön által módosított fájlok és mappák itt jelennek meg.",
"Toggle %1$s sublist" : "%1$s allista be/ki",
"No entries found in this folder" : "Nincsenek bejegyzések ebben a mappában",
"Upload too large" : "A feltöltés túl nagy",
@@ -250,6 +294,7 @@
"Unlimited" : "Korlátlan",
"Search users" : "Fehasználók keresése",
"Cancel" : "Mégse",
+ "Set up templates folder" : "Személyes sablonmappa beállítása",
"%s used" : "%s használt",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s / %2$s felhasználva",
@@ -263,6 +308,9 @@
"This file has the tag {tag}" : "Ennek a fájlnak ez a címkéje: {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Ennek a fájlnak ezek a címkéi: {firstTags} és {lastTag}",
"Open folder {name}" : "A(z) {name} mappa megnyitása",
+ "ascending" : "növekvő",
+ "descending" : "csökkenő",
+ "Sort list by {column} ({direction})" : "Lista rendezése {column} alapján ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Ez a lista teljesítménybeli okokból nincs teljes egészében megjelenítve. A fájlok a listában navigálás során jelennek meg, ",
"Search for an account" : "Fiók keresése",
"Choose" : "Válasszon",
diff --git a/apps/files/l10n/id.js b/apps/files/l10n/id.js
index e727855f758..a3ea84df903 100644
--- a/apps/files/l10n/id.js
+++ b/apps/files/l10n/id.js
@@ -212,7 +212,6 @@ OC.L10N.register(
"Blank" : "Kosong",
"Unable to create new file from template" : "Tidak dapat membuat berkas baru dari templat",
"Delete permanently" : "Hapus secara permanen",
- "Set up templates folder" : "Siapkan folder templat",
"Templates" : "Templat",
"Unable to initialize the templates directory" : "Tidak dapat membuat direktori templat",
"No favorites yet" : "Belum memiliki favorit",
@@ -229,6 +228,7 @@ OC.L10N.register(
"Unlimited" : "Tak terbatas",
"Search users" : "Cari pengguna",
"Cancel" : "Membatalkan",
+ "Set up templates folder" : "Siapkan folder templat",
"%s used" : "%s digunakan",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s dari %2$s sudah digunakan",
diff --git a/apps/files/l10n/id.json b/apps/files/l10n/id.json
index d03c874f2dd..7b5e4e310bb 100644
--- a/apps/files/l10n/id.json
+++ b/apps/files/l10n/id.json
@@ -210,7 +210,6 @@
"Blank" : "Kosong",
"Unable to create new file from template" : "Tidak dapat membuat berkas baru dari templat",
"Delete permanently" : "Hapus secara permanen",
- "Set up templates folder" : "Siapkan folder templat",
"Templates" : "Templat",
"Unable to initialize the templates directory" : "Tidak dapat membuat direktori templat",
"No favorites yet" : "Belum memiliki favorit",
@@ -227,6 +226,7 @@
"Unlimited" : "Tak terbatas",
"Search users" : "Cari pengguna",
"Cancel" : "Membatalkan",
+ "Set up templates folder" : "Siapkan folder templat",
"%s used" : "%s digunakan",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s dari %2$s sudah digunakan",
diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js
index 1c6d8c4bb1d..286d271d142 100644
--- a/apps/files/l10n/is.js
+++ b/apps/files/l10n/is.js
@@ -165,7 +165,6 @@ OC.L10N.register(
"Unable to create new file from template" : "Tekst ekki að búa til nýja skrá út frá sniðmáti",
"Delete permanently" : "Eyða varanlega",
"Open details" : "Opna nánari upplýsingar",
- "Set up templates folder" : "Setja upp sniðmátamöppu",
"Templates" : "Sniðmát",
"Unable to initialize the templates directory" : "Tókst ekki að frumstilla sniðmátamöppuna",
"No favorites yet" : "Engin eftirlæti ennþá",
@@ -181,6 +180,7 @@ OC.L10N.register(
"Unlimited" : "Ótakmarkað",
"Search users" : "Leita að notendum",
"Cancel" : "Hætta við",
+ "Set up templates folder" : "Setja upp sniðmátamöppu",
"%s used" : "%s notað",
"%1$s of %2$s used" : "%1$s af %2$s notað",
"Toggle grid view" : "Víxla reitasýn af/á",
diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json
index 3ae2b257a22..f9e2cc8146f 100644
--- a/apps/files/l10n/is.json
+++ b/apps/files/l10n/is.json
@@ -163,7 +163,6 @@
"Unable to create new file from template" : "Tekst ekki að búa til nýja skrá út frá sniðmáti",
"Delete permanently" : "Eyða varanlega",
"Open details" : "Opna nánari upplýsingar",
- "Set up templates folder" : "Setja upp sniðmátamöppu",
"Templates" : "Sniðmát",
"Unable to initialize the templates directory" : "Tókst ekki að frumstilla sniðmátamöppuna",
"No favorites yet" : "Engin eftirlæti ennþá",
@@ -179,6 +178,7 @@
"Unlimited" : "Ótakmarkað",
"Search users" : "Leita að notendum",
"Cancel" : "Hætta við",
+ "Set up templates folder" : "Setja upp sniðmátamöppu",
"%s used" : "%s notað",
"%1$s of %2$s used" : "%1$s af %2$s notað",
"Toggle grid view" : "Víxla reitasýn af/á",
diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js
index 3a4dd5822a7..800225c0c35 100644
--- a/apps/files/l10n/it.js
+++ b/apps/files/l10n/it.js
@@ -171,34 +171,40 @@ OC.L10N.register(
"File Management" : "Gestione dei file",
"Reload current directory" : "Ricarica la cartella corrente",
"Go to the \"{dir}\" directory" : "Vai alla cartella \"{dir}\"",
+ "Drag and drop files here to upload" : "Trascina i file qui per caricarli",
+ "Upload successful" : "Caricamento effettuato",
+ "\"{displayName}\" action executed successfully" : "L'azione \"{displayName}\" è stata eseguita correttamente",
+ "\"{displayName}\" action failed" : "L'azione \"{displayName}\" è fallita",
"Select the row for {displayName}" : "Seleziona la riga per {displayName}",
"Rename file" : "Rinomina file",
- "A long time ago" : "Molto tempo fa",
- "This node is unavailable" : "Questa nodo non è disponibile",
- "Download file {name}" : "Scarica il file {name}",
"File name" : "Nome file",
"Folder name" : "Nome della cartella",
- "\"{displayName}\" action executed successfully" : "L'azione \"{displayName}\" è stata eseguita correttamente",
- "\"{displayName}\" action failed" : "L'azione \"{displayName}\" è fallita",
+ "This node is unavailable" : "Questa nodo non è disponibile",
+ "Download file {name}" : "Scarica il file {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" non è un tipo di file consentito.",
"{newName} already exists." : "{newName} esiste già.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\" non è consentito in un nome di file.",
"Name cannot be empty" : "Il nome non può essere vuoto",
"Another entry with the same name already exists" : "Esiste già un'altra voce con lo stesso nome",
"Renamed \"{oldName}\" to \"{newName}\"" : "Rinominato \"{oldName}\" in \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Impossibile rinominare \"{oldName}\", non esiste più",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Il nome \"{newName}\" è attualmente in uso nella cartella \"{dir}\". Scegli un nome diverso.",
"Could not rename \"{oldName}\"" : "Impossibile rinominare \"{oldName}\"",
+ "A long time ago" : "Molto tempo fa",
+ "Could not copy {file}. {message}" : "Impossibile copiare {file}. {message}",
+ "Could not move {file}. {message}" : "Impossibile spostare {file}. {message}",
"Total rows summary" : "Riepilogo totale delle righe",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" è fallita su alcuni elementi",
- "\"{displayName}\" batch action executed successfully" : "L'azione batch \"{displayName}\" è stata eseguita con successo",
- "ascending" : "crescente",
- "descending" : "decrescente",
- "Sort list by {column} ({direction})" : "Ordina la lista per {column} ({direction})",
"Select all" : "Seleziona tutto",
"Unselect all" : "Deseleziona tutto",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" è fallita su alcuni elementi",
+ "\"{displayName}\" batch action executed successfully" : "L'azione batch \"{displayName}\" è stata eseguita con successo",
+ "Sort list by {column}" : "Ordina lista per {column}",
"List of files and folders." : "Lista di file e cartelle.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Questa lista non è stata mostrata completamente per ragioni di prestazioni. I file verranno mostrati durante la navigazione della lista.",
+ "{summaryFile} and {summaryFolder}" : "{summaryFile} e {summaryFolder}",
"File not found" : "File non trovato",
+ "_{count} file_::_{count} files_" : ["{count} file","{count} file","{count} file"],
+ "_{count} folder_::_{count} folders_" : ["{count} cartella","{count} cartelle","{count} cartelle"],
"Storage informations" : "Informazioni di archiviazione",
"{usedQuotaByte} used" : "{usedQuotaByte} usato",
"{relative}% used" : "{relative}% usato",
@@ -223,6 +229,8 @@ OC.L10N.register(
"Share" : "Condividi",
"Shared by link" : "Condivisi tramite collegamento",
"Shared" : "Condiviso",
+ "Switch to list view" : "Passa alla vista elenco",
+ "Switch to grid view" : "Passa alla vista griglia",
"Open the files app settings" : "Apri le impostazioni dell'app File",
"Files settings" : "Impostazioni File",
"File cannot be accessed" : "Il file non possono essere acceduti",
@@ -230,6 +238,7 @@ OC.L10N.register(
"Sort favorites first" : "Ordina prima i preferiti",
"Show hidden files" : "Mostra i file nascosti",
"Crop image previews" : "Ritaglia le anteprime delle immagini",
+ "Enable the grid view" : "Attiva visuale a griglia",
"Additional settings" : "Impostazioni aggiuntive",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Copia negli appunti",
@@ -246,16 +255,28 @@ OC.L10N.register(
"Blank" : "Vuoto",
"Unable to create new file from template" : "Impossibile creare un nuovo file dal modello",
"Delete permanently" : "Elimina permanentemente",
+ "Destination is not a folder" : "La destinazione non è una cartella",
+ "This file/folder is already in that directory" : "Questo file/cartella è già in quella cartella",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Non puoi spostare un file/cartella in se stesso o in una sottocartella di se stesso",
+ "A file or folder with that name already exists in this folder" : "Esiste già un file o una cartella con quel nome in questa cartella",
+ "The files is locked" : "Il file è bloccato",
+ "The file does not exist anymore" : "Il file non esiste più",
+ "Chose destination" : "Scegli destinazione",
"Copy to {target}" : "Copia in {target}",
"Move to {target}" : "Sposta in {target}",
+ "Cancelled move or copy operation" : "Operazione di spostamento o copia annullata",
"Open folder {displayName}" : "Apri la cartella {displayName}",
"Open in Files" : "Apri in File",
"Open details" : "Apri i dettagli",
- "Created new folder \"{name}\"" : "Crea una nuova cartella \"{name}\"",
- "Set up templates folder" : "Configura la cartella dei modelli",
- "Templates" : "Modelli",
"Create new templates folder" : "Crea una nuova cartella dei templates",
+ "Templates" : "Modelli",
"Unable to initialize the templates directory" : "Impossibile inizializzare la cartella dei modelli",
+ "Created new folder \"{name}\"" : "Crea una nuova cartella \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} cartella","{folderCount} cartelle","{folderCount} cartelle"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} file","{fileCount} file","{fileCount} file"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 file e {folderCount} cartella","1 file e {folderCount} cartelle","1 file e {folderCount} cartelle"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} file e 1 cartella","{fileCount} file e 1 cartella","{fileCount} file e 1 cartella"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} file e {folderCount} cartelle",
"List of favorites files and folders." : "Lista di file e cartelle preferiti.",
"No favorites yet" : "Nessun preferito ancora",
"Files and folders you mark as favorite will show up here" : "I file e le cartelle che marchi come preferiti saranno mostrati qui",
@@ -275,6 +296,7 @@ OC.L10N.register(
"Unlimited" : "Illimitata",
"Search users" : "Cerca utenti",
"Cancel" : "Annulla",
+ "Set up templates folder" : "Configura la cartella dei modelli",
"%s used" : "%s utilizzato",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s di %2$s utilizzati",
@@ -288,6 +310,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Questo file ha il tag {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Il file ha i tag {firstTags} e {lastTag}",
"Open folder {name}" : "Apri la cartella {name}",
+ "ascending" : "crescente",
+ "descending" : "decrescente",
+ "Sort list by {column} ({direction})" : "Ordina la lista per {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Questa lista non è stata mostrata completamente per ragioni di performances. I file verranno mostrati durante la navigazione della lista.",
"Search for an account" : "Cerca un account",
"Choose" : "Scegli",
diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json
index 90e1180d398..470a747a15e 100644
--- a/apps/files/l10n/it.json
+++ b/apps/files/l10n/it.json
@@ -169,34 +169,40 @@
"File Management" : "Gestione dei file",
"Reload current directory" : "Ricarica la cartella corrente",
"Go to the \"{dir}\" directory" : "Vai alla cartella \"{dir}\"",
+ "Drag and drop files here to upload" : "Trascina i file qui per caricarli",
+ "Upload successful" : "Caricamento effettuato",
+ "\"{displayName}\" action executed successfully" : "L'azione \"{displayName}\" è stata eseguita correttamente",
+ "\"{displayName}\" action failed" : "L'azione \"{displayName}\" è fallita",
"Select the row for {displayName}" : "Seleziona la riga per {displayName}",
"Rename file" : "Rinomina file",
- "A long time ago" : "Molto tempo fa",
- "This node is unavailable" : "Questa nodo non è disponibile",
- "Download file {name}" : "Scarica il file {name}",
"File name" : "Nome file",
"Folder name" : "Nome della cartella",
- "\"{displayName}\" action executed successfully" : "L'azione \"{displayName}\" è stata eseguita correttamente",
- "\"{displayName}\" action failed" : "L'azione \"{displayName}\" è fallita",
+ "This node is unavailable" : "Questa nodo non è disponibile",
+ "Download file {name}" : "Scarica il file {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" non è un tipo di file consentito.",
"{newName} already exists." : "{newName} esiste già.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\" non è consentito in un nome di file.",
"Name cannot be empty" : "Il nome non può essere vuoto",
"Another entry with the same name already exists" : "Esiste già un'altra voce con lo stesso nome",
"Renamed \"{oldName}\" to \"{newName}\"" : "Rinominato \"{oldName}\" in \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Impossibile rinominare \"{oldName}\", non esiste più",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Il nome \"{newName}\" è attualmente in uso nella cartella \"{dir}\". Scegli un nome diverso.",
"Could not rename \"{oldName}\"" : "Impossibile rinominare \"{oldName}\"",
+ "A long time ago" : "Molto tempo fa",
+ "Could not copy {file}. {message}" : "Impossibile copiare {file}. {message}",
+ "Could not move {file}. {message}" : "Impossibile spostare {file}. {message}",
"Total rows summary" : "Riepilogo totale delle righe",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" è fallita su alcuni elementi",
- "\"{displayName}\" batch action executed successfully" : "L'azione batch \"{displayName}\" è stata eseguita con successo",
- "ascending" : "crescente",
- "descending" : "decrescente",
- "Sort list by {column} ({direction})" : "Ordina la lista per {column} ({direction})",
"Select all" : "Seleziona tutto",
"Unselect all" : "Deseleziona tutto",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" è fallita su alcuni elementi",
+ "\"{displayName}\" batch action executed successfully" : "L'azione batch \"{displayName}\" è stata eseguita con successo",
+ "Sort list by {column}" : "Ordina lista per {column}",
"List of files and folders." : "Lista di file e cartelle.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Questa lista non è stata mostrata completamente per ragioni di prestazioni. I file verranno mostrati durante la navigazione della lista.",
+ "{summaryFile} and {summaryFolder}" : "{summaryFile} e {summaryFolder}",
"File not found" : "File non trovato",
+ "_{count} file_::_{count} files_" : ["{count} file","{count} file","{count} file"],
+ "_{count} folder_::_{count} folders_" : ["{count} cartella","{count} cartelle","{count} cartelle"],
"Storage informations" : "Informazioni di archiviazione",
"{usedQuotaByte} used" : "{usedQuotaByte} usato",
"{relative}% used" : "{relative}% usato",
@@ -221,6 +227,8 @@
"Share" : "Condividi",
"Shared by link" : "Condivisi tramite collegamento",
"Shared" : "Condiviso",
+ "Switch to list view" : "Passa alla vista elenco",
+ "Switch to grid view" : "Passa alla vista griglia",
"Open the files app settings" : "Apri le impostazioni dell'app File",
"Files settings" : "Impostazioni File",
"File cannot be accessed" : "Il file non possono essere acceduti",
@@ -228,6 +236,7 @@
"Sort favorites first" : "Ordina prima i preferiti",
"Show hidden files" : "Mostra i file nascosti",
"Crop image previews" : "Ritaglia le anteprime delle immagini",
+ "Enable the grid view" : "Attiva visuale a griglia",
"Additional settings" : "Impostazioni aggiuntive",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Copia negli appunti",
@@ -244,16 +253,28 @@
"Blank" : "Vuoto",
"Unable to create new file from template" : "Impossibile creare un nuovo file dal modello",
"Delete permanently" : "Elimina permanentemente",
+ "Destination is not a folder" : "La destinazione non è una cartella",
+ "This file/folder is already in that directory" : "Questo file/cartella è già in quella cartella",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Non puoi spostare un file/cartella in se stesso o in una sottocartella di se stesso",
+ "A file or folder with that name already exists in this folder" : "Esiste già un file o una cartella con quel nome in questa cartella",
+ "The files is locked" : "Il file è bloccato",
+ "The file does not exist anymore" : "Il file non esiste più",
+ "Chose destination" : "Scegli destinazione",
"Copy to {target}" : "Copia in {target}",
"Move to {target}" : "Sposta in {target}",
+ "Cancelled move or copy operation" : "Operazione di spostamento o copia annullata",
"Open folder {displayName}" : "Apri la cartella {displayName}",
"Open in Files" : "Apri in File",
"Open details" : "Apri i dettagli",
- "Created new folder \"{name}\"" : "Crea una nuova cartella \"{name}\"",
- "Set up templates folder" : "Configura la cartella dei modelli",
- "Templates" : "Modelli",
"Create new templates folder" : "Crea una nuova cartella dei templates",
+ "Templates" : "Modelli",
"Unable to initialize the templates directory" : "Impossibile inizializzare la cartella dei modelli",
+ "Created new folder \"{name}\"" : "Crea una nuova cartella \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} cartella","{folderCount} cartelle","{folderCount} cartelle"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} file","{fileCount} file","{fileCount} file"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 file e {folderCount} cartella","1 file e {folderCount} cartelle","1 file e {folderCount} cartelle"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} file e 1 cartella","{fileCount} file e 1 cartella","{fileCount} file e 1 cartella"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} file e {folderCount} cartelle",
"List of favorites files and folders." : "Lista di file e cartelle preferiti.",
"No favorites yet" : "Nessun preferito ancora",
"Files and folders you mark as favorite will show up here" : "I file e le cartelle che marchi come preferiti saranno mostrati qui",
@@ -273,6 +294,7 @@
"Unlimited" : "Illimitata",
"Search users" : "Cerca utenti",
"Cancel" : "Annulla",
+ "Set up templates folder" : "Configura la cartella dei modelli",
"%s used" : "%s utilizzato",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s di %2$s utilizzati",
@@ -286,6 +308,9 @@
"This file has the tag {tag}" : "Questo file ha il tag {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Il file ha i tag {firstTags} e {lastTag}",
"Open folder {name}" : "Apri la cartella {name}",
+ "ascending" : "crescente",
+ "descending" : "decrescente",
+ "Sort list by {column} ({direction})" : "Ordina la lista per {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Questa lista non è stata mostrata completamente per ragioni di performances. I file verranno mostrati durante la navigazione della lista.",
"Search for an account" : "Cerca un account",
"Choose" : "Scegli",
diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js
index 641b882de18..af95b279122 100644
--- a/apps/files/l10n/ja.js
+++ b/apps/files/l10n/ja.js
@@ -171,31 +171,34 @@ OC.L10N.register(
"File Management" : "ファイル管理",
"Reload current directory" : "カレントディレクトリの再読み込み",
"Go to the \"{dir}\" directory" : "\"{dir}\" ディレクトリに移動する",
+ "Drag and drop files here to upload" : "ここにファイルをドラッグ&ドロップしてアップロードする",
+ "Upload successful" : "アップロード成功",
+ "\"{displayName}\" action executed successfully" : "\"{displayName}\" アクションは正常に実行された",
+ "\"{displayName}\" action failed" : "\"{displayName}\" アクションは失敗しました",
"Select the row for {displayName}" : "{displayName} の行を選択する",
"Rename file" : "ファイル名の変更",
- "A long time ago" : "ずっと以前に",
- "This node is unavailable" : "このノードは利用できません",
- "Download file {name}" : "ファイル {name} をダウンロード",
"File name" : "ファイル名",
"Folder name" : "フォルダー名",
- "\"{displayName}\" action executed successfully" : "\"{displayName}\" アクションは正常に実行された",
- "\"{displayName}\" action failed" : "\"{displayName}\" アクションは失敗しました",
+ "This node is unavailable" : "このノードは利用できません",
+ "Download file {name}" : "ファイル {name} をダウンロード",
"\"{name}\" is not an allowed filetype." : "\"{name}\" は許可されたファイルタイプではありません。",
"{newName} already exists." : "{newName} すでに存在しています。",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\"はファイル名には使用できません。",
"Name cannot be empty" : "名前は空にできません",
"Another entry with the same name already exists" : "同じ名前の別のエントリがすでに存在しています",
"Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" から \"{newName}\" に名前を変更済み",
"Could not rename \"{oldName}\", it does not exist any more" : "\"{oldName}\" の名前を変更できませんでした、それは既に存在しません。",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{newName}\" という名前は \"{dir}\" フォルダですでに使用されています。別の名前を選択してください。",
"Could not rename \"{oldName}\"" : "\"{oldName}\" の名前を変更できませんでした。",
+ "A long time ago" : "ずっと以前に",
+ "Could not copy {file}. {message}" : "{file} をコピーできませんでした。 {message}",
+ "Could not move {file}. {message}" : "{file} を移動できませんでした。 {message}",
"Total rows summary" : "総行数のサマリー",
- "\"{displayName}\" failed on some elements " : "いくつかの要素で \"{displayName}\" が失敗しました。",
- "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" バッチアクションが正常に実行されました。",
- "ascending" : "昇順",
- "descending" : "降順",
- "Sort list by {column} ({direction})" : "{column} ({direction}) でリストを並べ替える",
"Select all" : "すべて選択",
"Unselect all" : "すべて選択解除",
+ "\"{displayName}\" failed on some elements " : "いくつかの要素で \"{displayName}\" が失敗しました。",
+ "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" バッチアクションが正常に実行されました。",
+ "Sort list by {column}" : "{column} でリストをソートする",
"List of files and folders." : "ファイルとフォルダの一覧。",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "このリストはパフォーマンスの都合上、すべてレンダリングされているわけではありません。リスト内を移動すると、ファイルが次々と表示されていきます。",
"{summaryFile} and {summaryFolder}" : "{summaryFile} と {summaryFolder}",
@@ -226,6 +229,8 @@ OC.L10N.register(
"Share" : "共有",
"Shared by link" : "URLリンクで共有中",
"Shared" : "共有中",
+ "Switch to list view" : "リスト表示へ切り替え",
+ "Switch to grid view" : "グリッド表示へ切り替え",
"Open the files app settings" : "ファイルアプリの設定を開く",
"Files settings" : "ファイルの設定",
"File cannot be accessed" : "ファイルにアクセスできません",
@@ -233,6 +238,7 @@ OC.L10N.register(
"Sort favorites first" : "お気に入りを最初に並べる",
"Show hidden files" : "隠しファイルを表示",
"Crop image previews" : "プレビュー画像を切り抜く",
+ "Enable the grid view" : "グリッド表示を有効にする",
"Additional settings" : "追加設定",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "クリップボードにコピー",
@@ -249,14 +255,28 @@ OC.L10N.register(
"Blank" : "ブランク",
"Unable to create new file from template" : "テンプレートから新しいファイルを作成できません",
"Delete permanently" : "永久に削除",
+ "Destination is not a folder" : "宛先がフォルダではありません",
+ "This file/folder is already in that directory" : "このファイル/フォルダはすでにそのディレクトリにあります",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "ファイル/フォルダをそれ自身の上に移動したり、それ自身のサブフォルダに移動したりすることはできません。",
+ "A file or folder with that name already exists in this folder" : "その名前のファイルまたはフォルダが、このフォルダに既に存在します",
+ "The files is locked" : "ファイルはロックされています",
+ "The file does not exist anymore" : "ファイルはもう存在しません",
+ "Chose destination" : "目的地を選ぶ",
+ "Copy to {target}" : "{target} にコピー",
+ "Move to {target}" : "{target} に移動",
+ "Cancelled move or copy operation" : "キャンセルされた移動またはコピー操作",
"Open folder {displayName}" : "フォルダ {displayName} を開く",
"Open in Files" : "ファイルアプリで開く",
"Open details" : "詳細を開く",
- "Created new folder \"{name}\"" : "新規フォルダ \"{name}\" を作成した",
- "Set up templates folder" : "テンプレートフォルダーを設定",
- "Templates" : "テンプレート",
"Create new templates folder" : "新しいテンプレートフォルダーを作成",
+ "Templates" : "テンプレート",
"Unable to initialize the templates directory" : "テンプレートディレクトリを初期化できませんでした",
+ "Created new folder \"{name}\"" : "新規フォルダ \"{name}\" を作成した",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} フォルダ"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} ファイル"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 ファイルと {folderCount} フォルダ"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} ファイルと 1 フォルダ"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} ファイルと {folderCount} フォルダ",
"List of favorites files and folders." : "お気に入りのファイルやフォルダーの一覧",
"No favorites yet" : "まだお気に入りはありません",
"Files and folders you mark as favorite will show up here" : "お気に入りに登録されたファイルやフォルダーは、ここに表示されます。",
@@ -276,6 +296,7 @@ OC.L10N.register(
"Unlimited" : "無制限",
"Search users" : "ユーザーを検索",
"Cancel" : "キャンセル",
+ "Set up templates folder" : "テンプレートフォルダーを設定",
"%s used" : "%s 使用中",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%2$s 中%1$s 使用中",
@@ -289,6 +310,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "このファイルには {tag} タグがあります。",
"This file has the tags {firstTags} and {lastTag}" : "このファイルには {firstTags} と {lastTag} というタグがあります",
"Open folder {name}" : "フォルダ {name} を開く",
+ "ascending" : "昇順",
+ "descending" : "降順",
+ "Sort list by {column} ({direction})" : "{column} ({direction}) でリストを並べ替える",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "このリストはパフォーマンスの都合上、すべてレンダリングされているわけではありません。リスト内を移動すると、ファイルが次々と表示されていきます。",
"Search for an account" : "アカウントを検索",
"Choose" : "選択",
diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json
index 9e25e7f90fb..b2022a7599d 100644
--- a/apps/files/l10n/ja.json
+++ b/apps/files/l10n/ja.json
@@ -169,31 +169,34 @@
"File Management" : "ファイル管理",
"Reload current directory" : "カレントディレクトリの再読み込み",
"Go to the \"{dir}\" directory" : "\"{dir}\" ディレクトリに移動する",
+ "Drag and drop files here to upload" : "ここにファイルをドラッグ&ドロップしてアップロードする",
+ "Upload successful" : "アップロード成功",
+ "\"{displayName}\" action executed successfully" : "\"{displayName}\" アクションは正常に実行された",
+ "\"{displayName}\" action failed" : "\"{displayName}\" アクションは失敗しました",
"Select the row for {displayName}" : "{displayName} の行を選択する",
"Rename file" : "ファイル名の変更",
- "A long time ago" : "ずっと以前に",
- "This node is unavailable" : "このノードは利用できません",
- "Download file {name}" : "ファイル {name} をダウンロード",
"File name" : "ファイル名",
"Folder name" : "フォルダー名",
- "\"{displayName}\" action executed successfully" : "\"{displayName}\" アクションは正常に実行された",
- "\"{displayName}\" action failed" : "\"{displayName}\" アクションは失敗しました",
+ "This node is unavailable" : "このノードは利用できません",
+ "Download file {name}" : "ファイル {name} をダウンロード",
"\"{name}\" is not an allowed filetype." : "\"{name}\" は許可されたファイルタイプではありません。",
"{newName} already exists." : "{newName} すでに存在しています。",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\"はファイル名には使用できません。",
"Name cannot be empty" : "名前は空にできません",
"Another entry with the same name already exists" : "同じ名前の別のエントリがすでに存在しています",
"Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" から \"{newName}\" に名前を変更済み",
"Could not rename \"{oldName}\", it does not exist any more" : "\"{oldName}\" の名前を変更できませんでした、それは既に存在しません。",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{newName}\" という名前は \"{dir}\" フォルダですでに使用されています。別の名前を選択してください。",
"Could not rename \"{oldName}\"" : "\"{oldName}\" の名前を変更できませんでした。",
+ "A long time ago" : "ずっと以前に",
+ "Could not copy {file}. {message}" : "{file} をコピーできませんでした。 {message}",
+ "Could not move {file}. {message}" : "{file} を移動できませんでした。 {message}",
"Total rows summary" : "総行数のサマリー",
- "\"{displayName}\" failed on some elements " : "いくつかの要素で \"{displayName}\" が失敗しました。",
- "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" バッチアクションが正常に実行されました。",
- "ascending" : "昇順",
- "descending" : "降順",
- "Sort list by {column} ({direction})" : "{column} ({direction}) でリストを並べ替える",
"Select all" : "すべて選択",
"Unselect all" : "すべて選択解除",
+ "\"{displayName}\" failed on some elements " : "いくつかの要素で \"{displayName}\" が失敗しました。",
+ "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" バッチアクションが正常に実行されました。",
+ "Sort list by {column}" : "{column} でリストをソートする",
"List of files and folders." : "ファイルとフォルダの一覧。",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "このリストはパフォーマンスの都合上、すべてレンダリングされているわけではありません。リスト内を移動すると、ファイルが次々と表示されていきます。",
"{summaryFile} and {summaryFolder}" : "{summaryFile} と {summaryFolder}",
@@ -224,6 +227,8 @@
"Share" : "共有",
"Shared by link" : "URLリンクで共有中",
"Shared" : "共有中",
+ "Switch to list view" : "リスト表示へ切り替え",
+ "Switch to grid view" : "グリッド表示へ切り替え",
"Open the files app settings" : "ファイルアプリの設定を開く",
"Files settings" : "ファイルの設定",
"File cannot be accessed" : "ファイルにアクセスできません",
@@ -231,6 +236,7 @@
"Sort favorites first" : "お気に入りを最初に並べる",
"Show hidden files" : "隠しファイルを表示",
"Crop image previews" : "プレビュー画像を切り抜く",
+ "Enable the grid view" : "グリッド表示を有効にする",
"Additional settings" : "追加設定",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "クリップボードにコピー",
@@ -247,14 +253,28 @@
"Blank" : "ブランク",
"Unable to create new file from template" : "テンプレートから新しいファイルを作成できません",
"Delete permanently" : "永久に削除",
+ "Destination is not a folder" : "宛先がフォルダではありません",
+ "This file/folder is already in that directory" : "このファイル/フォルダはすでにそのディレクトリにあります",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "ファイル/フォルダをそれ自身の上に移動したり、それ自身のサブフォルダに移動したりすることはできません。",
+ "A file or folder with that name already exists in this folder" : "その名前のファイルまたはフォルダが、このフォルダに既に存在します",
+ "The files is locked" : "ファイルはロックされています",
+ "The file does not exist anymore" : "ファイルはもう存在しません",
+ "Chose destination" : "目的地を選ぶ",
+ "Copy to {target}" : "{target} にコピー",
+ "Move to {target}" : "{target} に移動",
+ "Cancelled move or copy operation" : "キャンセルされた移動またはコピー操作",
"Open folder {displayName}" : "フォルダ {displayName} を開く",
"Open in Files" : "ファイルアプリで開く",
"Open details" : "詳細を開く",
- "Created new folder \"{name}\"" : "新規フォルダ \"{name}\" を作成した",
- "Set up templates folder" : "テンプレートフォルダーを設定",
- "Templates" : "テンプレート",
"Create new templates folder" : "新しいテンプレートフォルダーを作成",
+ "Templates" : "テンプレート",
"Unable to initialize the templates directory" : "テンプレートディレクトリを初期化できませんでした",
+ "Created new folder \"{name}\"" : "新規フォルダ \"{name}\" を作成した",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} フォルダ"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} ファイル"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 ファイルと {folderCount} フォルダ"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} ファイルと 1 フォルダ"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} ファイルと {folderCount} フォルダ",
"List of favorites files and folders." : "お気に入りのファイルやフォルダーの一覧",
"No favorites yet" : "まだお気に入りはありません",
"Files and folders you mark as favorite will show up here" : "お気に入りに登録されたファイルやフォルダーは、ここに表示されます。",
@@ -274,6 +294,7 @@
"Unlimited" : "無制限",
"Search users" : "ユーザーを検索",
"Cancel" : "キャンセル",
+ "Set up templates folder" : "テンプレートフォルダーを設定",
"%s used" : "%s 使用中",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%2$s 中%1$s 使用中",
@@ -287,6 +308,9 @@
"This file has the tag {tag}" : "このファイルには {tag} タグがあります。",
"This file has the tags {firstTags} and {lastTag}" : "このファイルには {firstTags} と {lastTag} というタグがあります",
"Open folder {name}" : "フォルダ {name} を開く",
+ "ascending" : "昇順",
+ "descending" : "降順",
+ "Sort list by {column} ({direction})" : "{column} ({direction}) でリストを並べ替える",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "このリストはパフォーマンスの都合上、すべてレンダリングされているわけではありません。リスト内を移動すると、ファイルが次々と表示されていきます。",
"Search for an account" : "アカウントを検索",
"Choose" : "選択",
diff --git a/apps/files/l10n/ko.js b/apps/files/l10n/ko.js
index bd90d5565c0..bcccd4832b9 100644
--- a/apps/files/l10n/ko.js
+++ b/apps/files/l10n/ko.js
@@ -169,26 +169,23 @@ OC.L10N.register(
"File Management" : "파일 관리",
"Reload current directory" : "이 경로를 새로고침",
"Go to the \"{dir}\" directory" : "\"{dir}\" 경로로 이동",
+ "\"{displayName}\" action executed successfully" : "\"{displayName}\" 작업을 성공적으로 실행함",
+ "\"{displayName}\" action failed" : "\"{displayName}\" 작업을 실패함",
"Select the row for {displayName}" : "{displayName}을 위한 행을 선택",
"Rename file" : "파일 이름 바꾸기",
- "A long time ago" : "오래 전",
- "This node is unavailable" : "이 노드를 사용할 수 없습니다",
- "Download file {name}" : "{name} 파일 다운로드",
"File name" : "파일 이름",
"Folder name" : "폴더 이름",
- "\"{displayName}\" action executed successfully" : "\"{displayName}\" 작업을 성공적으로 실행함",
- "\"{displayName}\" action failed" : "\"{displayName}\" 작업을 실패함",
+ "This node is unavailable" : "이 노드를 사용할 수 없습니다",
+ "Download file {name}" : "{name} 파일 다운로드",
"\"{name}\" is not an allowed filetype." : "\"{name}\"은(는) 허용된 파일 형식이 아님.",
"{newName} already exists." : "{newName}이(가) 이미 존재함.",
"Name cannot be empty" : "이름이 비어 있을 수 없음",
+ "A long time ago" : "오래 전",
"Total rows summary" : "총 행 요약",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" 이 일부 요소들에서 실패함",
- "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" 일괄 작업을 성공적으로 실행함",
- "ascending" : "오름차순",
- "descending" : "내림차순",
- "Sort list by {column} ({direction})" : "{column} ({direction})으로 목록 정렬",
"Select all" : "모두 선택",
"Unselect all" : "모두 선택 해제",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" 이 일부 요소들에서 실패함",
+ "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" 일괄 작업을 성공적으로 실행함",
"File not found" : "파일을 찾을 수 없음",
"Storage informations" : "저장소 정보",
"{usedQuotaByte} used" : "{usedQuotaByte} 사용",
@@ -240,9 +237,8 @@ OC.L10N.register(
"Open folder {displayName}" : "{displayName} 폴더 열기",
"Open in Files" : "파일에서 열기",
"Open details" : "자세한 정보 열기",
- "Set up templates folder" : "템플릿 폴더 설정",
- "Templates" : "템플릿",
"Create new templates folder" : "새로운 템플릿 폴더 만들기",
+ "Templates" : "템플릿",
"Unable to initialize the templates directory" : "템플릿 디렉터리를 설정할 수 없음",
"No favorites yet" : "즐겨찾는 항목 없음",
"Files and folders you mark as favorite will show up here" : "즐겨찾기에 추가한 파일과 폴더가 여기에 나타납니다",
@@ -257,6 +253,7 @@ OC.L10N.register(
"Unlimited" : "무제한",
"Search users" : "사용자 검색",
"Cancel" : "취소",
+ "Set up templates folder" : "템플릿 폴더 설정",
"%s used" : "%s 사용함",
"%1$s of %2$s used" : "%2$s 중 %1$s 사용됨",
"Toggle grid view" : "모눈 보기 전환",
@@ -269,6 +266,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "이 파일에 {tag} 태그가 있음",
"This file has the tags {firstTags} and {lastTag}" : "이 파일에 {firstTags}와 {lastTag} 태그가 있음",
"Open folder {name}" : "{name} 폴더 열기",
+ "ascending" : "오름차순",
+ "descending" : "내림차순",
+ "Sort list by {column} ({direction})" : "{column} ({direction})으로 목록 정렬",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "이 목록은 성능 상의 이유로 완전히 표시되지 않았습니다. 목록을 탐색하면 파일이 표시됩니다.",
"Search for an account" : "계정 검색",
"Choose" : "선택",
diff --git a/apps/files/l10n/ko.json b/apps/files/l10n/ko.json
index c58b6b0a0ba..45f6464bda1 100644
--- a/apps/files/l10n/ko.json
+++ b/apps/files/l10n/ko.json
@@ -167,26 +167,23 @@
"File Management" : "파일 관리",
"Reload current directory" : "이 경로를 새로고침",
"Go to the \"{dir}\" directory" : "\"{dir}\" 경로로 이동",
+ "\"{displayName}\" action executed successfully" : "\"{displayName}\" 작업을 성공적으로 실행함",
+ "\"{displayName}\" action failed" : "\"{displayName}\" 작업을 실패함",
"Select the row for {displayName}" : "{displayName}을 위한 행을 선택",
"Rename file" : "파일 이름 바꾸기",
- "A long time ago" : "오래 전",
- "This node is unavailable" : "이 노드를 사용할 수 없습니다",
- "Download file {name}" : "{name} 파일 다운로드",
"File name" : "파일 이름",
"Folder name" : "폴더 이름",
- "\"{displayName}\" action executed successfully" : "\"{displayName}\" 작업을 성공적으로 실행함",
- "\"{displayName}\" action failed" : "\"{displayName}\" 작업을 실패함",
+ "This node is unavailable" : "이 노드를 사용할 수 없습니다",
+ "Download file {name}" : "{name} 파일 다운로드",
"\"{name}\" is not an allowed filetype." : "\"{name}\"은(는) 허용된 파일 형식이 아님.",
"{newName} already exists." : "{newName}이(가) 이미 존재함.",
"Name cannot be empty" : "이름이 비어 있을 수 없음",
+ "A long time ago" : "오래 전",
"Total rows summary" : "총 행 요약",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" 이 일부 요소들에서 실패함",
- "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" 일괄 작업을 성공적으로 실행함",
- "ascending" : "오름차순",
- "descending" : "내림차순",
- "Sort list by {column} ({direction})" : "{column} ({direction})으로 목록 정렬",
"Select all" : "모두 선택",
"Unselect all" : "모두 선택 해제",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" 이 일부 요소들에서 실패함",
+ "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" 일괄 작업을 성공적으로 실행함",
"File not found" : "파일을 찾을 수 없음",
"Storage informations" : "저장소 정보",
"{usedQuotaByte} used" : "{usedQuotaByte} 사용",
@@ -238,9 +235,8 @@
"Open folder {displayName}" : "{displayName} 폴더 열기",
"Open in Files" : "파일에서 열기",
"Open details" : "자세한 정보 열기",
- "Set up templates folder" : "템플릿 폴더 설정",
- "Templates" : "템플릿",
"Create new templates folder" : "새로운 템플릿 폴더 만들기",
+ "Templates" : "템플릿",
"Unable to initialize the templates directory" : "템플릿 디렉터리를 설정할 수 없음",
"No favorites yet" : "즐겨찾는 항목 없음",
"Files and folders you mark as favorite will show up here" : "즐겨찾기에 추가한 파일과 폴더가 여기에 나타납니다",
@@ -255,6 +251,7 @@
"Unlimited" : "무제한",
"Search users" : "사용자 검색",
"Cancel" : "취소",
+ "Set up templates folder" : "템플릿 폴더 설정",
"%s used" : "%s 사용함",
"%1$s of %2$s used" : "%2$s 중 %1$s 사용됨",
"Toggle grid view" : "모눈 보기 전환",
@@ -267,6 +264,9 @@
"This file has the tag {tag}" : "이 파일에 {tag} 태그가 있음",
"This file has the tags {firstTags} and {lastTag}" : "이 파일에 {firstTags}와 {lastTag} 태그가 있음",
"Open folder {name}" : "{name} 폴더 열기",
+ "ascending" : "오름차순",
+ "descending" : "내림차순",
+ "Sort list by {column} ({direction})" : "{column} ({direction})으로 목록 정렬",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "이 목록은 성능 상의 이유로 완전히 표시되지 않았습니다. 목록을 탐색하면 파일이 표시됩니다.",
"Search for an account" : "계정 검색",
"Choose" : "선택",
diff --git a/apps/files/l10n/lt_LT.js b/apps/files/l10n/lt_LT.js
index 311a76d5de8..b55ce4fdc01 100644
--- a/apps/files/l10n/lt_LT.js
+++ b/apps/files/l10n/lt_LT.js
@@ -22,6 +22,7 @@ OC.L10N.register(
"An unknown error has occurred" : "Įvyko nežinoma klaida",
"File could not be uploaded" : "Nepavyko įkelti failo",
"Uploading …" : "Įkeliama…",
+ "{remainingTime} ({currentNumber}/{total})" : "{remainingTime} ({currentNumber}/{total})",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} iš {totalSize} ({bitrate})",
"Uploading that item is not supported" : "To elemento įkėlimas nėra palaikomas",
"Target folder does not exist any more" : "Paskirties aplanko daugiau nebėra",
@@ -32,6 +33,7 @@ OC.L10N.register(
"Move" : "Perkelti",
"Copy" : "Kopijuoti",
"Choose target folder" : "Pasirinkite paskirties aplanką",
+ "Set reminder" : "Nustatyti priminimą",
"Edit locally" : "Redaguoti lokaliai",
"Open" : "Atverti",
"Delete file" : "Ištrinti failą",
@@ -40,7 +42,7 @@ OC.L10N.register(
"Leave this share" : "Palikti bendrinimą",
"Could not load info for file \"{file}\"" : "Nepavyko įkelti informacijos failui „{file}“",
"Files" : "Failai",
- "Details" : "Duomenys",
+ "Details" : "Išsamiau",
"Please select tag(s) to add to the selection" : "Pasirinkite raktažodžius pridėti prie pažymėtų",
"Apply tag(s) to selection" : "Pritaikyti raktažodžiuis pasirinktiems",
"Select directory \"{dirName}\"" : "Pasirinkite direktoriją \"{dirName}\"",
@@ -159,11 +161,21 @@ OC.L10N.register(
"The ownership transfer of {path} from {user} has completed." : "{path} nuosavybės perdavimas iš naudotojo {user} užbaigtas.",
"in %s" : "per %s",
"File Management" : "Failų tvarkymas",
+ "Rename file" : "Pervadinti failą",
"File name" : "Failo pavadinimas",
"Folder name" : "Aplanko pavadinimas",
+ "Download file {name}" : "Atsisiųsti failą {name}",
+ "{newName} already exists." : "{newName} jau yra.",
"Name cannot be empty" : "Pavadinimas negali būti tuščias",
+ "A long time ago" : "Prieš ilgą laiką",
+ "Could not copy {file}. {message}" : "Nepavyko nukopijuoti {file}. {message}",
+ "Could not move {file}. {message}" : "Nepavyko perkelti {file}. {message}",
"Select all" : "Pažymėti viską",
+ "List of files and folders." : "Failų ir aplankų sąrašas.",
+ "{summaryFile} and {summaryFolder}" : "{summaryFile} ir {summaryFolder}",
"File not found" : "Failas nerastas",
+ "_{count} file_::_{count} files_" : ["{count} failas","{count} failai","{count} failų","{count} failas"],
+ "_{count} folder_::_{count} folders_" : ["{count} aplankas","{count} aplankai","{count} aplankų","{count} aplankas"],
"Storage informations" : "Informacija apie saugyklą",
"Transfer ownership of a file or folder" : "Perduoti failo ar aplanko nuosavybę",
"Choose file or folder to transfer" : "Pasirinkti norimą perduoti failą ar aplanką",
@@ -181,6 +193,7 @@ OC.L10N.register(
"Share" : "Bendrinti",
"Shared by link" : "Bendrinama pagal nuorodą",
"Shared" : "Bendrinama",
+ "Switch to list view" : "Perjungti į sąrašo rodinį",
"Files settings" : "Failų nustatymai",
"Show hidden files" : "Rodyti paslėptus failus",
"Crop image previews" : "Apkirpti paveikslų peržiūras",
@@ -197,6 +210,7 @@ OC.L10N.register(
"Creating file" : "Sukuriamas failas",
"Unable to create new file from template" : "Nepavyko sukurti naujo failo iš šablono",
"Delete permanently" : "Ištrinti negrįžtamai",
+ "The file does not exist anymore" : "Failo daugiau nebėra",
"Templates" : "Šablonai",
"Unable to initialize the templates directory" : "Nepavyko inicijuoti šablonų katalogo",
"No favorites yet" : "Kol kas nėra mėgstamų",
diff --git a/apps/files/l10n/lt_LT.json b/apps/files/l10n/lt_LT.json
index a47e2bf0123..3e9cee8795c 100644
--- a/apps/files/l10n/lt_LT.json
+++ b/apps/files/l10n/lt_LT.json
@@ -20,6 +20,7 @@
"An unknown error has occurred" : "Įvyko nežinoma klaida",
"File could not be uploaded" : "Nepavyko įkelti failo",
"Uploading …" : "Įkeliama…",
+ "{remainingTime} ({currentNumber}/{total})" : "{remainingTime} ({currentNumber}/{total})",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} iš {totalSize} ({bitrate})",
"Uploading that item is not supported" : "To elemento įkėlimas nėra palaikomas",
"Target folder does not exist any more" : "Paskirties aplanko daugiau nebėra",
@@ -30,6 +31,7 @@
"Move" : "Perkelti",
"Copy" : "Kopijuoti",
"Choose target folder" : "Pasirinkite paskirties aplanką",
+ "Set reminder" : "Nustatyti priminimą",
"Edit locally" : "Redaguoti lokaliai",
"Open" : "Atverti",
"Delete file" : "Ištrinti failą",
@@ -38,7 +40,7 @@
"Leave this share" : "Palikti bendrinimą",
"Could not load info for file \"{file}\"" : "Nepavyko įkelti informacijos failui „{file}“",
"Files" : "Failai",
- "Details" : "Duomenys",
+ "Details" : "Išsamiau",
"Please select tag(s) to add to the selection" : "Pasirinkite raktažodžius pridėti prie pažymėtų",
"Apply tag(s) to selection" : "Pritaikyti raktažodžiuis pasirinktiems",
"Select directory \"{dirName}\"" : "Pasirinkite direktoriją \"{dirName}\"",
@@ -157,11 +159,21 @@
"The ownership transfer of {path} from {user} has completed." : "{path} nuosavybės perdavimas iš naudotojo {user} užbaigtas.",
"in %s" : "per %s",
"File Management" : "Failų tvarkymas",
+ "Rename file" : "Pervadinti failą",
"File name" : "Failo pavadinimas",
"Folder name" : "Aplanko pavadinimas",
+ "Download file {name}" : "Atsisiųsti failą {name}",
+ "{newName} already exists." : "{newName} jau yra.",
"Name cannot be empty" : "Pavadinimas negali būti tuščias",
+ "A long time ago" : "Prieš ilgą laiką",
+ "Could not copy {file}. {message}" : "Nepavyko nukopijuoti {file}. {message}",
+ "Could not move {file}. {message}" : "Nepavyko perkelti {file}. {message}",
"Select all" : "Pažymėti viską",
+ "List of files and folders." : "Failų ir aplankų sąrašas.",
+ "{summaryFile} and {summaryFolder}" : "{summaryFile} ir {summaryFolder}",
"File not found" : "Failas nerastas",
+ "_{count} file_::_{count} files_" : ["{count} failas","{count} failai","{count} failų","{count} failas"],
+ "_{count} folder_::_{count} folders_" : ["{count} aplankas","{count} aplankai","{count} aplankų","{count} aplankas"],
"Storage informations" : "Informacija apie saugyklą",
"Transfer ownership of a file or folder" : "Perduoti failo ar aplanko nuosavybę",
"Choose file or folder to transfer" : "Pasirinkti norimą perduoti failą ar aplanką",
@@ -179,6 +191,7 @@
"Share" : "Bendrinti",
"Shared by link" : "Bendrinama pagal nuorodą",
"Shared" : "Bendrinama",
+ "Switch to list view" : "Perjungti į sąrašo rodinį",
"Files settings" : "Failų nustatymai",
"Show hidden files" : "Rodyti paslėptus failus",
"Crop image previews" : "Apkirpti paveikslų peržiūras",
@@ -195,6 +208,7 @@
"Creating file" : "Sukuriamas failas",
"Unable to create new file from template" : "Nepavyko sukurti naujo failo iš šablono",
"Delete permanently" : "Ištrinti negrįžtamai",
+ "The file does not exist anymore" : "Failo daugiau nebėra",
"Templates" : "Šablonai",
"Unable to initialize the templates directory" : "Nepavyko inicijuoti šablonų katalogo",
"No favorites yet" : "Kol kas nėra mėgstamų",
diff --git a/apps/files/l10n/mk.js b/apps/files/l10n/mk.js
index cc02eb29174..40d7f396f3b 100644
--- a/apps/files/l10n/mk.js
+++ b/apps/files/l10n/mk.js
@@ -105,7 +105,7 @@ OC.L10N.register(
"Path" : "Патека",
"_%n byte_::_%n bytes_" : ["%n бајт","%n бајти"],
"Favorited" : "Омилени",
- "Favorite" : "Омилен",
+ "Favorite" : "Омилени",
"Copy direct link (only works for users who have access to this file/folder)" : "Копирај директен линк (работи само за корисници кој имаат директен пристап до датотеката/папката)",
"New folder" : "Нова папка",
"Create new folder" : "Креирај нова папка",
@@ -171,15 +171,14 @@ OC.L10N.register(
"File Management" : "Датотеки",
"Reload current directory" : "Превчитај ја повторно моменталната папка",
"Go to the \"{dir}\" directory" : "Оди до \"{dir}\" папката",
+ "\"{displayName}\" action executed successfully" : "\"{displayName}\" акцијата е успешно извршена",
+ "\"{displayName}\" action failed" : "\"{displayName}\" акцијата не успеа",
"Select the row for {displayName}" : "Избери ред за {displayName}",
"Rename file" : "Преименувај датотека",
- "A long time ago" : "Многу одамна",
- "This node is unavailable" : "Нодот е недостапен",
- "Download file {name}" : "Преземи датотека {name}",
"File name" : "Име на датотека",
"Folder name" : "Име на папка",
- "\"{displayName}\" action executed successfully" : "\"{displayName}\" акцијата е успешно извршена",
- "\"{displayName}\" action failed" : "\"{displayName}\" акцијата не успеа",
+ "This node is unavailable" : "Нодот е недостапен",
+ "Download file {name}" : "Преземи датотека {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" не е дозволен вид на датотека.",
"{newName} already exists." : "{newName} веќе постои.",
"Name cannot be empty" : "Името неможе да биде празно",
@@ -188,14 +187,12 @@ OC.L10N.register(
"Could not rename \"{oldName}\", it does not exist any more" : "Неможе да се преименува \"{oldName}\", не постои повеќе",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Името \"{newName}\" веќе се користи во папката \"{dir}\". Ве молиме изберете друго име.",
"Could not rename \"{oldName}\"" : "Неможе да се преименува \"{oldName}\"",
+ "A long time ago" : "Многу одамна",
"Total rows summary" : "Резиме на вкупно редови",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" не успеа на некои елементи",
- "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" сериската акцијата е успешно извршена",
- "ascending" : "растечки",
- "descending" : "опаѓачки",
- "Sort list by {column} ({direction})" : "Подреди листа по {column} ({direction})",
"Select all" : "Избери се",
"Unselect all" : "Од-означи се",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" не успеа на некои елементи",
+ "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" сериската акцијата е успешно извршена",
"List of files and folders." : "Листа на датотеки и папки.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Оваа листа не е целосно прикажана поради заштеда на перформанси. Датотеките ќе се прикажуваат додека се движите низ листата.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} и {summaryFolder}",
@@ -254,11 +251,10 @@ OC.L10N.register(
"Open folder {displayName}" : "Отвори папка {displayName}",
"Open in Files" : "Отвори во датотеките",
"Open details" : "Отвори детали",
- "Created new folder \"{name}\"" : "Креирана нова папка \"{name}\"",
- "Set up templates folder" : "Поставете папка за шаблони",
- "Templates" : "Шаблони",
"Create new templates folder" : "Креирај нова папка за шаблони",
+ "Templates" : "Шаблони",
"Unable to initialize the templates directory" : "Не може да се иницијализира папка за шаблони",
+ "Created new folder \"{name}\"" : "Креирана нова папка \"{name}\"",
"List of favorites files and folders." : "Листа на омилени датотеки и папки.",
"No favorites yet" : "Сеуште нема фаворити",
"Files and folders you mark as favorite will show up here" : "Датотеките и папките кои ќе ги означите како чести, ќе се појават тука",
@@ -278,6 +274,7 @@ OC.L10N.register(
"Unlimited" : "Неограничено",
"Search users" : "Пребарувај корисници",
"Cancel" : "Откажи",
+ "Set up templates folder" : "Поставете папка за шаблони",
"%s used" : "Искористено %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Искористено %1$s од %2$s",
@@ -291,6 +288,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Оваа датотека има ознака {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Оваа датотека има ознаки {firstTags} и {lastTag}",
"Open folder {name}" : "Отвори папка {name}",
+ "ascending" : "растечки",
+ "descending" : "опаѓачки",
+ "Sort list by {column} ({direction})" : "Подреди листа по {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Оваа листа не е целосно прикажана поради заштеда на перформанси. Датотеките ќе се прикажуваат додека се движите низ листата.",
"Search for an account" : "Пребарај сметка",
"Choose" : "Избери",
diff --git a/apps/files/l10n/mk.json b/apps/files/l10n/mk.json
index 7370a63d5ac..52320b30fe8 100644
--- a/apps/files/l10n/mk.json
+++ b/apps/files/l10n/mk.json
@@ -103,7 +103,7 @@
"Path" : "Патека",
"_%n byte_::_%n bytes_" : ["%n бајт","%n бајти"],
"Favorited" : "Омилени",
- "Favorite" : "Омилен",
+ "Favorite" : "Омилени",
"Copy direct link (only works for users who have access to this file/folder)" : "Копирај директен линк (работи само за корисници кој имаат директен пристап до датотеката/папката)",
"New folder" : "Нова папка",
"Create new folder" : "Креирај нова папка",
@@ -169,15 +169,14 @@
"File Management" : "Датотеки",
"Reload current directory" : "Превчитај ја повторно моменталната папка",
"Go to the \"{dir}\" directory" : "Оди до \"{dir}\" папката",
+ "\"{displayName}\" action executed successfully" : "\"{displayName}\" акцијата е успешно извршена",
+ "\"{displayName}\" action failed" : "\"{displayName}\" акцијата не успеа",
"Select the row for {displayName}" : "Избери ред за {displayName}",
"Rename file" : "Преименувај датотека",
- "A long time ago" : "Многу одамна",
- "This node is unavailable" : "Нодот е недостапен",
- "Download file {name}" : "Преземи датотека {name}",
"File name" : "Име на датотека",
"Folder name" : "Име на папка",
- "\"{displayName}\" action executed successfully" : "\"{displayName}\" акцијата е успешно извршена",
- "\"{displayName}\" action failed" : "\"{displayName}\" акцијата не успеа",
+ "This node is unavailable" : "Нодот е недостапен",
+ "Download file {name}" : "Преземи датотека {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" не е дозволен вид на датотека.",
"{newName} already exists." : "{newName} веќе постои.",
"Name cannot be empty" : "Името неможе да биде празно",
@@ -186,14 +185,12 @@
"Could not rename \"{oldName}\", it does not exist any more" : "Неможе да се преименува \"{oldName}\", не постои повеќе",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Името \"{newName}\" веќе се користи во папката \"{dir}\". Ве молиме изберете друго име.",
"Could not rename \"{oldName}\"" : "Неможе да се преименува \"{oldName}\"",
+ "A long time ago" : "Многу одамна",
"Total rows summary" : "Резиме на вкупно редови",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" не успеа на некои елементи",
- "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" сериската акцијата е успешно извршена",
- "ascending" : "растечки",
- "descending" : "опаѓачки",
- "Sort list by {column} ({direction})" : "Подреди листа по {column} ({direction})",
"Select all" : "Избери се",
"Unselect all" : "Од-означи се",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" не успеа на некои елементи",
+ "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" сериската акцијата е успешно извршена",
"List of files and folders." : "Листа на датотеки и папки.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Оваа листа не е целосно прикажана поради заштеда на перформанси. Датотеките ќе се прикажуваат додека се движите низ листата.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} и {summaryFolder}",
@@ -252,11 +249,10 @@
"Open folder {displayName}" : "Отвори папка {displayName}",
"Open in Files" : "Отвори во датотеките",
"Open details" : "Отвори детали",
- "Created new folder \"{name}\"" : "Креирана нова папка \"{name}\"",
- "Set up templates folder" : "Поставете папка за шаблони",
- "Templates" : "Шаблони",
"Create new templates folder" : "Креирај нова папка за шаблони",
+ "Templates" : "Шаблони",
"Unable to initialize the templates directory" : "Не може да се иницијализира папка за шаблони",
+ "Created new folder \"{name}\"" : "Креирана нова папка \"{name}\"",
"List of favorites files and folders." : "Листа на омилени датотеки и папки.",
"No favorites yet" : "Сеуште нема фаворити",
"Files and folders you mark as favorite will show up here" : "Датотеките и папките кои ќе ги означите како чести, ќе се појават тука",
@@ -276,6 +272,7 @@
"Unlimited" : "Неограничено",
"Search users" : "Пребарувај корисници",
"Cancel" : "Откажи",
+ "Set up templates folder" : "Поставете папка за шаблони",
"%s used" : "Искористено %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Искористено %1$s од %2$s",
@@ -289,6 +286,9 @@
"This file has the tag {tag}" : "Оваа датотека има ознака {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Оваа датотека има ознаки {firstTags} и {lastTag}",
"Open folder {name}" : "Отвори папка {name}",
+ "ascending" : "растечки",
+ "descending" : "опаѓачки",
+ "Sort list by {column} ({direction})" : "Подреди листа по {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Оваа листа не е целосно прикажана поради заштеда на перформанси. Датотеките ќе се прикажуваат додека се движите низ листата.",
"Search for an account" : "Пребарај сметка",
"Choose" : "Избери",
diff --git a/apps/files/l10n/nb.js b/apps/files/l10n/nb.js
index aff500cb746..9c126d5e44d 100644
--- a/apps/files/l10n/nb.js
+++ b/apps/files/l10n/nb.js
@@ -211,7 +211,6 @@ OC.L10N.register(
"Unable to create new file from template" : "Kan ikke opprette ny fil fra malen",
"Delete permanently" : "Slett for godt",
"Open details" : "Åpne detaljer",
- "Set up templates folder" : "Sett opp mal-mappen",
"Templates" : "Maler",
"Unable to initialize the templates directory" : "Kan ikke initialisere mal-mappen",
"No favorites yet" : "Ingen favoritter enda",
@@ -228,6 +227,7 @@ OC.L10N.register(
"Unlimited" : "Ubegrenset",
"Search users" : "Søk etter brukere",
"Cancel" : "Avbryt",
+ "Set up templates folder" : "Sett opp mal-mappen",
"%s used" : "%s brukt",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s av %2$s brukt",
diff --git a/apps/files/l10n/nb.json b/apps/files/l10n/nb.json
index a9f62fcd889..b597e207af5 100644
--- a/apps/files/l10n/nb.json
+++ b/apps/files/l10n/nb.json
@@ -209,7 +209,6 @@
"Unable to create new file from template" : "Kan ikke opprette ny fil fra malen",
"Delete permanently" : "Slett for godt",
"Open details" : "Åpne detaljer",
- "Set up templates folder" : "Sett opp mal-mappen",
"Templates" : "Maler",
"Unable to initialize the templates directory" : "Kan ikke initialisere mal-mappen",
"No favorites yet" : "Ingen favoritter enda",
@@ -226,6 +225,7 @@
"Unlimited" : "Ubegrenset",
"Search users" : "Søk etter brukere",
"Cancel" : "Avbryt",
+ "Set up templates folder" : "Sett opp mal-mappen",
"%s used" : "%s brukt",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s av %2$s brukt",
diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js
index 832fe7330a8..eeb6a2bee6f 100644
--- a/apps/files/l10n/nl.js
+++ b/apps/files/l10n/nl.js
@@ -188,6 +188,7 @@ OC.L10N.register(
"Share" : "Delen",
"Shared by link" : "Gedeeld via link",
"Shared" : "Gedeeld",
+ "Switch to list view" : "Omschakelen naar lijstoverzicht",
"Files settings" : "Instellingen voor bestanden",
"Show hidden files" : "Toon verborgen bestanden",
"Crop image previews" : "Snij afbeeldingvoorbeelden bij",
@@ -205,7 +206,6 @@ OC.L10N.register(
"Unable to create new file from template" : "Kan geen nieuw bestand maken vanuit het sjabloon",
"Delete permanently" : "Permanent verwijderen",
"Open details" : "Details openen",
- "Set up templates folder" : "Instellen sjablonenmap",
"Templates" : "Sjablonen",
"Unable to initialize the templates directory" : "Kon de sjablonenmap niet instellen",
"No favorites yet" : "Nog geen favorieten",
@@ -222,6 +222,7 @@ OC.L10N.register(
"Unlimited" : "Ongelimiteerd",
"Search users" : "Gebruikers zoeken",
"Cancel" : "Annuleren",
+ "Set up templates folder" : "Instellen sjablonenmap",
"%s used" : "%s gebruikt",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s van %2$s gebruikt",
diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json
index a089cb50ab5..03514d0d028 100644
--- a/apps/files/l10n/nl.json
+++ b/apps/files/l10n/nl.json
@@ -186,6 +186,7 @@
"Share" : "Delen",
"Shared by link" : "Gedeeld via link",
"Shared" : "Gedeeld",
+ "Switch to list view" : "Omschakelen naar lijstoverzicht",
"Files settings" : "Instellingen voor bestanden",
"Show hidden files" : "Toon verborgen bestanden",
"Crop image previews" : "Snij afbeeldingvoorbeelden bij",
@@ -203,7 +204,6 @@
"Unable to create new file from template" : "Kan geen nieuw bestand maken vanuit het sjabloon",
"Delete permanently" : "Permanent verwijderen",
"Open details" : "Details openen",
- "Set up templates folder" : "Instellen sjablonenmap",
"Templates" : "Sjablonen",
"Unable to initialize the templates directory" : "Kon de sjablonenmap niet instellen",
"No favorites yet" : "Nog geen favorieten",
@@ -220,6 +220,7 @@
"Unlimited" : "Ongelimiteerd",
"Search users" : "Gebruikers zoeken",
"Cancel" : "Annuleren",
+ "Set up templates folder" : "Instellen sjablonenmap",
"%s used" : "%s gebruikt",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s van %2$s gebruikt",
diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js
index 5ecb3a27b71..9c43eba047a 100644
--- a/apps/files/l10n/pl.js
+++ b/apps/files/l10n/pl.js
@@ -171,15 +171,14 @@ OC.L10N.register(
"File Management" : "Zarządzanie plikami",
"Reload current directory" : "Przeładuj bieżący katalog",
"Go to the \"{dir}\" directory" : "Przejdź do katalogu \"{dir}\"",
+ "\"{displayName}\" action executed successfully" : "Akcja \"{displayName}\" została wykonana pomyślnie",
+ "\"{displayName}\" action failed" : "Akcja \"{displayName}\" nie powiodła się",
"Select the row for {displayName}" : "Wybierz wiersz dla {displayName}",
"Rename file" : "Zmień nazwę pliku",
- "A long time ago" : "Dawno temu",
- "This node is unavailable" : "Ten węzeł jest niedostępny",
- "Download file {name}" : "Pobierz plik {name}",
"File name" : "Nazwa pliku",
"Folder name" : "Nazwa katalogu",
- "\"{displayName}\" action executed successfully" : "Akcja \"{displayName}\" została wykonana pomyślnie",
- "\"{displayName}\" action failed" : "Akcja \"{displayName}\" nie powiodła się",
+ "This node is unavailable" : "Ten węzeł jest niedostępny",
+ "Download file {name}" : "Pobierz plik {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" nie jest dozwolonym typem pliku.",
"{newName} already exists." : "{newName} już istnieje.",
"Name cannot be empty" : "Nazwa nie może być pusta",
@@ -188,14 +187,12 @@ OC.L10N.register(
"Could not rename \"{oldName}\", it does not exist any more" : "Nie można zmienić nazwy \"{oldName}\", już nie istnieje",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Nazwa \"{newName}\" jest już używana w folderze \"{dir}\". Wybierz inną nazwę.",
"Could not rename \"{oldName}\"" : "Nie można zmienić nazwy \"{oldName}\"",
+ "A long time ago" : "Dawno temu",
"Total rows summary" : "Podsumowanie wszystkich wierszy",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" nie powiodło się w przypadku niektórych elementów",
- "\"{displayName}\" batch action executed successfully" : "Akcja wsadowa \"{displayName}\" została wykonana pomyślnie",
- "ascending" : "rosnąco",
- "descending" : "malejąco",
- "Sort list by {column} ({direction})" : "Sortuj listę według {column} ({direction})",
"Select all" : "Wybierz wszystko",
"Unselect all" : "Odznacz wszystko",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" nie powiodło się w przypadku niektórych elementów",
+ "\"{displayName}\" batch action executed successfully" : "Akcja wsadowa \"{displayName}\" została wykonana pomyślnie",
"List of files and folders." : "Lista plików i katalogów.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Ta lista nie jest w pełni renderowana ze względu na wydajność. Pliki będą renderowane podczas poruszania się po liście.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} i {summaryFolder}.",
@@ -226,6 +223,7 @@ OC.L10N.register(
"Share" : "Udostępnij",
"Shared by link" : "Udostępnione linkiem",
"Shared" : "Udostępnione",
+ "Switch to list view" : "Przełącz na widok listy",
"Open the files app settings" : "Otwórz ustawienia aplikacji plików",
"Files settings" : "Ustawienia Plików",
"File cannot be accessed" : "Nie można uzyskać dostępu do pliku",
@@ -254,11 +252,10 @@ OC.L10N.register(
"Open folder {displayName}" : "Otwórz katalog {displayName}",
"Open in Files" : "Otwórz w Plikach",
"Open details" : "Otwórz szczegóły",
- "Created new folder \"{name}\"" : "Utworzono nowy katalog \"{name}\"",
- "Set up templates folder" : "Skonfiguruj katalog szablonów",
- "Templates" : "Szablony",
"Create new templates folder" : "Stwórz nowy folder z szablonami",
+ "Templates" : "Szablony",
"Unable to initialize the templates directory" : "Nie można zainicjować katalogu szablonów",
+ "Created new folder \"{name}\"" : "Utworzono nowy katalog \"{name}\"",
"List of favorites files and folders." : "Lista ulubionych plików i katalogów.",
"No favorites yet" : "Brak ulubionych",
"Files and folders you mark as favorite will show up here" : "Pliki i katalogi, które oznaczysz jako ulubione wyświetlą się tutaj",
@@ -278,6 +275,7 @@ OC.L10N.register(
"Unlimited" : "Brak limitu",
"Search users" : "Wyszukaj użytkowników",
"Cancel" : "Anuluj",
+ "Set up templates folder" : "Skonfiguruj katalog szablonów",
"%s used" : "Wykorzystane: %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Wykorzystane: %1$s z %2$s",
@@ -291,6 +289,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Ten plik posiada etykietę {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Ten plik posiada etykiety {firstTags} i {lastTag}",
"Open folder {name}" : "Otwórz katalog {name}",
+ "ascending" : "rosnąco",
+ "descending" : "malejąco",
+ "Sort list by {column} ({direction})" : "Sortuj listę według {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Ta lista nie jest w pełni renderowana ze względu na wydajność. Pliki będą renderowane podczas poruszania się po liście.",
"Search for an account" : "Wyszukaj konto",
"Choose" : "Wybierz",
diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json
index 20a29e793a1..dad9bca05b8 100644
--- a/apps/files/l10n/pl.json
+++ b/apps/files/l10n/pl.json
@@ -169,15 +169,14 @@
"File Management" : "Zarządzanie plikami",
"Reload current directory" : "Przeładuj bieżący katalog",
"Go to the \"{dir}\" directory" : "Przejdź do katalogu \"{dir}\"",
+ "\"{displayName}\" action executed successfully" : "Akcja \"{displayName}\" została wykonana pomyślnie",
+ "\"{displayName}\" action failed" : "Akcja \"{displayName}\" nie powiodła się",
"Select the row for {displayName}" : "Wybierz wiersz dla {displayName}",
"Rename file" : "Zmień nazwę pliku",
- "A long time ago" : "Dawno temu",
- "This node is unavailable" : "Ten węzeł jest niedostępny",
- "Download file {name}" : "Pobierz plik {name}",
"File name" : "Nazwa pliku",
"Folder name" : "Nazwa katalogu",
- "\"{displayName}\" action executed successfully" : "Akcja \"{displayName}\" została wykonana pomyślnie",
- "\"{displayName}\" action failed" : "Akcja \"{displayName}\" nie powiodła się",
+ "This node is unavailable" : "Ten węzeł jest niedostępny",
+ "Download file {name}" : "Pobierz plik {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" nie jest dozwolonym typem pliku.",
"{newName} already exists." : "{newName} już istnieje.",
"Name cannot be empty" : "Nazwa nie może być pusta",
@@ -186,14 +185,12 @@
"Could not rename \"{oldName}\", it does not exist any more" : "Nie można zmienić nazwy \"{oldName}\", już nie istnieje",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Nazwa \"{newName}\" jest już używana w folderze \"{dir}\". Wybierz inną nazwę.",
"Could not rename \"{oldName}\"" : "Nie można zmienić nazwy \"{oldName}\"",
+ "A long time ago" : "Dawno temu",
"Total rows summary" : "Podsumowanie wszystkich wierszy",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" nie powiodło się w przypadku niektórych elementów",
- "\"{displayName}\" batch action executed successfully" : "Akcja wsadowa \"{displayName}\" została wykonana pomyślnie",
- "ascending" : "rosnąco",
- "descending" : "malejąco",
- "Sort list by {column} ({direction})" : "Sortuj listę według {column} ({direction})",
"Select all" : "Wybierz wszystko",
"Unselect all" : "Odznacz wszystko",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" nie powiodło się w przypadku niektórych elementów",
+ "\"{displayName}\" batch action executed successfully" : "Akcja wsadowa \"{displayName}\" została wykonana pomyślnie",
"List of files and folders." : "Lista plików i katalogów.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Ta lista nie jest w pełni renderowana ze względu na wydajność. Pliki będą renderowane podczas poruszania się po liście.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} i {summaryFolder}.",
@@ -224,6 +221,7 @@
"Share" : "Udostępnij",
"Shared by link" : "Udostępnione linkiem",
"Shared" : "Udostępnione",
+ "Switch to list view" : "Przełącz na widok listy",
"Open the files app settings" : "Otwórz ustawienia aplikacji plików",
"Files settings" : "Ustawienia Plików",
"File cannot be accessed" : "Nie można uzyskać dostępu do pliku",
@@ -252,11 +250,10 @@
"Open folder {displayName}" : "Otwórz katalog {displayName}",
"Open in Files" : "Otwórz w Plikach",
"Open details" : "Otwórz szczegóły",
- "Created new folder \"{name}\"" : "Utworzono nowy katalog \"{name}\"",
- "Set up templates folder" : "Skonfiguruj katalog szablonów",
- "Templates" : "Szablony",
"Create new templates folder" : "Stwórz nowy folder z szablonami",
+ "Templates" : "Szablony",
"Unable to initialize the templates directory" : "Nie można zainicjować katalogu szablonów",
+ "Created new folder \"{name}\"" : "Utworzono nowy katalog \"{name}\"",
"List of favorites files and folders." : "Lista ulubionych plików i katalogów.",
"No favorites yet" : "Brak ulubionych",
"Files and folders you mark as favorite will show up here" : "Pliki i katalogi, które oznaczysz jako ulubione wyświetlą się tutaj",
@@ -276,6 +273,7 @@
"Unlimited" : "Brak limitu",
"Search users" : "Wyszukaj użytkowników",
"Cancel" : "Anuluj",
+ "Set up templates folder" : "Skonfiguruj katalog szablonów",
"%s used" : "Wykorzystane: %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Wykorzystane: %1$s z %2$s",
@@ -289,6 +287,9 @@
"This file has the tag {tag}" : "Ten plik posiada etykietę {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Ten plik posiada etykiety {firstTags} i {lastTag}",
"Open folder {name}" : "Otwórz katalog {name}",
+ "ascending" : "rosnąco",
+ "descending" : "malejąco",
+ "Sort list by {column} ({direction})" : "Sortuj listę według {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Ta lista nie jest w pełni renderowana ze względu na wydajność. Pliki będą renderowane podczas poruszania się po liście.",
"Search for an account" : "Wyszukaj konto",
"Choose" : "Wybierz",
diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js
index a3ebdb2eee9..8b0af6242f0 100644
--- a/apps/files/l10n/pt_BR.js
+++ b/apps/files/l10n/pt_BR.js
@@ -171,15 +171,14 @@ OC.L10N.register(
"File Management" : "Gerenciamento de Arquivos",
"Reload current directory" : "Recarregar diretório atual",
"Go to the \"{dir}\" directory" : "Vá para o diretório \"{dir}\"",
+ "\"{displayName}\" action executed successfully" : "Ação \"{displayName}\" executada com sucesso",
+ "\"{displayName}\" action failed" : "A ação \"{displayName}\" falhou",
"Select the row for {displayName}" : "Selecione a linha para {displayName}",
"Rename file" : "Renomear arquivo",
- "A long time ago" : "A muito tempo atrás",
- "This node is unavailable" : "Este nó está indisponível",
- "Download file {name}" : "Baixe o arquivo {nome}",
"File name" : "Nome do arquivo",
"Folder name" : "Nome da pasta",
- "\"{displayName}\" action executed successfully" : "Ação \"{displayName}\" executada com sucesso",
- "\"{displayName}\" action failed" : "A ação \"{displayName}\" falhou",
+ "This node is unavailable" : "Este nó está indisponível",
+ "Download file {name}" : "Baixe o arquivo {nome}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" não é um tipo de arquivo permitido.",
"{newName} already exists." : "{newName} já existe.",
"Name cannot be empty" : "O nome não pode ficar em branco",
@@ -188,14 +187,14 @@ OC.L10N.register(
"Could not rename \"{oldName}\", it does not exist any more" : "Não foi possível renomear \"{oldName}\", ele não existe mais",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "O nome \"{newName}\" já é utilizado na pasta \"{dir}\". Escolha um nome diferente.",
"Could not rename \"{oldName}\"" : "Não foi possível renomear \"{oldName}\"",
+ "A long time ago" : "A muito tempo atrás",
+ "Could not copy {file}. {message}" : "Não foi possível copiar {file}. {message}",
+ "Could not move {file}. {message}" : "Não foi possível mover {file}. {message}",
"Total rows summary" : "Resumo total de linhas",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" falhou em alguns elementos",
- "\"{displayName}\" batch action executed successfully" : "Ação em lote \"{displayName}\" executada com sucesso",
- "ascending" : "ascendente",
- "descending" : "descendente",
- "Sort list by {column} ({direction})" : "Classificar lista por {column} ({direction})",
"Select all" : "Selecionar tudo",
"Unselect all" : "Desmarque todos",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" falhou em alguns elementos",
+ "\"{displayName}\" batch action executed successfully" : "Ação em lote \"{displayName}\" executada com sucesso",
"List of files and folders." : "Lista de arquivos e pastas.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Essa lista não é totalmente renderizada por motivos de desempenho. Os arquivos serão renderizados conforme você navega pela lista.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} e {summaryFolder}",
@@ -226,6 +225,7 @@ OC.L10N.register(
"Share" : "Compartilhar",
"Shared by link" : "Compartilhado via link",
"Shared" : "Compartilhado",
+ "Switch to list view" : "Mudar para a visualizar lista",
"Open the files app settings" : "Abra as configurações do aplicativo de arquivos",
"Files settings" : "Configurações de arquivos",
"File cannot be accessed" : "File cannot be accessed",
@@ -249,16 +249,28 @@ OC.L10N.register(
"Blank" : "Em branco",
"Unable to create new file from template" : "Incapaz de criar novo arquivo a partir do modelo",
"Delete permanently" : "Remover permanentemente",
+ "Destination is not a folder" : "O destino não é uma pasta",
+ "This file/folder is already in that directory" : "Este arquivo/pasta já está nesse diretório",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Você não pode mover um arquivo/pasta para si mesmo ou para uma subpasta dele mesmo",
+ "A file or folder with that name already exists in this folder" : "Já existe um arquivo ou pasta com esse nome nesta pasta",
+ "The files is locked" : "Os arquivos estão bloqueados",
+ "The file does not exist anymore" : "O arquivo não existe mais",
+ "Chose destination" : "Escolha o destino",
"Copy to {target}" : "Copiar para {target}",
"Move to {target}" : "Mover para {target}",
+ "Cancelled move or copy operation" : "Operação de movimentação ou cópia cancelada",
"Open folder {displayName}" : "Abra a pasta {displayName}",
"Open in Files" : "Abrir em arquivos",
"Open details" : "Abrir detalhes",
- "Created new folder \"{name}\"" : "Nova pasta criada \"{name}\"",
- "Set up templates folder" : "Configurar pasta de modelos",
- "Templates" : "Modelos",
"Create new templates folder" : "Criar nova pasta de modelos",
+ "Templates" : "Modelos",
"Unable to initialize the templates directory" : "Não foi possível inicializar o diretório de modelos",
+ "Created new folder \"{name}\"" : "Nova pasta criada \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} pastas","{folderCount} pastas","{folderCount} pastas"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} arquivos","{fileCount} arquivos","{fileCount} arquivos"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 arquivo e {folderCount} pastas","1 arquivo e {folderCount} pastas","1 arquivo e {folderCount} pastas"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} arquivos e 1 pasta","{fileCount} arquivos e 1 pasta","{fileCount} arquivos e 1 pasta"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} arquivos e {folderCount} pastas",
"List of favorites files and folders." : "Lista de arquivos e pastas favoritos.",
"No favorites yet" : "Você não possui favoritos!",
"Files and folders you mark as favorite will show up here" : "Suas pastas e arquivos favoritos serão exibidos aqui.",
@@ -278,6 +290,7 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"Search users" : "Procurar usuários",
"Cancel" : "Cancelar",
+ "Set up templates folder" : "Configurar pasta de modelos",
"%s used" : "%s usado",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s usados de %2$s",
@@ -291,6 +304,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Este arquivo tem a tag {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Este arquivo tem as etiquetas {firstTags} e {lastTag}",
"Open folder {name}" : "Abra a pasta {nome}",
+ "ascending" : "ascendente",
+ "descending" : "descendente",
+ "Sort list by {column} ({direction})" : "Classificar lista por {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista não é totalmente renderizada por motivos de desempenho. Os arquivos serão renderizados conforme você navega pela lista.",
"Search for an account" : "Pesquisar uma conta",
"Choose" : "Escolher",
diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json
index cc31c07668c..4ccd5be7575 100644
--- a/apps/files/l10n/pt_BR.json
+++ b/apps/files/l10n/pt_BR.json
@@ -169,15 +169,14 @@
"File Management" : "Gerenciamento de Arquivos",
"Reload current directory" : "Recarregar diretório atual",
"Go to the \"{dir}\" directory" : "Vá para o diretório \"{dir}\"",
+ "\"{displayName}\" action executed successfully" : "Ação \"{displayName}\" executada com sucesso",
+ "\"{displayName}\" action failed" : "A ação \"{displayName}\" falhou",
"Select the row for {displayName}" : "Selecione a linha para {displayName}",
"Rename file" : "Renomear arquivo",
- "A long time ago" : "A muito tempo atrás",
- "This node is unavailable" : "Este nó está indisponível",
- "Download file {name}" : "Baixe o arquivo {nome}",
"File name" : "Nome do arquivo",
"Folder name" : "Nome da pasta",
- "\"{displayName}\" action executed successfully" : "Ação \"{displayName}\" executada com sucesso",
- "\"{displayName}\" action failed" : "A ação \"{displayName}\" falhou",
+ "This node is unavailable" : "Este nó está indisponível",
+ "Download file {name}" : "Baixe o arquivo {nome}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" não é um tipo de arquivo permitido.",
"{newName} already exists." : "{newName} já existe.",
"Name cannot be empty" : "O nome não pode ficar em branco",
@@ -186,14 +185,14 @@
"Could not rename \"{oldName}\", it does not exist any more" : "Não foi possível renomear \"{oldName}\", ele não existe mais",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "O nome \"{newName}\" já é utilizado na pasta \"{dir}\". Escolha um nome diferente.",
"Could not rename \"{oldName}\"" : "Não foi possível renomear \"{oldName}\"",
+ "A long time ago" : "A muito tempo atrás",
+ "Could not copy {file}. {message}" : "Não foi possível copiar {file}. {message}",
+ "Could not move {file}. {message}" : "Não foi possível mover {file}. {message}",
"Total rows summary" : "Resumo total de linhas",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" falhou em alguns elementos",
- "\"{displayName}\" batch action executed successfully" : "Ação em lote \"{displayName}\" executada com sucesso",
- "ascending" : "ascendente",
- "descending" : "descendente",
- "Sort list by {column} ({direction})" : "Classificar lista por {column} ({direction})",
"Select all" : "Selecionar tudo",
"Unselect all" : "Desmarque todos",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" falhou em alguns elementos",
+ "\"{displayName}\" batch action executed successfully" : "Ação em lote \"{displayName}\" executada com sucesso",
"List of files and folders." : "Lista de arquivos e pastas.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Essa lista não é totalmente renderizada por motivos de desempenho. Os arquivos serão renderizados conforme você navega pela lista.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} e {summaryFolder}",
@@ -224,6 +223,7 @@
"Share" : "Compartilhar",
"Shared by link" : "Compartilhado via link",
"Shared" : "Compartilhado",
+ "Switch to list view" : "Mudar para a visualizar lista",
"Open the files app settings" : "Abra as configurações do aplicativo de arquivos",
"Files settings" : "Configurações de arquivos",
"File cannot be accessed" : "File cannot be accessed",
@@ -247,16 +247,28 @@
"Blank" : "Em branco",
"Unable to create new file from template" : "Incapaz de criar novo arquivo a partir do modelo",
"Delete permanently" : "Remover permanentemente",
+ "Destination is not a folder" : "O destino não é uma pasta",
+ "This file/folder is already in that directory" : "Este arquivo/pasta já está nesse diretório",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Você não pode mover um arquivo/pasta para si mesmo ou para uma subpasta dele mesmo",
+ "A file or folder with that name already exists in this folder" : "Já existe um arquivo ou pasta com esse nome nesta pasta",
+ "The files is locked" : "Os arquivos estão bloqueados",
+ "The file does not exist anymore" : "O arquivo não existe mais",
+ "Chose destination" : "Escolha o destino",
"Copy to {target}" : "Copiar para {target}",
"Move to {target}" : "Mover para {target}",
+ "Cancelled move or copy operation" : "Operação de movimentação ou cópia cancelada",
"Open folder {displayName}" : "Abra a pasta {displayName}",
"Open in Files" : "Abrir em arquivos",
"Open details" : "Abrir detalhes",
- "Created new folder \"{name}\"" : "Nova pasta criada \"{name}\"",
- "Set up templates folder" : "Configurar pasta de modelos",
- "Templates" : "Modelos",
"Create new templates folder" : "Criar nova pasta de modelos",
+ "Templates" : "Modelos",
"Unable to initialize the templates directory" : "Não foi possível inicializar o diretório de modelos",
+ "Created new folder \"{name}\"" : "Nova pasta criada \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} pastas","{folderCount} pastas","{folderCount} pastas"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} arquivos","{fileCount} arquivos","{fileCount} arquivos"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 arquivo e {folderCount} pastas","1 arquivo e {folderCount} pastas","1 arquivo e {folderCount} pastas"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} arquivos e 1 pasta","{fileCount} arquivos e 1 pasta","{fileCount} arquivos e 1 pasta"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} arquivos e {folderCount} pastas",
"List of favorites files and folders." : "Lista de arquivos e pastas favoritos.",
"No favorites yet" : "Você não possui favoritos!",
"Files and folders you mark as favorite will show up here" : "Suas pastas e arquivos favoritos serão exibidos aqui.",
@@ -276,6 +288,7 @@
"Unlimited" : "Ilimitado",
"Search users" : "Procurar usuários",
"Cancel" : "Cancelar",
+ "Set up templates folder" : "Configurar pasta de modelos",
"%s used" : "%s usado",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s usados de %2$s",
@@ -289,6 +302,9 @@
"This file has the tag {tag}" : "Este arquivo tem a tag {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Este arquivo tem as etiquetas {firstTags} e {lastTag}",
"Open folder {name}" : "Abra a pasta {nome}",
+ "ascending" : "ascendente",
+ "descending" : "descendente",
+ "Sort list by {column} ({direction})" : "Classificar lista por {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista não é totalmente renderizada por motivos de desempenho. Os arquivos serão renderizados conforme você navega pela lista.",
"Search for an account" : "Pesquisar uma conta",
"Choose" : "Escolher",
diff --git a/apps/files/l10n/ro.js b/apps/files/l10n/ro.js
index 84f569c93bd..241a5a89a37 100644
--- a/apps/files/l10n/ro.js
+++ b/apps/files/l10n/ro.js
@@ -197,7 +197,6 @@ OC.L10N.register(
"Blank" : "Gol",
"Unable to create new file from template" : "Nu s-a putut creea un fisier nou pentru acest șablon",
"Delete permanently" : "Șterge permanent",
- "Set up templates folder" : "Setează un dosar pentru șabloane",
"Templates" : "Șabloane",
"Unable to initialize the templates directory" : "Nu s-a putut inițializa dosarul cu șabloane",
"No favorites yet" : "Nu aveți favorite încă",
@@ -214,6 +213,7 @@ OC.L10N.register(
"Unlimited" : "Nelimitată",
"Search users" : "Cauta utilizatori",
"Cancel" : "Anulare",
+ "Set up templates folder" : "Setează un dosar pentru șabloane",
"%s used" : "%s folosiți",
"%1$s of %2$s used" : "%1$s din %2$s utilizat",
"Toggle grid view" : "Comută vizualizarea grilă",
diff --git a/apps/files/l10n/ro.json b/apps/files/l10n/ro.json
index 9f0a083eed3..f8a2f81e45b 100644
--- a/apps/files/l10n/ro.json
+++ b/apps/files/l10n/ro.json
@@ -195,7 +195,6 @@
"Blank" : "Gol",
"Unable to create new file from template" : "Nu s-a putut creea un fisier nou pentru acest șablon",
"Delete permanently" : "Șterge permanent",
- "Set up templates folder" : "Setează un dosar pentru șabloane",
"Templates" : "Șabloane",
"Unable to initialize the templates directory" : "Nu s-a putut inițializa dosarul cu șabloane",
"No favorites yet" : "Nu aveți favorite încă",
@@ -212,6 +211,7 @@
"Unlimited" : "Nelimitată",
"Search users" : "Cauta utilizatori",
"Cancel" : "Anulare",
+ "Set up templates folder" : "Setează un dosar pentru șabloane",
"%s used" : "%s folosiți",
"%1$s of %2$s used" : "%1$s din %2$s utilizat",
"Toggle grid view" : "Comută vizualizarea grilă",
diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js
index 50a8496a1ef..604fc30023e 100644
--- a/apps/files/l10n/ru.js
+++ b/apps/files/l10n/ru.js
@@ -171,31 +171,31 @@ OC.L10N.register(
"File Management" : "Управление файлами",
"Reload current directory" : "Обновить текущий каталог",
"Go to the \"{dir}\" directory" : "Перейти в каталог \"{dir}\"",
+ "\"{displayName}\" action executed successfully" : "Действие «{displayName}» выполнено успешно",
+ "\"{displayName}\" action failed" : "Действие «{displayName}» завершилось неудачно",
"Select the row for {displayName}" : "Выбрать строку для {displayName}",
"Rename file" : "Переименовать файл",
- "A long time ago" : "Очень давно",
- "This node is unavailable" : "Этот узел недоступен",
- "Download file {name}" : "Скачать файл {name}",
"File name" : "Имя файла",
"Folder name" : "Имя папки",
- "\"{displayName}\" action executed successfully" : "Действие \"{displayName}\" выполнено успешно",
- "\"{displayName}\" action failed" : "Действие \"{displayName}\" завершилось неудачно",
- "\"{name}\" is not an allowed filetype." : "\"{name}\" не является допустимым типом файла.",
- "{newName} already exists." : "{newName} уже существует.",
+ "This node is unavailable" : "Этот узел недоступен",
+ "Download file {name}" : "Скачать файл {name}",
+ "\"{name}\" is not an allowed filetype." : "«{name}» не является допустимым типом файла.",
+ "{newName} already exists." : "«{newName}» уже существует.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\" не допускается внутри имени файла.",
"Name cannot be empty" : "Имя не может быть пустым",
"Another entry with the same name already exists" : "Другая запись с таким названием уже существует",
- "Renamed \"{oldName}\" to \"{newName}\"" : "Переименовано \"{oldName}\" в \"{newName}\"",
+ "Renamed \"{oldName}\" to \"{newName}\"" : "Переименовано «{oldName}» в \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Не удалось переименовать \"{oldName}\", его больше не существует",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Имя \"{newName}\" уже используется в каталоге \"{dir}\". Выберите другое имя.",
- "Could not rename \"{oldName}\"" : "Не удалось переименовать \"{oldName}\"",
+ "Could not rename \"{oldName}\"" : "Не удалось переименовать «{oldName}»",
+ "A long time ago" : "Очень давно",
+ "Could not copy {file}. {message}" : "Ошибка копирования «{file}». {message}",
+ "Could not move {file}. {message}" : "Ошибка перемещения «{file}». {message}",
"Total rows summary" : "Количество строк в общем",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" неудачно для некоторых элементов",
- "\"{displayName}\" batch action executed successfully" : "Пакетное действие \"{displayName}\" выполнено успешно",
- "ascending" : "восходящий",
- "descending" : "нисходящий",
- "Sort list by {column} ({direction})" : "Сортировать список по {column} ({direction})",
"Select all" : "Выбрать всё",
"Unselect all" : "Отменить выделение для всех",
+ "\"{displayName}\" failed on some elements " : "«{displayName}» неудачно для некоторых элементов",
+ "\"{displayName}\" batch action executed successfully" : "Пакетное действие \"{displayName}\" выполнено успешно",
"List of files and folders." : "Список файлов и каталогов.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Этот список отображается не полностью из соображений производительности. Файлы будут отображаться по мере перемещения по списку.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} и {summaryFolder}",
@@ -226,6 +226,7 @@ OC.L10N.register(
"Share" : "Поделиться",
"Shared by link" : "Доступные по ссылке",
"Shared" : "Опубликованное",
+ "Switch to list view" : "Переключение в режим просмотра списка",
"Open the files app settings" : "Открыть параметры приложения «Файлы»",
"Files settings" : "Настройки файлов",
"File cannot be accessed" : "Не удалось получить доступ к файлу",
@@ -249,24 +250,36 @@ OC.L10N.register(
"Blank" : "Пустой",
"Unable to create new file from template" : "Не удалось создать файл на основе шаблона",
"Delete permanently" : "Удалить навсегда",
- "Copy to {target}" : "Скопировать в {target}",
- "Move to {target}" : "Переместить в {target}",
+ "Destination is not a folder" : "Указанное назначение не является папкой",
+ "This file/folder is already in that directory" : "Файл или папка уже расположены в этой папке",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Папка или файл не могут быть перемещены во вложенную папку или в себя",
+ "A file or folder with that name already exists in this folder" : "В этой папке уже есть файл или папка с этим именем",
+ "The files is locked" : "Файлы заблокированы",
+ "The file does not exist anymore" : "Файл больше не существует",
+ "Chose destination" : "Выбор места назначения",
+ "Copy to {target}" : "Скопировать в «{target}»",
+ "Move to {target}" : "Переместить в «{target}»",
+ "Cancelled move or copy operation" : "Копирование или перемещение отменено",
"Open folder {displayName}" : "Открыть каталог {displayName}",
"Open in Files" : "Открыть в Файлах",
"Open details" : "Открыть подробности",
- "Created new folder \"{name}\"" : "Создана новая папка \"{name}\"",
- "Set up templates folder" : "Указать папку шаблонов",
- "Templates" : "Шаблоны",
"Create new templates folder" : "Создать новую папку шаблонов",
+ "Templates" : "Шаблоны",
"Unable to initialize the templates directory" : "Не удалось инициализировать каталог шаблонов",
+ "Created new folder \"{name}\"" : "Создана новая папка \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{count} папка","{count} папки","{count} папок","{count} папки"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{count} файл","{count} файла","{count} файлов","{count} файла"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["один файл и {count} папка","один файл и {count} папки","один файл и {count} папок","один файл и {count} папки"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} файл и одна папка","{fileCount} файла и одна папка","{fileCount} файлов и одна папка","{fileCount} файла и одна папка"],
+ "{fileCount} files and {folderCount} folders" : "файлов: {fileCount}, папок: {folderCount}",
"List of favorites files and folders." : "Список избранных файлов и каталогов.",
"No favorites yet" : "В избранное ещё ничего не добавлено ",
"Files and folders you mark as favorite will show up here" : "Здесь будут показаны файлы и каталоги, отмеченные как избранные",
"All files" : "Все файлы",
- "List of your files and folders." : "Список Ваших файлов и каталогов.",
+ "List of your files and folders." : "Список ваших файлов и каталогов.",
"List of recently modified files and folders." : "Список недавно измененных файлов и директорий.",
"No recently modified files" : "Нет недавно измененных файлов",
- "Files and folders you recently modified will show up here." : "Здесь будут отображаться файлы и папки, которые Вы недавно изменили.",
+ "Files and folders you recently modified will show up here." : "Здесь будут показаны недавно изменённые файлы и папки",
"Toggle %1$s sublist" : "Переключить %1$s подсписок",
"No entries found in this folder" : "В этом каталоге ничего не найдено",
"Upload too large" : "Файл слишком велик",
@@ -278,6 +291,7 @@ OC.L10N.register(
"Unlimited" : "Неограничено",
"Search users" : "Поиск пользователей",
"Cancel" : "Отменить",
+ "Set up templates folder" : "Указать папку шаблонов",
"%s used" : "%s использовано",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "использовано %1$s из %2$s ",
@@ -288,9 +302,12 @@ OC.L10N.register(
"Shared with you" : "Доступные для вас",
"Deleted shares" : "Удалённые общие ресурсы",
"Pending shares" : "Ожидающие общие ресурсы",
- "This file has the tag {tag}" : "У этого файла есть тэг: {tag}",
- "This file has the tags {firstTags} and {lastTag}" : "У этого файла есть тэги: {firstTags} и {lastTag}",
+ "This file has the tag {tag}" : "Файлу назначана метка «{tag}»",
+ "This file has the tags {firstTags} and {lastTag}" : "Файлу назначены метки «{firstTags}» и «{lastTag}»",
"Open folder {name}" : "Открыть папку {name}",
+ "ascending" : "восходящий",
+ "descending" : "нисходящий",
+ "Sort list by {column} ({direction})" : "Сортировать список по {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Этот список отображается не полностью из соображений производительности. Файлы будут отображаться по мере перемещения по списку.",
"Search for an account" : "Поиск по учетной записи",
"Choose" : "Выберите",
diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json
index d7c797fe026..78aa2fcbbe7 100644
--- a/apps/files/l10n/ru.json
+++ b/apps/files/l10n/ru.json
@@ -169,31 +169,31 @@
"File Management" : "Управление файлами",
"Reload current directory" : "Обновить текущий каталог",
"Go to the \"{dir}\" directory" : "Перейти в каталог \"{dir}\"",
+ "\"{displayName}\" action executed successfully" : "Действие «{displayName}» выполнено успешно",
+ "\"{displayName}\" action failed" : "Действие «{displayName}» завершилось неудачно",
"Select the row for {displayName}" : "Выбрать строку для {displayName}",
"Rename file" : "Переименовать файл",
- "A long time ago" : "Очень давно",
- "This node is unavailable" : "Этот узел недоступен",
- "Download file {name}" : "Скачать файл {name}",
"File name" : "Имя файла",
"Folder name" : "Имя папки",
- "\"{displayName}\" action executed successfully" : "Действие \"{displayName}\" выполнено успешно",
- "\"{displayName}\" action failed" : "Действие \"{displayName}\" завершилось неудачно",
- "\"{name}\" is not an allowed filetype." : "\"{name}\" не является допустимым типом файла.",
- "{newName} already exists." : "{newName} уже существует.",
+ "This node is unavailable" : "Этот узел недоступен",
+ "Download file {name}" : "Скачать файл {name}",
+ "\"{name}\" is not an allowed filetype." : "«{name}» не является допустимым типом файла.",
+ "{newName} already exists." : "«{newName}» уже существует.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\" не допускается внутри имени файла.",
"Name cannot be empty" : "Имя не может быть пустым",
"Another entry with the same name already exists" : "Другая запись с таким названием уже существует",
- "Renamed \"{oldName}\" to \"{newName}\"" : "Переименовано \"{oldName}\" в \"{newName}\"",
+ "Renamed \"{oldName}\" to \"{newName}\"" : "Переименовано «{oldName}» в \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Не удалось переименовать \"{oldName}\", его больше не существует",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Имя \"{newName}\" уже используется в каталоге \"{dir}\". Выберите другое имя.",
- "Could not rename \"{oldName}\"" : "Не удалось переименовать \"{oldName}\"",
+ "Could not rename \"{oldName}\"" : "Не удалось переименовать «{oldName}»",
+ "A long time ago" : "Очень давно",
+ "Could not copy {file}. {message}" : "Ошибка копирования «{file}». {message}",
+ "Could not move {file}. {message}" : "Ошибка перемещения «{file}». {message}",
"Total rows summary" : "Количество строк в общем",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" неудачно для некоторых элементов",
- "\"{displayName}\" batch action executed successfully" : "Пакетное действие \"{displayName}\" выполнено успешно",
- "ascending" : "восходящий",
- "descending" : "нисходящий",
- "Sort list by {column} ({direction})" : "Сортировать список по {column} ({direction})",
"Select all" : "Выбрать всё",
"Unselect all" : "Отменить выделение для всех",
+ "\"{displayName}\" failed on some elements " : "«{displayName}» неудачно для некоторых элементов",
+ "\"{displayName}\" batch action executed successfully" : "Пакетное действие \"{displayName}\" выполнено успешно",
"List of files and folders." : "Список файлов и каталогов.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Этот список отображается не полностью из соображений производительности. Файлы будут отображаться по мере перемещения по списку.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} и {summaryFolder}",
@@ -224,6 +224,7 @@
"Share" : "Поделиться",
"Shared by link" : "Доступные по ссылке",
"Shared" : "Опубликованное",
+ "Switch to list view" : "Переключение в режим просмотра списка",
"Open the files app settings" : "Открыть параметры приложения «Файлы»",
"Files settings" : "Настройки файлов",
"File cannot be accessed" : "Не удалось получить доступ к файлу",
@@ -247,24 +248,36 @@
"Blank" : "Пустой",
"Unable to create new file from template" : "Не удалось создать файл на основе шаблона",
"Delete permanently" : "Удалить навсегда",
- "Copy to {target}" : "Скопировать в {target}",
- "Move to {target}" : "Переместить в {target}",
+ "Destination is not a folder" : "Указанное назначение не является папкой",
+ "This file/folder is already in that directory" : "Файл или папка уже расположены в этой папке",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Папка или файл не могут быть перемещены во вложенную папку или в себя",
+ "A file or folder with that name already exists in this folder" : "В этой папке уже есть файл или папка с этим именем",
+ "The files is locked" : "Файлы заблокированы",
+ "The file does not exist anymore" : "Файл больше не существует",
+ "Chose destination" : "Выбор места назначения",
+ "Copy to {target}" : "Скопировать в «{target}»",
+ "Move to {target}" : "Переместить в «{target}»",
+ "Cancelled move or copy operation" : "Копирование или перемещение отменено",
"Open folder {displayName}" : "Открыть каталог {displayName}",
"Open in Files" : "Открыть в Файлах",
"Open details" : "Открыть подробности",
- "Created new folder \"{name}\"" : "Создана новая папка \"{name}\"",
- "Set up templates folder" : "Указать папку шаблонов",
- "Templates" : "Шаблоны",
"Create new templates folder" : "Создать новую папку шаблонов",
+ "Templates" : "Шаблоны",
"Unable to initialize the templates directory" : "Не удалось инициализировать каталог шаблонов",
+ "Created new folder \"{name}\"" : "Создана новая папка \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{count} папка","{count} папки","{count} папок","{count} папки"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{count} файл","{count} файла","{count} файлов","{count} файла"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["один файл и {count} папка","один файл и {count} папки","один файл и {count} папок","один файл и {count} папки"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} файл и одна папка","{fileCount} файла и одна папка","{fileCount} файлов и одна папка","{fileCount} файла и одна папка"],
+ "{fileCount} files and {folderCount} folders" : "файлов: {fileCount}, папок: {folderCount}",
"List of favorites files and folders." : "Список избранных файлов и каталогов.",
"No favorites yet" : "В избранное ещё ничего не добавлено ",
"Files and folders you mark as favorite will show up here" : "Здесь будут показаны файлы и каталоги, отмеченные как избранные",
"All files" : "Все файлы",
- "List of your files and folders." : "Список Ваших файлов и каталогов.",
+ "List of your files and folders." : "Список ваших файлов и каталогов.",
"List of recently modified files and folders." : "Список недавно измененных файлов и директорий.",
"No recently modified files" : "Нет недавно измененных файлов",
- "Files and folders you recently modified will show up here." : "Здесь будут отображаться файлы и папки, которые Вы недавно изменили.",
+ "Files and folders you recently modified will show up here." : "Здесь будут показаны недавно изменённые файлы и папки",
"Toggle %1$s sublist" : "Переключить %1$s подсписок",
"No entries found in this folder" : "В этом каталоге ничего не найдено",
"Upload too large" : "Файл слишком велик",
@@ -276,6 +289,7 @@
"Unlimited" : "Неограничено",
"Search users" : "Поиск пользователей",
"Cancel" : "Отменить",
+ "Set up templates folder" : "Указать папку шаблонов",
"%s used" : "%s использовано",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "использовано %1$s из %2$s ",
@@ -286,9 +300,12 @@
"Shared with you" : "Доступные для вас",
"Deleted shares" : "Удалённые общие ресурсы",
"Pending shares" : "Ожидающие общие ресурсы",
- "This file has the tag {tag}" : "У этого файла есть тэг: {tag}",
- "This file has the tags {firstTags} and {lastTag}" : "У этого файла есть тэги: {firstTags} и {lastTag}",
+ "This file has the tag {tag}" : "Файлу назначана метка «{tag}»",
+ "This file has the tags {firstTags} and {lastTag}" : "Файлу назначены метки «{firstTags}» и «{lastTag}»",
"Open folder {name}" : "Открыть папку {name}",
+ "ascending" : "восходящий",
+ "descending" : "нисходящий",
+ "Sort list by {column} ({direction})" : "Сортировать список по {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Этот список отображается не полностью из соображений производительности. Файлы будут отображаться по мере перемещения по списку.",
"Search for an account" : "Поиск по учетной записи",
"Choose" : "Выберите",
diff --git a/apps/files/l10n/sc.js b/apps/files/l10n/sc.js
index 0decccae831..0891e7154b7 100644
--- a/apps/files/l10n/sc.js
+++ b/apps/files/l10n/sc.js
@@ -176,6 +176,7 @@ OC.L10N.register(
"Share" : "Cumpartzidura",
"Shared by link" : "Cumpartzidu cun ligòngiu",
"Shared" : "Cumpartzidu",
+ "Switch to list view" : "Càmbia a sa vista de s'elencu",
"Show hidden files" : "Mustra archìvios cuados",
"Crop image previews" : "Retàllia anteprimas de s'imàgine",
"Additional settings" : "Impostatziones in agiunta",
@@ -191,7 +192,6 @@ OC.L10N.register(
"Blank" : "Isbòidu",
"Unable to create new file from template" : "Non faghet a creare un'archìviu nou dae su modellu",
"Delete permanently" : "Cantzella in manera definitiva",
- "Set up templates folder" : "Imposta cartella de is modellos",
"Templates" : "Modellos",
"Unable to initialize the templates directory" : "Non faghet a initzializare sa cartella de is modellos",
"No favorites yet" : "Ancora perunu preferidu",
@@ -208,6 +208,7 @@ OC.L10N.register(
"Unlimited" : "Chene lìmites",
"Search users" : "Chirca utentes",
"Cancel" : "Annulla",
+ "Set up templates folder" : "Imposta cartella de is modellos",
"%s used" : "%s impreadu",
"%1$s of %2$s used" : "%1$s de %2$s impreadu",
"Toggle grid view" : "Càmbia a visualizatzione in mosàicu",
diff --git a/apps/files/l10n/sc.json b/apps/files/l10n/sc.json
index dc3d35eb926..28e13945936 100644
--- a/apps/files/l10n/sc.json
+++ b/apps/files/l10n/sc.json
@@ -174,6 +174,7 @@
"Share" : "Cumpartzidura",
"Shared by link" : "Cumpartzidu cun ligòngiu",
"Shared" : "Cumpartzidu",
+ "Switch to list view" : "Càmbia a sa vista de s'elencu",
"Show hidden files" : "Mustra archìvios cuados",
"Crop image previews" : "Retàllia anteprimas de s'imàgine",
"Additional settings" : "Impostatziones in agiunta",
@@ -189,7 +190,6 @@
"Blank" : "Isbòidu",
"Unable to create new file from template" : "Non faghet a creare un'archìviu nou dae su modellu",
"Delete permanently" : "Cantzella in manera definitiva",
- "Set up templates folder" : "Imposta cartella de is modellos",
"Templates" : "Modellos",
"Unable to initialize the templates directory" : "Non faghet a initzializare sa cartella de is modellos",
"No favorites yet" : "Ancora perunu preferidu",
@@ -206,6 +206,7 @@
"Unlimited" : "Chene lìmites",
"Search users" : "Chirca utentes",
"Cancel" : "Annulla",
+ "Set up templates folder" : "Imposta cartella de is modellos",
"%s used" : "%s impreadu",
"%1$s of %2$s used" : "%1$s de %2$s impreadu",
"Toggle grid view" : "Càmbia a visualizatzione in mosàicu",
diff --git a/apps/files/l10n/sk.js b/apps/files/l10n/sk.js
index 02b06fc4f0f..6a2babff9b5 100644
--- a/apps/files/l10n/sk.js
+++ b/apps/files/l10n/sk.js
@@ -44,7 +44,7 @@ OC.L10N.register(
"Could not load info for file \"{file}\"" : "Nebolo možné načítať informácie súboru \"{file}\"",
"Files" : "Súbory",
"Details" : "Podrobnosti",
- "Please select tag(s) to add to the selection" : "Prosím vyberte štítok(štítky) pre pridanie do výberu",
+ "Please select tag(s) to add to the selection" : "Prosím vyberte štítok (štítky) pre pridanie do výberu",
"Apply tag(s) to selection" : "Aplikovať štítok(štítky) do výberu",
"Select directory \"{dirName}\"" : "Vybrať priečinok \"{dirName}\"",
"Select file \"{fileName}\"" : "Vybrať súbor \"{fileName}\"",
@@ -171,32 +171,37 @@ OC.L10N.register(
"File Management" : "Správa súborov",
"Reload current directory" : "Znova načítať súčasný adresár",
"Go to the \"{dir}\" directory" : "Ísť do \"{dir}\" adresára",
+ "Drag and drop files here to upload" : "Pre nahratie presuňte do tohto priestoru súbory ťahaním",
+ "Upload successful" : "Nahrávanie bolo úspešné",
+ "\"{displayName}\" action executed successfully" : "\"{displayName}\" akcia vykonaná úspešne",
+ "\"{displayName}\" action failed" : "\"{displayName}\" akcia zlýhala",
"Select the row for {displayName}" : "Vybrať riadok pre {displayName}",
"Rename file" : "Premenovať súbor",
- "A long time ago" : "Pred dlhším časom",
- "This node is unavailable" : "Uzol nie je k dispozícií",
- "Download file {name}" : "Stiahnúť súbor {name}",
"File name" : "Názov súboru",
"Folder name" : "Názov adresára",
- "\"{displayName}\" action executed successfully" : "\"{displayName}\" akcia vykonaná úspešne",
- "\"{displayName}\" action failed" : "\"{displayName}\" akcia zlýhala",
+ "This node is unavailable" : "Uzol nie je k dispozícií",
+ "Download file {name}" : "Stiahnúť súbor {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" nie je povolený typ súboru",
"{newName} already exists." : "{newName} už existuje.",
+ "\"{char}\" is not allowed inside a file name." : "Znak \"{char}\" nie je povolený v názve súboru.",
"Name cannot be empty" : "Názov nemôže byť prázdny",
"Another entry with the same name already exists" : "Názov už existuje",
"Renamed \"{oldName}\" to \"{newName}\"" : "Premenované z \"{oldName}\" na \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Nebolo možné premenovať \"{oldName}\". Položka už neexistuje.",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Názov \"{newName}\" sa už používa v adresári \"{dir}\". Vyberte prosím iný názov.",
"Could not rename \"{oldName}\"" : "Nebolo možné premenovať \"{oldName}\"",
+ "A long time ago" : "Pred dlhším časom",
+ "Could not copy {file}. {message}" : "Nepodarilo sa skopírovať {file}. {message}",
+ "Could not move {file}. {message}" : "Nepodarilo sa presunúť {file}. {message}",
"Total rows summary" : "Súčet všetkých riadkov",
- "ascending" : "vzostupne",
- "descending" : "zostupne",
- "Sort list by {column} ({direction})" : "Zoradiť zoznam podľa {column} ({direction})",
"Select all" : "Vybrať všetko",
"Unselect all" : "Zrušiť výber",
+ "\"{displayName}\" batch action executed successfully" : "Hromadná operácia \"{displayName}\" bola úspešne vykonaná",
"List of files and folders." : "Zoznam súborov a adresárov.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} a {summaryFolder}",
"File not found" : "Súbor nenájdený",
+ "_{count} file_::_{count} files_" : ["{count} súbor","{count} súbory","{count} súborov","{count} súborov"],
+ "_{count} folder_::_{count} folders_" : ["{count} priečinok","{count} priečinky","{count} priečinkov","{count} priečinkov"],
"Storage informations" : "Úložiskové informácie",
"{usedQuotaByte} used" : "{usedQuotaByte} použitých",
"{relative}% used" : "{relative}% použitých",
@@ -215,12 +220,13 @@ OC.L10N.register(
"Select file or folder to link to" : "Vyberte súbor alebo priečinok na ktorý odkazovať",
"Loading current folder" : "Načítavanie súčasného adresára",
"No files in here" : "Nie sú tu žiadne súbory",
- "Upload some content or sync with your devices!" : "Nahrajte nejaký obsah alebo synchronizujte so svojimi zariadeniami!",
+ "Upload some content or sync with your devices!" : "Nahrajte nejaký obsah alebo synchronizujte dáta so svojimi zariadeniami!",
"Go to the previous folder" : "Ísť do predchadzajúceho adresára",
"Go back" : "Ísť späť",
"Share" : "Zdieľať",
- "Shared by link" : "Sprístupnené prostredníctvom odkazu",
+ "Shared by link" : "Sprístupnené odkazom",
"Shared" : "Sprístupnené",
+ "Switch to list view" : "Prepnúť na zobrazenie v zozname",
"Open the files app settings" : "Otvoriť nastavenia súborovej aplikácie",
"Files settings" : "Nastavenia súborov",
"File cannot be accessed" : "Súbor nie je možné sprístupniť",
@@ -244,14 +250,23 @@ OC.L10N.register(
"Blank" : "Prázdne",
"Unable to create new file from template" : "Nemôžem vytvoriť nový súbor zo šablóny",
"Delete permanently" : "Zmazať natrvalo",
+ "Destination is not a folder" : "Cieľ nie je priečinok",
+ "This file/folder is already in that directory" : "Tento súbor/priečinok sa už v danom adresári nachádza",
+ "The files is locked" : "Súbory sú uzamknuté",
+ "The file does not exist anymore" : "Súbor už neexistuje",
+ "Chose destination" : "Vyberte cieľ",
+ "Copy to {target}" : "Kopírovať do {target}",
+ "Move to {target}" : "Presunúť do {target}",
+ "Cancelled move or copy operation" : "Zrušená operácia kopírovania alebo presunu",
"Open folder {displayName}" : "Otvoriť adresár {displayName}",
"Open in Files" : "Otvoriť v súboroch",
"Open details" : "Otvoriť detaily",
- "Created new folder \"{name}\"" : "Vytvorený nový adresár \"{name}\"",
- "Set up templates folder" : "Nastaviť priečinok pre šablóny",
+ "Create new templates folder" : "Vytvoriť nový vzorový priečinok",
"Templates" : "Šablóny",
- "Create new templates folder" : "Vytvoriť nový vzorový adresár",
"Unable to initialize the templates directory" : "Nemôžem inicializovať priečinok so šablónami",
+ "Created new folder \"{name}\"" : "Vytvorený nový adresár \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} priečinok","{folderCount} priečinky","{folderCount} priečinkov","{folderCount} priečinkov"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} súbor","{fileCount} súbory","{fileCount} súborov","{fileCount} súborov"],
"List of favorites files and folders." : "Zoznam obľúbených súborov a adresárov.",
"No favorites yet" : "Zatiaľ žiadne obľúbené",
"Files and folders you mark as favorite will show up here" : "Súbory a priečinky označené ako obľúbené budú zobrazené tu",
@@ -271,6 +286,7 @@ OC.L10N.register(
"Unlimited" : "Neobmedzené",
"Search users" : "Hľadať používateľov",
"Cancel" : "Zrušiť",
+ "Set up templates folder" : "Nastaviť priečinok pre šablóny",
"%s used" : "%s použitých",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Využité: %1$s z %2$s",
@@ -279,11 +295,14 @@ OC.L10N.register(
"Shares" : "Zdieľania",
"Shared with others" : "Sprístupnené ostatným",
"Shared with you" : "Vám sprístupnené",
- "Deleted shares" : "Zmazané sprístupnenia",
+ "Deleted shares" : "Odstránené sprístupnenia",
"Pending shares" : "Čakajúce prístupy",
"This file has the tag {tag}" : "Tento súbor má štítok {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Tento súbor má štítky {firstTags} a {lastTag}",
"Open folder {name}" : "Otvoriť súbor {name}",
+ "ascending" : "vzostupne",
+ "descending" : "zostupne",
+ "Sort list by {column} ({direction})" : "Zoradiť zoznam podľa {column} ({direction})",
"Search for an account" : "Vyhľadať účet",
"Choose" : "Vybrať",
"No files or folders have been deleted yet" : "Žiadne súbory alebo adresáre neboli ešte vymazané"
diff --git a/apps/files/l10n/sk.json b/apps/files/l10n/sk.json
index 88a30890608..40311cbb593 100644
--- a/apps/files/l10n/sk.json
+++ b/apps/files/l10n/sk.json
@@ -42,7 +42,7 @@
"Could not load info for file \"{file}\"" : "Nebolo možné načítať informácie súboru \"{file}\"",
"Files" : "Súbory",
"Details" : "Podrobnosti",
- "Please select tag(s) to add to the selection" : "Prosím vyberte štítok(štítky) pre pridanie do výberu",
+ "Please select tag(s) to add to the selection" : "Prosím vyberte štítok (štítky) pre pridanie do výberu",
"Apply tag(s) to selection" : "Aplikovať štítok(štítky) do výberu",
"Select directory \"{dirName}\"" : "Vybrať priečinok \"{dirName}\"",
"Select file \"{fileName}\"" : "Vybrať súbor \"{fileName}\"",
@@ -169,32 +169,37 @@
"File Management" : "Správa súborov",
"Reload current directory" : "Znova načítať súčasný adresár",
"Go to the \"{dir}\" directory" : "Ísť do \"{dir}\" adresára",
+ "Drag and drop files here to upload" : "Pre nahratie presuňte do tohto priestoru súbory ťahaním",
+ "Upload successful" : "Nahrávanie bolo úspešné",
+ "\"{displayName}\" action executed successfully" : "\"{displayName}\" akcia vykonaná úspešne",
+ "\"{displayName}\" action failed" : "\"{displayName}\" akcia zlýhala",
"Select the row for {displayName}" : "Vybrať riadok pre {displayName}",
"Rename file" : "Premenovať súbor",
- "A long time ago" : "Pred dlhším časom",
- "This node is unavailable" : "Uzol nie je k dispozícií",
- "Download file {name}" : "Stiahnúť súbor {name}",
"File name" : "Názov súboru",
"Folder name" : "Názov adresára",
- "\"{displayName}\" action executed successfully" : "\"{displayName}\" akcia vykonaná úspešne",
- "\"{displayName}\" action failed" : "\"{displayName}\" akcia zlýhala",
+ "This node is unavailable" : "Uzol nie je k dispozícií",
+ "Download file {name}" : "Stiahnúť súbor {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" nie je povolený typ súboru",
"{newName} already exists." : "{newName} už existuje.",
+ "\"{char}\" is not allowed inside a file name." : "Znak \"{char}\" nie je povolený v názve súboru.",
"Name cannot be empty" : "Názov nemôže byť prázdny",
"Another entry with the same name already exists" : "Názov už existuje",
"Renamed \"{oldName}\" to \"{newName}\"" : "Premenované z \"{oldName}\" na \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Nebolo možné premenovať \"{oldName}\". Položka už neexistuje.",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Názov \"{newName}\" sa už používa v adresári \"{dir}\". Vyberte prosím iný názov.",
"Could not rename \"{oldName}\"" : "Nebolo možné premenovať \"{oldName}\"",
+ "A long time ago" : "Pred dlhším časom",
+ "Could not copy {file}. {message}" : "Nepodarilo sa skopírovať {file}. {message}",
+ "Could not move {file}. {message}" : "Nepodarilo sa presunúť {file}. {message}",
"Total rows summary" : "Súčet všetkých riadkov",
- "ascending" : "vzostupne",
- "descending" : "zostupne",
- "Sort list by {column} ({direction})" : "Zoradiť zoznam podľa {column} ({direction})",
"Select all" : "Vybrať všetko",
"Unselect all" : "Zrušiť výber",
+ "\"{displayName}\" batch action executed successfully" : "Hromadná operácia \"{displayName}\" bola úspešne vykonaná",
"List of files and folders." : "Zoznam súborov a adresárov.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} a {summaryFolder}",
"File not found" : "Súbor nenájdený",
+ "_{count} file_::_{count} files_" : ["{count} súbor","{count} súbory","{count} súborov","{count} súborov"],
+ "_{count} folder_::_{count} folders_" : ["{count} priečinok","{count} priečinky","{count} priečinkov","{count} priečinkov"],
"Storage informations" : "Úložiskové informácie",
"{usedQuotaByte} used" : "{usedQuotaByte} použitých",
"{relative}% used" : "{relative}% použitých",
@@ -213,12 +218,13 @@
"Select file or folder to link to" : "Vyberte súbor alebo priečinok na ktorý odkazovať",
"Loading current folder" : "Načítavanie súčasného adresára",
"No files in here" : "Nie sú tu žiadne súbory",
- "Upload some content or sync with your devices!" : "Nahrajte nejaký obsah alebo synchronizujte so svojimi zariadeniami!",
+ "Upload some content or sync with your devices!" : "Nahrajte nejaký obsah alebo synchronizujte dáta so svojimi zariadeniami!",
"Go to the previous folder" : "Ísť do predchadzajúceho adresára",
"Go back" : "Ísť späť",
"Share" : "Zdieľať",
- "Shared by link" : "Sprístupnené prostredníctvom odkazu",
+ "Shared by link" : "Sprístupnené odkazom",
"Shared" : "Sprístupnené",
+ "Switch to list view" : "Prepnúť na zobrazenie v zozname",
"Open the files app settings" : "Otvoriť nastavenia súborovej aplikácie",
"Files settings" : "Nastavenia súborov",
"File cannot be accessed" : "Súbor nie je možné sprístupniť",
@@ -242,14 +248,23 @@
"Blank" : "Prázdne",
"Unable to create new file from template" : "Nemôžem vytvoriť nový súbor zo šablóny",
"Delete permanently" : "Zmazať natrvalo",
+ "Destination is not a folder" : "Cieľ nie je priečinok",
+ "This file/folder is already in that directory" : "Tento súbor/priečinok sa už v danom adresári nachádza",
+ "The files is locked" : "Súbory sú uzamknuté",
+ "The file does not exist anymore" : "Súbor už neexistuje",
+ "Chose destination" : "Vyberte cieľ",
+ "Copy to {target}" : "Kopírovať do {target}",
+ "Move to {target}" : "Presunúť do {target}",
+ "Cancelled move or copy operation" : "Zrušená operácia kopírovania alebo presunu",
"Open folder {displayName}" : "Otvoriť adresár {displayName}",
"Open in Files" : "Otvoriť v súboroch",
"Open details" : "Otvoriť detaily",
- "Created new folder \"{name}\"" : "Vytvorený nový adresár \"{name}\"",
- "Set up templates folder" : "Nastaviť priečinok pre šablóny",
+ "Create new templates folder" : "Vytvoriť nový vzorový priečinok",
"Templates" : "Šablóny",
- "Create new templates folder" : "Vytvoriť nový vzorový adresár",
"Unable to initialize the templates directory" : "Nemôžem inicializovať priečinok so šablónami",
+ "Created new folder \"{name}\"" : "Vytvorený nový adresár \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} priečinok","{folderCount} priečinky","{folderCount} priečinkov","{folderCount} priečinkov"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} súbor","{fileCount} súbory","{fileCount} súborov","{fileCount} súborov"],
"List of favorites files and folders." : "Zoznam obľúbených súborov a adresárov.",
"No favorites yet" : "Zatiaľ žiadne obľúbené",
"Files and folders you mark as favorite will show up here" : "Súbory a priečinky označené ako obľúbené budú zobrazené tu",
@@ -269,6 +284,7 @@
"Unlimited" : "Neobmedzené",
"Search users" : "Hľadať používateľov",
"Cancel" : "Zrušiť",
+ "Set up templates folder" : "Nastaviť priečinok pre šablóny",
"%s used" : "%s použitých",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Využité: %1$s z %2$s",
@@ -277,11 +293,14 @@
"Shares" : "Zdieľania",
"Shared with others" : "Sprístupnené ostatným",
"Shared with you" : "Vám sprístupnené",
- "Deleted shares" : "Zmazané sprístupnenia",
+ "Deleted shares" : "Odstránené sprístupnenia",
"Pending shares" : "Čakajúce prístupy",
"This file has the tag {tag}" : "Tento súbor má štítok {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Tento súbor má štítky {firstTags} a {lastTag}",
"Open folder {name}" : "Otvoriť súbor {name}",
+ "ascending" : "vzostupne",
+ "descending" : "zostupne",
+ "Sort list by {column} ({direction})" : "Zoradiť zoznam podľa {column} ({direction})",
"Search for an account" : "Vyhľadať účet",
"Choose" : "Vybrať",
"No files or folders have been deleted yet" : "Žiadne súbory alebo adresáre neboli ešte vymazané"
diff --git a/apps/files/l10n/sl.js b/apps/files/l10n/sl.js
index 3eacb2e0ca1..0c541d55628 100644
--- a/apps/files/l10n/sl.js
+++ b/apps/files/l10n/sl.js
@@ -32,6 +32,7 @@ OC.L10N.register(
"Move" : "Premakni",
"Copy" : "Kopiraj",
"Choose target folder" : "Izbor ciljne mape",
+ "Set reminder" : "Nastavi opomnik",
"Edit locally" : "Uredi krajevno",
"Open" : "Odpri",
"Delete file" : "Izbriši datoteko",
@@ -168,21 +169,18 @@ OC.L10N.register(
"File Management" : "Upravljanje datotek",
"Reload current directory" : "Ponovno naloži trenutno mapo",
"Go to the \"{dir}\" directory" : "Pojdi v mapo »{dir}«",
+ "\"{displayName}\" action executed successfully" : "Dejanje »{displayName}« je uspešno izvedeno",
+ "\"{displayName}\" action failed" : "Dejanje »{displayName}« je spodletelo",
"Select the row for {displayName}" : "Izbor vrstice za {displayName}",
- "Download file {name}" : "Prejmi datoteko {name}",
"File name" : "Ime datoteke",
"Folder name" : "Ime mape",
- "\"{displayName}\" action executed successfully" : "Dejanje »{displayName}« je uspešno izvedeno",
- "\"{displayName}\" action failed" : "Dejanje »{displayName}« je spodletelo",
+ "Download file {name}" : "Prejmi datoteko {name}",
"Name cannot be empty" : "Polje imena ne sme biti prazno",
"Total rows summary" : "Skupni povzetek vrstic",
- "\"{displayName}\" failed on some elements " : "Dejanje »{displayName}« je pri nekaterih predmetih spodletelo",
- "\"{displayName}\" batch action executed successfully" : "Paketno dejanje »{displayName}« je uspešno izvedeno",
- "ascending" : "naraščajoče",
- "descending" : "padajoče",
- "Sort list by {column} ({direction})" : "Razvrsti seznam po stolpcu {column} ({direction})",
"Select all" : "izberi vse",
"Unselect all" : "Odstrani izbor",
+ "\"{displayName}\" failed on some elements " : "Dejanje »{displayName}« je pri nekaterih predmetih spodletelo",
+ "\"{displayName}\" batch action executed successfully" : "Paketno dejanje »{displayName}« je uspešno izvedeno",
"File not found" : "Datoteke ni mogoče najti",
"Storage informations" : "Podrobnosti shrambe",
"{usedQuotaByte} used" : "Zasedeno {usedQuotaByte}",
@@ -208,6 +206,7 @@ OC.L10N.register(
"Share" : "·Souporaba·",
"Shared by link" : "V souporabi sk povezavo",
"Shared" : "V souporabi",
+ "Switch to list view" : "Preklopi na seznamski pogled",
"Open the files app settings" : "Odpri nastavitve programa Datoteke",
"Files settings" : "Nastavitve datotek",
"File cannot be accessed" : "Do datoteke dostop ni mogoč",
@@ -232,9 +231,8 @@ OC.L10N.register(
"Delete permanently" : "Trajno izbriši",
"Open folder {displayName}" : "Odpri mapo {displayName}",
"Open details" : "Odpri podrobnosti",
- "Set up templates folder" : "Nastavitev mape predlog",
- "Templates" : "Predloge",
"Create new templates folder" : "Ustvari novo začasno mapo",
+ "Templates" : "Predloge",
"Unable to initialize the templates directory" : "Ni mogoče začeti mape predlog",
"No favorites yet" : "Ni še dodanih priljubljenih predmetov",
"Files and folders you mark as favorite will show up here" : "Datoteke ali mape, ki so označene kot priljubljene, bodo zbrane na tem mestu.",
@@ -250,6 +248,7 @@ OC.L10N.register(
"Unlimited" : "Neomejeno",
"Search users" : "Iskanje uporabnikov",
"Cancel" : "Prekliči",
+ "Set up templates folder" : "Nastavitev mape predlog",
"%s used" : "Uporabljeno %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Uporabljeno %1$s od %2$s",
@@ -263,6 +262,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Datoteka je označena z oznako {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Ta datoteka ima oznake {firstTags} in {lastTag}",
"Open folder {name}" : "Odpri mapo {name}",
+ "ascending" : "naraščajoče",
+ "descending" : "padajoče",
+ "Sort list by {column} ({direction})" : "Razvrsti seznam po stolpcu {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Seznam datotek ni v celoti izpisan zaradi zagotavljanja hitrosti in odzivnosti sistema. Predmeti se bodo dopolnjevali ob brskanju.",
"Search for an account" : "Poišči račun",
"Choose" : "Izbor",
diff --git a/apps/files/l10n/sl.json b/apps/files/l10n/sl.json
index 5ee6ea6d6d0..ff2acca62ae 100644
--- a/apps/files/l10n/sl.json
+++ b/apps/files/l10n/sl.json
@@ -30,6 +30,7 @@
"Move" : "Premakni",
"Copy" : "Kopiraj",
"Choose target folder" : "Izbor ciljne mape",
+ "Set reminder" : "Nastavi opomnik",
"Edit locally" : "Uredi krajevno",
"Open" : "Odpri",
"Delete file" : "Izbriši datoteko",
@@ -166,21 +167,18 @@
"File Management" : "Upravljanje datotek",
"Reload current directory" : "Ponovno naloži trenutno mapo",
"Go to the \"{dir}\" directory" : "Pojdi v mapo »{dir}«",
+ "\"{displayName}\" action executed successfully" : "Dejanje »{displayName}« je uspešno izvedeno",
+ "\"{displayName}\" action failed" : "Dejanje »{displayName}« je spodletelo",
"Select the row for {displayName}" : "Izbor vrstice za {displayName}",
- "Download file {name}" : "Prejmi datoteko {name}",
"File name" : "Ime datoteke",
"Folder name" : "Ime mape",
- "\"{displayName}\" action executed successfully" : "Dejanje »{displayName}« je uspešno izvedeno",
- "\"{displayName}\" action failed" : "Dejanje »{displayName}« je spodletelo",
+ "Download file {name}" : "Prejmi datoteko {name}",
"Name cannot be empty" : "Polje imena ne sme biti prazno",
"Total rows summary" : "Skupni povzetek vrstic",
- "\"{displayName}\" failed on some elements " : "Dejanje »{displayName}« je pri nekaterih predmetih spodletelo",
- "\"{displayName}\" batch action executed successfully" : "Paketno dejanje »{displayName}« je uspešno izvedeno",
- "ascending" : "naraščajoče",
- "descending" : "padajoče",
- "Sort list by {column} ({direction})" : "Razvrsti seznam po stolpcu {column} ({direction})",
"Select all" : "izberi vse",
"Unselect all" : "Odstrani izbor",
+ "\"{displayName}\" failed on some elements " : "Dejanje »{displayName}« je pri nekaterih predmetih spodletelo",
+ "\"{displayName}\" batch action executed successfully" : "Paketno dejanje »{displayName}« je uspešno izvedeno",
"File not found" : "Datoteke ni mogoče najti",
"Storage informations" : "Podrobnosti shrambe",
"{usedQuotaByte} used" : "Zasedeno {usedQuotaByte}",
@@ -206,6 +204,7 @@
"Share" : "·Souporaba·",
"Shared by link" : "V souporabi sk povezavo",
"Shared" : "V souporabi",
+ "Switch to list view" : "Preklopi na seznamski pogled",
"Open the files app settings" : "Odpri nastavitve programa Datoteke",
"Files settings" : "Nastavitve datotek",
"File cannot be accessed" : "Do datoteke dostop ni mogoč",
@@ -230,9 +229,8 @@
"Delete permanently" : "Trajno izbriši",
"Open folder {displayName}" : "Odpri mapo {displayName}",
"Open details" : "Odpri podrobnosti",
- "Set up templates folder" : "Nastavitev mape predlog",
- "Templates" : "Predloge",
"Create new templates folder" : "Ustvari novo začasno mapo",
+ "Templates" : "Predloge",
"Unable to initialize the templates directory" : "Ni mogoče začeti mape predlog",
"No favorites yet" : "Ni še dodanih priljubljenih predmetov",
"Files and folders you mark as favorite will show up here" : "Datoteke ali mape, ki so označene kot priljubljene, bodo zbrane na tem mestu.",
@@ -248,6 +246,7 @@
"Unlimited" : "Neomejeno",
"Search users" : "Iskanje uporabnikov",
"Cancel" : "Prekliči",
+ "Set up templates folder" : "Nastavitev mape predlog",
"%s used" : "Uporabljeno %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Uporabljeno %1$s od %2$s",
@@ -261,6 +260,9 @@
"This file has the tag {tag}" : "Datoteka je označena z oznako {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Ta datoteka ima oznake {firstTags} in {lastTag}",
"Open folder {name}" : "Odpri mapo {name}",
+ "ascending" : "naraščajoče",
+ "descending" : "padajoče",
+ "Sort list by {column} ({direction})" : "Razvrsti seznam po stolpcu {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Seznam datotek ni v celoti izpisan zaradi zagotavljanja hitrosti in odzivnosti sistema. Predmeti se bodo dopolnjevali ob brskanju.",
"Search for an account" : "Poišči račun",
"Choose" : "Izbor",
diff --git a/apps/files/l10n/sr.js b/apps/files/l10n/sr.js
index 1553d831d6f..a674b6b9c74 100644
--- a/apps/files/l10n/sr.js
+++ b/apps/files/l10n/sr.js
@@ -171,31 +171,34 @@ OC.L10N.register(
"File Management" : "Управљање фајловима",
"Reload current directory" : "Поново учитај текући директоријум",
"Go to the \"{dir}\" directory" : "Иди у „{dir}” дирекотријум",
+ "Drag and drop files here to upload" : "Да отпремите, превуците и отпустите фајлове овде",
+ "Upload successful" : "Отпремање је успешно",
+ "\"{displayName}\" action executed successfully" : "Акција „{displayName}” је успешно извршена",
+ "\"{displayName}\" action failed" : "Акција „{displayName}” није успела",
"Select the row for {displayName}" : "Изабери ред за {displayName}",
"Rename file" : "Промени назив фајла",
- "A long time ago" : "Пре доста времена",
- "This node is unavailable" : "Овај чвор није доступан",
- "Download file {name}" : "Преузми фајл {name}",
"File name" : "Име фајла",
"Folder name" : "Назив фасцикле",
- "\"{displayName}\" action executed successfully" : "Акција „{displayName}” је успешно извршена",
- "\"{displayName}\" action failed" : "Акција „{displayName}” није успела",
+ "This node is unavailable" : "Овај чвор није доступан",
+ "Download file {name}" : "Преузми фајл {name}",
"\"{name}\" is not an allowed filetype." : "„{name}” није дозвољени тип фајла.",
"{newName} already exists." : "{newName} већ постоји.",
+ "\"{char}\" is not allowed inside a file name." : "„{char}“ није дозвољен каракетер у имену фајла.",
"Name cannot be empty" : "Назив не може бити празан",
"Another entry with the same name already exists" : "Већ постоји ставка са истим именом.",
"Renamed \"{oldName}\" to \"{newName}\"" : "„{oldName}” је променњено на „{newName}”",
"Could not rename \"{oldName}\", it does not exist any more" : "Не може да се промени име фајла „{fileName}” јер фајл више не постоји",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Назив „{targetName}” се већ користи у директоријуму „{dir}”. Молимо вас да изаберете неко друго име.",
"Could not rename \"{oldName}\"" : "Не може да се промени име фајла „{fileName}”",
+ "A long time ago" : "Пре доста времена",
+ "Could not copy {file}. {message}" : "{file} не може да се копира. {message}",
+ "Could not move {file}. {message}" : "{file} не може да се премести. {message}",
"Total rows summary" : "Резиме укупног броја редова",
- "\"{displayName}\" failed on some elements " : "„{displayName}” није успело на неким елементима",
- "\"{displayName}\" batch action executed successfully" : "Пакетна акција „{displayName}” се успешно извршила",
- "ascending" : "растуће",
- "descending" : "опадајуће",
- "Sort list by {column} ({direction})" : "Поређај листу по {column} ({direction})",
"Select all" : "Означи све",
"Unselect all" : "Поништи цео избор",
+ "\"{displayName}\" failed on some elements " : "„{displayName}” није успело на неким елементима",
+ "\"{displayName}\" batch action executed successfully" : "Пакетна акција „{displayName}” се успешно извршила",
+ "Sort list by {column}" : "Поређај листу по {column}",
"List of files and folders." : "Листа фајлова и фолдера.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Ова листа није у потпуности приказана из разлога перформанси. Фајлови ће се приказивати како се крећете кроз листу.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} и {summaryFolder}",
@@ -226,6 +229,8 @@ OC.L10N.register(
"Share" : "Пдели",
"Shared by link" : "Дељени путем везе",
"Shared" : "Подељено",
+ "Switch to list view" : "Пређи на поглед листе",
+ "Switch to grid view" : "Пређи на поглед мреже",
"Open the files app settings" : "Отвори подешавања апликације фајлови",
"Files settings" : "Подешавања фајлова",
"File cannot be accessed" : "Фајлу не може да се приступи",
@@ -233,6 +238,7 @@ OC.L10N.register(
"Sort favorites first" : "Сортирај прво омиљене",
"Show hidden files" : "Прикажи скривене фајлове",
"Crop image previews" : "Опсецање прегледа слика",
+ "Enable the grid view" : "Укључи приказ мреже",
"Additional settings" : "Додатне поставке",
"WebDAV" : "ВебДАВ",
"Copy to clipboard" : "Копирај у оставу",
@@ -249,16 +255,28 @@ OC.L10N.register(
"Blank" : "Празно",
"Unable to create new file from template" : "Из шаблона није могао да се креира нови фајл",
"Delete permanently" : "Обриши заувек",
+ "Destination is not a folder" : "Одредиште није фолдер",
+ "This file/folder is already in that directory" : "Овај фајл/фолдер се већ налази у том директоријуму",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Фајл/фолдер не можете да преместите у самог себе или у његов подфолдер",
+ "A file or folder with that name already exists in this folder" : "У овом фолдеру већ постоји фајл или фолдер са тим именом",
+ "The files is locked" : "Фајл је закључан",
+ "The file does not exist anymore" : "Фајл више не постоји",
+ "Chose destination" : "Изаберите одредиште",
"Copy to {target}" : "Копирај у {target}",
"Move to {target}" : "Премести у {target}",
+ "Cancelled move or copy operation" : "Операција премештања или копирања је отказана",
"Open folder {displayName}" : "Отвори фолдер {displayName}",
"Open in Files" : "Отвори у Фајловима",
"Open details" : "Отвори детаље",
- "Created new folder \"{name}\"" : "Креиран је нови фолдер „{name}”",
- "Set up templates folder" : "Постављање фолдера са шаблонима",
- "Templates" : "Шаблони",
"Create new templates folder" : "Креирај нови фолдер шаблона",
+ "Templates" : "Шаблони",
"Unable to initialize the templates directory" : "Фолдер са шаблонима није могао да се иницијализује",
+ "Created new folder \"{name}\"" : "Креиран је нови фолдер „{name}”",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} фолдер","{folderCount} фолдера","{folderCount} фолдера"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} фајл","{fileCount} фајла","{fileCount} фајлова"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 фајл и {folderCount} фолдер","1 фајл и {folderCount} фолдера","1 фајл и {folderCount} фолдера"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} фајл и 1 фолдер","{fileCount} фајла и 1 фолдер","{fileCount} фајлова и 1 фолдер"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} фајлова и {folderCount} фолдера",
"List of favorites files and folders." : "Листа омиљених фајлова и директоријума.",
"No favorites yet" : "Још нема омиљених",
"Files and folders you mark as favorite will show up here" : "Фајлови и фасцикле које обележите као омиљене појавиће се овде",
@@ -278,6 +296,7 @@ OC.L10N.register(
"Unlimited" : "Неограничено",
"Search users" : "Претражи кориснике",
"Cancel" : "Поништи",
+ "Set up templates folder" : "Постављање фолдера са шаблонима",
"%s used" : "%s искоришћено",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Заузето %1$s од %2$s",
@@ -291,6 +310,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Овај фајл има ознаку {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Овај фајл има ознаке {firstTags} и {lastTag}",
"Open folder {name}" : "Отвори фолдер {name}",
+ "ascending" : "растуће",
+ "descending" : "опадајуће",
+ "Sort list by {column} ({direction})" : "Поређај листу по {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Ова листа није у потпуности приказана из разлога перформанси. Фајлови ће се приказивати како се крећете кроз листу.",
"Search for an account" : "Претражите налог",
"Choose" : "Изаберите",
diff --git a/apps/files/l10n/sr.json b/apps/files/l10n/sr.json
index a69c3e0a0aa..8f671ae71d5 100644
--- a/apps/files/l10n/sr.json
+++ b/apps/files/l10n/sr.json
@@ -169,31 +169,34 @@
"File Management" : "Управљање фајловима",
"Reload current directory" : "Поново учитај текући директоријум",
"Go to the \"{dir}\" directory" : "Иди у „{dir}” дирекотријум",
+ "Drag and drop files here to upload" : "Да отпремите, превуците и отпустите фајлове овде",
+ "Upload successful" : "Отпремање је успешно",
+ "\"{displayName}\" action executed successfully" : "Акција „{displayName}” је успешно извршена",
+ "\"{displayName}\" action failed" : "Акција „{displayName}” није успела",
"Select the row for {displayName}" : "Изабери ред за {displayName}",
"Rename file" : "Промени назив фајла",
- "A long time ago" : "Пре доста времена",
- "This node is unavailable" : "Овај чвор није доступан",
- "Download file {name}" : "Преузми фајл {name}",
"File name" : "Име фајла",
"Folder name" : "Назив фасцикле",
- "\"{displayName}\" action executed successfully" : "Акција „{displayName}” је успешно извршена",
- "\"{displayName}\" action failed" : "Акција „{displayName}” није успела",
+ "This node is unavailable" : "Овај чвор није доступан",
+ "Download file {name}" : "Преузми фајл {name}",
"\"{name}\" is not an allowed filetype." : "„{name}” није дозвољени тип фајла.",
"{newName} already exists." : "{newName} већ постоји.",
+ "\"{char}\" is not allowed inside a file name." : "„{char}“ није дозвољен каракетер у имену фајла.",
"Name cannot be empty" : "Назив не може бити празан",
"Another entry with the same name already exists" : "Већ постоји ставка са истим именом.",
"Renamed \"{oldName}\" to \"{newName}\"" : "„{oldName}” је променњено на „{newName}”",
"Could not rename \"{oldName}\", it does not exist any more" : "Не може да се промени име фајла „{fileName}” јер фајл више не постоји",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Назив „{targetName}” се већ користи у директоријуму „{dir}”. Молимо вас да изаберете неко друго име.",
"Could not rename \"{oldName}\"" : "Не може да се промени име фајла „{fileName}”",
+ "A long time ago" : "Пре доста времена",
+ "Could not copy {file}. {message}" : "{file} не може да се копира. {message}",
+ "Could not move {file}. {message}" : "{file} не може да се премести. {message}",
"Total rows summary" : "Резиме укупног броја редова",
- "\"{displayName}\" failed on some elements " : "„{displayName}” није успело на неким елементима",
- "\"{displayName}\" batch action executed successfully" : "Пакетна акција „{displayName}” се успешно извршила",
- "ascending" : "растуће",
- "descending" : "опадајуће",
- "Sort list by {column} ({direction})" : "Поређај листу по {column} ({direction})",
"Select all" : "Означи све",
"Unselect all" : "Поништи цео избор",
+ "\"{displayName}\" failed on some elements " : "„{displayName}” није успело на неким елементима",
+ "\"{displayName}\" batch action executed successfully" : "Пакетна акција „{displayName}” се успешно извршила",
+ "Sort list by {column}" : "Поређај листу по {column}",
"List of files and folders." : "Листа фајлова и фолдера.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Ова листа није у потпуности приказана из разлога перформанси. Фајлови ће се приказивати како се крећете кроз листу.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} и {summaryFolder}",
@@ -224,6 +227,8 @@
"Share" : "Пдели",
"Shared by link" : "Дељени путем везе",
"Shared" : "Подељено",
+ "Switch to list view" : "Пређи на поглед листе",
+ "Switch to grid view" : "Пређи на поглед мреже",
"Open the files app settings" : "Отвори подешавања апликације фајлови",
"Files settings" : "Подешавања фајлова",
"File cannot be accessed" : "Фајлу не може да се приступи",
@@ -231,6 +236,7 @@
"Sort favorites first" : "Сортирај прво омиљене",
"Show hidden files" : "Прикажи скривене фајлове",
"Crop image previews" : "Опсецање прегледа слика",
+ "Enable the grid view" : "Укључи приказ мреже",
"Additional settings" : "Додатне поставке",
"WebDAV" : "ВебДАВ",
"Copy to clipboard" : "Копирај у оставу",
@@ -247,16 +253,28 @@
"Blank" : "Празно",
"Unable to create new file from template" : "Из шаблона није могао да се креира нови фајл",
"Delete permanently" : "Обриши заувек",
+ "Destination is not a folder" : "Одредиште није фолдер",
+ "This file/folder is already in that directory" : "Овај фајл/фолдер се већ налази у том директоријуму",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Фајл/фолдер не можете да преместите у самог себе или у његов подфолдер",
+ "A file or folder with that name already exists in this folder" : "У овом фолдеру већ постоји фајл или фолдер са тим именом",
+ "The files is locked" : "Фајл је закључан",
+ "The file does not exist anymore" : "Фајл више не постоји",
+ "Chose destination" : "Изаберите одредиште",
"Copy to {target}" : "Копирај у {target}",
"Move to {target}" : "Премести у {target}",
+ "Cancelled move or copy operation" : "Операција премештања или копирања је отказана",
"Open folder {displayName}" : "Отвори фолдер {displayName}",
"Open in Files" : "Отвори у Фајловима",
"Open details" : "Отвори детаље",
- "Created new folder \"{name}\"" : "Креиран је нови фолдер „{name}”",
- "Set up templates folder" : "Постављање фолдера са шаблонима",
- "Templates" : "Шаблони",
"Create new templates folder" : "Креирај нови фолдер шаблона",
+ "Templates" : "Шаблони",
"Unable to initialize the templates directory" : "Фолдер са шаблонима није могао да се иницијализује",
+ "Created new folder \"{name}\"" : "Креиран је нови фолдер „{name}”",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} фолдер","{folderCount} фолдера","{folderCount} фолдера"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} фајл","{fileCount} фајла","{fileCount} фајлова"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 фајл и {folderCount} фолдер","1 фајл и {folderCount} фолдера","1 фајл и {folderCount} фолдера"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} фајл и 1 фолдер","{fileCount} фајла и 1 фолдер","{fileCount} фајлова и 1 фолдер"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} фајлова и {folderCount} фолдера",
"List of favorites files and folders." : "Листа омиљених фајлова и директоријума.",
"No favorites yet" : "Још нема омиљених",
"Files and folders you mark as favorite will show up here" : "Фајлови и фасцикле које обележите као омиљене појавиће се овде",
@@ -276,6 +294,7 @@
"Unlimited" : "Неограничено",
"Search users" : "Претражи кориснике",
"Cancel" : "Поништи",
+ "Set up templates folder" : "Постављање фолдера са шаблонима",
"%s used" : "%s искоришћено",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Заузето %1$s од %2$s",
@@ -289,6 +308,9 @@
"This file has the tag {tag}" : "Овај фајл има ознаку {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Овај фајл има ознаке {firstTags} и {lastTag}",
"Open folder {name}" : "Отвори фолдер {name}",
+ "ascending" : "растуће",
+ "descending" : "опадајуће",
+ "Sort list by {column} ({direction})" : "Поређај листу по {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Ова листа није у потпуности приказана из разлога перформанси. Фајлови ће се приказивати како се крећете кроз листу.",
"Search for an account" : "Претражите налог",
"Choose" : "Изаберите",
diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js
index a444edef6df..6a8c0f04da9 100644
--- a/apps/files/l10n/sv.js
+++ b/apps/files/l10n/sv.js
@@ -171,31 +171,34 @@ OC.L10N.register(
"File Management" : "Filhantering",
"Reload current directory" : "Ladda om nuvarande mapp",
"Go to the \"{dir}\" directory" : "Gå till \"{dir}\" mappen",
+ "Drag and drop files here to upload" : "Dra och släpp filer här för att ladda upp",
+ "Upload successful" : "Uppladdningen lyckades",
+ "\"{displayName}\" action executed successfully" : "\"{displayName}\"-åtgärden har utförts",
+ "\"{displayName}\" action failed" : "\"{displayName}\"-åtgärden misslyckades",
"Select the row for {displayName}" : "Välj raden för {displayName}",
"Rename file" : "Byt namn på fil",
- "A long time ago" : "För länge sedan",
- "This node is unavailable" : "Den här noden är inte tillgänglig",
- "Download file {name}" : "Ladda ner filen {name}",
"File name" : "Filnamn",
"Folder name" : "Mappnamn",
- "\"{displayName}\" action executed successfully" : "\"{displayName}\"-åtgärden har utförts",
- "\"{displayName}\" action failed" : "\"{displayName}\"-åtgärden misslyckades",
+ "This node is unavailable" : "Den här noden är inte tillgänglig",
+ "Download file {name}" : "Ladda ner filen {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" är inte en tillåten filtyp.",
"{newName} already exists." : "{newName} finns redan.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\" är inte tillåtet i ett filnamn.",
"Name cannot be empty" : "Namn kan inte vara tom",
"Another entry with the same name already exists" : "En annan post med samma namn finns redan",
"Renamed \"{oldName}\" to \"{newName}\"" : "Bytte namn på \"{oldName}\" till \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Kunde inte byta namn på \"{oldName}\", den finns inte längre",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Namnet \"{newName}\" används redan i mappen \"{dir}\". Välj ett annat namn.",
"Could not rename \"{oldName}\"" : "Kunde inte byta namn på \"{oldName}\"",
+ "A long time ago" : "För länge sedan",
+ "Could not copy {file}. {message}" : "Kunde inte kopiera {file}. {message}",
+ "Could not move {file}. {message}" : "Kunde inte flytta {file}. {message}",
"Total rows summary" : "Sammanfattning antal rader",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" misslyckades med vissa element",
- "\"{displayName}\" batch action executed successfully" : "Batchåtgärden \"{displayName}\" har utförts",
- "ascending" : "stigande",
- "descending" : "fallande",
- "Sort list by {column} ({direction})" : "Sortera listan efter {column} ({direction})",
"Select all" : "Välj allt",
"Unselect all" : "Avmarkera alla",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" misslyckades med vissa element",
+ "\"{displayName}\" batch action executed successfully" : "Batchåtgärden \"{displayName}\" har utförts",
+ "Sort list by {column}" : "Sortera lista efter {column}",
"List of files and folders." : "Lista över filer och mappar.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Denna lista är inte helt återgiven av prestandaskäl. Filerna kommer att renderas när du navigerar genom listan.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} och {summaryFolder}",
@@ -226,6 +229,8 @@ OC.L10N.register(
"Share" : "Dela",
"Shared by link" : "Delad via länk",
"Shared" : "Delad",
+ "Switch to list view" : "Växla till listvy",
+ "Switch to grid view" : "Växla till rutnätsvy",
"Open the files app settings" : "Öppna filappens inställningar",
"Files settings" : "Filinställningar",
"File cannot be accessed" : "Det går inte att komma åt filen",
@@ -233,6 +238,7 @@ OC.L10N.register(
"Sort favorites first" : "Sortera favoriter först",
"Show hidden files" : "Visa dolda filer",
"Crop image previews" : "Beskär förhandsgranskningar för bilder",
+ "Enable the grid view" : "Aktivera rutnätsvy",
"Additional settings" : "Övriga inställningar",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopiera till urklipp",
@@ -249,16 +255,28 @@ OC.L10N.register(
"Blank" : "Tom",
"Unable to create new file from template" : "Kunde inte skapa fil från mall",
"Delete permanently" : "Ta bort permanent",
+ "Destination is not a folder" : "Destinationen är inte en mapp",
+ "This file/folder is already in that directory" : "Den här filen/mappen finns redan i den katalogen",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Du kan inte flytta en fil/mapp till sig själv eller till en undermapp till sig själv",
+ "A file or folder with that name already exists in this folder" : "En fil eller mapp med det namnet finns redan i den här mappen",
+ "The files is locked" : "Filerna är låsta",
+ "The file does not exist anymore" : "Filen finns inte längre",
+ "Chose destination" : "Välj destination",
"Copy to {target}" : "Kopiera till {target}",
"Move to {target}" : "Flytta till {target}",
+ "Cancelled move or copy operation" : "Flytta eller kopiera avbröts",
"Open folder {displayName}" : "Öppna mappen {displayName}",
"Open in Files" : "Öppna i Filer",
"Open details" : "Öppna detaljer",
- "Created new folder \"{name}\"" : "Skapat ny mapp \"{name}\"",
- "Set up templates folder" : "Skapa en mapp för mallar",
- "Templates" : "Mallar",
"Create new templates folder" : "Skapa ny mallmapp",
+ "Templates" : "Mallar",
"Unable to initialize the templates directory" : "Kunde inte initialisera mall-mappen",
+ "Created new folder \"{name}\"" : "Skapat ny mapp \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} mapp","{folderCount} mappar"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} fil","{fileCount} filer"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 fil och {folderCount} mapp","1 fil och {folderCount} mappar"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} fil och 1 mapp","{fileCount} filer och 1 mapp"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} filer och {folderCount} mappar",
"List of favorites files and folders." : "Lista över favoritfiler och mappar.",
"No favorites yet" : "Inga favoriter ännu",
"Files and folders you mark as favorite will show up here" : "Filer och mappar markerade som favoriter kommer att visas här",
@@ -278,6 +296,7 @@ OC.L10N.register(
"Unlimited" : "Obegränsad",
"Search users" : "Sök användare",
"Cancel" : "Avbryt",
+ "Set up templates folder" : "Skapa en mapp för mallar",
"%s used" : "%s använt",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s av %2$s använt",
@@ -291,6 +310,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Den här filen har taggen {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Den här filen har taggarna {firstTags} och {lastTag}",
"Open folder {name}" : "Öppna mappen {name}",
+ "ascending" : "stigande",
+ "descending" : "fallande",
+ "Sort list by {column} ({direction})" : "Sortera listan efter {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Denna lista är inte helt återgiven av prestandaskäl. Filerna kommer att renderas när du navigerar genom listan.",
"Search for an account" : "Sök efter ett konto",
"Choose" : "Välj",
diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json
index 06b3f313d50..5fe6d949578 100644
--- a/apps/files/l10n/sv.json
+++ b/apps/files/l10n/sv.json
@@ -169,31 +169,34 @@
"File Management" : "Filhantering",
"Reload current directory" : "Ladda om nuvarande mapp",
"Go to the \"{dir}\" directory" : "Gå till \"{dir}\" mappen",
+ "Drag and drop files here to upload" : "Dra och släpp filer här för att ladda upp",
+ "Upload successful" : "Uppladdningen lyckades",
+ "\"{displayName}\" action executed successfully" : "\"{displayName}\"-åtgärden har utförts",
+ "\"{displayName}\" action failed" : "\"{displayName}\"-åtgärden misslyckades",
"Select the row for {displayName}" : "Välj raden för {displayName}",
"Rename file" : "Byt namn på fil",
- "A long time ago" : "För länge sedan",
- "This node is unavailable" : "Den här noden är inte tillgänglig",
- "Download file {name}" : "Ladda ner filen {name}",
"File name" : "Filnamn",
"Folder name" : "Mappnamn",
- "\"{displayName}\" action executed successfully" : "\"{displayName}\"-åtgärden har utförts",
- "\"{displayName}\" action failed" : "\"{displayName}\"-åtgärden misslyckades",
+ "This node is unavailable" : "Den här noden är inte tillgänglig",
+ "Download file {name}" : "Ladda ner filen {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" är inte en tillåten filtyp.",
"{newName} already exists." : "{newName} finns redan.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\" är inte tillåtet i ett filnamn.",
"Name cannot be empty" : "Namn kan inte vara tom",
"Another entry with the same name already exists" : "En annan post med samma namn finns redan",
"Renamed \"{oldName}\" to \"{newName}\"" : "Bytte namn på \"{oldName}\" till \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Kunde inte byta namn på \"{oldName}\", den finns inte längre",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Namnet \"{newName}\" används redan i mappen \"{dir}\". Välj ett annat namn.",
"Could not rename \"{oldName}\"" : "Kunde inte byta namn på \"{oldName}\"",
+ "A long time ago" : "För länge sedan",
+ "Could not copy {file}. {message}" : "Kunde inte kopiera {file}. {message}",
+ "Could not move {file}. {message}" : "Kunde inte flytta {file}. {message}",
"Total rows summary" : "Sammanfattning antal rader",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" misslyckades med vissa element",
- "\"{displayName}\" batch action executed successfully" : "Batchåtgärden \"{displayName}\" har utförts",
- "ascending" : "stigande",
- "descending" : "fallande",
- "Sort list by {column} ({direction})" : "Sortera listan efter {column} ({direction})",
"Select all" : "Välj allt",
"Unselect all" : "Avmarkera alla",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" misslyckades med vissa element",
+ "\"{displayName}\" batch action executed successfully" : "Batchåtgärden \"{displayName}\" har utförts",
+ "Sort list by {column}" : "Sortera lista efter {column}",
"List of files and folders." : "Lista över filer och mappar.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Denna lista är inte helt återgiven av prestandaskäl. Filerna kommer att renderas när du navigerar genom listan.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} och {summaryFolder}",
@@ -224,6 +227,8 @@
"Share" : "Dela",
"Shared by link" : "Delad via länk",
"Shared" : "Delad",
+ "Switch to list view" : "Växla till listvy",
+ "Switch to grid view" : "Växla till rutnätsvy",
"Open the files app settings" : "Öppna filappens inställningar",
"Files settings" : "Filinställningar",
"File cannot be accessed" : "Det går inte att komma åt filen",
@@ -231,6 +236,7 @@
"Sort favorites first" : "Sortera favoriter först",
"Show hidden files" : "Visa dolda filer",
"Crop image previews" : "Beskär förhandsgranskningar för bilder",
+ "Enable the grid view" : "Aktivera rutnätsvy",
"Additional settings" : "Övriga inställningar",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopiera till urklipp",
@@ -247,16 +253,28 @@
"Blank" : "Tom",
"Unable to create new file from template" : "Kunde inte skapa fil från mall",
"Delete permanently" : "Ta bort permanent",
+ "Destination is not a folder" : "Destinationen är inte en mapp",
+ "This file/folder is already in that directory" : "Den här filen/mappen finns redan i den katalogen",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Du kan inte flytta en fil/mapp till sig själv eller till en undermapp till sig själv",
+ "A file or folder with that name already exists in this folder" : "En fil eller mapp med det namnet finns redan i den här mappen",
+ "The files is locked" : "Filerna är låsta",
+ "The file does not exist anymore" : "Filen finns inte längre",
+ "Chose destination" : "Välj destination",
"Copy to {target}" : "Kopiera till {target}",
"Move to {target}" : "Flytta till {target}",
+ "Cancelled move or copy operation" : "Flytta eller kopiera avbröts",
"Open folder {displayName}" : "Öppna mappen {displayName}",
"Open in Files" : "Öppna i Filer",
"Open details" : "Öppna detaljer",
- "Created new folder \"{name}\"" : "Skapat ny mapp \"{name}\"",
- "Set up templates folder" : "Skapa en mapp för mallar",
- "Templates" : "Mallar",
"Create new templates folder" : "Skapa ny mallmapp",
+ "Templates" : "Mallar",
"Unable to initialize the templates directory" : "Kunde inte initialisera mall-mappen",
+ "Created new folder \"{name}\"" : "Skapat ny mapp \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} mapp","{folderCount} mappar"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} fil","{fileCount} filer"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 fil och {folderCount} mapp","1 fil och {folderCount} mappar"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} fil och 1 mapp","{fileCount} filer och 1 mapp"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} filer och {folderCount} mappar",
"List of favorites files and folders." : "Lista över favoritfiler och mappar.",
"No favorites yet" : "Inga favoriter ännu",
"Files and folders you mark as favorite will show up here" : "Filer och mappar markerade som favoriter kommer att visas här",
@@ -276,6 +294,7 @@
"Unlimited" : "Obegränsad",
"Search users" : "Sök användare",
"Cancel" : "Avbryt",
+ "Set up templates folder" : "Skapa en mapp för mallar",
"%s used" : "%s använt",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s av %2$s använt",
@@ -289,6 +308,9 @@
"This file has the tag {tag}" : "Den här filen har taggen {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Den här filen har taggarna {firstTags} och {lastTag}",
"Open folder {name}" : "Öppna mappen {name}",
+ "ascending" : "stigande",
+ "descending" : "fallande",
+ "Sort list by {column} ({direction})" : "Sortera listan efter {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Denna lista är inte helt återgiven av prestandaskäl. Filerna kommer att renderas när du navigerar genom listan.",
"Search for an account" : "Sök efter ett konto",
"Choose" : "Välj",
diff --git a/apps/files/l10n/th.js b/apps/files/l10n/th.js
index e7beea75f01..7dcfde6d70c 100644
--- a/apps/files/l10n/th.js
+++ b/apps/files/l10n/th.js
@@ -207,7 +207,6 @@ OC.L10N.register(
"Blank" : "ว่าง",
"Unable to create new file from template" : "ไม่สามารถสร้างไฟล์ใหม่จากเทมเพลต",
"Delete permanently" : "ลบแบบถาวร",
- "Set up templates folder" : "ตั้งค่าโฟลเดอร์เทมเพลต",
"Templates" : "เทมเพลต",
"Unable to initialize the templates directory" : "ไม่สามารถเตรียมไดเรกทอรีเทมเพลต",
"No favorites yet" : "ยังไม่มีรายการโปรด",
@@ -224,6 +223,7 @@ OC.L10N.register(
"Unlimited" : "ไม่จำกัด",
"Search users" : "ค้นหาผู้ใช้",
"Cancel" : "ยกเลิก",
+ "Set up templates folder" : "ตั้งค่าโฟลเดอร์เทมเพลต",
"%s used" : "ใช้ไป %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "ใช้ไป %1$s จาก %2$s",
diff --git a/apps/files/l10n/th.json b/apps/files/l10n/th.json
index d3f851d86a6..79fa4567437 100644
--- a/apps/files/l10n/th.json
+++ b/apps/files/l10n/th.json
@@ -205,7 +205,6 @@
"Blank" : "ว่าง",
"Unable to create new file from template" : "ไม่สามารถสร้างไฟล์ใหม่จากเทมเพลต",
"Delete permanently" : "ลบแบบถาวร",
- "Set up templates folder" : "ตั้งค่าโฟลเดอร์เทมเพลต",
"Templates" : "เทมเพลต",
"Unable to initialize the templates directory" : "ไม่สามารถเตรียมไดเรกทอรีเทมเพลต",
"No favorites yet" : "ยังไม่มีรายการโปรด",
@@ -222,6 +221,7 @@
"Unlimited" : "ไม่จำกัด",
"Search users" : "ค้นหาผู้ใช้",
"Cancel" : "ยกเลิก",
+ "Set up templates folder" : "ตั้งค่าโฟลเดอร์เทมเพลต",
"%s used" : "ใช้ไป %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "ใช้ไป %1$s จาก %2$s",
diff --git a/apps/files/l10n/tr.js b/apps/files/l10n/tr.js
index b18ccce9888..36ec887d70e 100644
--- a/apps/files/l10n/tr.js
+++ b/apps/files/l10n/tr.js
@@ -171,31 +171,34 @@ OC.L10N.register(
"File Management" : "Dosya yönetimi",
"Reload current directory" : "Geçerli klasörü yeniden yükle",
"Go to the \"{dir}\" directory" : "\"{dir}\" klasörüne git",
+ "Drag and drop files here to upload" : "Yüklemek istediğiniz dosyaları sürükleyip buraya bırakın",
+ "Upload successful" : "Yüklendi",
+ "\"{displayName}\" action executed successfully" : "\"{displayName}\" işlemi tamamlandı",
+ "\"{displayName}\" action failed" : "\"{displayName}\" işlemi tamamlanamadı",
"Select the row for {displayName}" : "{displayName} satırını seç",
"Rename file" : "Dosyayı yeniden adlandır",
- "A long time ago" : "Uzun süre önce",
- "This node is unavailable" : "Bu düğüm kullanılamıyor",
- "Download file {name}" : "{name} dosyasını indir",
"File name" : "Dosya adı",
"Folder name" : "Klasör adı",
- "\"{displayName}\" action executed successfully" : "\"{displayName}\" işlemi tamamlandı",
- "\"{displayName}\" action failed" : "\"{displayName}\" işlemi tamamlanamadı",
+ "This node is unavailable" : "Bu düğüm kullanılamıyor",
+ "Download file {name}" : "{name} dosyasını indir",
"\"{name}\" is not an allowed filetype." : "\"{name}\" dosya türüne izin verilmiyor.",
"{newName} already exists." : "{newName} zaten var.",
+ "\"{char}\" is not allowed inside a file name." : "Dosya adlarında \"{char}\" karakteri kullanılamaz.",
"Name cannot be empty" : "Ad boş olamaz",
"Another entry with the same name already exists" : "Aynı adlı bir kayıt zaten var",
"Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" adı \"{newName}\" olarak değiştirildi",
"Could not rename \"{oldName}\", it does not exist any more" : "\"{oldName}\" adı artık olmadığından değiştirilemedi. ",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{newName}\" adı \"{dir}\" klasöründe zaten kullanılmış. Lütfen başka bir ad seçin.",
"Could not rename \"{oldName}\"" : "\"{oldName}\" adı değiştirilemedi",
+ "A long time ago" : "Uzun süre önce",
+ "Could not copy {file}. {message}" : "{file} dosyası kopyalanamadı. {message}",
+ "Could not move {file}. {message}" : "{file} dosyası taşınamadı. {message}",
"Total rows summary" : "Toplam satır özeti",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" toplu işlemi bazı bileşenlerde tamamlanamadı",
- "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" toplu işlemi tamamlandı",
- "ascending" : "Artan",
- "descending" : "Azalan",
- "Sort list by {column} ({direction})" : "Listeyi {column} sütununa göre sırala ({direction})",
"Select all" : "Tümünü seç",
"Unselect all" : "Tümünü bırak",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" toplu işlemi bazı bileşenlerde tamamlanamadı",
+ "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" toplu işlemi tamamlandı",
+ "Sort list by {column}" : "{column} sütununa göre sırala",
"List of files and folders." : "Dosya ve klasörlerin listesi.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Başarımı olumsuz etkilememek için listenin tümü görüntülenmiyor. Listede ilerledikçe dosyalar görüntülenecek.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} ve {summaryFolder}",
@@ -226,6 +229,8 @@ OC.L10N.register(
"Share" : "Paylaş",
"Shared by link" : "Bağlantı ile paylaşılmış",
"Shared" : "Paylaşılan",
+ "Switch to list view" : "Liste görünümüne geç",
+ "Switch to grid view" : "Tablo görünümüne geç",
"Open the files app settings" : "Dosyalar uygulaması ayarlarını aç",
"Files settings" : "Dosyalar ayarları",
"File cannot be accessed" : "Dosyaya erişilemedi",
@@ -233,6 +238,7 @@ OC.L10N.register(
"Sort favorites first" : "Sık kullanılanlar üstte sıralansın",
"Show hidden files" : "Gizli dosyaları görüntüle",
"Crop image previews" : "Görsel ön izlemeleri kırpılsın",
+ "Enable the grid view" : "Tablo görünümü kullanılsın",
"Additional settings" : "Ek ayarlar",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Panoya kopyala",
@@ -249,16 +255,28 @@ OC.L10N.register(
"Blank" : "Boş",
"Unable to create new file from template" : "Kalıptan yeni dosya eklenemedi",
"Delete permanently" : "Kalıcı olarak sil",
+ "Destination is not a folder" : "Hedef bir klasör değil",
+ "This file/folder is already in that directory" : "Dosya ya da klasör bu klasörde zaten var",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Bir dosyayı ya da klasörü kendi üzerine veya kendisinin alt klasörüne taşıyamazsınız",
+ "A file or folder with that name already exists in this folder" : "Bu klasörde aynı adlı bir dosya ya da klasör zaten var",
+ "The files is locked" : "Dosyalar kilitli",
+ "The file does not exist anymore" : "Dosya artık yok",
+ "Chose destination" : "Hedefi seçin",
"Copy to {target}" : "{target} içine kopyala",
"Move to {target}" : "{target} içine taşı",
+ "Cancelled move or copy operation" : "Taşıma ya da kopyalama işlemi iptal edildi",
"Open folder {displayName}" : "{displayName} klasörünü aç",
"Open in Files" : "Dosyalar uygulamasında aç",
"Open details" : "Ayrıntıları aç",
- "Created new folder \"{name}\"" : "\"{name}\" yeni klasörü oluşturuldu",
- "Set up templates folder" : "Kalıp klasörünü ayarlayın",
- "Templates" : "Kalıplar",
"Create new templates folder" : "Yeni kalıp klasörü oluştur",
+ "Templates" : "Kalıplar",
"Unable to initialize the templates directory" : "Kalıp klasörü hazırlanamadı",
+ "Created new folder \"{name}\"" : "\"{name}\" yeni klasörü oluşturuldu",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} klasör","{folderCount} klasör"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} dosya","{fileCount} dosya"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 dosya ve {folderCount} klasör","1 dosya ve {folderCount} klasör"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} dosya ve 1 klasör","{fileCount} dosya ve 1 klasör"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} dosya ve {folderCount} klasör",
"List of favorites files and folders." : "Sık kullanılan dosya ve klasör listesi.",
"No favorites yet" : "Henüz sık kullanılan bir öge yok",
"Files and folders you mark as favorite will show up here" : "Sık kullanılanlara eklediğiniz dosya ve klasörler burada görüntülenir",
@@ -278,6 +296,7 @@ OC.L10N.register(
"Unlimited" : "Sınırsız",
"Search users" : "Kullanıcı arama",
"Cancel" : "İptal",
+ "Set up templates folder" : "Kalıp klasörünü ayarlayın",
"%s used" : "%s kullanılıyor",
"%s%%" : "%%%s",
"%1$s of %2$s used" : "%1$s / %2$s kullanıldı",
@@ -291,6 +310,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Dosya {tag} olarak etiketlenmiş",
"This file has the tags {firstTags} and {lastTag}" : "Dosya {firstTags} ve {lastTag} olarak etiketlenmiş",
"Open folder {name}" : "{name} klasörünü aç",
+ "ascending" : "Artan",
+ "descending" : "Azalan",
+ "Sort list by {column} ({direction})" : "Listeyi {column} sütununa göre sırala ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Başarımı olumsuz etkilememek için listenin tümü görüntülenmiyor. Listede ilerledikçe dosyalar görüntülenecek.",
"Search for an account" : "Hesap ara",
"Choose" : "Seçin",
diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json
index 3b38a92d131..41a755d5218 100644
--- a/apps/files/l10n/tr.json
+++ b/apps/files/l10n/tr.json
@@ -169,31 +169,34 @@
"File Management" : "Dosya yönetimi",
"Reload current directory" : "Geçerli klasörü yeniden yükle",
"Go to the \"{dir}\" directory" : "\"{dir}\" klasörüne git",
+ "Drag and drop files here to upload" : "Yüklemek istediğiniz dosyaları sürükleyip buraya bırakın",
+ "Upload successful" : "Yüklendi",
+ "\"{displayName}\" action executed successfully" : "\"{displayName}\" işlemi tamamlandı",
+ "\"{displayName}\" action failed" : "\"{displayName}\" işlemi tamamlanamadı",
"Select the row for {displayName}" : "{displayName} satırını seç",
"Rename file" : "Dosyayı yeniden adlandır",
- "A long time ago" : "Uzun süre önce",
- "This node is unavailable" : "Bu düğüm kullanılamıyor",
- "Download file {name}" : "{name} dosyasını indir",
"File name" : "Dosya adı",
"Folder name" : "Klasör adı",
- "\"{displayName}\" action executed successfully" : "\"{displayName}\" işlemi tamamlandı",
- "\"{displayName}\" action failed" : "\"{displayName}\" işlemi tamamlanamadı",
+ "This node is unavailable" : "Bu düğüm kullanılamıyor",
+ "Download file {name}" : "{name} dosyasını indir",
"\"{name}\" is not an allowed filetype." : "\"{name}\" dosya türüne izin verilmiyor.",
"{newName} already exists." : "{newName} zaten var.",
+ "\"{char}\" is not allowed inside a file name." : "Dosya adlarında \"{char}\" karakteri kullanılamaz.",
"Name cannot be empty" : "Ad boş olamaz",
"Another entry with the same name already exists" : "Aynı adlı bir kayıt zaten var",
"Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" adı \"{newName}\" olarak değiştirildi",
"Could not rename \"{oldName}\", it does not exist any more" : "\"{oldName}\" adı artık olmadığından değiştirilemedi. ",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{newName}\" adı \"{dir}\" klasöründe zaten kullanılmış. Lütfen başka bir ad seçin.",
"Could not rename \"{oldName}\"" : "\"{oldName}\" adı değiştirilemedi",
+ "A long time ago" : "Uzun süre önce",
+ "Could not copy {file}. {message}" : "{file} dosyası kopyalanamadı. {message}",
+ "Could not move {file}. {message}" : "{file} dosyası taşınamadı. {message}",
"Total rows summary" : "Toplam satır özeti",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" toplu işlemi bazı bileşenlerde tamamlanamadı",
- "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" toplu işlemi tamamlandı",
- "ascending" : "Artan",
- "descending" : "Azalan",
- "Sort list by {column} ({direction})" : "Listeyi {column} sütununa göre sırala ({direction})",
"Select all" : "Tümünü seç",
"Unselect all" : "Tümünü bırak",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" toplu işlemi bazı bileşenlerde tamamlanamadı",
+ "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" toplu işlemi tamamlandı",
+ "Sort list by {column}" : "{column} sütununa göre sırala",
"List of files and folders." : "Dosya ve klasörlerin listesi.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Başarımı olumsuz etkilememek için listenin tümü görüntülenmiyor. Listede ilerledikçe dosyalar görüntülenecek.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} ve {summaryFolder}",
@@ -224,6 +227,8 @@
"Share" : "Paylaş",
"Shared by link" : "Bağlantı ile paylaşılmış",
"Shared" : "Paylaşılan",
+ "Switch to list view" : "Liste görünümüne geç",
+ "Switch to grid view" : "Tablo görünümüne geç",
"Open the files app settings" : "Dosyalar uygulaması ayarlarını aç",
"Files settings" : "Dosyalar ayarları",
"File cannot be accessed" : "Dosyaya erişilemedi",
@@ -231,6 +236,7 @@
"Sort favorites first" : "Sık kullanılanlar üstte sıralansın",
"Show hidden files" : "Gizli dosyaları görüntüle",
"Crop image previews" : "Görsel ön izlemeleri kırpılsın",
+ "Enable the grid view" : "Tablo görünümü kullanılsın",
"Additional settings" : "Ek ayarlar",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Panoya kopyala",
@@ -247,16 +253,28 @@
"Blank" : "Boş",
"Unable to create new file from template" : "Kalıptan yeni dosya eklenemedi",
"Delete permanently" : "Kalıcı olarak sil",
+ "Destination is not a folder" : "Hedef bir klasör değil",
+ "This file/folder is already in that directory" : "Dosya ya da klasör bu klasörde zaten var",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Bir dosyayı ya da klasörü kendi üzerine veya kendisinin alt klasörüne taşıyamazsınız",
+ "A file or folder with that name already exists in this folder" : "Bu klasörde aynı adlı bir dosya ya da klasör zaten var",
+ "The files is locked" : "Dosyalar kilitli",
+ "The file does not exist anymore" : "Dosya artık yok",
+ "Chose destination" : "Hedefi seçin",
"Copy to {target}" : "{target} içine kopyala",
"Move to {target}" : "{target} içine taşı",
+ "Cancelled move or copy operation" : "Taşıma ya da kopyalama işlemi iptal edildi",
"Open folder {displayName}" : "{displayName} klasörünü aç",
"Open in Files" : "Dosyalar uygulamasında aç",
"Open details" : "Ayrıntıları aç",
- "Created new folder \"{name}\"" : "\"{name}\" yeni klasörü oluşturuldu",
- "Set up templates folder" : "Kalıp klasörünü ayarlayın",
- "Templates" : "Kalıplar",
"Create new templates folder" : "Yeni kalıp klasörü oluştur",
+ "Templates" : "Kalıplar",
"Unable to initialize the templates directory" : "Kalıp klasörü hazırlanamadı",
+ "Created new folder \"{name}\"" : "\"{name}\" yeni klasörü oluşturuldu",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} klasör","{folderCount} klasör"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} dosya","{fileCount} dosya"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 dosya ve {folderCount} klasör","1 dosya ve {folderCount} klasör"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} dosya ve 1 klasör","{fileCount} dosya ve 1 klasör"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} dosya ve {folderCount} klasör",
"List of favorites files and folders." : "Sık kullanılan dosya ve klasör listesi.",
"No favorites yet" : "Henüz sık kullanılan bir öge yok",
"Files and folders you mark as favorite will show up here" : "Sık kullanılanlara eklediğiniz dosya ve klasörler burada görüntülenir",
@@ -276,6 +294,7 @@
"Unlimited" : "Sınırsız",
"Search users" : "Kullanıcı arama",
"Cancel" : "İptal",
+ "Set up templates folder" : "Kalıp klasörünü ayarlayın",
"%s used" : "%s kullanılıyor",
"%s%%" : "%%%s",
"%1$s of %2$s used" : "%1$s / %2$s kullanıldı",
@@ -289,6 +308,9 @@
"This file has the tag {tag}" : "Dosya {tag} olarak etiketlenmiş",
"This file has the tags {firstTags} and {lastTag}" : "Dosya {firstTags} ve {lastTag} olarak etiketlenmiş",
"Open folder {name}" : "{name} klasörünü aç",
+ "ascending" : "Artan",
+ "descending" : "Azalan",
+ "Sort list by {column} ({direction})" : "Listeyi {column} sütununa göre sırala ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Başarımı olumsuz etkilememek için listenin tümü görüntülenmiyor. Listede ilerledikçe dosyalar görüntülenecek.",
"Search for an account" : "Hesap ara",
"Choose" : "Seçin",
diff --git a/apps/files/l10n/uk.js b/apps/files/l10n/uk.js
index 847f91ee5fc..5e3ae0ad098 100644
--- a/apps/files/l10n/uk.js
+++ b/apps/files/l10n/uk.js
@@ -171,31 +171,34 @@ OC.L10N.register(
"File Management" : "Керування файлами",
"Reload current directory" : "Перевантажити поточний каталог",
"Go to the \"{dir}\" directory" : "Перейти до каталогу \"{dir}\"",
+ "Drag and drop files here to upload" : "Перетягніть файли сюди для завантаження",
+ "Upload successful" : "Успішно завантажено",
+ "\"{displayName}\" action executed successfully" : "Дію \"{displayName}\" успішно виконано",
+ "\"{displayName}\" action failed" : "Дію \"{displayName}\" не вдалося виконати",
"Select the row for {displayName}" : "Виберіть рядок для {displayName}",
"Rename file" : "Перейменувати файл",
- "A long time ago" : "Давно",
- "This node is unavailable" : "Цей вузол не доступний",
- "Download file {name}" : "Завантажити файл {name}",
"File name" : "Ім'я файлу",
"Folder name" : "Назва каталогу",
- "\"{displayName}\" action executed successfully" : "Дію \"{displayName}\" успішно виконано",
- "\"{displayName}\" action failed" : "Дію \"{displayName}\" не вдалося виконати",
+ "This node is unavailable" : "Цей вузол не доступний",
+ "Download file {name}" : "Завантажити файл {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" є недозволеним типом файлу.",
"{newName} already exists." : "{newName} вже присутній.",
+ "\"{char}\" is not allowed inside a file name." : "Неприпустимий \"{char}\" у назві файлу.",
"Name cannot be empty" : "Ім'я не може бути порожнім",
"Another entry with the same name already exists" : "Ще один запис з такою же назвою присутній.",
"Renamed \"{oldName}\" to \"{newName}\"" : "Перейменовано \"{oldName}\" у \"{newName\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Не вдалося перейментувати \"{oldName}\", оскільки він вже відсутній",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Ім'я \"{newName}\" вже використовується у каталозі \"{dir}\". Виберіть інше ім'я.",
"Could not rename \"{oldName}\"" : "Не вдалося перейменувати \"{oldName}\"",
+ "A long time ago" : "Давно",
+ "Could not copy {file}. {message}" : "Не вдалося скопіювати файл {file}. {message}",
+ "Could not move {file}. {message}" : "Не вдалося перемістити файл {file}. {message}",
"Total rows summary" : "Загалом рядків",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" не показується в окремих елементах",
- "\"{displayName}\" batch action executed successfully" : "Пакетну дію \"{displayName}\" виконано успішно",
- "ascending" : "за зростанням",
- "descending" : "за спаданням",
- "Sort list by {column} ({direction})" : "Впорядкувати список за {column} ({direction})",
"Select all" : "Вибрати все",
"Unselect all" : "Зняти вибір",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" не показується в окремих елементах",
+ "\"{displayName}\" batch action executed successfully" : "Операцію \"{displayName}\" успішно виконано",
+ "Sort list by {column}" : "Впорядкувати список за {column}",
"List of files and folders." : "Список файлів та каталогів",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Список не подається повністю з міркувань обчислювальних потужностей. Файли показуватимуться під час прокручування списку.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} та {summaryFolder}",
@@ -226,6 +229,8 @@ OC.L10N.register(
"Share" : "Поширити",
"Shared by link" : "Доступ за посиланням",
"Shared" : "Спільне",
+ "Switch to list view" : "У вигляді списку",
+ "Switch to grid view" : "У вигляді сітки",
"Open the files app settings" : "Перейти до налаштувань застосунку файлів",
"Files settings" : "Налаштування",
"File cannot be accessed" : "Неможливо отримати доступ до файлу",
@@ -233,6 +238,7 @@ OC.L10N.register(
"Sort favorites first" : "Спочатку впорядковувати вподобані",
"Show hidden files" : "Показувати приховані файли",
"Crop image previews" : "Попередній перегляд перед кадруванням",
+ "Enable the grid view" : "Увімкнути перегляд у вигляді сітки",
"Additional settings" : "Додатково",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Копіювати до буферу обміну",
@@ -249,16 +255,28 @@ OC.L10N.register(
"Blank" : "Порожньо",
"Unable to create new file from template" : "Неможливо створити новий файл з шаблону",
"Delete permanently" : "Вилучити назавжди",
+ "Destination is not a folder" : "Місце призначення не є каталогом",
+ "This file/folder is already in that directory" : "Такий файл чи каталог вже присутні в цьому каталозі",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Неможливо перемістити файл чи каталог до самого себе або у цей саме підкаталог",
+ "A file or folder with that name already exists in this folder" : "Файл чи каталог з таким ім'ям вже присутній в цьому каталозі",
+ "The files is locked" : "Файл заблоковано",
+ "The file does not exist anymore" : "Цей файл більше недоступний",
+ "Chose destination" : "Виберіть місце призначення",
"Copy to {target}" : "Копіювати до {target}",
"Move to {target}" : "Перемістити до {target}",
+ "Cancelled move or copy operation" : "Скасовно операцію переміщення або копіювання",
"Open folder {displayName}" : "Відкрити каталог {displayName}",
"Open in Files" : "Відкрити у Файлах",
"Open details" : "Показати деталі",
- "Created new folder \"{name}\"" : "Створив(-ла) новий каталог \"{name}\"",
- "Set up templates folder" : "Встановити каталог з шаблонами",
- "Templates" : "Шаблони",
"Create new templates folder" : "Створіть нову папку шаблонів",
+ "Templates" : "Шаблони",
"Unable to initialize the templates directory" : "Неможливо встановити каталог з шаблонами",
+ "Created new folder \"{name}\"" : "Створив(-ла) новий каталог \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} каталог","{folderCount} каталоги","{folderCount} каталогів","{folderCount} каталогів"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} файл","{fileCount} файли","{fileCount} файлів","{fileCount} файлів"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 файл так {folderCount} каталог","1 файл так {folderCount} каталоги","1 файл так {folderCount} каталогів","1 файл так {folderCount} каталогів"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} файл та 1 каталог","{fileCount} файли та 1 каталог","{fileCount} файлів та 1 каталог","{fileCount} файлів та 1 каталог"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} файлів та {folderCount} каталогів",
"List of favorites files and folders." : "Список вподобаних файлів та каталогів.",
"No favorites yet" : "Поки немає вподобаного",
"Files and folders you mark as favorite will show up here" : "Файли та каталоги, які ви вподобали, з’являться тут",
@@ -278,6 +296,7 @@ OC.L10N.register(
"Unlimited" : "Необмежено",
"Search users" : "Пошук користувачів",
"Cancel" : "Скасувати",
+ "Set up templates folder" : "Встановити каталог з шаблонами",
"%s used" : "%s використано",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Використано %1$s із %2$s",
@@ -291,6 +310,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "Цей файл має мітку {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Цей файл має мітку {firstTags} та {lastTag}",
"Open folder {name}" : "Відкрити каталог {name}",
+ "ascending" : "за зростанням",
+ "descending" : "за спаданням",
+ "Sort list by {column} ({direction})" : "Впорядкувати список за {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Через обмеження, пов'язані з потужністю, список не показується повністю. Файли показуватимуться, щойно ви рухатиметеся списком.",
"Search for an account" : "Пошук облікового запису",
"Choose" : "Вибрати",
diff --git a/apps/files/l10n/uk.json b/apps/files/l10n/uk.json
index 7761699fba4..3d8bed7a4eb 100644
--- a/apps/files/l10n/uk.json
+++ b/apps/files/l10n/uk.json
@@ -169,31 +169,34 @@
"File Management" : "Керування файлами",
"Reload current directory" : "Перевантажити поточний каталог",
"Go to the \"{dir}\" directory" : "Перейти до каталогу \"{dir}\"",
+ "Drag and drop files here to upload" : "Перетягніть файли сюди для завантаження",
+ "Upload successful" : "Успішно завантажено",
+ "\"{displayName}\" action executed successfully" : "Дію \"{displayName}\" успішно виконано",
+ "\"{displayName}\" action failed" : "Дію \"{displayName}\" не вдалося виконати",
"Select the row for {displayName}" : "Виберіть рядок для {displayName}",
"Rename file" : "Перейменувати файл",
- "A long time ago" : "Давно",
- "This node is unavailable" : "Цей вузол не доступний",
- "Download file {name}" : "Завантажити файл {name}",
"File name" : "Ім'я файлу",
"Folder name" : "Назва каталогу",
- "\"{displayName}\" action executed successfully" : "Дію \"{displayName}\" успішно виконано",
- "\"{displayName}\" action failed" : "Дію \"{displayName}\" не вдалося виконати",
+ "This node is unavailable" : "Цей вузол не доступний",
+ "Download file {name}" : "Завантажити файл {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" є недозволеним типом файлу.",
"{newName} already exists." : "{newName} вже присутній.",
+ "\"{char}\" is not allowed inside a file name." : "Неприпустимий \"{char}\" у назві файлу.",
"Name cannot be empty" : "Ім'я не може бути порожнім",
"Another entry with the same name already exists" : "Ще один запис з такою же назвою присутній.",
"Renamed \"{oldName}\" to \"{newName}\"" : "Перейменовано \"{oldName}\" у \"{newName\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Не вдалося перейментувати \"{oldName}\", оскільки він вже відсутній",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Ім'я \"{newName}\" вже використовується у каталозі \"{dir}\". Виберіть інше ім'я.",
"Could not rename \"{oldName}\"" : "Не вдалося перейменувати \"{oldName}\"",
+ "A long time ago" : "Давно",
+ "Could not copy {file}. {message}" : "Не вдалося скопіювати файл {file}. {message}",
+ "Could not move {file}. {message}" : "Не вдалося перемістити файл {file}. {message}",
"Total rows summary" : "Загалом рядків",
- "\"{displayName}\" failed on some elements " : "\"{displayName}\" не показується в окремих елементах",
- "\"{displayName}\" batch action executed successfully" : "Пакетну дію \"{displayName}\" виконано успішно",
- "ascending" : "за зростанням",
- "descending" : "за спаданням",
- "Sort list by {column} ({direction})" : "Впорядкувати список за {column} ({direction})",
"Select all" : "Вибрати все",
"Unselect all" : "Зняти вибір",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" не показується в окремих елементах",
+ "\"{displayName}\" batch action executed successfully" : "Операцію \"{displayName}\" успішно виконано",
+ "Sort list by {column}" : "Впорядкувати список за {column}",
"List of files and folders." : "Список файлів та каталогів",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Список не подається повністю з міркувань обчислювальних потужностей. Файли показуватимуться під час прокручування списку.",
"{summaryFile} and {summaryFolder}" : "{summaryFile} та {summaryFolder}",
@@ -224,6 +227,8 @@
"Share" : "Поширити",
"Shared by link" : "Доступ за посиланням",
"Shared" : "Спільне",
+ "Switch to list view" : "У вигляді списку",
+ "Switch to grid view" : "У вигляді сітки",
"Open the files app settings" : "Перейти до налаштувань застосунку файлів",
"Files settings" : "Налаштування",
"File cannot be accessed" : "Неможливо отримати доступ до файлу",
@@ -231,6 +236,7 @@
"Sort favorites first" : "Спочатку впорядковувати вподобані",
"Show hidden files" : "Показувати приховані файли",
"Crop image previews" : "Попередній перегляд перед кадруванням",
+ "Enable the grid view" : "Увімкнути перегляд у вигляді сітки",
"Additional settings" : "Додатково",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "Копіювати до буферу обміну",
@@ -247,16 +253,28 @@
"Blank" : "Порожньо",
"Unable to create new file from template" : "Неможливо створити новий файл з шаблону",
"Delete permanently" : "Вилучити назавжди",
+ "Destination is not a folder" : "Місце призначення не є каталогом",
+ "This file/folder is already in that directory" : "Такий файл чи каталог вже присутні в цьому каталозі",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Неможливо перемістити файл чи каталог до самого себе або у цей саме підкаталог",
+ "A file or folder with that name already exists in this folder" : "Файл чи каталог з таким ім'ям вже присутній в цьому каталозі",
+ "The files is locked" : "Файл заблоковано",
+ "The file does not exist anymore" : "Цей файл більше недоступний",
+ "Chose destination" : "Виберіть місце призначення",
"Copy to {target}" : "Копіювати до {target}",
"Move to {target}" : "Перемістити до {target}",
+ "Cancelled move or copy operation" : "Скасовно операцію переміщення або копіювання",
"Open folder {displayName}" : "Відкрити каталог {displayName}",
"Open in Files" : "Відкрити у Файлах",
"Open details" : "Показати деталі",
- "Created new folder \"{name}\"" : "Створив(-ла) новий каталог \"{name}\"",
- "Set up templates folder" : "Встановити каталог з шаблонами",
- "Templates" : "Шаблони",
"Create new templates folder" : "Створіть нову папку шаблонів",
+ "Templates" : "Шаблони",
"Unable to initialize the templates directory" : "Неможливо встановити каталог з шаблонами",
+ "Created new folder \"{name}\"" : "Створив(-ла) новий каталог \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} каталог","{folderCount} каталоги","{folderCount} каталогів","{folderCount} каталогів"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} файл","{fileCount} файли","{fileCount} файлів","{fileCount} файлів"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 файл так {folderCount} каталог","1 файл так {folderCount} каталоги","1 файл так {folderCount} каталогів","1 файл так {folderCount} каталогів"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} файл та 1 каталог","{fileCount} файли та 1 каталог","{fileCount} файлів та 1 каталог","{fileCount} файлів та 1 каталог"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} файлів та {folderCount} каталогів",
"List of favorites files and folders." : "Список вподобаних файлів та каталогів.",
"No favorites yet" : "Поки немає вподобаного",
"Files and folders you mark as favorite will show up here" : "Файли та каталоги, які ви вподобали, з’являться тут",
@@ -276,6 +294,7 @@
"Unlimited" : "Необмежено",
"Search users" : "Пошук користувачів",
"Cancel" : "Скасувати",
+ "Set up templates folder" : "Встановити каталог з шаблонами",
"%s used" : "%s використано",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Використано %1$s із %2$s",
@@ -289,6 +308,9 @@
"This file has the tag {tag}" : "Цей файл має мітку {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Цей файл має мітку {firstTags} та {lastTag}",
"Open folder {name}" : "Відкрити каталог {name}",
+ "ascending" : "за зростанням",
+ "descending" : "за спаданням",
+ "Sort list by {column} ({direction})" : "Впорядкувати список за {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Через обмеження, пов'язані з потужністю, список не показується повністю. Файли показуватимуться, щойно ви рухатиметеся списком.",
"Search for an account" : "Пошук облікового запису",
"Choose" : "Вибрати",
diff --git a/apps/files/l10n/vi.js b/apps/files/l10n/vi.js
index 11caee6e5b4..4b0715f98da 100644
--- a/apps/files/l10n/vi.js
+++ b/apps/files/l10n/vi.js
@@ -22,6 +22,8 @@ OC.L10N.register(
"An unknown error has occurred" : "Một lỗi không rõ đã xảy ra",
"File could not be uploaded" : "Không thể tải lên tập tin",
"Uploading …" : "Đang tải lên …",
+ "{remainingTime} ({currentNumber}/{total})" : "{thời gian còn lại} ({số lượng hiện tại}/{tổng số})",
+ "Uploading … ({currentNumber}/{total})" : "Đang tải lên … ({số lượng hiện tại}/{tổng số})",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} trong tổng số {totalSize} ({bitrate})",
"Uploading that item is not supported" : "‎Tải lên mục ‎‎đó không‎‎ được hỗ trợ‎",
"Target folder does not exist any more" : "‎Thư mục đích‎‎ không còn tồn tại nữa‎",
@@ -32,6 +34,7 @@ OC.L10N.register(
"Move" : "Dịch chuyển",
"Copy" : "Sao chép",
"Choose target folder" : "‎Chọn thư‎‎ ‎‎mục đích‎",
+ "Set reminder" : "Thiết lập nhắc nhở",
"Edit locally" : "Chỉnh sửa cục bộ/ngoại tuyến",
"Open" : "Mở",
"Delete file" : "Xóa tệp",
@@ -39,7 +42,7 @@ OC.L10N.register(
"Disconnect storage" : "Bộ lưu trữ đã ngắt kết nối",
"Leave this share" : "Rời khỏi mục chia sẻ này‎",
"Could not load info for file \"{file}\"" : "Không thể tải thông tin cho tệp \"{file}\"",
- "Files" : "Tập tin",
+ "Files" : "Tệp tin",
"Details" : "Chi tiết",
"Please select tag(s) to add to the selection" : "Vui lòng chọn (các) thẻ để thêm vào lựa chọn",
"Apply tag(s) to selection" : "Áp dụng (các) thẻ cho lựa chọn",
@@ -79,8 +82,9 @@ OC.L10N.register(
"You do not have permission to upload or create files here" : "Bạn không đủ quyền để Tải lên hoặc Tạo tập tin ở đây",
"_Uploading %n file_::_Uploading %n files_" : ["Đang tải lên %n tập tin"],
"New" : "Tạo mới",
- "New file/folder menu" : "Menu tệp tin/thư mục mới",
+ "New file/folder menu" : "Menu tập tin/thư mục mới",
"Select file range" : "‎Chọn phạm vi tệp‎",
+ "{used}%" : "{Đã sử dụng}%",
"{used} of {quota} used" : "‎{used} trong { quota } ‎‎được‎‎ sử dụng‎",
"{used} used" : "{used} được sử dụng‎",
"\"{name}\" is an invalid file name." : "\"{name}\" không được chấp nhận",
@@ -167,22 +171,44 @@ OC.L10N.register(
"File Management" : "‎Quản lý tệp‎ tin",
"Reload current directory" : "Tải lại thư mục hiện tại",
"Go to the \"{dir}\" directory" : "Đi đến thư mục \"{dir}\"",
+ "Drag and drop files here to upload" : "Kéo thả file vào đây để tải lên",
+ "Upload successful" : "Tải lên thành công",
+ "\"{displayName}\" action executed successfully" : "Hành động \"{displayName}\" đã thực thi thành công",
+ "\"{displayName}\" action failed" : "Hành động \"{displayName}\" thất bại",
"Select the row for {displayName}" : "Chọn hàng cho {displayName}",
"Rename file" : "Đổi tên tệp tin",
- "A long time ago" : "Một khoảng thời gian trước",
- "Download file {name}" : "Tải xuống tệp tin {name}",
"File name" : "Tên tệp tin",
"Folder name" : "Tên thư mục",
- "\"{displayName}\" action executed successfully" : "Hành động \"{displayName}\" đã thực thi thành công",
- "\"{displayName}\" action failed" : "Hành động \"{displayName}\" thất bại",
+ "This node is unavailable" : "Nút này không có sẵn",
+ "Download file {name}" : "Tải xuống tệp tin {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" không phải là định dạng được cho phép",
"{newName} already exists." : "{newName} đã tồn tại.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\" không được phép bên trong tên tệp.",
"Name cannot be empty" : "Tên không thể trống",
"Another entry with the same name already exists" : "Đã tồn tại mục cùng tên",
"Renamed \"{oldName}\" to \"{newName}\"" : "Đã đổi tên \"{oldName}\" thành \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Không thể đổi tên \"{oldName}\", tệp tin không còn tồn tại",
+ "The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Tên \"{newName}\" đã được sử dụng trong thư mục \"{dir}\". Vui lòng chọn một tên khác.",
+ "Could not rename \"{oldName}\"" : "Could not rename \"{oldName}\"",
+ "A long time ago" : "Một khoảng thời gian trước",
+ "Could not copy {file}. {message}" : "Không thể sao chép {tệp}. {tin nhắn}",
+ "Could not move {file}. {message}" : "Không thể di chuyển {tệp}. {tin nhắn}",
+ "Total rows summary" : "Tóm tắt tổng số hàng",
"Select all" : "Chọn tất cả",
+ "Unselect all" : "Bỏ chọn tất cả",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" không thành công trên một số thành phần",
+ "\"{displayName}\" batch action executed successfully" : "Hành động hàng loạt \"{displayName}\" được thực hiện thành công",
+ "Sort list by {column}" : "Sắp xếp danh sách theo {cột}",
+ "List of files and folders." : "Danh sách các tập tin và thư mục.",
+ "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Danh sách này không được hiển thị đầy đủ vì lý do hiệu suất. Các tập tin sẽ được hiển thị khi bạn điều hướng qua danh sách.",
+ "{summaryFile} and {summaryFolder}" : "{summaryFile} và {summaryFolder}",
"File not found" : "Không tìm thấy tập tin",
+ "_{count} file_::_{count} files_" : ["{đếm} tệp"],
+ "_{count} folder_::_{count} folders_" : ["{đếm} thư mục"],
+ "Storage informations" : "Thông tin lưu trữ",
+ "{usedQuotaByte} used" : "{usedQuotaByte} đã được sử dụng",
+ "{relative}% used" : "{tương đối}% đã sử dụng",
+ "Could not refresh storage stats" : "Không thể làm mới số liệu thống kê bộ nhớ",
"Transfer ownership of a file or folder" : "‎Chuyển quyền sở hữu tệp hoặc thư mục‎",
"Choose file or folder to transfer" : "‎Chọn tệp hoặc cặp để chuyển‎",
"Change" : "Chỉnh sửa",
@@ -193,17 +219,33 @@ OC.L10N.register(
"Invalid path selected" : "‎Đường dẫn không hợp lệ được chọn‎",
"Unknown error" : "Lỗi chưa biết",
"Ownership transfer request sent" : "‎Yêu cầu chuyển quyền sở hữu đã được gửi‎",
+ "Cannot transfer ownership of a file or folder you do not own" : "Không thể chuyển quyền sở hữu tệp hoặc thư mục mà bạn không sở hữu",
+ "Select file or folder to link to" : "Chọn tập tin hoặc thư mục để liên kết đến",
+ "Loading current folder" : "Đang tải thư mục hiện tại",
"No files in here" : "Không có tệp nào",
"Upload some content or sync with your devices!" : "Tải lên một số nội dung hoặc đồng bộ với thiết bị của bạn!",
+ "Go to the previous folder" : "Chuyển đến thư mục trước đó",
"Go back" : "Quay lại",
"Share" : "Chia sẽ",
"Shared by link" : "Được chia sẻ bởi liên kết",
"Shared" : "Chia sẻ",
- "Show hidden files" : "Hiển thị các file bị ẩn",
+ "Switch to list view" : "Chuyển sang chế độ xem danh sách",
+ "Switch to grid view" : "Chuyển sang chế độ xem dạng lưới",
+ "Open the files app settings" : "Mở cài đặt ứng dụng tệp",
+ "Files settings" : "Cài đặt tệp tin",
+ "File cannot be accessed" : "Không thể truy cập tập tin",
+ "You might not have have permissions to view it, ask the sender to share it" : "Bạn có thể không có quyền xem nó, hãy yêu cầu người gửi chia sẻ nó",
+ "Sort favorites first" : "Sắp xếp mục yêu thích trước",
+ "Show hidden files" : "Hiển thị các file ẩn",
"Crop image previews" : "‎Xén ảnh ‎bản xem trước",
+ "Enable the grid view" : "Bật chế độ xem lưới",
"Additional settings" : "Cài đặt bổ sung",
"WebDAV" : "WebDAV",
- "Use this address to access your Files via WebDAV" : "‎Sử dụng địa chỉ này để truy cập tệp của bạn thông qua WebDAV‎",
+ "Copy to clipboard" : "Sao chép vào clipboard",
+ "Use this address to access your Files via WebDAV" : "Sử dụng địa chỉ này để truy cập Tệp của bạn qua WebDAV",
+ "If you have enabled 2FA, you must create and use a new app password by clicking here." : "Nếu bạn đã bật 2FA, bạn phải tạo và sử dụng mật khẩu ứng dụng mới bằng cách nhấp vào đây.",
+ "Clipboard is not available" : "Bảng nhớ tạm không có sẵn",
+ "WebDAV URL copied to clipboard" : "Đã sao chép URL WebDAV vào bảng nhớ tạm",
"Unable to change the favourite state of the file" : "‎Không thể thay đổi trạng thái yêu thích của tệp‎",
"Error while loading the file data" : "‎Lỗi xảy ra trong khi tải dữ liệu tệp‎",
"Pick a template for {name}" : "‎Chọn một mẫu cho {name}‎",
@@ -213,12 +255,37 @@ OC.L10N.register(
"Blank" : "‎Trống‎",
"Unable to create new file from template" : "‎Không thể tạo tệp mới từ mẫu‎",
"Delete permanently" : "Xoá vĩnh viễn",
- "Set up templates folder" : "‎Thiết lập thư mục mẫu‎",
+ "Destination is not a folder" : "Đích đến không phải là một thư mục",
+ "This file/folder is already in that directory" : "Tệp/thư mục này đã có trong thư mục đó",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Bạn không thể di chuyển một tập tin/thư mục vào chính nó hoặc vào một thư mục con của chính nó",
+ "A file or folder with that name already exists in this folder" : "Tệp hoặc thư mục có tên đó đã tồn tại trong thư mục này",
+ "The files is locked" : "Các tập tin bị khóa",
+ "The file does not exist anymore" : "Tập tin không tồn tại nữa",
+ "Chose destination" : "Chọn điểm đến",
+ "Copy to {target}" : "Copy to {mục tiêu}",
+ "Move to {target}" : "Di chuyển đến {mục tiêu}",
+ "Cancelled move or copy operation" : "Đã hủy thao tác di chuyển hoặc sao chép",
+ "Open folder {displayName}" : "Mở thư mục {displayName}",
+ "Open in Files" : "Mở trong Tệp",
+ "Open details" : "Mở chi tiết",
+ "Create new templates folder" : "Tạo thư mục mẫu mới",
"Templates" : "‎Mẫu‎",
"Unable to initialize the templates directory" : "‎Không thể khởi tạo thư mục mẫu‎",
+ "Created new folder \"{name}\"" : "Đã tạo thư mục mới \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["thư mục {folderCount}"],
+ "_{fileCount} file_::_{fileCount} files_" : ["tệp {fileCount}"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 tệp và thư mục {folderCount}"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["tệp {fileCount} và 1 thư mục"],
+ "{fileCount} files and {folderCount} folders" : "Tệp {fileCount} và thư mục {folderCount}",
+ "List of favorites files and folders." : "Danh sách các tập tin và thư mục yêu thích.",
"No favorites yet" : "‎Chưa có yêu thích nào‎",
"Files and folders you mark as favorite will show up here" : "Các tệp và thư mục mà bạn đánh dấu là yêu thích sẽ hiển thị ở đây",
"All files" : "Tất cả tệp tin",
+ "List of your files and folders." : "Danh sách các tập tin và thư mục của bạn.",
+ "List of recently modified files and folders." : "Danh sách các tập tin và thư mục được sửa đổi gần đây.",
+ "No recently modified files" : "Không có tập tin được sửa đổi gần đây",
+ "Files and folders you recently modified will show up here." : "Các tập tin và thư mục bạn sửa đổi gần đây sẽ hiển thị ở đây.",
+ "Toggle %1$s sublist" : "Chuyển đổi danh sách phụ %1$s",
"No entries found in this folder" : "Chưa có mục nào trong thư mục",
"Upload too large" : "Tập tin tải lên quá lớn",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Các tập tin bạn đang tải lên vượt quá kích thước tối đa cho phép trên máy chủ .",
@@ -229,7 +296,9 @@ OC.L10N.register(
"Unlimited" : "Không giới hạn",
"Search users" : "‎Tìm kiếm người dùng‎",
"Cancel" : "‎Hủy bỏ‎",
+ "Set up templates folder" : "‎Thiết lập thư mục mẫu‎",
"%s used" : "%s ‎đã sử dụng‎",
+ "%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s trên %2$s đã sử dụng",
"Toggle grid view" : "‎Chuyển đổi dạng xem lưới‎",
"Deleted files" : "Thùng rác",
@@ -240,6 +309,13 @@ OC.L10N.register(
"Pending shares" : "Chia sẻ đang chờ xử lý‎",
"This file has the tag {tag}" : "Tập tin này có nhãn {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Tệp tin này có nhãn {firstTags} và {lastTag}",
- "Choose" : "Chọn"
+ "Open folder {name}" : "Mở thư mục {name}",
+ "ascending" : "tăng dần",
+ "descending" : "giảm dần",
+ "Sort list by {column} ({direction})" : "Sắp xếp danh sách theo {column} ({direction})",
+ "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "anh sách này không được hiển thị đầy đủ vì lý do hiệu suất. Các tập tin sẽ được hiển thị khi bạn điều hướng qua danh sách.",
+ "Search for an account" : "Tìm kiếm tài khoản",
+ "Choose" : "Chọn",
+ "No files or folders have been deleted yet" : "Chưa có tập tin hoặc thư mục nào bị xóa"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/vi.json b/apps/files/l10n/vi.json
index 4eade33c14d..b1e21389312 100644
--- a/apps/files/l10n/vi.json
+++ b/apps/files/l10n/vi.json
@@ -20,6 +20,8 @@
"An unknown error has occurred" : "Một lỗi không rõ đã xảy ra",
"File could not be uploaded" : "Không thể tải lên tập tin",
"Uploading …" : "Đang tải lên …",
+ "{remainingTime} ({currentNumber}/{total})" : "{thời gian còn lại} ({số lượng hiện tại}/{tổng số})",
+ "Uploading … ({currentNumber}/{total})" : "Đang tải lên … ({số lượng hiện tại}/{tổng số})",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} trong tổng số {totalSize} ({bitrate})",
"Uploading that item is not supported" : "‎Tải lên mục ‎‎đó không‎‎ được hỗ trợ‎",
"Target folder does not exist any more" : "‎Thư mục đích‎‎ không còn tồn tại nữa‎",
@@ -30,6 +32,7 @@
"Move" : "Dịch chuyển",
"Copy" : "Sao chép",
"Choose target folder" : "‎Chọn thư‎‎ ‎‎mục đích‎",
+ "Set reminder" : "Thiết lập nhắc nhở",
"Edit locally" : "Chỉnh sửa cục bộ/ngoại tuyến",
"Open" : "Mở",
"Delete file" : "Xóa tệp",
@@ -37,7 +40,7 @@
"Disconnect storage" : "Bộ lưu trữ đã ngắt kết nối",
"Leave this share" : "Rời khỏi mục chia sẻ này‎",
"Could not load info for file \"{file}\"" : "Không thể tải thông tin cho tệp \"{file}\"",
- "Files" : "Tập tin",
+ "Files" : "Tệp tin",
"Details" : "Chi tiết",
"Please select tag(s) to add to the selection" : "Vui lòng chọn (các) thẻ để thêm vào lựa chọn",
"Apply tag(s) to selection" : "Áp dụng (các) thẻ cho lựa chọn",
@@ -77,8 +80,9 @@
"You do not have permission to upload or create files here" : "Bạn không đủ quyền để Tải lên hoặc Tạo tập tin ở đây",
"_Uploading %n file_::_Uploading %n files_" : ["Đang tải lên %n tập tin"],
"New" : "Tạo mới",
- "New file/folder menu" : "Menu tệp tin/thư mục mới",
+ "New file/folder menu" : "Menu tập tin/thư mục mới",
"Select file range" : "‎Chọn phạm vi tệp‎",
+ "{used}%" : "{Đã sử dụng}%",
"{used} of {quota} used" : "‎{used} trong { quota } ‎‎được‎‎ sử dụng‎",
"{used} used" : "{used} được sử dụng‎",
"\"{name}\" is an invalid file name." : "\"{name}\" không được chấp nhận",
@@ -165,22 +169,44 @@
"File Management" : "‎Quản lý tệp‎ tin",
"Reload current directory" : "Tải lại thư mục hiện tại",
"Go to the \"{dir}\" directory" : "Đi đến thư mục \"{dir}\"",
+ "Drag and drop files here to upload" : "Kéo thả file vào đây để tải lên",
+ "Upload successful" : "Tải lên thành công",
+ "\"{displayName}\" action executed successfully" : "Hành động \"{displayName}\" đã thực thi thành công",
+ "\"{displayName}\" action failed" : "Hành động \"{displayName}\" thất bại",
"Select the row for {displayName}" : "Chọn hàng cho {displayName}",
"Rename file" : "Đổi tên tệp tin",
- "A long time ago" : "Một khoảng thời gian trước",
- "Download file {name}" : "Tải xuống tệp tin {name}",
"File name" : "Tên tệp tin",
"Folder name" : "Tên thư mục",
- "\"{displayName}\" action executed successfully" : "Hành động \"{displayName}\" đã thực thi thành công",
- "\"{displayName}\" action failed" : "Hành động \"{displayName}\" thất bại",
+ "This node is unavailable" : "Nút này không có sẵn",
+ "Download file {name}" : "Tải xuống tệp tin {name}",
"\"{name}\" is not an allowed filetype." : "\"{name}\" không phải là định dạng được cho phép",
"{newName} already exists." : "{newName} đã tồn tại.",
+ "\"{char}\" is not allowed inside a file name." : "\"{char}\" không được phép bên trong tên tệp.",
"Name cannot be empty" : "Tên không thể trống",
"Another entry with the same name already exists" : "Đã tồn tại mục cùng tên",
"Renamed \"{oldName}\" to \"{newName}\"" : "Đã đổi tên \"{oldName}\" thành \"{newName}\"",
"Could not rename \"{oldName}\", it does not exist any more" : "Không thể đổi tên \"{oldName}\", tệp tin không còn tồn tại",
+ "The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Tên \"{newName}\" đã được sử dụng trong thư mục \"{dir}\". Vui lòng chọn một tên khác.",
+ "Could not rename \"{oldName}\"" : "Could not rename \"{oldName}\"",
+ "A long time ago" : "Một khoảng thời gian trước",
+ "Could not copy {file}. {message}" : "Không thể sao chép {tệp}. {tin nhắn}",
+ "Could not move {file}. {message}" : "Không thể di chuyển {tệp}. {tin nhắn}",
+ "Total rows summary" : "Tóm tắt tổng số hàng",
"Select all" : "Chọn tất cả",
+ "Unselect all" : "Bỏ chọn tất cả",
+ "\"{displayName}\" failed on some elements " : "\"{displayName}\" không thành công trên một số thành phần",
+ "\"{displayName}\" batch action executed successfully" : "Hành động hàng loạt \"{displayName}\" được thực hiện thành công",
+ "Sort list by {column}" : "Sắp xếp danh sách theo {cột}",
+ "List of files and folders." : "Danh sách các tập tin và thư mục.",
+ "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Danh sách này không được hiển thị đầy đủ vì lý do hiệu suất. Các tập tin sẽ được hiển thị khi bạn điều hướng qua danh sách.",
+ "{summaryFile} and {summaryFolder}" : "{summaryFile} và {summaryFolder}",
"File not found" : "Không tìm thấy tập tin",
+ "_{count} file_::_{count} files_" : ["{đếm} tệp"],
+ "_{count} folder_::_{count} folders_" : ["{đếm} thư mục"],
+ "Storage informations" : "Thông tin lưu trữ",
+ "{usedQuotaByte} used" : "{usedQuotaByte} đã được sử dụng",
+ "{relative}% used" : "{tương đối}% đã sử dụng",
+ "Could not refresh storage stats" : "Không thể làm mới số liệu thống kê bộ nhớ",
"Transfer ownership of a file or folder" : "‎Chuyển quyền sở hữu tệp hoặc thư mục‎",
"Choose file or folder to transfer" : "‎Chọn tệp hoặc cặp để chuyển‎",
"Change" : "Chỉnh sửa",
@@ -191,17 +217,33 @@
"Invalid path selected" : "‎Đường dẫn không hợp lệ được chọn‎",
"Unknown error" : "Lỗi chưa biết",
"Ownership transfer request sent" : "‎Yêu cầu chuyển quyền sở hữu đã được gửi‎",
+ "Cannot transfer ownership of a file or folder you do not own" : "Không thể chuyển quyền sở hữu tệp hoặc thư mục mà bạn không sở hữu",
+ "Select file or folder to link to" : "Chọn tập tin hoặc thư mục để liên kết đến",
+ "Loading current folder" : "Đang tải thư mục hiện tại",
"No files in here" : "Không có tệp nào",
"Upload some content or sync with your devices!" : "Tải lên một số nội dung hoặc đồng bộ với thiết bị của bạn!",
+ "Go to the previous folder" : "Chuyển đến thư mục trước đó",
"Go back" : "Quay lại",
"Share" : "Chia sẽ",
"Shared by link" : "Được chia sẻ bởi liên kết",
"Shared" : "Chia sẻ",
- "Show hidden files" : "Hiển thị các file bị ẩn",
+ "Switch to list view" : "Chuyển sang chế độ xem danh sách",
+ "Switch to grid view" : "Chuyển sang chế độ xem dạng lưới",
+ "Open the files app settings" : "Mở cài đặt ứng dụng tệp",
+ "Files settings" : "Cài đặt tệp tin",
+ "File cannot be accessed" : "Không thể truy cập tập tin",
+ "You might not have have permissions to view it, ask the sender to share it" : "Bạn có thể không có quyền xem nó, hãy yêu cầu người gửi chia sẻ nó",
+ "Sort favorites first" : "Sắp xếp mục yêu thích trước",
+ "Show hidden files" : "Hiển thị các file ẩn",
"Crop image previews" : "‎Xén ảnh ‎bản xem trước",
+ "Enable the grid view" : "Bật chế độ xem lưới",
"Additional settings" : "Cài đặt bổ sung",
"WebDAV" : "WebDAV",
- "Use this address to access your Files via WebDAV" : "‎Sử dụng địa chỉ này để truy cập tệp của bạn thông qua WebDAV‎",
+ "Copy to clipboard" : "Sao chép vào clipboard",
+ "Use this address to access your Files via WebDAV" : "Sử dụng địa chỉ này để truy cập Tệp của bạn qua WebDAV",
+ "If you have enabled 2FA, you must create and use a new app password by clicking here." : "Nếu bạn đã bật 2FA, bạn phải tạo và sử dụng mật khẩu ứng dụng mới bằng cách nhấp vào đây.",
+ "Clipboard is not available" : "Bảng nhớ tạm không có sẵn",
+ "WebDAV URL copied to clipboard" : "Đã sao chép URL WebDAV vào bảng nhớ tạm",
"Unable to change the favourite state of the file" : "‎Không thể thay đổi trạng thái yêu thích của tệp‎",
"Error while loading the file data" : "‎Lỗi xảy ra trong khi tải dữ liệu tệp‎",
"Pick a template for {name}" : "‎Chọn một mẫu cho {name}‎",
@@ -211,12 +253,37 @@
"Blank" : "‎Trống‎",
"Unable to create new file from template" : "‎Không thể tạo tệp mới từ mẫu‎",
"Delete permanently" : "Xoá vĩnh viễn",
- "Set up templates folder" : "‎Thiết lập thư mục mẫu‎",
+ "Destination is not a folder" : "Đích đến không phải là một thư mục",
+ "This file/folder is already in that directory" : "Tệp/thư mục này đã có trong thư mục đó",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "Bạn không thể di chuyển một tập tin/thư mục vào chính nó hoặc vào một thư mục con của chính nó",
+ "A file or folder with that name already exists in this folder" : "Tệp hoặc thư mục có tên đó đã tồn tại trong thư mục này",
+ "The files is locked" : "Các tập tin bị khóa",
+ "The file does not exist anymore" : "Tập tin không tồn tại nữa",
+ "Chose destination" : "Chọn điểm đến",
+ "Copy to {target}" : "Copy to {mục tiêu}",
+ "Move to {target}" : "Di chuyển đến {mục tiêu}",
+ "Cancelled move or copy operation" : "Đã hủy thao tác di chuyển hoặc sao chép",
+ "Open folder {displayName}" : "Mở thư mục {displayName}",
+ "Open in Files" : "Mở trong Tệp",
+ "Open details" : "Mở chi tiết",
+ "Create new templates folder" : "Tạo thư mục mẫu mới",
"Templates" : "‎Mẫu‎",
"Unable to initialize the templates directory" : "‎Không thể khởi tạo thư mục mẫu‎",
+ "Created new folder \"{name}\"" : "Đã tạo thư mục mới \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["thư mục {folderCount}"],
+ "_{fileCount} file_::_{fileCount} files_" : ["tệp {fileCount}"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 tệp và thư mục {folderCount}"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["tệp {fileCount} và 1 thư mục"],
+ "{fileCount} files and {folderCount} folders" : "Tệp {fileCount} và thư mục {folderCount}",
+ "List of favorites files and folders." : "Danh sách các tập tin và thư mục yêu thích.",
"No favorites yet" : "‎Chưa có yêu thích nào‎",
"Files and folders you mark as favorite will show up here" : "Các tệp và thư mục mà bạn đánh dấu là yêu thích sẽ hiển thị ở đây",
"All files" : "Tất cả tệp tin",
+ "List of your files and folders." : "Danh sách các tập tin và thư mục của bạn.",
+ "List of recently modified files and folders." : "Danh sách các tập tin và thư mục được sửa đổi gần đây.",
+ "No recently modified files" : "Không có tập tin được sửa đổi gần đây",
+ "Files and folders you recently modified will show up here." : "Các tập tin và thư mục bạn sửa đổi gần đây sẽ hiển thị ở đây.",
+ "Toggle %1$s sublist" : "Chuyển đổi danh sách phụ %1$s",
"No entries found in this folder" : "Chưa có mục nào trong thư mục",
"Upload too large" : "Tập tin tải lên quá lớn",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Các tập tin bạn đang tải lên vượt quá kích thước tối đa cho phép trên máy chủ .",
@@ -227,7 +294,9 @@
"Unlimited" : "Không giới hạn",
"Search users" : "‎Tìm kiếm người dùng‎",
"Cancel" : "‎Hủy bỏ‎",
+ "Set up templates folder" : "‎Thiết lập thư mục mẫu‎",
"%s used" : "%s ‎đã sử dụng‎",
+ "%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s trên %2$s đã sử dụng",
"Toggle grid view" : "‎Chuyển đổi dạng xem lưới‎",
"Deleted files" : "Thùng rác",
@@ -238,6 +307,13 @@
"Pending shares" : "Chia sẻ đang chờ xử lý‎",
"This file has the tag {tag}" : "Tập tin này có nhãn {tag}",
"This file has the tags {firstTags} and {lastTag}" : "Tệp tin này có nhãn {firstTags} và {lastTag}",
- "Choose" : "Chọn"
+ "Open folder {name}" : "Mở thư mục {name}",
+ "ascending" : "tăng dần",
+ "descending" : "giảm dần",
+ "Sort list by {column} ({direction})" : "Sắp xếp danh sách theo {column} ({direction})",
+ "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "anh sách này không được hiển thị đầy đủ vì lý do hiệu suất. Các tập tin sẽ được hiển thị khi bạn điều hướng qua danh sách.",
+ "Search for an account" : "Tìm kiếm tài khoản",
+ "Choose" : "Chọn",
+ "No files or folders have been deleted yet" : "Chưa có tập tin hoặc thư mục nào bị xóa"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js
index e04c25fa8c6..cded4d4a805 100644
--- a/apps/files/l10n/zh_CN.js
+++ b/apps/files/l10n/zh_CN.js
@@ -171,34 +171,40 @@ OC.L10N.register(
"File Management" : "文件管理",
"Reload current directory" : "重新载入当前目录",
"Go to the \"{dir}\" directory" : "前往“{dir}”目录",
+ "Drag and drop files here to upload" : "将文件拖拽至此处以上传",
+ "Upload successful" : "上传成功",
+ "\"{displayName}\" action executed successfully" : "“{displayName}”操作执行成功",
+ "\"{displayName}\" action failed" : "“{displayName}”操作执行失败",
"Select the row for {displayName}" : "选择 {displayName} 的行",
"Rename file" : "重命名文件",
- "A long time ago" : "很久以前",
- "This node is unavailable" : "此节点不可用",
- "Download file {name}" : "下载文件 {name}",
"File name" : "文件名",
"Folder name" : "文件夹名称",
- "\"{displayName}\" action executed successfully" : "“{displayName}”操作执行成功",
- "\"{displayName}\" action failed" : "“{displayName}”操作执行失败",
+ "This node is unavailable" : "此节点不可用",
+ "Download file {name}" : "下载文件 {name}",
"\"{name}\" is not an allowed filetype." : "“{name}”不是允许的文件类型",
"{newName} already exists." : "{newName}已经存在。",
+ "\"{char}\" is not allowed inside a file name." : "不允许文件名中包含 “{char}”",
"Name cannot be empty" : "名称不能为空",
"Another entry with the same name already exists" : "已经存在另一个使用该名称的条目",
"Renamed \"{oldName}\" to \"{newName}\"" : "已将“{oldName}”重命名为“{newName}”",
"Could not rename \"{oldName}\", it does not exist any more" : "无法重命名“{fileName}”,此文件已经不存在",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "此名称「{newName}」在这个文件夹「{dir}」已经被使用。请选择其他名称。",
"Could not rename \"{oldName}\"" : "无法重命名“{fileName}”",
+ "A long time ago" : "很久以前",
+ "Could not copy {file}. {message}" : "无法复制 {file}。{message}",
+ "Could not move {file}. {message}" : "无法移动 {file}。{message}",
"Total rows summary" : "总行摘要",
- "\"{displayName}\" failed on some elements " : "“{displayName}”在某些元素上失败",
- "\"{displayName}\" batch action executed successfully" : "批量操作“{displayName}”运行成功",
- "ascending" : "升序",
- "descending" : "降序",
- "Sort list by {column} ({direction})" : "按 {column} ({direction}) 排序列表",
"Select all" : "全部选择",
"Unselect all" : "取消全选",
+ "\"{displayName}\" failed on some elements " : "“{displayName}”在某些元素上失败",
+ "\"{displayName}\" batch action executed successfully" : "批量操作“{displayName}”运行成功",
+ "Sort list by {column}" : "按 {column} 排序",
"List of files and folders." : "文件与文件夹列表。",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "出于性能考虑,此列表未完全呈现。文件将在您浏览列表时呈现。",
+ "{summaryFile} and {summaryFolder}" : "{summaryFile} 及 {summaryFolder}",
"File not found" : "文件未找到",
+ "_{count} file_::_{count} files_" : ["{count} 个文件"],
+ "_{count} folder_::_{count} folders_" : ["{count} 个文件夹"],
"Storage informations" : "存储信息",
"{usedQuotaByte} used" : "{usedQuotaByte} 已使用",
"{relative}% used" : "{relative}% 已使用",
@@ -223,6 +229,8 @@ OC.L10N.register(
"Share" : "共享",
"Shared by link" : "已通过链接共享",
"Shared" : "已共享",
+ "Switch to list view" : "切换为列表视图",
+ "Switch to grid view" : "切换到网格视图",
"Open the files app settings" : "打开文件设置",
"Files settings" : "文件设置",
"File cannot be accessed" : "文件无法访问",
@@ -230,6 +238,7 @@ OC.L10N.register(
"Sort favorites first" : "收藏排序优先",
"Show hidden files" : "显示隐藏文件",
"Crop image previews" : "裁剪图片预览",
+ "Enable the grid view" : "启用网格视图",
"Additional settings" : "其他设置",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "复制到剪贴板",
@@ -246,16 +255,28 @@ OC.L10N.register(
"Blank" : "空白",
"Unable to create new file from template" : "无法从模板创建新文件",
"Delete permanently" : "彻底删除",
+ "Destination is not a folder" : "目标不是一个文件夹",
+ "This file/folder is already in that directory" : "该文件/文件夹已经存在与该目录中",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "你无法将文件/文件夹移动至其自身或子文件夹中",
+ "A file or folder with that name already exists in this folder" : "相同的文件/文件夹已存在于该文件夹中",
+ "The files is locked" : "文件已锁定",
+ "The file does not exist anymore" : "文件不存在",
+ "Chose destination" : "选择目的地",
"Copy to {target}" : "复制到 {target}",
"Move to {target}" : "移动到 {target}",
+ "Cancelled move or copy operation" : "已取消移动或复制操作",
"Open folder {displayName}" : "打开文件夹{displayName}",
"Open in Files" : "在文件中打开",
"Open details" : "打开详情",
- "Created new folder \"{name}\"" : "创建了新文件夹「{name}」",
- "Set up templates folder" : "设置模板文件夹",
- "Templates" : "模板",
"Create new templates folder" : "新建模板文件夹",
+ "Templates" : "模板",
"Unable to initialize the templates directory" : "无法初始化模板目录",
+ "Created new folder \"{name}\"" : "创建了新文件夹「{name}」",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} 个文件夹"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} 个文件"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 个文件夹及 {folderCount} 个文件夹"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} 个文件及 1 个文件夹"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} 个文件及 {folderCount} 个文件夹",
"List of favorites files and folders." : "收藏文件和文件夹列表",
"No favorites yet" : "暂无收藏",
"Files and folders you mark as favorite will show up here" : "收藏的文件和文件夹会在这里显示",
@@ -275,6 +296,7 @@ OC.L10N.register(
"Unlimited" : "无限制",
"Search users" : "搜索用户",
"Cancel" : "取消",
+ "Set up templates folder" : "设置模板文件夹",
"%s used" : "已使用 %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "已使用 %2$s 中的 %1$s",
@@ -288,6 +310,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "这个文件有 {tag} 标签",
"This file has the tags {firstTags} and {lastTag}" : "这个文件有 {firstTags} 和 {lastTag} 标签",
"Open folder {name}" : "打开文件夹 {name}",
+ "ascending" : "升序",
+ "descending" : "降序",
+ "Sort list by {column} ({direction})" : "按 {column} ({direction}) 排序列表",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "因为性能原因,该列表没有完全加载。这些文件将会在您浏览列表的时候加载。",
"Search for an account" : "搜索一个账户",
"Choose" : "选择",
diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json
index 80cbdd26884..fef33f44128 100644
--- a/apps/files/l10n/zh_CN.json
+++ b/apps/files/l10n/zh_CN.json
@@ -169,34 +169,40 @@
"File Management" : "文件管理",
"Reload current directory" : "重新载入当前目录",
"Go to the \"{dir}\" directory" : "前往“{dir}”目录",
+ "Drag and drop files here to upload" : "将文件拖拽至此处以上传",
+ "Upload successful" : "上传成功",
+ "\"{displayName}\" action executed successfully" : "“{displayName}”操作执行成功",
+ "\"{displayName}\" action failed" : "“{displayName}”操作执行失败",
"Select the row for {displayName}" : "选择 {displayName} 的行",
"Rename file" : "重命名文件",
- "A long time ago" : "很久以前",
- "This node is unavailable" : "此节点不可用",
- "Download file {name}" : "下载文件 {name}",
"File name" : "文件名",
"Folder name" : "文件夹名称",
- "\"{displayName}\" action executed successfully" : "“{displayName}”操作执行成功",
- "\"{displayName}\" action failed" : "“{displayName}”操作执行失败",
+ "This node is unavailable" : "此节点不可用",
+ "Download file {name}" : "下载文件 {name}",
"\"{name}\" is not an allowed filetype." : "“{name}”不是允许的文件类型",
"{newName} already exists." : "{newName}已经存在。",
+ "\"{char}\" is not allowed inside a file name." : "不允许文件名中包含 “{char}”",
"Name cannot be empty" : "名称不能为空",
"Another entry with the same name already exists" : "已经存在另一个使用该名称的条目",
"Renamed \"{oldName}\" to \"{newName}\"" : "已将“{oldName}”重命名为“{newName}”",
"Could not rename \"{oldName}\", it does not exist any more" : "无法重命名“{fileName}”,此文件已经不存在",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "此名称「{newName}」在这个文件夹「{dir}」已经被使用。请选择其他名称。",
"Could not rename \"{oldName}\"" : "无法重命名“{fileName}”",
+ "A long time ago" : "很久以前",
+ "Could not copy {file}. {message}" : "无法复制 {file}。{message}",
+ "Could not move {file}. {message}" : "无法移动 {file}。{message}",
"Total rows summary" : "总行摘要",
- "\"{displayName}\" failed on some elements " : "“{displayName}”在某些元素上失败",
- "\"{displayName}\" batch action executed successfully" : "批量操作“{displayName}”运行成功",
- "ascending" : "升序",
- "descending" : "降序",
- "Sort list by {column} ({direction})" : "按 {column} ({direction}) 排序列表",
"Select all" : "全部选择",
"Unselect all" : "取消全选",
+ "\"{displayName}\" failed on some elements " : "“{displayName}”在某些元素上失败",
+ "\"{displayName}\" batch action executed successfully" : "批量操作“{displayName}”运行成功",
+ "Sort list by {column}" : "按 {column} 排序",
"List of files and folders." : "文件与文件夹列表。",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "出于性能考虑,此列表未完全呈现。文件将在您浏览列表时呈现。",
+ "{summaryFile} and {summaryFolder}" : "{summaryFile} 及 {summaryFolder}",
"File not found" : "文件未找到",
+ "_{count} file_::_{count} files_" : ["{count} 个文件"],
+ "_{count} folder_::_{count} folders_" : ["{count} 个文件夹"],
"Storage informations" : "存储信息",
"{usedQuotaByte} used" : "{usedQuotaByte} 已使用",
"{relative}% used" : "{relative}% 已使用",
@@ -221,6 +227,8 @@
"Share" : "共享",
"Shared by link" : "已通过链接共享",
"Shared" : "已共享",
+ "Switch to list view" : "切换为列表视图",
+ "Switch to grid view" : "切换到网格视图",
"Open the files app settings" : "打开文件设置",
"Files settings" : "文件设置",
"File cannot be accessed" : "文件无法访问",
@@ -228,6 +236,7 @@
"Sort favorites first" : "收藏排序优先",
"Show hidden files" : "显示隐藏文件",
"Crop image previews" : "裁剪图片预览",
+ "Enable the grid view" : "启用网格视图",
"Additional settings" : "其他设置",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "复制到剪贴板",
@@ -244,16 +253,28 @@
"Blank" : "空白",
"Unable to create new file from template" : "无法从模板创建新文件",
"Delete permanently" : "彻底删除",
+ "Destination is not a folder" : "目标不是一个文件夹",
+ "This file/folder is already in that directory" : "该文件/文件夹已经存在与该目录中",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "你无法将文件/文件夹移动至其自身或子文件夹中",
+ "A file or folder with that name already exists in this folder" : "相同的文件/文件夹已存在于该文件夹中",
+ "The files is locked" : "文件已锁定",
+ "The file does not exist anymore" : "文件不存在",
+ "Chose destination" : "选择目的地",
"Copy to {target}" : "复制到 {target}",
"Move to {target}" : "移动到 {target}",
+ "Cancelled move or copy operation" : "已取消移动或复制操作",
"Open folder {displayName}" : "打开文件夹{displayName}",
"Open in Files" : "在文件中打开",
"Open details" : "打开详情",
- "Created new folder \"{name}\"" : "创建了新文件夹「{name}」",
- "Set up templates folder" : "设置模板文件夹",
- "Templates" : "模板",
"Create new templates folder" : "新建模板文件夹",
+ "Templates" : "模板",
"Unable to initialize the templates directory" : "无法初始化模板目录",
+ "Created new folder \"{name}\"" : "创建了新文件夹「{name}」",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} 个文件夹"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} 个文件"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 个文件夹及 {folderCount} 个文件夹"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} 个文件及 1 个文件夹"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} 个文件及 {folderCount} 个文件夹",
"List of favorites files and folders." : "收藏文件和文件夹列表",
"No favorites yet" : "暂无收藏",
"Files and folders you mark as favorite will show up here" : "收藏的文件和文件夹会在这里显示",
@@ -273,6 +294,7 @@
"Unlimited" : "无限制",
"Search users" : "搜索用户",
"Cancel" : "取消",
+ "Set up templates folder" : "设置模板文件夹",
"%s used" : "已使用 %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "已使用 %2$s 中的 %1$s",
@@ -286,6 +308,9 @@
"This file has the tag {tag}" : "这个文件有 {tag} 标签",
"This file has the tags {firstTags} and {lastTag}" : "这个文件有 {firstTags} 和 {lastTag} 标签",
"Open folder {name}" : "打开文件夹 {name}",
+ "ascending" : "升序",
+ "descending" : "降序",
+ "Sort list by {column} ({direction})" : "按 {column} ({direction}) 排序列表",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "因为性能原因,该列表没有完全加载。这些文件将会在您浏览列表的时候加载。",
"Search for an account" : "搜索一个账户",
"Choose" : "选择",
diff --git a/apps/files/l10n/zh_HK.js b/apps/files/l10n/zh_HK.js
index 9154956cbce..da2d8d4fc73 100644
--- a/apps/files/l10n/zh_HK.js
+++ b/apps/files/l10n/zh_HK.js
@@ -171,31 +171,34 @@ OC.L10N.register(
"File Management" : "檔案管理",
"Reload current directory" : "重新加載目前目錄",
"Go to the \"{dir}\" directory" : "前往「{dir}」目錄",
+ "Drag and drop files here to upload" : "將檔案拖拽到此處即可上傳",
+ "Upload successful" : "上傳成功",
+ "\"{displayName}\" action executed successfully" : "成功執行 “{displayName}” 操作",
+ "\"{displayName}\" action failed" : "“{displayName}” 操作失敗",
"Select the row for {displayName}" : "選擇 {displayName} 的行",
"Rename file" : "重新命名檔案",
- "A long time ago" : "很久以前",
- "This node is unavailable" : "此節點不可用",
- "Download file {name}" : "下載檔案 {name}",
"File name" : "檔案名稱",
"Folder name" : "資料夾名稱",
- "\"{displayName}\" action executed successfully" : "成功執行 “{displayName}” 操作",
- "\"{displayName}\" action failed" : "“{displayName}” 操作失敗",
+ "This node is unavailable" : "此節點不可用",
+ "Download file {name}" : "下載檔案 {name}",
"\"{name}\" is not an allowed filetype." : "「{name}」是不允許的檔案類型。",
"{newName} already exists." : "{newName} 已經存在。",
+ "\"{char}\" is not allowed inside a file name." : "不允許檔案名稱中出現 \"{char}\"。",
"Name cannot be empty" : "名稱不能空白",
"Another entry with the same name already exists" : "另一個同名的條目已經存在",
"Renamed \"{oldName}\" to \"{newName}\"" : "已將「{oldName}」重新命名為「{newName}」",
"Could not rename \"{oldName}\", it does not exist any more" : "無法命名檔案「{oldName}」,因為此檔案已經不存在",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "此名稱「{newName}」在這資料夾「{dir}」已經被使用。請選擇其他名稱。",
"Could not rename \"{oldName}\"" : "無法重新命名「{oldName}」",
+ "A long time ago" : "很久以前",
+ "Could not copy {file}. {message}" : "無法複製 {file}。{message}",
+ "Could not move {file}. {message}" : "無法移動 {file}。{message}",
"Total rows summary" : "總列摘要",
- "\"{displayName}\" failed on some elements " : "“{displayName}” 在某些元素上失敗",
- "\"{displayName}\" batch action executed successfully" : "成功執行 “{displayName}” 批處理操作",
- "ascending" : "升",
- "descending" : "降",
- "Sort list by {column} ({direction})" : "按 {column} ({direction}) 排序清單",
"Select all" : "全選",
"Unselect all" : "取消全選",
+ "\"{displayName}\" failed on some elements " : "“{displayName}” 在某些元素上失敗",
+ "\"{displayName}\" batch action executed successfully" : "成功執行 “{displayName}” 批處理操作",
+ "Sort list by {column}" : "按 {column} 排序清單",
"List of files and folders." : "檔案與資料夾清單。",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "出於性能考慮,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"{summaryFile} and {summaryFolder}" : "{summaryFile} 及 {summaryFolder}",
@@ -226,6 +229,8 @@ OC.L10N.register(
"Share" : "分享",
"Shared by link" : "由連結分享",
"Shared" : "已分享",
+ "Switch to list view" : "切換到列表檢視",
+ "Switch to grid view" : "切換到網格檢視",
"Open the files app settings" : "開啟 Files 應用程式設定",
"Files settings" : "檔案設定",
"File cannot be accessed" : "檔案無法存取",
@@ -233,6 +238,7 @@ OC.L10N.register(
"Sort favorites first" : "先排序最愛",
"Show hidden files" : "顯示隱藏檔",
"Crop image previews" : "圖片裁剪預覽",
+ "Enable the grid view" : "啟用網格檢視",
"Additional settings" : "其他設定",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "複製到剪貼板",
@@ -249,16 +255,28 @@ OC.L10N.register(
"Blank" : "空白",
"Unable to create new file from template" : "無法從模板創建新檔案",
"Delete permanently" : "永久刪除",
+ "Destination is not a folder" : "目標地不是資料夾",
+ "This file/folder is already in that directory" : "此檔案/資料夾已在該目錄中",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "您無法將檔案/資料夾移動到其自身或子資料夾中",
+ "A file or folder with that name already exists in this folder" : "此資料夾中已存在同名的檔案或資料夾",
+ "The files is locked" : "檔案已被上鎖",
+ "The file does not exist anymore" : "檔案已不存在",
+ "Chose destination" : "選擇目標地",
"Copy to {target}" : "複製到 {target}",
"Move to {target}" : "移動到 {target}",
+ "Cancelled move or copy operation" : "已取消移動或複製操作",
"Open folder {displayName}" : "打開資料夾 {displayName}",
"Open in Files" : "在「檔案」應用程式中打開",
"Open details" : "開啟細節",
- "Created new folder \"{name}\"" : "創建了新資料夾 \"{name}\"",
- "Set up templates folder" : "設定範本資料夾",
- "Templates" : "模板",
"Create new templates folder" : "創建新範本資料夾",
+ "Templates" : "模板",
"Unable to initialize the templates directory" : "無法初始化模板目錄",
+ "Created new folder \"{name}\"" : "創建了新資料夾 \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} 個資料夾"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} 個檔案"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 個檔案與 {folderCount} 個資料夾"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} 個檔案與 1 個資料夾"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} 個檔案與 {folderCount} 個資料夾",
"List of favorites files and folders." : "最愛檔案與資料夾的清單。",
"No favorites yet" : "尚無最愛",
"Files and folders you mark as favorite will show up here" : "您標記為最愛的檔案與資料夾將會顯示在這裡",
@@ -278,6 +296,7 @@ OC.L10N.register(
"Unlimited" : "無限制",
"Search users" : "搜尋用戶",
"Cancel" : "取消",
+ "Set up templates folder" : "設定範本資料夾",
"%s used" : "使用了 %s 的存儲空間",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "在 %2$s 中使用了 %1$s",
@@ -291,6 +310,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "此檔案有標籤 {tag}",
"This file has the tags {firstTags} and {lastTag}" : "此檔案有標籤 {firstTags} 與 {lastTag}",
"Open folder {name}" : "打開資料夾 {name}",
+ "ascending" : "升",
+ "descending" : "降",
+ "Sort list by {column} ({direction})" : "按 {column} ({direction}) 排序清單",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "出於性能考慮,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"Search for an account" : "搜尋賬號",
"Choose" : "選擇",
diff --git a/apps/files/l10n/zh_HK.json b/apps/files/l10n/zh_HK.json
index c0127793fe8..8d533f01f9a 100644
--- a/apps/files/l10n/zh_HK.json
+++ b/apps/files/l10n/zh_HK.json
@@ -169,31 +169,34 @@
"File Management" : "檔案管理",
"Reload current directory" : "重新加載目前目錄",
"Go to the \"{dir}\" directory" : "前往「{dir}」目錄",
+ "Drag and drop files here to upload" : "將檔案拖拽到此處即可上傳",
+ "Upload successful" : "上傳成功",
+ "\"{displayName}\" action executed successfully" : "成功執行 “{displayName}” 操作",
+ "\"{displayName}\" action failed" : "“{displayName}” 操作失敗",
"Select the row for {displayName}" : "選擇 {displayName} 的行",
"Rename file" : "重新命名檔案",
- "A long time ago" : "很久以前",
- "This node is unavailable" : "此節點不可用",
- "Download file {name}" : "下載檔案 {name}",
"File name" : "檔案名稱",
"Folder name" : "資料夾名稱",
- "\"{displayName}\" action executed successfully" : "成功執行 “{displayName}” 操作",
- "\"{displayName}\" action failed" : "“{displayName}” 操作失敗",
+ "This node is unavailable" : "此節點不可用",
+ "Download file {name}" : "下載檔案 {name}",
"\"{name}\" is not an allowed filetype." : "「{name}」是不允許的檔案類型。",
"{newName} already exists." : "{newName} 已經存在。",
+ "\"{char}\" is not allowed inside a file name." : "不允許檔案名稱中出現 \"{char}\"。",
"Name cannot be empty" : "名稱不能空白",
"Another entry with the same name already exists" : "另一個同名的條目已經存在",
"Renamed \"{oldName}\" to \"{newName}\"" : "已將「{oldName}」重新命名為「{newName}」",
"Could not rename \"{oldName}\", it does not exist any more" : "無法命名檔案「{oldName}」,因為此檔案已經不存在",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "此名稱「{newName}」在這資料夾「{dir}」已經被使用。請選擇其他名稱。",
"Could not rename \"{oldName}\"" : "無法重新命名「{oldName}」",
+ "A long time ago" : "很久以前",
+ "Could not copy {file}. {message}" : "無法複製 {file}。{message}",
+ "Could not move {file}. {message}" : "無法移動 {file}。{message}",
"Total rows summary" : "總列摘要",
- "\"{displayName}\" failed on some elements " : "“{displayName}” 在某些元素上失敗",
- "\"{displayName}\" batch action executed successfully" : "成功執行 “{displayName}” 批處理操作",
- "ascending" : "升",
- "descending" : "降",
- "Sort list by {column} ({direction})" : "按 {column} ({direction}) 排序清單",
"Select all" : "全選",
"Unselect all" : "取消全選",
+ "\"{displayName}\" failed on some elements " : "“{displayName}” 在某些元素上失敗",
+ "\"{displayName}\" batch action executed successfully" : "成功執行 “{displayName}” 批處理操作",
+ "Sort list by {column}" : "按 {column} 排序清單",
"List of files and folders." : "檔案與資料夾清單。",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "出於性能考慮,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"{summaryFile} and {summaryFolder}" : "{summaryFile} 及 {summaryFolder}",
@@ -224,6 +227,8 @@
"Share" : "分享",
"Shared by link" : "由連結分享",
"Shared" : "已分享",
+ "Switch to list view" : "切換到列表檢視",
+ "Switch to grid view" : "切換到網格檢視",
"Open the files app settings" : "開啟 Files 應用程式設定",
"Files settings" : "檔案設定",
"File cannot be accessed" : "檔案無法存取",
@@ -231,6 +236,7 @@
"Sort favorites first" : "先排序最愛",
"Show hidden files" : "顯示隱藏檔",
"Crop image previews" : "圖片裁剪預覽",
+ "Enable the grid view" : "啟用網格檢視",
"Additional settings" : "其他設定",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "複製到剪貼板",
@@ -247,16 +253,28 @@
"Blank" : "空白",
"Unable to create new file from template" : "無法從模板創建新檔案",
"Delete permanently" : "永久刪除",
+ "Destination is not a folder" : "目標地不是資料夾",
+ "This file/folder is already in that directory" : "此檔案/資料夾已在該目錄中",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "您無法將檔案/資料夾移動到其自身或子資料夾中",
+ "A file or folder with that name already exists in this folder" : "此資料夾中已存在同名的檔案或資料夾",
+ "The files is locked" : "檔案已被上鎖",
+ "The file does not exist anymore" : "檔案已不存在",
+ "Chose destination" : "選擇目標地",
"Copy to {target}" : "複製到 {target}",
"Move to {target}" : "移動到 {target}",
+ "Cancelled move or copy operation" : "已取消移動或複製操作",
"Open folder {displayName}" : "打開資料夾 {displayName}",
"Open in Files" : "在「檔案」應用程式中打開",
"Open details" : "開啟細節",
- "Created new folder \"{name}\"" : "創建了新資料夾 \"{name}\"",
- "Set up templates folder" : "設定範本資料夾",
- "Templates" : "模板",
"Create new templates folder" : "創建新範本資料夾",
+ "Templates" : "模板",
"Unable to initialize the templates directory" : "無法初始化模板目錄",
+ "Created new folder \"{name}\"" : "創建了新資料夾 \"{name}\"",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} 個資料夾"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} 個檔案"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 個檔案與 {folderCount} 個資料夾"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} 個檔案與 1 個資料夾"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} 個檔案與 {folderCount} 個資料夾",
"List of favorites files and folders." : "最愛檔案與資料夾的清單。",
"No favorites yet" : "尚無最愛",
"Files and folders you mark as favorite will show up here" : "您標記為最愛的檔案與資料夾將會顯示在這裡",
@@ -276,6 +294,7 @@
"Unlimited" : "無限制",
"Search users" : "搜尋用戶",
"Cancel" : "取消",
+ "Set up templates folder" : "設定範本資料夾",
"%s used" : "使用了 %s 的存儲空間",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "在 %2$s 中使用了 %1$s",
@@ -289,6 +308,9 @@
"This file has the tag {tag}" : "此檔案有標籤 {tag}",
"This file has the tags {firstTags} and {lastTag}" : "此檔案有標籤 {firstTags} 與 {lastTag}",
"Open folder {name}" : "打開資料夾 {name}",
+ "ascending" : "升",
+ "descending" : "降",
+ "Sort list by {column} ({direction})" : "按 {column} ({direction}) 排序清單",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "出於性能考慮,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"Search for an account" : "搜尋賬號",
"Choose" : "選擇",
diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js
index 42a1be4668c..3799450e9e9 100644
--- a/apps/files/l10n/zh_TW.js
+++ b/apps/files/l10n/zh_TW.js
@@ -171,31 +171,34 @@ OC.L10N.register(
"File Management" : "檔案管理",
"Reload current directory" : "重新載入目前的目錄",
"Go to the \"{dir}\" directory" : "到「{dir}」目錄",
+ "Drag and drop files here to upload" : "將檔案拖曳到此處以上傳",
+ "Upload successful" : "上傳成功",
+ "\"{displayName}\" action executed successfully" : "「{displayName}」動作執行成功",
+ "\"{displayName}\" action failed" : "「{displayName}」操作失敗",
"Select the row for {displayName}" : "選取 {displayName} 的列",
"Rename file" : "重新命名檔案",
- "A long time ago" : "很久以前",
- "This node is unavailable" : "此節點不可用",
- "Download file {name}" : "下載檔案 {name}",
"File name" : "檔案名稱",
"Folder name" : "資料夾名稱",
- "\"{displayName}\" action executed successfully" : "「{displayName}」動作執行成功",
- "\"{displayName}\" action failed" : "「{displayName}」操作失敗",
+ "This node is unavailable" : "此節點不可用",
+ "Download file {name}" : "下載檔案 {name}",
"\"{name}\" is not an allowed filetype." : "「{name}」是不允許的檔案類型。",
"{newName} already exists." : "{newName} 已經存在。",
+ "\"{char}\" is not allowed inside a file name." : "不允許檔名中出現「{char}」。",
"Name cannot be empty" : "名稱不能空白",
"Another entry with the same name already exists" : "已存在另一個同名條目",
"Renamed \"{oldName}\" to \"{newName}\"" : "已將「{oldName}」重新命名為「{newName}」",
"Could not rename \"{oldName}\", it does not exist any more" : "無法命名檔案「{oldName}」,因為此檔案已經不存在",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "此名稱「{newName}」在資料夾「{dir}」中已被使用。請選擇其他名稱。",
"Could not rename \"{oldName}\"" : "無法重新命名「{oldName}」",
+ "A long time ago" : "很久以前",
+ "Could not copy {file}. {message}" : "無法複製 {file}。{message}",
+ "Could not move {file}. {message}" : "無法移動 {file}。{message}",
"Total rows summary" : "總列摘要",
- "\"{displayName}\" failed on some elements " : "「{displayName}」在某些元素上失敗",
- "\"{displayName}\" batch action executed successfully" : "「{displayName}」批次動作執行成功",
- "ascending" : "遞增",
- "descending" : "遞減",
- "Sort list by {column} ({direction})" : "按 {column}({direction})排序清單",
"Select all" : "全選",
"Unselect all" : "取消全選",
+ "\"{displayName}\" failed on some elements " : "「{displayName}」在某些元素上失敗",
+ "\"{displayName}\" batch action executed successfully" : "「{displayName}」批次動作執行成功",
+ "Sort list by {column}" : "按 {column} 排序清單",
"List of files and folders." : "檔案與資料夾清單。",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "出於效能考量,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"{summaryFile} and {summaryFolder}" : "{summaryFile} 與 {summaryFolder}",
@@ -226,6 +229,8 @@ OC.L10N.register(
"Share" : "分享",
"Shared by link" : "由連結分享",
"Shared" : "已分享",
+ "Switch to list view" : "切換至列表檢視",
+ "Switch to grid view" : "切換到網格檢視",
"Open the files app settings" : "開啟檔案應用程式設定",
"Files settings" : "檔案設定",
"File cannot be accessed" : "無法存取檔案",
@@ -233,6 +238,7 @@ OC.L10N.register(
"Sort favorites first" : "先排序最愛",
"Show hidden files" : "顯示隱藏檔",
"Crop image previews" : "圖片裁剪預覽",
+ "Enable the grid view" : "啟用網格檢視",
"Additional settings" : "其他設定",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "複製到剪貼簿",
@@ -249,16 +255,28 @@ OC.L10N.register(
"Blank" : "空白",
"Unable to create new file from template" : "無法從範本建立新檔案",
"Delete permanently" : "永久刪除",
+ "Destination is not a folder" : "目的地不是資料夾",
+ "This file/folder is already in that directory" : "此檔案/資料夾已在該目錄中",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "您無法將檔案/資料夾移動到其自身或子資料夾中",
+ "A file or folder with that name already exists in this folder" : "此資料夾中已存在同名的檔案或資料夾",
+ "The files is locked" : "檔案已鎖定",
+ "The file does not exist anymore" : "檔案已不存在",
+ "Chose destination" : "選擇目的地",
"Copy to {target}" : "複製到 {target}",
"Move to {target}" : "移動至 {target}",
+ "Cancelled move or copy operation" : "已取消移動或複製操作",
"Open folder {displayName}" : "開啟資料夾 {displayName}",
"Open in Files" : "在「檔案」應用程式中開啟",
"Open details" : "開啟細節",
- "Created new folder \"{name}\"" : "已建立新資料夾「{name}」",
- "Set up templates folder" : "設定範本資料夾",
- "Templates" : "範本",
"Create new templates folder" : "建立新的範本資料夾",
+ "Templates" : "範本",
"Unable to initialize the templates directory" : "無法初始化範本目錄",
+ "Created new folder \"{name}\"" : "已建立新資料夾「{name}」",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} 個資料夾"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} 個檔案"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 個檔案與 {folderCount} 個資料夾"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} 個檔案與 1 個資料夾"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} 個檔案與 {folderCount} 個資料夾",
"List of favorites files and folders." : "最愛檔案與資料夾的清單。",
"No favorites yet" : "尚無最愛",
"Files and folders you mark as favorite will show up here" : "您標記為最愛的檔案與資料夾將會顯示在這裡",
@@ -278,6 +296,7 @@ OC.L10N.register(
"Unlimited" : "無限制",
"Search users" : "搜尋使用者",
"Cancel" : "取消",
+ "Set up templates folder" : "設定範本資料夾",
"%s used" : "%s 已使用",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "在 %2$s 中使用了 %1$s ",
@@ -291,6 +310,9 @@ OC.L10N.register(
"This file has the tag {tag}" : "此檔案有標籤 {tag}",
"This file has the tags {firstTags} and {lastTag}" : "此檔案有標籤 {firstTags} 與 {lastTag}",
"Open folder {name}" : "開啟資料夾 {name}",
+ "ascending" : "遞增",
+ "descending" : "遞減",
+ "Sort list by {column} ({direction})" : "按 {column}({direction})排序清單",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "出於效能考量,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"Search for an account" : "搜尋帳號",
"Choose" : "選擇",
diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json
index 6c96c843cec..d1c5650cc96 100644
--- a/apps/files/l10n/zh_TW.json
+++ b/apps/files/l10n/zh_TW.json
@@ -169,31 +169,34 @@
"File Management" : "檔案管理",
"Reload current directory" : "重新載入目前的目錄",
"Go to the \"{dir}\" directory" : "到「{dir}」目錄",
+ "Drag and drop files here to upload" : "將檔案拖曳到此處以上傳",
+ "Upload successful" : "上傳成功",
+ "\"{displayName}\" action executed successfully" : "「{displayName}」動作執行成功",
+ "\"{displayName}\" action failed" : "「{displayName}」操作失敗",
"Select the row for {displayName}" : "選取 {displayName} 的列",
"Rename file" : "重新命名檔案",
- "A long time ago" : "很久以前",
- "This node is unavailable" : "此節點不可用",
- "Download file {name}" : "下載檔案 {name}",
"File name" : "檔案名稱",
"Folder name" : "資料夾名稱",
- "\"{displayName}\" action executed successfully" : "「{displayName}」動作執行成功",
- "\"{displayName}\" action failed" : "「{displayName}」操作失敗",
+ "This node is unavailable" : "此節點不可用",
+ "Download file {name}" : "下載檔案 {name}",
"\"{name}\" is not an allowed filetype." : "「{name}」是不允許的檔案類型。",
"{newName} already exists." : "{newName} 已經存在。",
+ "\"{char}\" is not allowed inside a file name." : "不允許檔名中出現「{char}」。",
"Name cannot be empty" : "名稱不能空白",
"Another entry with the same name already exists" : "已存在另一個同名條目",
"Renamed \"{oldName}\" to \"{newName}\"" : "已將「{oldName}」重新命名為「{newName}」",
"Could not rename \"{oldName}\", it does not exist any more" : "無法命名檔案「{oldName}」,因為此檔案已經不存在",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "此名稱「{newName}」在資料夾「{dir}」中已被使用。請選擇其他名稱。",
"Could not rename \"{oldName}\"" : "無法重新命名「{oldName}」",
+ "A long time ago" : "很久以前",
+ "Could not copy {file}. {message}" : "無法複製 {file}。{message}",
+ "Could not move {file}. {message}" : "無法移動 {file}。{message}",
"Total rows summary" : "總列摘要",
- "\"{displayName}\" failed on some elements " : "「{displayName}」在某些元素上失敗",
- "\"{displayName}\" batch action executed successfully" : "「{displayName}」批次動作執行成功",
- "ascending" : "遞增",
- "descending" : "遞減",
- "Sort list by {column} ({direction})" : "按 {column}({direction})排序清單",
"Select all" : "全選",
"Unselect all" : "取消全選",
+ "\"{displayName}\" failed on some elements " : "「{displayName}」在某些元素上失敗",
+ "\"{displayName}\" batch action executed successfully" : "「{displayName}」批次動作執行成功",
+ "Sort list by {column}" : "按 {column} 排序清單",
"List of files and folders." : "檔案與資料夾清單。",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "出於效能考量,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"{summaryFile} and {summaryFolder}" : "{summaryFile} 與 {summaryFolder}",
@@ -224,6 +227,8 @@
"Share" : "分享",
"Shared by link" : "由連結分享",
"Shared" : "已分享",
+ "Switch to list view" : "切換至列表檢視",
+ "Switch to grid view" : "切換到網格檢視",
"Open the files app settings" : "開啟檔案應用程式設定",
"Files settings" : "檔案設定",
"File cannot be accessed" : "無法存取檔案",
@@ -231,6 +236,7 @@
"Sort favorites first" : "先排序最愛",
"Show hidden files" : "顯示隱藏檔",
"Crop image previews" : "圖片裁剪預覽",
+ "Enable the grid view" : "啟用網格檢視",
"Additional settings" : "其他設定",
"WebDAV" : "WebDAV",
"Copy to clipboard" : "複製到剪貼簿",
@@ -247,16 +253,28 @@
"Blank" : "空白",
"Unable to create new file from template" : "無法從範本建立新檔案",
"Delete permanently" : "永久刪除",
+ "Destination is not a folder" : "目的地不是資料夾",
+ "This file/folder is already in that directory" : "此檔案/資料夾已在該目錄中",
+ "You cannot move a file/folder onto itself or into a subfolder of itself" : "您無法將檔案/資料夾移動到其自身或子資料夾中",
+ "A file or folder with that name already exists in this folder" : "此資料夾中已存在同名的檔案或資料夾",
+ "The files is locked" : "檔案已鎖定",
+ "The file does not exist anymore" : "檔案已不存在",
+ "Chose destination" : "選擇目的地",
"Copy to {target}" : "複製到 {target}",
"Move to {target}" : "移動至 {target}",
+ "Cancelled move or copy operation" : "已取消移動或複製操作",
"Open folder {displayName}" : "開啟資料夾 {displayName}",
"Open in Files" : "在「檔案」應用程式中開啟",
"Open details" : "開啟細節",
- "Created new folder \"{name}\"" : "已建立新資料夾「{name}」",
- "Set up templates folder" : "設定範本資料夾",
- "Templates" : "範本",
"Create new templates folder" : "建立新的範本資料夾",
+ "Templates" : "範本",
"Unable to initialize the templates directory" : "無法初始化範本目錄",
+ "Created new folder \"{name}\"" : "已建立新資料夾「{name}」",
+ "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} 個資料夾"],
+ "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} 個檔案"],
+ "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 個檔案與 {folderCount} 個資料夾"],
+ "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} 個檔案與 1 個資料夾"],
+ "{fileCount} files and {folderCount} folders" : "{fileCount} 個檔案與 {folderCount} 個資料夾",
"List of favorites files and folders." : "最愛檔案與資料夾的清單。",
"No favorites yet" : "尚無最愛",
"Files and folders you mark as favorite will show up here" : "您標記為最愛的檔案與資料夾將會顯示在這裡",
@@ -276,6 +294,7 @@
"Unlimited" : "無限制",
"Search users" : "搜尋使用者",
"Cancel" : "取消",
+ "Set up templates folder" : "設定範本資料夾",
"%s used" : "%s 已使用",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "在 %2$s 中使用了 %1$s ",
@@ -289,6 +308,9 @@
"This file has the tag {tag}" : "此檔案有標籤 {tag}",
"This file has the tags {firstTags} and {lastTag}" : "此檔案有標籤 {firstTags} 與 {lastTag}",
"Open folder {name}" : "開啟資料夾 {name}",
+ "ascending" : "遞增",
+ "descending" : "遞減",
+ "Sort list by {column} ({direction})" : "按 {column}({direction})排序清單",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "出於效能考量,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"Search for an account" : "搜尋帳號",
"Choose" : "選擇",
diff --git a/apps/files/lib/Controller/ViewController.php b/apps/files/lib/Controller/ViewController.php
index 8764e1fabd6..38e3858cd38 100644
--- a/apps/files/lib/Controller/ViewController.php
+++ b/apps/files/lib/Controller/ViewController.php
@@ -52,6 +52,7 @@ use OCP\AppFramework\Http\Response;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Services\IInitialState;
use OCP\Collaboration\Resources\LoadAdditionalScriptsEvent as ResourcesLoadAdditionalScriptsEvent;
+use OCP\Constants;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Folder;
use OCP\Files\IRootFolder;
@@ -230,6 +231,21 @@ class ViewController extends Controller {
$favElements['folders'] = [];
}
+ // If the file doesn't exists in the folder and
+ // exists in only one occurrence, redirect to that file
+ // in the correct folder
+ if ($fileid && $dir !== '') {
+ $baseFolder = $this->rootFolder->getUserFolder($userId);
+ $nodes = $baseFolder->getById((int) $fileid);
+ $nodePath = $baseFolder->getRelativePath($nodes[0]->getPath());
+ $relativePath = $nodePath ? dirname($nodePath) : '';
+ // If the requested path does not contain the file id
+ // or if the requested path is not the file id itself
+ if (count($nodes) === 1 && $relativePath !== $dir && $nodePath !== $dir) {
+ return $this->redirectToFile((int) $fileid);
+ }
+ }
+
try {
// If view is files, we use the directory, otherwise we use the root storage
$storageInfo = $this->getStorageInfo(($view === 'files' && $dir) ? $dir : '/');
@@ -246,6 +262,11 @@ class ViewController extends Controller {
$filesSortingConfig = json_decode($this->config->getUserValue($userId, 'files', 'files_sorting_configs', '{}'), true);
$this->initialState->provideInitialState('filesSortingConfig', $filesSortingConfig);
+ // Forbidden file characters
+ /** @var string[] */
+ $forbiddenCharacters = $this->config->getSystemValue('forbidden_chars', []);
+ $this->initialState->provideInitialState('forbiddenCharacters', Constants::FILENAME_INVALID_CHARS . implode('', $forbiddenCharacters));
+
$event = new LoadAdditionalScriptsEvent();
$this->eventDispatcher->dispatchTyped($event);
$this->eventDispatcher->dispatchTyped(new ResourcesLoadAdditionalScriptsEvent());
@@ -374,7 +395,7 @@ class ViewController extends Controller {
$uid = $this->userSession->getUser()->getUID();
$baseFolder = $this->rootFolder->getUserFolder($uid);
$nodes = $baseFolder->getById($fileId);
- $params = [];
+ $params = ['view' => 'files'];
try {
$this->redirectToFileIfInTrashbin($fileId);
diff --git a/apps/files/lib/Service/UserConfig.php b/apps/files/lib/Service/UserConfig.php
index c39719ae8ed..be32dce0d63 100644
--- a/apps/files/lib/Service/UserConfig.php
+++ b/apps/files/lib/Service/UserConfig.php
@@ -47,6 +47,12 @@ class UserConfig {
'default' => true,
'allowed' => [true, false],
],
+ [
+ // Whether to show the files list in grid view or not
+ 'key' => 'grid_view',
+ 'default' => false,
+ 'allowed' => [true, false],
+ ],
];
protected IConfig $config;
diff --git a/apps/files/src/actions/deleteAction.ts b/apps/files/src/actions/deleteAction.ts
index 18c18178cb7..f79872f1685 100644
--- a/apps/files/src/actions/deleteAction.ts
+++ b/apps/files/src/actions/deleteAction.ts
@@ -44,7 +44,7 @@ export const action = new FileAction({
async exec(node: Node) {
try {
- await axios.delete(node.source)
+ await axios.delete(node.encodedSource)
// Let's delete even if it's moved to the trashbin
// since it has been removed from the current view
diff --git a/apps/files/src/actions/favoriteAction.ts b/apps/files/src/actions/favoriteAction.ts
index 34d34039101..ac2254f534f 100644
--- a/apps/files/src/actions/favoriteAction.ts
+++ b/apps/files/src/actions/favoriteAction.ts
@@ -30,6 +30,7 @@ import StarOutlineSvg from '@mdi/svg/svg/star-outline.svg?raw'
import StarSvg from '@mdi/svg/svg/star.svg?raw'
import logger from '../logger.js'
+import { encodePath } from '@nextcloud/paths'
// If any of the nodes is not favorited, we display the favorite action.
const shouldFavorite = (nodes: Node[]): boolean => {
@@ -39,7 +40,7 @@ const shouldFavorite = (nodes: Node[]): boolean => {
export const favoriteNode = async (node: Node, view: View, willFavorite: boolean): Promise<boolean> => {
try {
// TODO: migrate to webdav tags plugin
- const url = generateUrl('/apps/files/api/v1/files') + node.path
+ const url = generateUrl('/apps/files/api/v1/files') + encodePath(node.path)
await axios.post(url, {
tags: willFavorite
? [window.OC.TAG_FAVORITE]
diff --git a/apps/files/src/actions/moveOrCopyAction.ts b/apps/files/src/actions/moveOrCopyAction.ts
index 51113f7ba31..52ad4f2868d 100644
--- a/apps/files/src/actions/moveOrCopyAction.ts
+++ b/apps/files/src/actions/moveOrCopyAction.ts
@@ -86,7 +86,7 @@ export const handleCopyMoveNodeTo = async (node: Node, destination: Folder, meth
}
const relativePath = join(destination.path, node.basename)
- const destinationUrl = generateRemoteUrl(`dav/files/${getCurrentUser()?.uid}${relativePath}`)
+ const destinationUrl = generateRemoteUrl(encodePath(`dav/files/${getCurrentUser()?.uid}${relativePath}`))
logger.debug(`${method} ${node.basename} to ${destinationUrl}`)
// Set loading state
@@ -97,7 +97,7 @@ export const handleCopyMoveNodeTo = async (node: Node, destination: Folder, meth
try {
await axios({
method: method === MoveCopyAction.COPY ? 'COPY' : 'MOVE',
- url: encodeURI(node.source),
+ url: node.encodedSource,
headers: {
Destination: encodeURI(destinationUrl),
Overwrite: overwrite ? undefined : 'F',
diff --git a/apps/files/src/actions/openInFilesAction.spec.ts b/apps/files/src/actions/openInFilesAction.spec.ts
index 866880670a3..c400a701d37 100644
--- a/apps/files/src/actions/openInFilesAction.spec.ts
+++ b/apps/files/src/actions/openInFilesAction.spec.ts
@@ -76,7 +76,7 @@ describe('Open in files action execute tests', () => {
// Silent action
expect(exec).toBe(null)
expect(goToRouteMock).toBeCalledTimes(1)
- expect(goToRouteMock).toBeCalledWith(null, { fileid: 1, view: 'files' }, { fileid: 1, dir: '/Foo' })
+ expect(goToRouteMock).toBeCalledWith(null, { fileid: 1, view: 'files' }, { dir: '/Foo' })
})
test('Open in files with folder', async () => {
@@ -96,6 +96,6 @@ describe('Open in files action execute tests', () => {
// Silent action
expect(exec).toBe(null)
expect(goToRouteMock).toBeCalledTimes(1)
- expect(goToRouteMock).toBeCalledWith(null, { fileid: 1, view: 'files' }, { fileid: 1, dir: '/Foo/Bar' })
+ expect(goToRouteMock).toBeCalledWith(null, { fileid: 1, view: 'files' }, { dir: '/Foo/Bar' })
})
})
diff --git a/apps/files/src/actions/openInFilesAction.ts b/apps/files/src/actions/openInFilesAction.ts
index 235b59046d7..6cdf2357036 100644
--- a/apps/files/src/actions/openInFilesAction.ts
+++ b/apps/files/src/actions/openInFilesAction.ts
@@ -42,7 +42,7 @@ export const action = new FileAction({
window.OCP.Files.Router.goToRoute(
null, // use default route
{ view: 'files', fileid: node.fileid },
- { dir, fileid: node.fileid },
+ { dir },
)
return null
},
diff --git a/apps/files/src/components/CustomSvgIconRender.vue b/apps/files/src/components/CustomSvgIconRender.vue
deleted file mode 100644
index 4edb51806d1..00000000000
--- a/apps/files/src/components/CustomSvgIconRender.vue
+++ /dev/null
@@ -1,68 +0,0 @@
-<!--
- - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>
- -
- - @author John Molakvoæ <skjnldsv@protonmail.com>
- -
- - @license GNU AGPL version 3 or any later version
- -
- - This program is free software: you can redistribute it and/or modify
- - it under the terms of the GNU Affero General Public License as
- - published by the Free Software Foundation, either version 3 of the
- - License, or (at your option) any later version.
- -
- - This program is distributed in the hope that it will be useful,
- - but WITHOUT ANY WARRANTY; without even the implied warranty of
- - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- - GNU Affero General Public License for more details.
- -
- - You should have received a copy of the GNU Affero General Public License
- - along with this program. If not, see <http://www.gnu.org/licenses/>.
- -
- -->
-<template>
- <span class="custom-svg-icon" />
-</template>
-
-<script>
-// eslint-disable-next-line import/named
-import { sanitize } from 'dompurify'
-
-export default {
- name: 'CustomSvgIconRender',
- props: {
- svg: {
- type: String,
- required: true,
- },
- },
- watch: {
- svg() {
- this.$el.innerHTML = sanitize(this.svg)
- },
- },
- mounted() {
- this.$el.innerHTML = sanitize(this.svg)
- },
-}
-</script>
-<style lang="scss" scoped>
-.custom-svg-icon {
- display: flex;
- align-items: center;
- align-self: center;
- justify-content: center;
- justify-self: center;
- width: 44px;
- height: 44px;
- opacity: 1;
-
- ::v-deep svg {
- // mdi icons have a size of 24px
- // 22px results in roughly 16px inner size
- height: 22px;
- width: 22px;
- fill: currentColor;
- }
-}
-
-</style>
diff --git a/apps/files/src/components/DragAndDropNotice.vue b/apps/files/src/components/DragAndDropNotice.vue
new file mode 100644
index 00000000000..d5f93dac256
--- /dev/null
+++ b/apps/files/src/components/DragAndDropNotice.vue
@@ -0,0 +1,155 @@
+<!--
+ - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>
+ -
+ - @author John Molakvoæ <skjnldsv@protonmail.com>
+ -
+ - @license GNU AGPL version 3 or any later version
+ -
+ - This program is free software: you can redistribute it and/or modify
+ - it under the terms of the GNU Affero General Public License as
+ - published by the Free Software Foundation, either version 3 of the
+ - License, or (at your option) any later version.
+ -
+ - This program is distributed in the hope that it will be useful,
+ - but WITHOUT ANY WARRANTY; without even the implied warranty of
+ - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ - GNU Affero General Public License for more details.
+ -
+ - You should have received a copy of the GNU Affero General Public License
+ - along with this program. If not, see <http://www.gnu.org/licenses/>.
+ -
+ -->
+<template>
+ <div class="files-list__drag-drop-notice"
+ :class="{ 'files-list__drag-drop-notice--dragover': dragover }"
+ @drop="onDrop">
+ <div class="files-list__drag-drop-notice-wrapper">
+ <TrayArrowDownIcon :size="48" />
+ <h3 class="files-list-drag-drop-notice__title">
+ {{ t('files', 'Drag and drop files here to upload') }}
+ </h3>
+ </div>
+ </div>
+</template>
+
+<script lang="ts">
+import type { Upload } from '@nextcloud/upload'
+import { join } from 'path'
+import { showSuccess } from '@nextcloud/dialogs'
+import { translate as t } from '@nextcloud/l10n'
+import { getUploader } from '@nextcloud/upload'
+import Vue from 'vue'
+
+import TrayArrowDownIcon from 'vue-material-design-icons/TrayArrowDown.vue'
+
+import logger from '../logger.js'
+
+export default Vue.extend({
+ name: 'DragAndDropNotice',
+
+ components: {
+ TrayArrowDownIcon,
+ },
+
+ props: {
+ currentFolder: {
+ type: Object,
+ required: true,
+ },
+ dragover: {
+ type: Boolean,
+ default: false,
+ },
+ },
+
+ methods: {
+ onDrop(event: DragEvent) {
+ this.$emit('update:dragover', false)
+
+ if (this.$el.querySelector('tbody')?.contains(event.target as Node)) {
+ return
+ }
+
+ event.preventDefault()
+ event.stopPropagation()
+
+ if (event.dataTransfer && event.dataTransfer.files?.length > 0) {
+ const uploader = getUploader()
+ uploader.destination = this.currentFolder
+
+ // Start upload
+ logger.debug(`Uploading files to ${this.currentFolder.path}`)
+ const promises = [...event.dataTransfer.files].map((file: File) => {
+ return uploader.upload(file.name, file) as Promise<Upload>
+ })
+
+ // Process finished uploads
+ Promise.all(promises).then((uploads) => {
+ logger.debug('Upload terminated', { uploads })
+ showSuccess(t('files', 'Upload successful'))
+
+ // Scroll to last upload if terminated
+ const lastUpload = uploads[uploads.length - 1]
+ if (lastUpload?.response?.headers?.['oc-fileid']) {
+ this.$router.push(Object.assign({}, this.$route, {
+ params: {
+ // Remove instanceid from header response
+ fileid: parseInt(lastUpload.response?.headers?.['oc-fileid']),
+ },
+ }))
+ }
+ })
+ }
+ },
+ t,
+ },
+})
+</script>
+
+<style lang="scss" scoped>
+.files-list__drag-drop-notice {
+ position: absolute;
+ z-index: 9999;
+ top: 0;
+ right: 0;
+ left: 0;
+ display: none;
+ align-items: center;
+ justify-content: center;
+ width: 100%;
+ // Breadcrumbs height + row thead height
+ min-height: calc(58px + 55px);
+ margin: 0;
+ user-select: none;
+ color: var(--color-text-maxcontrast);
+ background-color: var(--color-main-background);
+
+ &--dragover {
+ display: flex;
+ border-color: black;
+ }
+
+ h3 {
+ margin-left: 16px;
+ color: inherit;
+ }
+
+ &-wrapper {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 15vh;
+ max-height: 70%;
+ padding: 0 5vw;
+ border: 2px var(--color-border-dark) dashed;
+ border-radius: var(--border-radius-large);
+ }
+
+ &__close {
+ position: absolute !important;
+ top: 10px;
+ right: 10px;
+ }
+}
+
+</style>
diff --git a/apps/files/src/components/FileEntry.vue b/apps/files/src/components/FileEntry.vue
index 2ca02edc5b8..df18dcae016 100644
--- a/apps/files/src/components/FileEntry.vue
+++ b/apps/files/src/components/FileEntry.vue
@@ -21,7 +21,7 @@
-->
<template>
- <tr :class="{'files-list__row--visible': visible, 'files-list__row--active': isActive, 'files-list__row--dragover': dragover, 'files-list__row--loading': isLoading}"
+ <tr :class="{'files-list__row--dragover': dragover, 'files-list__row--loading': isLoading}"
data-cy-files-list-row
:data-cy-files-list-row-fileid="fileid"
:data-cy-files-list-row-name="source.basename"
@@ -37,125 +37,40 @@
<span v-if="source.attributes.failed" class="files-list__row--failed" />
<!-- Checkbox -->
- <td class="files-list__row-checkbox">
- <NcLoadingIcon v-if="isLoading" />
- <NcCheckboxRadioSwitch v-else-if="visible"
- :aria-label="t('files', 'Select the row for {displayName}', { displayName })"
- :checked="isSelected"
- @update:checked="onSelectionChange" />
- </td>
+ <FileEntryCheckbox :display-name="displayName"
+ :fileid="fileid"
+ :is-loading="isLoading"
+ :nodes="nodes" />
<!-- Link to file -->
<td class="files-list__row-name" data-cy-files-list-row-name>
<!-- Icon or preview -->
- <span class="files-list__row-icon" @click="execDefaultAction">
- <template v-if="source.type === 'folder'">
- <FolderOpenIcon v-if="dragover" />
- <template v-else>
- <FolderIcon />
- <OverlayIcon :is="folderOverlay"
- v-if="folderOverlay"
- class="files-list__row-icon-overlay" />
- </template>
- </template>
-
- <!-- Decorative image, should not be aria documented -->
- <img v-else-if="previewUrl && backgroundFailed !== true"
- ref="previewImg"
- alt=""
- class="files-list__row-icon-preview"
- :class="{'files-list__row-icon-preview--loaded': backgroundFailed === false}"
- :src="previewUrl"
- @error="backgroundFailed = true"
- @load="backgroundFailed = false">
-
- <FileIcon v-else />
-
- <!-- Favorite icon -->
- <span v-if="isFavorite"
- class="files-list__row-icon-favorite"
- :aria-label="t('files', 'Favorite')">
- <FavoriteIcon :aria-hidden="true" />
- </span>
- </span>
-
- <!-- Rename input -->
- <form v-if="isRenaming"
- v-on-click-outside="stopRenaming"
- :aria-hidden="!isRenaming"
- :aria-label="t('files', 'Rename file')"
- class="files-list__row-rename"
- @submit.prevent.stop="onRename">
- <NcTextField ref="renameInput"
- :label="renameLabel"
- :autofocus="true"
- :minlength="1"
- :required="true"
- :value.sync="newName"
- enterkeyhint="done"
- @keyup="checkInputValidity"
- @keyup.esc="stopRenaming" />
- </form>
-
- <a v-else
- ref="basename"
- :aria-hidden="isRenaming"
- class="files-list__row-name-link"
- data-cy-files-list-row-name-link
- v-bind="linkTo"
- @click="execDefaultAction">
- <!-- File name -->
- <span class="files-list__row-name-text">
- <!-- Keep the displayName stuck to the extension to avoid whitespace rendering issues-->
- <span class="files-list__row-name-" v-text="displayName" />
- <span class="files-list__row-name-ext" v-text="extension" />
- </span>
- </a>
+ <FileEntryPreview ref="preview"
+ :source="source"
+ :dragover="dragover"
+ @click.native="execDefaultAction" />
+
+ <FileEntryName ref="name"
+ :display-name="displayName"
+ :extension="extension"
+ :files-list-width="filesListWidth"
+ :nodes="nodes"
+ :source="source"
+ @click="execDefaultAction" />
</td>
<!-- Actions -->
- <td v-show="!isRenamingSmallScreen"
+ <FileEntryActions v-show="!isRenamingSmallScreen"
+ ref="actions"
:class="`files-list__row-actions-${uniqueId}`"
- class="files-list__row-actions"
- data-cy-files-list-row-actions>
- <!-- Render actions -->
- <CustomElementRender v-for="action in enabledRenderActions"
- :key="action.id"
- :class="'files-list__row-action-' + action.id"
- :current-view="currentView"
- :render="action.renderInline"
- :source="source"
- class="files-list__row-action--inline" />
-
- <!-- Menu actions -->
- <NcActions v-if="visible"
- ref="actionsMenu"
- :boundaries-element="getBoundariesElement()"
- :container="getBoundariesElement()"
- :disabled="isLoading"
- :force-name="true"
- :force-menu="enabledInlineActions.length === 0 /* forceMenu only if no inline actions */"
- :inline="enabledInlineActions.length"
- :open.sync="openedMenu">
- <NcActionButton v-for="action in enabledMenuActions"
- :key="action.id"
- :class="'files-list__row-action-' + action.id"
- :close-after-click="true"
- :data-cy-files-list-row-action="action.id"
- :title="action.title?.([source], currentView)"
- @click="onActionClick(action)">
- <template #icon>
- <NcLoadingIcon v-if="loading === action.id" :size="18" />
- <CustomSvgIconRender v-else :svg="action.iconSvgInline([source], currentView)" />
- </template>
- {{ actionDisplayName(action) }}
- </NcActionButton>
- </NcActions>
- </td>
+ :files-list-width="filesListWidth"
+ :loading.sync="loading"
+ :opened.sync="openedMenu"
+ :source="source" />
<!-- Size -->
- <td v-if="isSizeAvailable"
- :style="{ opacity: sizeOpacity }"
+ <td v-if="!compact && isSizeAvailable"
+ :style="sizeOpacity"
class="files-list__row-size"
data-cy-files-list-row-size
@click="openDetailsIfAvailable">
@@ -163,7 +78,8 @@
</td>
<!-- Mtime -->
- <td v-if="isMtimeAvailable"
+ <td v-if="!compact && isMtimeAvailable"
+ :style="mtimeOpacity"
class="files-list__row-mtime"
data-cy-files-list-row-mtime
@click="openDetailsIfAvailable">
@@ -177,94 +93,56 @@
class="files-list__row-column-custom"
:data-cy-files-list-row-column-custom="column.id"
@click="openDetailsIfAvailable">
- <CustomElementRender v-if="visible"
- :current-view="currentView"
+ <CustomElementRender :current-view="currentView"
:render="column.render"
:source="source" />
</td>
</tr>
</template>
-<script lang='ts'>
+<script lang="ts">
import type { PropType } from 'vue'
-import { emit } from '@nextcloud/event-bus'
-import { extname } from 'path'
-import { generateUrl } from '@nextcloud/router'
-import { getFileActions, DefaultType, FileType, formatFileSize, Permission, Folder, File, FileAction, NodeStatus, Node } from '@nextcloud/files'
-import { showError, showSuccess } from '@nextcloud/dialogs'
-import { translate } from '@nextcloud/l10n'
-import { Type as ShareType } from '@nextcloud/sharing'
+import { extname, join } from 'path'
+import { FileType, formatFileSize, Permission, Folder, File as NcFile, NodeStatus, Node, View } from '@nextcloud/files'
+import { getUploader } from '@nextcloud/upload'
+import { showError } from '@nextcloud/dialogs'
+import { translate as t } from '@nextcloud/l10n'
import { vOnClickOutside } from '@vueuse/components'
-import axios from '@nextcloud/axios'
import moment from '@nextcloud/moment'
import Vue from 'vue'
-import AccountGroupIcon from 'vue-material-design-icons/AccountGroup.vue'
-import FileIcon from 'vue-material-design-icons/File.vue'
-import FolderIcon from 'vue-material-design-icons/Folder.vue'
-import FolderOpenIcon from 'vue-material-design-icons/FolderOpen.vue'
-import KeyIcon from 'vue-material-design-icons/Key.vue'
-import TagIcon from 'vue-material-design-icons/Tag.vue'
-import LinkIcon from 'vue-material-design-icons/Link.vue'
-import NetworkIcon from 'vue-material-design-icons/Network.vue'
-import AccountPlusIcon from 'vue-material-design-icons/AccountPlus.vue'
-import NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'
-import NcActions from '@nextcloud/vue/dist/Components/NcActions.js'
-import NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'
-import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'
-import NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'
-
import { action as sidebarAction } from '../actions/sidebarAction.ts'
import { getDragAndDropPreview } from '../utils/dragUtils.ts'
import { handleCopyMoveNodeTo } from '../actions/moveOrCopyAction.ts'
-import { MoveCopyAction } from '../actions/moveOrCopyActionUtils.ts'
import { hashCode } from '../utils/hashUtils.ts'
+import { MoveCopyAction } from '../actions/moveOrCopyActionUtils.ts'
import { useActionsMenuStore } from '../store/actionsmenu.ts'
import { useDragAndDropStore } from '../store/dragging.ts'
import { useFilesStore } from '../store/files.ts'
-import { useKeyboardStore } from '../store/keyboard.ts'
import { useRenamingStore } from '../store/renaming.ts'
import { useSelectionStore } from '../store/selection.ts'
-import { useUserConfigStore } from '../store/userconfig.ts'
import CustomElementRender from './CustomElementRender.vue'
-import CustomSvgIconRender from './CustomSvgIconRender.vue'
-import FavoriteIcon from './FavoriteIcon.vue'
+import FileEntryActions from './FileEntry/FileEntryActions.vue'
+import FileEntryCheckbox from './FileEntry/FileEntryCheckbox.vue'
+import FileEntryName from './FileEntry/FileEntryName.vue'
+import FileEntryPreview from './FileEntry/FileEntryPreview.vue'
import logger from '../logger.js'
-// The registered actions list
-const actions = getFileActions()
-
Vue.directive('onClickOutside', vOnClickOutside)
export default Vue.extend({
name: 'FileEntry',
components: {
- AccountGroupIcon,
- AccountPlusIcon,
CustomElementRender,
- CustomSvgIconRender,
- FavoriteIcon,
- FileIcon,
- FolderIcon,
- FolderOpenIcon,
- KeyIcon,
- LinkIcon,
- NcActionButton,
- NcActions,
- NcCheckboxRadioSwitch,
- NcLoadingIcon,
- NcTextField,
- NetworkIcon,
- TagIcon,
+ FileEntryActions,
+ FileEntryCheckbox,
+ FileEntryName,
+ FileEntryPreview,
},
props: {
- visible: {
- type: Boolean,
- default: false,
- },
isMtimeAvailable: {
type: Boolean,
default: false,
@@ -274,11 +152,7 @@ export default Vue.extend({
default: false,
},
source: {
- type: [Folder, File, Node] as PropType<Node>,
- required: true,
- },
- index: {
- type: Number,
+ type: [Folder, NcFile, Node] as PropType<Node>,
required: true,
},
nodes: {
@@ -289,48 +163,41 @@ export default Vue.extend({
type: Number,
default: 0,
},
+ compact: {
+ type: Boolean,
+ default: false,
+ },
},
setup() {
const actionsMenuStore = useActionsMenuStore()
const draggingStore = useDragAndDropStore()
const filesStore = useFilesStore()
- const keyboardStore = useKeyboardStore()
const renamingStore = useRenamingStore()
const selectionStore = useSelectionStore()
- const userConfigStore = useUserConfigStore()
return {
actionsMenuStore,
draggingStore,
filesStore,
- keyboardStore,
renamingStore,
selectionStore,
- userConfigStore,
}
},
data() {
return {
- backgroundFailed: undefined,
loading: '',
dragover: false,
-
- NodeStatus,
}
},
computed: {
- userConfig() {
- return this.userConfigStore.userConfig
- },
-
- currentView() {
- return this.$navigation.active
+ currentView(): View {
+ return this.$navigation.active as View
},
columns() {
// Hide columns if the list is too small
- if (this.filesListWidth < 512) {
+ if (this.filesListWidth < 512 || this.compact) {
return []
}
return this.currentView?.columns || []
@@ -346,6 +213,12 @@ export default Vue.extend({
fileid() {
return this.source?.fileid?.toString?.()
},
+ uniqueId() {
+ return hashCode(this.source.source)
+ },
+ isLoading() {
+ return this.source.status === NodeStatus.LOADING
+ },
extension() {
if (this.source.attributes?.displayName) {
@@ -365,102 +238,52 @@ export default Vue.extend({
size() {
const size = parseInt(this.source.size, 10) || 0
if (typeof size !== 'number' || size < 0) {
- return this.t('files', 'Pending')
+ return t('files', 'Pending')
}
return formatFileSize(size, true)
},
sizeOpacity() {
- // Whatever theme is active, the contrast will pass WCAG AA
- // with color main text over main background and an opacity of 0.7
- const minOpacity = 0.7
const maxOpacitySize = 10 * 1024 * 1024
const size = parseInt(this.source.size, 10) || 0
if (!size || size < 0) {
- return minOpacity
+ return {}
}
- return minOpacity + (1 - minOpacity) * Math.pow((this.source.size / maxOpacitySize), 2)
+ const ratio = Math.round(Math.min(100, 100 * Math.pow((this.source.size / maxOpacitySize), 2)))
+ return {
+ color: `color-mix(in srgb, var(--color-main-text) ${ratio}%, var(--color-text-maxcontrast))`,
+ }
},
mtime() {
if (this.source.mtime) {
return moment(this.source.mtime).fromNow()
}
- return this.t('files_trashbin', 'A long time ago')
- },
- mtimeTitle() {
- if (this.source.mtime) {
- return moment(this.source.mtime).format('LLL')
- }
- return ''
+ return t('files_trashbin', 'A long time ago')
},
+ mtimeOpacity() {
+ const maxOpacityTime = 31 * 24 * 60 * 60 * 1000 // 31 days
- folderOverlay() {
- if (this.source.type !== FileType.Folder) {
- return null
- }
-
- // Encrypted folders
- if (this.source?.attributes?.['is-encrypted'] === 1) {
- return KeyIcon
- }
-
- // System tags
- if (this.source?.attributes?.['is-tag']) {
- return TagIcon
+ const mtime = this.source.mtime?.getTime?.()
+ if (!mtime) {
+ return {}
}
- // Link and mail shared folders
- const shareTypes = Object.values(this.source?.attributes?.['share-types'] || {}).flat() as number[]
- if (shareTypes.some(type => type === ShareType.SHARE_TYPE_LINK || type === ShareType.SHARE_TYPE_EMAIL)) {
- return LinkIcon
+ // 1 = today, 0 = 31 days ago
+ const ratio = Math.round(Math.min(100, 100 * (maxOpacityTime - (Date.now() - mtime)) / maxOpacityTime))
+ if (ratio < 0) {
+ return {}
}
-
- // Shared folders
- if (shareTypes.length > 0) {
- return AccountPlusIcon
- }
-
- switch (this.source?.attributes?.['mount-type']) {
- case 'external':
- case 'external-session':
- return NetworkIcon
- case 'group':
- return AccountGroupIcon
+ return {
+ color: `color-mix(in srgb, var(--color-main-text) ${ratio}%, var(--color-text-maxcontrast))`,
}
-
- return null
},
-
- linkTo() {
- if (this.source.attributes.failed) {
- return {
- title: this.t('files', 'This node is unavailable'),
- is: 'span',
- }
- }
-
- if (this.enabledDefaultActions.length > 0) {
- const action = this.enabledDefaultActions[0]
- const displayName = action.displayName([this.source], this.currentView)
- return {
- title: displayName,
- role: 'button',
- }
- }
-
- if (this.source?.permissions & Permission.READ) {
- return {
- download: this.source.basename,
- href: this.source.source,
- title: this.t('files', 'Download file {name}', { name: this.displayName }),
- }
- }
-
- return {
- is: 'span',
+ mtimeTitle() {
+ if (this.source.mtime) {
+ return moment(this.source.mtime).format('LLL')
}
+ return ''
},
draggingFiles() {
@@ -473,124 +296,12 @@ export default Vue.extend({
return this.selectedFiles.includes(this.fileid)
},
- cropPreviews() {
- return this.userConfig.crop_image_previews
- },
- previewUrl() {
- if (this.source.type === FileType.Folder) {
- return null
- }
-
- if (this.backgroundFailed === true) {
- return null
- }
-
- try {
- const previewUrl = this.source.attributes.previewUrl
- || generateUrl('/core/preview?fileid={fileid}', {
- fileid: this.fileid,
- })
- const url = new URL(window.location.origin + previewUrl)
-
- // Request tiny previews
- url.searchParams.set('x', '32')
- url.searchParams.set('y', '32')
- url.searchParams.set('mimeFallback', 'true')
-
- // Handle cropping
- url.searchParams.set('a', this.cropPreviews === true ? '0' : '1')
- return url.href
- } catch (e) {
- return null
- }
- },
-
- // Sorted actions that are enabled for this node
- enabledActions() {
- if (this.source.attributes.failed) {
- return []
- }
-
- return actions
- .filter(action => !action.enabled || action.enabled([this.source], this.currentView))
- .sort((a, b) => (a.order || 0) - (b.order || 0))
- },
-
- // Enabled action that are displayed inline
- enabledInlineActions() {
- if (this.filesListWidth < 768) {
- return []
- }
- return this.enabledActions.filter(action => action?.inline?.(this.source, this.currentView))
- },
-
- // Enabled action that are displayed inline with a custom render function
- enabledRenderActions() {
- if (!this.visible) {
- return []
- }
- return this.enabledActions.filter(action => typeof action.renderInline === 'function')
- },
-
- // Default actions
- enabledDefaultActions() {
- return this.enabledActions.filter(action => !!action?.default)
- },
-
- // Actions shown in the menu
- enabledMenuActions() {
- return [
- // Showing inline first for the NcActions inline prop
- ...this.enabledInlineActions,
- // Then the rest
- ...this.enabledActions.filter(action => action.default !== DefaultType.HIDDEN && typeof action.renderInline !== 'function'),
- ].filter((value, index, self) => {
- // Then we filter duplicates to prevent inline actions to be shown twice
- return index === self.findIndex(action => action.id === value.id)
- })
- },
- openedMenu: {
- get() {
- return this.actionsMenuStore.opened === this.uniqueId
- },
- set(opened) {
- this.actionsMenuStore.opened = opened ? this.uniqueId : null
- },
- },
-
- uniqueId() {
- return hashCode(this.source.source)
- },
-
- isFavorite() {
- return this.source.attributes.favorite === 1
- },
- isLoading() {
- return this.source.status === NodeStatus.LOADING
- },
-
- renameLabel() {
- const matchLabel: Record<FileType, string> = {
- [FileType.File]: t('files', 'File name'),
- [FileType.Folder]: t('files', 'Folder name'),
- }
- return matchLabel[this.source.type]
- },
-
isRenaming() {
return this.renamingStore.renamingNode === this.source
},
isRenamingSmallScreen() {
return this.isRenaming && this.filesListWidth < 512
},
- newName: {
- get() {
- return this.renamingStore.newName
- },
- set(newName) {
- this.renamingStore.newName = newName
- },
- },
isActive() {
return this.fileid === this.currentFileId?.toString?.()
@@ -598,7 +309,7 @@ export default Vue.extend({
canDrag() {
const canDrag = (node: Node): boolean => {
- return (node.permissions & Permission.UPDATE) !== 0
+ return (node?.permissions & Permission.UPDATE) !== 0
}
// If we're dragging a selection, we need to check all files
@@ -621,6 +332,15 @@ export default Vue.extend({
return (this.source.permissions & Permission.CREATE) !== 0
},
+
+ openedMenu: {
+ get() {
+ return this.actionsMenuStore.opened === this.uniqueId
+ },
+ set(opened) {
+ this.actionsMenuStore.opened = opened ? this.uniqueId : null
+ },
+ },
},
watch: {
@@ -631,16 +351,6 @@ export default Vue.extend({
source() {
this.resetState()
},
-
- /**
- * If renaming starts, select the file name
- * in the input, without the extension.
- */
- isRenaming(renaming) {
- if (renaming) {
- this.startRenaming()
- }
- },
},
beforeDestroy() {
@@ -652,96 +362,12 @@ export default Vue.extend({
// Reset loading state
this.loading = ''
- // Reset background state
- this.backgroundFailed = undefined
- if (this.$refs.previewImg) {
- this.$refs.previewImg.src = ''
- }
+ this.$refs.preview.reset()
// Close menu
this.openedMenu = false
},
- async onActionClick(action) {
- const displayName = action.displayName([this.source], this.currentView)
- try {
- // Set the loading marker
- this.loading = action.id
- Vue.set(this.source, 'status', NodeStatus.LOADING)
-
- const success = await action.exec(this.source, this.currentView, this.currentDir)
-
- // If the action returns null, we stay silent
- if (success === null) {
- return
- }
-
- if (success) {
- showSuccess(this.t('files', '"{displayName}" action executed successfully', { displayName }))
- return
- }
- showError(this.t('files', '"{displayName}" action failed', { displayName }))
- } catch (e) {
- logger.error('Error while executing action', { action, e })
- showError(this.t('files', '"{displayName}" action failed', { displayName }))
- } finally {
- // Reset the loading marker
- this.loading = ''
- Vue.set(this.source, 'status', undefined)
- }
- },
- execDefaultAction(event) {
- if (this.enabledDefaultActions.length > 0) {
- event.preventDefault()
- event.stopPropagation()
- // Execute the first default action if any
- this.enabledDefaultActions[0].exec(this.source, this.currentView, this.currentDir)
- }
- },
-
- openDetailsIfAvailable(event) {
- event.preventDefault()
- event.stopPropagation()
- if (sidebarAction?.enabled?.([this.source], this.currentView)) {
- sidebarAction.exec(this.source, this.currentView, this.currentDir)
- }
- },
-
- onSelectionChange(selected: boolean) {
- const newSelectedIndex = this.index
- const lastSelectedIndex = this.selectionStore.lastSelectedIndex
-
- // Get the last selected and select all files in between
- if (this.keyboardStore?.shiftKey && lastSelectedIndex !== null) {
- const isAlreadySelected = this.selectedFiles.includes(this.fileid)
-
- const start = Math.min(newSelectedIndex, lastSelectedIndex)
- const end = Math.max(lastSelectedIndex, newSelectedIndex)
-
- const lastSelection = this.selectionStore.lastSelection
- const filesToSelect = this.nodes
- .map(file => file.fileid?.toString?.())
- .slice(start, end + 1)
-
- // If already selected, update the new selection _without_ the current file
- const selection = [...lastSelection, ...filesToSelect]
- .filter(fileid => !isAlreadySelected || fileid !== this.fileid)
-
- logger.debug('Shift key pressed, selecting all files in between', { start, end, filesToSelect, isAlreadySelected })
- // Keep previous lastSelectedIndex to be use for further shift selections
- this.selectionStore.set(selection)
- return
- }
-
- const selection = selected
- ? [...this.selectedFiles, this.fileid]
- : this.selectedFiles.filter(fileid => fileid !== this.fileid)
-
- logger.debug('Updating selection', { selection })
- this.selectionStore.set(selection)
- this.selectionStore.setLastIndex(newSelectedIndex)
- },
-
// Open the actions menu on right click
onRightClick(event) {
// If already opened, fallback to default browser
@@ -758,165 +384,21 @@ export default Vue.extend({
event.stopPropagation()
},
- /**
- * Check if the file name is valid and update the
- * input validity using browser's native validation.
- * @param event the keyup event
- */
- checkInputValidity(event?: KeyboardEvent) {
- const input = event.target as HTMLInputElement
- const newName = this.newName.trim?.() || ''
- logger.debug('Checking input validity', { newName })
- try {
- this.isFileNameValid(newName)
- input.setCustomValidity('')
- input.title = ''
- } catch (e) {
- input.setCustomValidity(e.message)
- input.title = e.message
- } finally {
- input.reportValidity()
- }
- },
- isFileNameValid(name) {
- const trimmedName = name.trim()
- if (trimmedName === '.' || trimmedName === '..') {
- throw new Error(this.t('files', '"{name}" is an invalid file name.', { name }))
- } else if (trimmedName.length === 0) {
- throw new Error(this.t('files', 'File name cannot be empty.'))
- } else if (trimmedName.indexOf('/') !== -1) {
- throw new Error(this.t('files', '"/" is not allowed inside a file name.'))
- } else if (trimmedName.match(OC.config.blacklist_files_regex)) {
- throw new Error(this.t('files', '"{name}" is not an allowed filetype.', { name }))
- } else if (this.checkIfNodeExists(name)) {
- throw new Error(this.t('files', '{newName} already exists.', { newName: name }))
- }
-
- return true
- },
- checkIfNodeExists(name) {
- return this.nodes.find(node => node.basename === name && node !== this.source)
- },
-
- startRenaming() {
- this.$nextTick(() => {
- // Using split to get the true string length
- const extLength = (this.source.extension || '').split('').length
- const length = this.source.basename.split('').length - extLength
- const input = this.$refs.renameInput?.$refs?.inputField?.$refs?.input
- if (!input) {
- logger.error('Could not find the rename input')
- return
- }
- input.setSelectionRange(0, length)
- input.focus()
-
- // Trigger a keyup event to update the input validity
- input.dispatchEvent(new Event('keyup'))
- })
- },
- stopRenaming() {
- if (!this.isRenaming) {
- return
- }
-
- // Reset the renaming store
- this.renamingStore.$reset()
- },
-
- // Rename and move the file
- async onRename() {
- const oldName = this.source.basename
- const oldSource = this.source.source
- const newName = this.newName.trim?.() || ''
- if (newName === '') {
- showError(this.t('files', 'Name cannot be empty'))
- return
- }
-
- if (oldName === newName) {
- this.stopRenaming()
- return
- }
-
- // Checking if already exists
- if (this.checkIfNodeExists(newName)) {
- showError(this.t('files', 'Another entry with the same name already exists'))
- return
- }
-
- // Set loading state
- this.loading = 'renaming'
- Vue.set(this.source, 'status', NodeStatus.LOADING)
-
- // Update node
- this.source.rename(newName)
-
- try {
- await axios({
- method: 'MOVE',
- url: oldSource,
- headers: {
- Destination: encodeURI(this.source.source),
- },
- })
-
- // Success 🎉
- emit('files:node:updated', this.source)
- emit('files:node:renamed', this.source)
- showSuccess(this.t('files', 'Renamed "{oldName}" to "{newName}"', { oldName, newName }))
-
- // Reset the renaming store
- this.stopRenaming()
- this.$nextTick(() => {
- this.$refs.basename.focus()
- })
- } catch (error) {
- logger.error('Error while renaming file', { error })
- this.source.rename(oldName)
- this.$refs.renameInput.focus()
-
- // TODO: 409 means current folder does not exist, redirect ?
- if (error?.response?.status === 404) {
- showError(this.t('files', 'Could not rename "{oldName}", it does not exist any more', { oldName }))
- return
- } else if (error?.response?.status === 412) {
- showError(this.t('files', 'The name "{newName}" is already used in the folder "{dir}". Please choose a different name.', { newName, dir: this.currentDir }))
- return
- }
-
- // Unknown error
- showError(this.t('files', 'Could not rename "{oldName}"', { oldName }))
- } finally {
- this.loading = false
- Vue.set(this.source, 'status', undefined)
- }
- },
-
- /**
- * Making this a function in case the files-list
- * reference changes in the future. That way we're
- * sure there is one at the time we call it.
- */
- getBoundariesElement() {
- return document.querySelector('.app-content > .files-list')
+ execDefaultAction(...args) {
+ this.$refs.actions.execDefaultAction(...args)
},
- actionDisplayName(action: FileAction) {
- if (this.filesListWidth < 768 && action.inline && typeof action.title === 'function') {
- // if an inline action is rendered in the menu for
- // lack of space we use the title first if defined
- const title = action.title([this.source], this.currentView)
- if (title) return title
+ openDetailsIfAvailable(event) {
+ event.preventDefault()
+ event.stopPropagation()
+ if (sidebarAction?.enabled?.([this.source], this.currentView)) {
+ sidebarAction.exec(this.source, this.currentView, this.currentDir)
}
- return action.displayName([this.source], this.currentView)
},
onDragOver(event: DragEvent) {
this.dragover = this.canDrop
if (!this.canDrop) {
- event.preventDefault()
- event.stopPropagation()
event.dataTransfer.dropEffect = 'none'
return
}
@@ -929,9 +411,13 @@ export default Vue.extend({
}
},
onDragLeave(event: DragEvent) {
- if (this.$el.contains(event.target) && event.target !== this.$el) {
+ // Counter bubbling, make sure we're ending the drag
+ // only when we're leaving the current element
+ const currentTarget = event.currentTarget as HTMLElement
+ if (currentTarget?.contains(event.relatedTarget as HTMLElement)) {
return
}
+
this.dragover = false
},
@@ -960,7 +446,7 @@ export default Vue.extend({
.map(fileid => this.filesStore.getNode(fileid)) as Node[]
const image = await getDragAndDropPreview(nodes)
- event.dataTransfer.setDragImage(image, -10, -10)
+ event.dataTransfer?.setDragImage(image, -10, -10)
},
onDragEnd() {
this.draggingStore.reset()
@@ -969,6 +455,9 @@ export default Vue.extend({
},
async onDrop(event) {
+ event.preventDefault()
+ event.stopPropagation()
+
// If another button is pressed, cancel it
// This allows cancelling the drag with the right click
if (!this.canDrop || event.button !== 0) {
@@ -980,6 +469,16 @@ export default Vue.extend({
logger.debug('Dropped', { event, selection: this.draggingFiles })
+ // Check whether we're uploading files
+ if (event.dataTransfer?.files?.length > 0) {
+ const uploader = getUploader()
+ event.dataTransfer.files.forEach((file: File) => {
+ uploader.upload(join(this.source.path, file.name), file)
+ })
+ logger.debug(`Uploading files to ${this.source.path}`)
+ return
+ }
+
const nodes = this.draggingFiles.map(fileid => this.filesStore.getNode(fileid)) as Node[]
nodes.forEach(async (node: Node) => {
Vue.set(node, 'status', NodeStatus.LOADING)
@@ -989,9 +488,9 @@ export default Vue.extend({
} catch (error) {
logger.error('Error while moving file', { error })
if (isCopy) {
- showError(this.t('files', 'Could not copy {file}. {message}', { file: node.basename, message: error.message || '' }))
+ showError(t('files', 'Could not copy {file}. {message}', { file: node.basename, message: error.message || '' }))
} else {
- showError(this.t('files', 'Could not move {file}. {message}', { file: node.basename, message: error.message || '' }))
+ showError(t('files', 'Could not move {file}. {message}', { file: node.basename, message: error.message || '' }))
}
} finally {
Vue.set(node, 'status', undefined)
@@ -1006,48 +505,8 @@ export default Vue.extend({
}
},
- t: translate,
+ t,
formatFileSize,
},
})
</script>
-
-<style scoped lang='scss'>
-/* Hover effect on tbody lines only */
-tr {
- &:hover,
- &:focus {
- background-color: var(--color-background-dark);
- }
-}
-
-// Folder overlay
-.files-list__row-icon-overlay {
- position: absolute;
- max-height: 18px;
- max-width: 18px;
- color: var(--color-main-background);
- // better alignment with the folder icon
- margin-top: 2px;
-}
-
-/* Preview not loaded animation effect */
-.files-list__row-icon-preview:not(.files-list__row-icon-preview--loaded) {
- background: var(--color-loading-dark);
- // animation: preview-gradient-fade 1.2s ease-in-out infinite;
-}
-</style>
-
-<style>
-/* @keyframes preview-gradient-fade {
- 0% {
- opacity: 1;
- }
- 50% {
- opacity: 0.5;
- }
- 100% {
- opacity: 1;
- }
-} */
-</style>
diff --git a/apps/files/src/components/FavoriteIcon.vue b/apps/files/src/components/FileEntry/FavoriteIcon.vue
index 4d48b11e579..6eb1fbd8edd 100644
--- a/apps/files/src/components/FavoriteIcon.vue
+++ b/apps/files/src/components/FileEntry/FavoriteIcon.vue
@@ -20,12 +20,12 @@
-
-->
<template>
- <CustomSvgIconRender class="favorite-marker-icon" :svg="StarSvg" />
+ <NcIconSvgWrapper class="favorite-marker-icon" :svg="StarSvg" />
</template>
<script>
import StarSvg from '@mdi/svg/svg/star.svg?raw'
-import CustomSvgIconRender from './CustomSvgIconRender.vue'
+import NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'
/**
* A favorite icon to be used for overlaying favorite entries like the file preview / icon
@@ -41,33 +41,37 @@ import CustomSvgIconRender from './CustomSvgIconRender.vue'
export default {
name: 'FavoriteIcon',
components: {
- CustomSvgIconRender,
+ NcIconSvgWrapper,
},
data() {
return {
StarSvg,
}
},
- mounted() {
+ async mounted() {
+ await this.$nextTick()
// MDI default viewbox is "0 0 24 24" but we add a stroke of 10px so we must adjust it
const el = this.$el.querySelector('svg')
el.setAttribute('viewBox', '-4 -4 30 30')
- el.setAttribute('width', '25')
- el.setAttribute('height', '25')
},
}
</script>
<style lang="scss" scoped>
.favorite-marker-icon {
color: #a08b00;
- width: fit-content;
- height: fit-content;
+ // Override NcIconSvgWrapper defaults (clickable area)
+ min-width: unset !important;
+ min-height: unset !important;
:deep() {
svg {
// We added a stroke for a11y so we must increase the size to include the stroke
- width: 26px;
- height: 26px;
+ width: 26px !important;
+ height: 26px !important;
+
+ // Override NcIconSvgWrapper defaults of 20px
+ max-width: unset !important;
+ max-height: unset !important;
// Sow a border around the icon for better contrast
path {
diff --git a/apps/files/src/components/FileEntry/FileEntryActions.vue b/apps/files/src/components/FileEntry/FileEntryActions.vue
new file mode 100644
index 00000000000..bd4649cdee5
--- /dev/null
+++ b/apps/files/src/components/FileEntry/FileEntryActions.vue
@@ -0,0 +1,243 @@
+<!--
+ - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>
+ -
+ - @author John Molakvoæ <skjnldsv@protonmail.com>
+ -
+ - @license GNU AGPL version 3 or any later version
+ -
+ - This program is free software: you can redistribute it and/or modify
+ - it under the terms of the GNU Affero General Public License as
+ - published by the Free Software Foundation, either version 3 of the
+ - License, or (at your option) any later version.
+ -
+ - This program is distributed in the hope that it will be useful,
+ - but WITHOUT ANY WARRANTY; without even the implied warranty of
+ - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ - GNU Affero General Public License for more details.
+ -
+ - You should have received a copy of the GNU Affero General Public License
+ - along with this program. If not, see <http://www.gnu.org/licenses/>.
+ -
+ -->
+<template>
+ <td class="files-list__row-actions"
+ data-cy-files-list-row-actions>
+ <!-- Render actions -->
+ <CustomElementRender v-for="action in enabledRenderActions"
+ :key="action.id"
+ :class="'files-list__row-action-' + action.id"
+ :current-view="currentView"
+ :render="action.renderInline"
+ :source="source"
+ class="files-list__row-action--inline" />
+
+ <!-- Menu actions -->
+ <NcActions ref="actionsMenu"
+ :boundaries-element="getBoundariesElement"
+ :container="getBoundariesElement"
+ :disabled="isLoading || loading !== ''"
+ :force-name="true"
+ :force-menu="enabledInlineActions.length === 0 /* forceMenu only if no inline actions */"
+ :inline="enabledInlineActions.length"
+ :open.sync="openedMenu">
+ <NcActionButton v-for="action in enabledMenuActions"
+ :key="action.id"
+ :class="'files-list__row-action-' + action.id"
+ :close-after-click="true"
+ :data-cy-files-list-row-action="action.id"
+ :title="action.title?.([source], currentView)"
+ @click="onActionClick(action)">
+ <template #icon>
+ <NcLoadingIcon v-if="loading === action.id" :size="18" />
+ <NcIconSvgWrapper v-else :svg="action.iconSvgInline([source], currentView)" />
+ </template>
+ {{ actionDisplayName(action) }}
+ </NcActionButton>
+ </NcActions>
+ </td>
+</template>
+
+<script lang="ts">
+import { DefaultType, FileAction, Node, NodeStatus, View, getFileActions } from '@nextcloud/files'
+import { showError, showSuccess } from '@nextcloud/dialogs'
+import { translate as t } from '@nextcloud/l10n';
+import Vue, { PropType } from 'vue'
+
+import NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'
+import NcActions from '@nextcloud/vue/dist/Components/NcActions.js'
+import NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'
+import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'
+
+import CustomElementRender from '../CustomElementRender.vue'
+import logger from '../../logger.js'
+
+// The registered actions list
+const actions = getFileActions()
+
+export default Vue.extend({
+ name: 'FileEntryActions',
+
+ components: {
+ NcActionButton,
+ NcActions,
+ NcIconSvgWrapper,
+ NcLoadingIcon,
+ CustomElementRender,
+ },
+
+ props: {
+ filesListWidth: {
+ type: Number,
+ required: true,
+ },
+ loading: {
+ type: String,
+ required: true,
+ },
+ opened: {
+ type: Boolean,
+ default: false,
+ },
+ source: {
+ type: Object as PropType<Node>,
+ required: true,
+ },
+ gridMode: {
+ type: Boolean,
+ default: false,
+ },
+ },
+
+ setup() {
+ return {
+ }
+ },
+
+ computed: {
+ currentDir() {
+ // Remove any trailing slash but leave root slash
+ return (this.$route?.query?.dir?.toString() || '/').replace(/^(.+)\/$/, '$1')
+ },
+ currentView(): View {
+ return this.$navigation.active as View
+ },
+ isLoading() {
+ return this.source.status === NodeStatus.LOADING
+ },
+
+ // Sorted actions that are enabled for this node
+ enabledActions() {
+ if (this.source.attributes.failed) {
+ return []
+ }
+
+ return actions
+ .filter(action => !action.enabled || action.enabled([this.source], this.currentView))
+ .sort((a, b) => (a.order || 0) - (b.order || 0))
+ },
+
+ // Enabled action that are displayed inline
+ enabledInlineActions() {
+ if (this.filesListWidth < 768 || this.gridMode) {
+ return []
+ }
+ return this.enabledActions.filter(action => action?.inline?.(this.source, this.currentView))
+ },
+
+ // Enabled action that are displayed inline with a custom render function
+ enabledRenderActions() {
+ if (this.gridMode) {
+ return []
+ }
+ return this.enabledActions.filter(action => typeof action.renderInline === 'function')
+ },
+
+ // Default actions
+ enabledDefaultActions() {
+ return this.enabledActions.filter(action => !!action?.default)
+ },
+
+ // Actions shown in the menu
+ enabledMenuActions() {
+ return [
+ // Showing inline first for the NcActions inline prop
+ ...this.enabledInlineActions,
+ // Then the rest
+ ...this.enabledActions.filter(action => action.default !== DefaultType.HIDDEN && typeof action.renderInline !== 'function'),
+ ].filter((value, index, self) => {
+ // Then we filter duplicates to prevent inline actions to be shown twice
+ return index === self.findIndex(action => action.id === value.id)
+ })
+ },
+
+ openedMenu: {
+ get() {
+ return this.opened
+ },
+ set(value) {
+ this.$emit('update:opened', value)
+ },
+ },
+
+ /**
+ * Making this a function in case the files-list
+ * reference changes in the future. That way we're
+ * sure there is one at the time we call it.
+ */
+ getBoundariesElement() {
+ return document.querySelector('.app-content > table.files-list')
+ },
+ },
+
+ methods: {
+ actionDisplayName(action: FileAction) {
+ if (this.filesListWidth < 768 && action.inline && typeof action.title === 'function') {
+ // if an inline action is rendered in the menu for
+ // lack of space we use the title first if defined
+ const title = action.title([this.source], this.currentView)
+ if (title) return title
+ }
+ return action.displayName([this.source], this.currentView)
+ },
+
+ async onActionClick(action) {
+ const displayName = action.displayName([this.source], this.currentView)
+ try {
+ // Set the loading marker
+ this.$emit('update:loading', action.id)
+ Vue.set(this.source, 'status', NodeStatus.LOADING)
+
+ const success = await action.exec(this.source, this.currentView, this.currentDir)
+
+ // If the action returns null, we stay silent
+ if (success === null) {
+ return
+ }
+
+ if (success) {
+ showSuccess(t('files', '"{displayName}" action executed successfully', { displayName }))
+ return
+ }
+ showError(t('files', '"{displayName}" action failed', { displayName }))
+ } catch (e) {
+ logger.error('Error while executing action', { action, e })
+ showError(t('files', '"{displayName}" action failed', { displayName }))
+ } finally {
+ // Reset the loading marker
+ this.$emit('update:loading', '')
+ Vue.set(this.source, 'status', undefined)
+ }
+ },
+ execDefaultAction(event) {
+ if (this.enabledDefaultActions.length > 0) {
+ event.preventDefault()
+ event.stopPropagation()
+ // Execute the first default action if any
+ this.enabledDefaultActions[0].exec(this.source, this.currentView, this.currentDir)
+ }
+ },
+
+ t,
+ },
+})
+</script>
diff --git a/apps/files/src/components/FileEntry/FileEntryCheckbox.vue b/apps/files/src/components/FileEntry/FileEntryCheckbox.vue
new file mode 100644
index 00000000000..961e4bf2266
--- /dev/null
+++ b/apps/files/src/components/FileEntry/FileEntryCheckbox.vue
@@ -0,0 +1,131 @@
+<!--
+ - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>
+ -
+ - @author John Molakvoæ <skjnldsv@protonmail.com>
+ -
+ - @license GNU AGPL version 3 or any later version
+ -
+ - This program is free software: you can redistribute it and/or modify
+ - it under the terms of the GNU Affero General Public License as
+ - published by the Free Software Foundation, either version 3 of the
+ - License, or (at your option) any later version.
+ -
+ - This program is distributed in the hope that it will be useful,
+ - but WITHOUT ANY WARRANTY; without even the implied warranty of
+ - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ - GNU Affero General Public License for more details.
+ -
+ - You should have received a copy of the GNU Affero General Public License
+ - along with this program. If not, see <http://www.gnu.org/licenses/>.
+ -
+ -->
+<template>
+ <td class="files-list__row-checkbox">
+ <NcLoadingIcon v-if="isLoading" />
+ <NcCheckboxRadioSwitch v-else
+ :aria-label="t('files', 'Select the row for {displayName}', { displayName })"
+ :checked="isSelected"
+ @update:checked="onSelectionChange" />
+ </td>
+</template>
+
+<script lang="ts">
+import { Node } from '@nextcloud/files'
+import { translate as t } from '@nextcloud/l10n'
+import Vue, { PropType } from 'vue'
+
+import NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'
+import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'
+
+import { useKeyboardStore } from '../../store/keyboard.ts'
+import { useSelectionStore } from '../../store/selection.ts'
+import logger from '../../logger.js'
+
+export default Vue.extend({
+ name: 'FileEntryCheckbox',
+
+ components: {
+ NcCheckboxRadioSwitch,
+ NcLoadingIcon,
+ },
+
+ props: {
+ displayName: {
+ type: String,
+ required: true,
+ },
+ fileid: {
+ type: String,
+ required: true,
+ },
+ isLoading: {
+ type: Boolean,
+ default: false,
+ },
+ nodes: {
+ type: Array as PropType<Node[]>,
+ required: true,
+ },
+ },
+
+ setup() {
+ const selectionStore = useSelectionStore()
+ const keyboardStore = useKeyboardStore()
+ return {
+ keyboardStore,
+ selectionStore,
+ }
+ },
+
+ computed: {
+ selectedFiles() {
+ return this.selectionStore.selected
+ },
+ isSelected() {
+ return this.selectedFiles.includes(this.fileid)
+ },
+ index() {
+ return this.nodes.findIndex((node: Node) => node.fileid === parseInt(this.fileid))
+ },
+ },
+
+ methods: {
+ onSelectionChange(selected: boolean) {
+ const newSelectedIndex = this.index
+ const lastSelectedIndex = this.selectionStore.lastSelectedIndex
+
+ // Get the last selected and select all files in between
+ if (this.keyboardStore?.shiftKey && lastSelectedIndex !== null) {
+ const isAlreadySelected = this.selectedFiles.includes(this.fileid)
+
+ const start = Math.min(newSelectedIndex, lastSelectedIndex)
+ const end = Math.max(lastSelectedIndex, newSelectedIndex)
+
+ const lastSelection = this.selectionStore.lastSelection
+ const filesToSelect = this.nodes
+ .map(file => file.fileid?.toString?.())
+ .slice(start, end + 1)
+
+ // If already selected, update the new selection _without_ the current file
+ const selection = [...lastSelection, ...filesToSelect]
+ .filter(fileid => !isAlreadySelected || fileid !== this.fileid)
+
+ logger.debug('Shift key pressed, selecting all files in between', { start, end, filesToSelect, isAlreadySelected })
+ // Keep previous lastSelectedIndex to be use for further shift selections
+ this.selectionStore.set(selection)
+ return
+ }
+
+ const selection = selected
+ ? [...this.selectedFiles, this.fileid]
+ : this.selectedFiles.filter(fileid => fileid !== this.fileid)
+
+ logger.debug('Updating selection', { selection })
+ this.selectionStore.set(selection)
+ this.selectionStore.setLastIndex(newSelectedIndex)
+ },
+
+ t,
+ },
+})
+</script>
diff --git a/apps/files/src/components/FileEntry/FileEntryName.vue b/apps/files/src/components/FileEntry/FileEntryName.vue
new file mode 100644
index 00000000000..e54eacdbe9e
--- /dev/null
+++ b/apps/files/src/components/FileEntry/FileEntryName.vue
@@ -0,0 +1,330 @@
+<!--
+ - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>
+ -
+ - @author John Molakvoæ <skjnldsv@protonmail.com>
+ -
+ - @license GNU AGPL version 3 or any later version
+ -
+ - This program is free software: you can redistribute it and/or modify
+ - it under the terms of the GNU Affero General Public License as
+ - published by the Free Software Foundation, either version 3 of the
+ - License, or (at your option) any later version.
+ -
+ - This program is distributed in the hope that it will be useful,
+ - but WITHOUT ANY WARRANTY; without even the implied warranty of
+ - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ - GNU Affero General Public License for more details.
+ -
+ - You should have received a copy of the GNU Affero General Public License
+ - along with this program. If not, see <http://www.gnu.org/licenses/>.
+ -
+ -->
+<template>
+ <!-- Rename input -->
+ <form v-if="isRenaming"
+ v-on-click-outside="stopRenaming"
+ :aria-label="t('files', 'Rename file')"
+ class="files-list__row-rename"
+ @submit.prevent.stop="onRename">
+ <NcTextField ref="renameInput"
+ :label="renameLabel"
+ :autofocus="true"
+ :minlength="1"
+ :required="true"
+ :value.sync="newName"
+ enterkeyhint="done"
+ @keyup="checkInputValidity"
+ @keyup.esc="stopRenaming" />
+ </form>
+
+ <a v-else
+ ref="basename"
+ :aria-hidden="isRenaming"
+ class="files-list__row-name-link"
+ data-cy-files-list-row-name-link
+ v-bind="linkTo"
+ @click="$emit('click', $event)">
+ <!-- File name -->
+ <span class="files-list__row-name-text">
+ <!-- Keep the displayName stuck to the extension to avoid whitespace rendering issues-->
+ <span class="files-list__row-name-" v-text="displayName" />
+ <span class="files-list__row-name-ext" v-text="extension" />
+ </span>
+ </a>
+</template>
+
+<script lang="ts">
+import { emit } from '@nextcloud/event-bus'
+import { FileType, NodeStatus, Permission } from '@nextcloud/files'
+import { loadState } from '@nextcloud/initial-state'
+import { showError, showSuccess } from '@nextcloud/dialogs'
+import { translate as t } from '@nextcloud/l10n'
+import axios from '@nextcloud/axios'
+import Vue, { PropType } from 'vue'
+
+import NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'
+
+import { useRenamingStore } from '../../store/renaming.ts'
+import logger from '../../logger.js'
+
+const forbiddenCharacters = loadState('files', 'forbiddenCharacters', '') as string
+
+export default Vue.extend({
+ name: 'FileEntryName',
+
+ components: {
+ NcTextField,
+ },
+
+ props: {
+ displayName: {
+ type: String,
+ required: true,
+ },
+ extension: {
+ type: String,
+ required: true,
+ },
+ filesListWidth: {
+ type: Number,
+ required: true,
+ },
+ nodes: {
+ type: Array as PropType<Node[]>,
+ required: true,
+ },
+ source: {
+ type: Object as PropType<Node>,
+ required: true,
+ },
+ gridMode: {
+ type: Boolean,
+ default: false,
+ },
+ },
+
+ setup() {
+ const renamingStore = useRenamingStore()
+ return {
+ renamingStore,
+ }
+ },
+
+ computed: {
+ isRenaming() {
+ return this.renamingStore.renamingNode === this.source
+ },
+ isRenamingSmallScreen() {
+ return this.isRenaming && this.filesListWidth < 512
+ },
+ newName: {
+ get() {
+ return this.renamingStore.newName
+ },
+ set(newName) {
+ this.renamingStore.newName = newName
+ },
+ },
+
+ renameLabel() {
+ const matchLabel: Record<FileType, string> = {
+ [FileType.File]: t('files', 'File name'),
+ [FileType.Folder]: t('files', 'Folder name'),
+ }
+ return matchLabel[this.source.type]
+ },
+
+ linkTo() {
+ if (this.source.attributes.failed) {
+ return {
+ title: t('files', 'This node is unavailable'),
+ is: 'span',
+ }
+ }
+
+ const enabledDefaultActions = this.$parent?.$refs?.actions?.enabledDefaultActions
+ if (enabledDefaultActions?.length > 0) {
+ const action = enabledDefaultActions[0]
+ const displayName = action.displayName([this.source], this.currentView)
+ return {
+ title: displayName,
+ role: 'button',
+ }
+ }
+
+ if (this.source?.permissions & Permission.READ) {
+ return {
+ download: this.source.basename,
+ href: this.source.source,
+ title: t('files', 'Download file {name}', { name: this.displayName }),
+ }
+ }
+
+ return {
+ is: 'span',
+ }
+ },
+ },
+
+ watch: {
+ /**
+ * If renaming starts, select the file name
+ * in the input, without the extension.
+ * @param renaming
+ */
+ isRenaming(renaming: boolean) {
+ if (renaming) {
+ this.startRenaming()
+ }
+ },
+ },
+
+ methods: {
+ /**
+ * Check if the file name is valid and update the
+ * input validity using browser's native validation.
+ * @param event the keyup event
+ */
+ checkInputValidity(event?: KeyboardEvent) {
+ const input = event.target as HTMLInputElement
+ const newName = this.newName.trim?.() || ''
+ logger.debug('Checking input validity', { newName })
+ try {
+ this.isFileNameValid(newName)
+ input.setCustomValidity('')
+ input.title = ''
+ } catch (e) {
+ input.setCustomValidity(e.message)
+ input.title = e.message
+ } finally {
+ input.reportValidity()
+ }
+ },
+ isFileNameValid(name) {
+ const trimmedName = name.trim()
+ if (trimmedName === '.' || trimmedName === '..') {
+ throw new Error(t('files', '"{name}" is an invalid file name.', { name }))
+ } else if (trimmedName.length === 0) {
+ throw new Error(t('files', 'File name cannot be empty.'))
+ } else if (trimmedName.indexOf('/') !== -1) {
+ throw new Error(t('files', '"/" is not allowed inside a file name.'))
+ } else if (trimmedName.match(OC.config.blacklist_files_regex)) {
+ throw new Error(t('files', '"{name}" is not an allowed filetype.', { name }))
+ } else if (this.checkIfNodeExists(name)) {
+ throw new Error(t('files', '{newName} already exists.', { newName: name }))
+ }
+
+ const toCheck = trimmedName.split('')
+ toCheck.forEach(char => {
+ if (forbiddenCharacters.indexOf(char) !== -1) {
+ throw new Error(this.t('files', '"{char}" is not allowed inside a file name.', { char }))
+ }
+ })
+
+ return true
+ },
+ checkIfNodeExists(name) {
+ return this.nodes.find(node => node.basename === name && node !== this.source)
+ },
+
+ startRenaming() {
+ this.$nextTick(() => {
+ // Using split to get the true string length
+ const extLength = (this.source.extension || '').split('').length
+ const length = this.source.basename.split('').length - extLength
+ const input = this.$refs.renameInput?.$refs?.inputField?.$refs?.input
+ if (!input) {
+ logger.error('Could not find the rename input')
+ return
+ }
+ input.setSelectionRange(0, length)
+ input.focus()
+
+ // Trigger a keyup event to update the input validity
+ input.dispatchEvent(new Event('keyup'))
+ })
+ },
+ stopRenaming() {
+ if (!this.isRenaming) {
+ return
+ }
+
+ // Reset the renaming store
+ this.renamingStore.$reset()
+ },
+
+ // Rename and move the file
+ async onRename() {
+ const oldName = this.source.basename
+ const oldEncodedSource = this.source.encodedSource
+ const newName = this.newName.trim?.() || ''
+ if (newName === '') {
+ showError(t('files', 'Name cannot be empty'))
+ return
+ }
+
+ if (oldName === newName) {
+ this.stopRenaming()
+ return
+ }
+
+ // Checking if already exists
+ if (this.checkIfNodeExists(newName)) {
+ showError(t('files', 'Another entry with the same name already exists'))
+ return
+ }
+
+ // Set loading state
+ this.loading = 'renaming'
+ Vue.set(this.source, 'status', NodeStatus.LOADING)
+
+ // Update node
+ this.source.rename(newName)
+
+ logger.debug('Moving file to', { destination: this.source.encodedSource, oldEncodedSource })
+ try {
+ await axios({
+ method: 'MOVE',
+ url: oldEncodedSource,
+ headers: {
+ Destination: this.source.encodedSource,
+ },
+ })
+
+ // Success 🎉
+ emit('files:node:updated', this.source)
+ emit('files:node:renamed', this.source)
+ showSuccess(t('files', 'Renamed "{oldName}" to "{newName}"', { oldName, newName }))
+
+ // Reset the renaming store
+ this.stopRenaming()
+ this.$nextTick(() => {
+ this.$refs.basename.focus()
+ })
+ } catch (error) {
+ logger.error('Error while renaming file', { error })
+ this.source.rename(oldName)
+ this.$refs.renameInput.focus()
+
+ // TODO: 409 means current folder does not exist, redirect ?
+ if (error?.response?.status === 404) {
+ showError(t('files', 'Could not rename "{oldName}", it does not exist any more', { oldName }))
+ return
+ } else if (error?.response?.status === 412) {
+ showError(t('files', 'The name "{newName}" is already used in the folder "{dir}". Please choose a different name.', { newName, dir: this.currentDir }))
+ return
+ }
+
+ // Unknown error
+ showError(t('files', 'Could not rename "{oldName}"', { oldName }))
+ } finally {
+ this.loading = false
+ Vue.set(this.source, 'status', undefined)
+ }
+ },
+
+
+ t,
+ },
+})
+</script>
diff --git a/apps/files/src/components/FileEntry/FileEntryPreview.vue b/apps/files/src/components/FileEntry/FileEntryPreview.vue
new file mode 100644
index 00000000000..8a7af255ec2
--- /dev/null
+++ b/apps/files/src/components/FileEntry/FileEntryPreview.vue
@@ -0,0 +1,215 @@
+<!--
+ - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>
+ -
+ - @author John Molakvoæ <skjnldsv@protonmail.com>
+ -
+ - @license GNU AGPL version 3 or any later version
+ -
+ - This program is free software: you can redistribute it and/or modify
+ - it under the terms of the GNU Affero General Public License as
+ - published by the Free Software Foundation, either version 3 of the
+ - License, or (at your option) any later version.
+ -
+ - This program is distributed in the hope that it will be useful,
+ - but WITHOUT ANY WARRANTY; without even the implied warranty of
+ - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ - GNU Affero General Public License for more details.
+ -
+ - You should have received a copy of the GNU Affero General Public License
+ - along with this program. If not, see <http://www.gnu.org/licenses/>.
+ -
+ -->
+<template>
+ <span class="files-list__row-icon">
+ <template v-if="source.type === 'folder'">
+ <FolderOpenIcon v-once v-if="dragover" />
+ <template v-else>
+ <FolderIcon v-once />
+ <OverlayIcon :is="folderOverlay"
+ v-if="folderOverlay"
+ class="files-list__row-icon-overlay" />
+ </template>
+ </template>
+
+ <!-- Decorative image, should not be aria documented -->
+ <img v-else-if="previewUrl && backgroundFailed !== true"
+ ref="previewImg"
+ alt=""
+ class="files-list__row-icon-preview"
+ :class="{'files-list__row-icon-preview--loaded': backgroundFailed === false}"
+ :src="previewUrl"
+ @error="backgroundFailed = true"
+ @load="backgroundFailed = false">
+
+ <FileIcon v-once v-else />
+
+ <!-- Favorite icon -->
+ <span v-if="isFavorite"
+ class="files-list__row-icon-favorite"
+ :aria-label="t('files', 'Favorite')">
+ <FavoriteIcon v-once />
+ </span>
+ </span>
+</template>
+
+<script lang="ts">
+import type { UserConfig } from '../../types.ts'
+
+import { File, Folder, Node, FileType } from '@nextcloud/files'
+import { generateUrl } from '@nextcloud/router'
+import { translate as t } from '@nextcloud/l10n'
+import { Type as ShareType } from '@nextcloud/sharing'
+import Vue, { PropType } from 'vue'
+
+import AccountGroupIcon from 'vue-material-design-icons/AccountGroup.vue'
+import AccountPlusIcon from 'vue-material-design-icons/AccountPlus.vue'
+import FileIcon from 'vue-material-design-icons/File.vue'
+import FolderIcon from 'vue-material-design-icons/Folder.vue'
+import FolderOpenIcon from 'vue-material-design-icons/FolderOpen.vue'
+import KeyIcon from 'vue-material-design-icons/Key.vue'
+import LinkIcon from 'vue-material-design-icons/Link.vue'
+import NetworkIcon from 'vue-material-design-icons/Network.vue'
+import TagIcon from 'vue-material-design-icons/Tag.vue'
+
+import { useUserConfigStore } from '../../store/userconfig.ts'
+import FavoriteIcon from './FavoriteIcon.vue'
+
+export default Vue.extend({
+ name: 'FileEntryPreview',
+
+ components: {
+ AccountGroupIcon,
+ AccountPlusIcon,
+ FavoriteIcon,
+ FileIcon,
+ FolderIcon,
+ FolderOpenIcon,
+ KeyIcon,
+ LinkIcon,
+ NetworkIcon,
+ TagIcon,
+ },
+
+ props: {
+ source: {
+ type: Object as PropType<Node>,
+ required: true,
+ },
+ dragover: {
+ type: Boolean,
+ default: false,
+ },
+ gridMode: {
+ type: Boolean,
+ default: false,
+ },
+ },
+
+ setup() {
+ const userConfigStore = useUserConfigStore()
+ return {
+ userConfigStore,
+ }
+ },
+
+ data() {
+ return {
+ backgroundFailed: undefined as boolean | undefined,
+ }
+ },
+
+ computed: {
+ fileid() {
+ return this.source?.fileid?.toString?.()
+ },
+ isFavorite(): boolean {
+ return this.source.attributes.favorite === 1
+ },
+
+ userConfig(): UserConfig {
+ return this.userConfigStore.userConfig
+ },
+ cropPreviews(): boolean {
+ return this.userConfig.crop_image_previews === true
+ },
+
+ previewUrl() {
+ if (this.source.type === FileType.Folder) {
+ return null
+ }
+
+ if (this.backgroundFailed === true) {
+ return null
+ }
+
+ try {
+ const previewUrl = this.source.attributes.previewUrl
+ || generateUrl('/core/preview?fileId={fileid}', {
+ fileid: this.fileid,
+ })
+ const url = new URL(window.location.origin + previewUrl)
+
+ // Request tiny previews
+ url.searchParams.set('x', this.gridMode ? '128' : '32')
+ url.searchParams.set('y', this.gridMode ? '128' : '32')
+ url.searchParams.set('mimeFallback', 'true')
+
+ // Handle cropping
+ url.searchParams.set('a', this.cropPreviews === true ? '0' : '1')
+ return url.href
+ } catch (e) {
+ return null
+ }
+ },
+
+ folderOverlay() {
+ if (this.source.type !== FileType.Folder) {
+ return null
+ }
+
+ // Encrypted folders
+ if (this.source?.attributes?.['is-encrypted'] === 1) {
+ return KeyIcon
+ }
+
+ // System tags
+ if (this.source?.attributes?.['is-tag']) {
+ return TagIcon
+ }
+
+ // Link and mail shared folders
+ const shareTypes = Object.values(this.source?.attributes?.['share-types'] || {}).flat() as number[]
+ if (shareTypes.some(type => type === ShareType.SHARE_TYPE_LINK || type === ShareType.SHARE_TYPE_EMAIL)) {
+ return LinkIcon
+ }
+
+ // Shared folders
+ if (shareTypes.length > 0) {
+ return AccountPlusIcon
+ }
+
+ switch (this.source?.attributes?.['mount-type']) {
+ case 'external':
+ case 'external-session':
+ return NetworkIcon
+ case 'group':
+ return AccountGroupIcon
+ }
+
+ return null
+ },
+ },
+
+ methods: {
+ reset() {
+ // Reset background state
+ this.backgroundFailed = undefined
+ if (this.$refs.previewImg) {
+ this.$refs.previewImg.src = ''
+ }
+ },
+
+ t,
+ },
+})
+</script>
diff --git a/apps/files/src/components/FileEntryGrid.vue b/apps/files/src/components/FileEntryGrid.vue
new file mode 100644
index 00000000000..def818eea2f
--- /dev/null
+++ b/apps/files/src/components/FileEntryGrid.vue
@@ -0,0 +1,408 @@
+<!--
+ - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>
+ -
+ - @author John Molakvoæ <skjnldsv@protonmail.com>
+ -
+ - @license AGPL-3.0-or-later
+ -
+ - This program is free software: you can redistribute it and/or modify
+ - it under the terms of the GNU Affero General Public License as
+ - published by the Free Software Foundation, either version 3 of the
+ - License, or (at your option) any later version.
+ -
+ - This program is distributed in the hope that it will be useful,
+ - but WITHOUT ANY WARRANTY; without even the implied warranty of
+ - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ - GNU Affero General Public License for more details.
+ -
+ - You should have received a copy of the GNU Affero General Public License
+ - along with this program. If not, see <http://www.gnu.org/licenses/>.
+ -
+ -->
+
+<template>
+ <tr :class="{'files-list__row--active': isActive, 'files-list__row--dragover': dragover, 'files-list__row--loading': isLoading}"
+ data-cy-files-list-row
+ :data-cy-files-list-row-fileid="fileid"
+ :data-cy-files-list-row-name="source.basename"
+ :draggable="canDrag"
+ class="files-list__row"
+ @contextmenu="onRightClick"
+ @dragover="onDragOver"
+ @dragleave="onDragLeave"
+ @dragstart="onDragStart"
+ @dragend="onDragEnd"
+ @drop="onDrop">
+ <!-- Failed indicator -->
+ <span v-if="source.attributes.failed" class="files-list__row--failed" />
+
+ <!-- Checkbox -->
+ <FileEntryCheckbox :display-name="displayName"
+ :fileid="fileid"
+ :is-loading="isLoading"
+ :nodes="nodes" />
+
+ <!-- Link to file -->
+ <td class="files-list__row-name" data-cy-files-list-row-name>
+ <!-- Icon or preview -->
+ <FileEntryPreview ref="preview"
+ :dragover="dragover"
+ :grid-mode="true"
+ :source="source"
+ @click.native="execDefaultAction" />
+
+ <FileEntryName ref="name"
+ :display-name="displayName"
+ :extension="extension"
+ :files-list-width="filesListWidth"
+ :grid-mode="true"
+ :nodes="nodes"
+ :source="source"
+ @click="execDefaultAction" />
+ </td>
+
+ <!-- Actions -->
+ <FileEntryActions ref="actions"
+ :class="`files-list__row-actions-${uniqueId}`"
+ :files-list-width="filesListWidth"
+ :grid-mode="true"
+ :loading.sync="loading"
+ :opened.sync="openedMenu"
+ :source="source" />
+ </tr>
+</template>
+
+<script lang="ts">
+import type { PropType } from 'vue'
+
+import { extname, join } from 'path'
+import { FileType, Permission, Folder, File as NcFile, NodeStatus, Node, View } from '@nextcloud/files'
+import { getUploader } from '@nextcloud/upload'
+import { showError } from '@nextcloud/dialogs'
+import { translate as t } from '@nextcloud/l10n'
+import { vOnClickOutside } from '@vueuse/components'
+import Vue from 'vue'
+
+import { action as sidebarAction } from '../actions/sidebarAction.ts'
+import { getDragAndDropPreview } from '../utils/dragUtils.ts'
+import { handleCopyMoveNodeTo } from '../actions/moveOrCopyAction.ts'
+import { hashCode } from '../utils/hashUtils.ts'
+import { MoveCopyAction } from '../actions/moveOrCopyActionUtils.ts'
+import { useActionsMenuStore } from '../store/actionsmenu.ts'
+import { useDragAndDropStore } from '../store/dragging.ts'
+import { useFilesStore } from '../store/files.ts'
+import { useRenamingStore } from '../store/renaming.ts'
+import { useSelectionStore } from '../store/selection.ts'
+import FileEntryActions from './FileEntry/FileEntryActions.vue'
+import FileEntryCheckbox from './FileEntry/FileEntryCheckbox.vue'
+import FileEntryName from './FileEntry/FileEntryName.vue'
+import FileEntryPreview from './FileEntry/FileEntryPreview.vue'
+import logger from '../logger.js'
+
+Vue.directive('onClickOutside', vOnClickOutside)
+
+export default Vue.extend({
+ name: 'FileEntryGrid',
+
+ components: {
+ FileEntryActions,
+ FileEntryCheckbox,
+ FileEntryName,
+ FileEntryPreview,
+ },
+
+ inheritAttrs: false,
+ props: {
+ source: {
+ type: [Folder, NcFile, Node] as PropType<Node>,
+ required: true,
+ },
+ nodes: {
+ type: Array as PropType<Node[]>,
+ required: true,
+ },
+ filesListWidth: {
+ type: Number,
+ default: 0,
+ },
+ },
+
+ setup() {
+ const actionsMenuStore = useActionsMenuStore()
+ const draggingStore = useDragAndDropStore()
+ const filesStore = useFilesStore()
+ const renamingStore = useRenamingStore()
+ const selectionStore = useSelectionStore()
+ return {
+ actionsMenuStore,
+ draggingStore,
+ filesStore,
+ renamingStore,
+ selectionStore,
+ }
+ },
+
+ data() {
+ return {
+ loading: '',
+ dragover: false,
+ }
+ },
+
+ computed: {
+ currentView(): View {
+ return this.$navigation.active as View
+ },
+
+ currentDir() {
+ // Remove any trailing slash but leave root slash
+ return (this.$route?.query?.dir?.toString() || '/').replace(/^(.+)\/$/, '$1')
+ },
+ currentFileId() {
+ return this.$route.params?.fileid || this.$route.query?.fileid || null
+ },
+ fileid() {
+ return this.source?.fileid?.toString?.()
+ },
+ uniqueId() {
+ return hashCode(this.source.source)
+ },
+ isLoading() {
+ return this.source.status === NodeStatus.LOADING
+ },
+
+ extension() {
+ if (this.source.attributes?.displayName) {
+ return extname(this.source.attributes.displayName)
+ }
+ return this.source.extension || ''
+ },
+ displayName() {
+ const ext = this.extension
+ const name = (this.source.attributes.displayName
+ || this.source.basename)
+
+ // Strip extension from name if defined
+ return !ext ? name : name.slice(0, 0 - ext.length)
+ },
+
+ draggingFiles() {
+ return this.draggingStore.dragging
+ },
+ selectedFiles() {
+ return this.selectionStore.selected
+ },
+ isSelected() {
+ return this.selectedFiles.includes(this.fileid)
+ },
+
+ isRenaming() {
+ return this.renamingStore.renamingNode === this.source
+ },
+
+ isActive() {
+ return this.fileid === this.currentFileId?.toString?.()
+ },
+
+ canDrag() {
+ const canDrag = (node: Node): boolean => {
+ return (node?.permissions & Permission.UPDATE) !== 0
+ }
+
+ // If we're dragging a selection, we need to check all files
+ if (this.selectedFiles.length > 0) {
+ const nodes = this.selectedFiles.map(fileid => this.filesStore.getNode(fileid)) as Node[]
+ return nodes.every(canDrag)
+ }
+ return canDrag(this.source)
+ },
+
+ canDrop() {
+ if (this.source.type !== FileType.Folder) {
+ return false
+ }
+
+ // If the current folder is also being dragged, we can't drop it on itself
+ if (this.draggingFiles.includes(this.fileid)) {
+ return false
+ }
+
+ return (this.source.permissions & Permission.CREATE) !== 0
+ },
+
+ openedMenu: {
+ get() {
+ return this.actionsMenuStore.opened === this.uniqueId
+ },
+ set(opened) {
+ this.actionsMenuStore.opened = opened ? this.uniqueId : null
+ },
+ },
+ },
+
+ watch: {
+ /**
+ * When the source changes, reset the preview
+ * and fetch the new one.
+ */
+ source() {
+ this.resetState()
+ },
+ },
+
+ beforeDestroy() {
+ this.resetState()
+ },
+
+ methods: {
+ resetState() {
+ // Reset loading state
+ this.loading = ''
+
+ this.$refs.preview.reset()
+
+ // Close menu
+ this.openedMenu = false
+ },
+
+ // Open the actions menu on right click
+ onRightClick(event) {
+ // If already opened, fallback to default browser
+ if (this.openedMenu) {
+ return
+ }
+
+ // If the clicked row is in the selection, open global menu
+ const isMoreThanOneSelected = this.selectedFiles.length > 1
+ this.actionsMenuStore.opened = this.isSelected && isMoreThanOneSelected ? 'global' : this.uniqueId
+
+ // Prevent any browser defaults
+ event.preventDefault()
+ event.stopPropagation()
+ },
+
+ execDefaultAction(...args) {
+ this.$refs.actions.execDefaultAction(...args)
+ },
+
+ openDetailsIfAvailable(event) {
+ event.preventDefault()
+ event.stopPropagation()
+ if (sidebarAction?.enabled?.([this.source], this.currentView)) {
+ sidebarAction.exec(this.source, this.currentView, this.currentDir)
+ }
+ },
+
+ onDragOver(event: DragEvent) {
+ this.dragover = this.canDrop
+ if (!this.canDrop) {
+ event.dataTransfer.dropEffect = 'none'
+ return
+ }
+
+ // Handle copy/move drag and drop
+ if (event.ctrlKey) {
+ event.dataTransfer.dropEffect = 'copy'
+ } else {
+ event.dataTransfer.dropEffect = 'move'
+ }
+ },
+ onDragLeave(event: DragEvent) {
+ // Counter bubbling, make sure we're ending the drag
+ // only when we're leaving the current element
+ const currentTarget = event.currentTarget as HTMLElement
+ if (currentTarget?.contains(event.relatedTarget as HTMLElement)) {
+ return
+ }
+
+ this.dragover = false
+ },
+
+ async onDragStart(event: DragEvent) {
+ event.stopPropagation()
+ if (!this.canDrag) {
+ event.preventDefault()
+ event.stopPropagation()
+ return
+ }
+
+ logger.debug('Drag started')
+
+ // Reset any renaming
+ this.renamingStore.$reset()
+
+ // Dragging set of files, if we're dragging a file
+ // that is already selected, we use the entire selection
+ if (this.selectedFiles.includes(this.fileid)) {
+ this.draggingStore.set(this.selectedFiles)
+ } else {
+ this.draggingStore.set([this.fileid])
+ }
+
+ const nodes = this.draggingStore.dragging
+ .map(fileid => this.filesStore.getNode(fileid)) as Node[]
+
+ const image = await getDragAndDropPreview(nodes)
+ event.dataTransfer?.setDragImage(image, -10, -10)
+ },
+ onDragEnd() {
+ this.draggingStore.reset()
+ this.dragover = false
+ logger.debug('Drag ended')
+ },
+
+ async onDrop(event) {
+ event.preventDefault()
+ event.stopPropagation()
+
+ // If another button is pressed, cancel it
+ // This allows cancelling the drag with the right click
+ if (!this.canDrop || event.button !== 0) {
+ return
+ }
+
+ const isCopy = event.ctrlKey
+ this.dragover = false
+
+ logger.debug('Dropped', { event, selection: this.draggingFiles })
+
+ // Check whether we're uploading files
+ if (event.dataTransfer?.files?.length > 0) {
+ const uploader = getUploader()
+ event.dataTransfer.files.forEach((file: File) => {
+ uploader.upload(join(this.source.path, file.name), file)
+ })
+ logger.debug(`Uploading files to ${this.source.path}`)
+ return
+ }
+
+ const nodes = this.draggingFiles.map(fileid => this.filesStore.getNode(fileid)) as Node[]
+ nodes.forEach(async (node: Node) => {
+ Vue.set(node, 'status', NodeStatus.LOADING)
+ try {
+ // TODO: resolve potential conflicts prior and force overwrite
+ await handleCopyMoveNodeTo(node, this.source, isCopy ? MoveCopyAction.COPY : MoveCopyAction.MOVE)
+ } catch (error) {
+ logger.error('Error while moving file', { error })
+ if (isCopy) {
+ showError(t('files', 'Could not copy {file}. {message}', { file: node.basename, message: error.message || '' }))
+ } else {
+ showError(t('files', 'Could not move {file}. {message}', { file: node.basename, message: error.message || '' }))
+ }
+ } finally {
+ Vue.set(node, 'status', undefined)
+ }
+ })
+
+ // Reset selection after we dropped the files
+ // if the dropped files are within the selection
+ if (this.draggingFiles.some(fileid => this.selectedFiles.includes(fileid))) {
+ logger.debug('Dropped selection, resetting select store...')
+ this.selectionStore.reset()
+ }
+ },
+
+ t,
+ },
+})
+</script>
diff --git a/apps/files/src/components/FilesListFooter.vue b/apps/files/src/components/FilesListFooter.vue
deleted file mode 100644
index 3a89970a26d..00000000000
--- a/apps/files/src/components/FilesListFooter.vue
+++ /dev/null
@@ -1,175 +0,0 @@
-<!--
- - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>
- -
- - @author John Molakvoæ <skjnldsv@protonmail.com>
- -
- - @license GNU AGPL version 3 or any later version
- -
- - This program is free software: you can redistribute it and/or modify
- - it under the terms of the GNU Affero General Public License as
- - published by the Free Software Foundation, either version 3 of the
- - License, or (at your option) any later version.
- -
- - This program is distributed in the hope that it will be useful,
- - but WITHOUT ANY WARRANTY; without even the implied warranty of
- - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- - GNU Affero General Public License for more details.
- -
- - You should have received a copy of the GNU Affero General Public License
- - along with this program. If not, see <http://www.gnu.org/licenses/>.
- -
- -->
-<template>
- <tr>
- <th class="files-list__row-checkbox">
- <span class="hidden-visually">{{ t('files', 'Total rows summary') }}</span>
- </th>
-
- <!-- Link to file -->
- <td class="files-list__row-name">
- <!-- Icon or preview -->
- <span class="files-list__row-icon" />
-
- <!-- Summary -->
- <span>{{ summary }}</span>
- </td>
-
- <!-- Actions -->
- <td class="files-list__row-actions" />
-
- <!-- Size -->
- <td v-if="isSizeAvailable"
- class="files-list__column files-list__row-size">
- <span>{{ totalSize }}</span>
- </td>
-
- <!-- Mtime -->
- <td v-if="isMtimeAvailable"
- class="files-list__column files-list__row-mtime" />
-
- <!-- Custom views columns -->
- <th v-for="column in columns"
- :key="column.id"
- :class="classForColumn(column)">
- <span>{{ column.summary?.(nodes, currentView) }}</span>
- </th>
- </tr>
-</template>
-
-<script lang="ts">
-import Vue from 'vue'
-import { formatFileSize } from '@nextcloud/files'
-import { translate } from '@nextcloud/l10n'
-
-import { useFilesStore } from '../store/files.ts'
-import { usePathsStore } from '../store/paths.ts'
-
-export default Vue.extend({
- name: 'FilesListFooter',
-
- components: {
- },
-
- props: {
- isMtimeAvailable: {
- type: Boolean,
- default: false,
- },
- isSizeAvailable: {
- type: Boolean,
- default: false,
- },
- nodes: {
- type: Array,
- required: true,
- },
- summary: {
- type: String,
- default: '',
- },
- filesListWidth: {
- type: Number,
- default: 0,
- },
- },
-
- setup() {
- const pathsStore = usePathsStore()
- const filesStore = useFilesStore()
- return {
- filesStore,
- pathsStore,
- }
- },
-
- computed: {
- currentView() {
- return this.$navigation.active
- },
-
- dir() {
- // Remove any trailing slash but leave root slash
- return (this.$route?.query?.dir || '/').replace(/^(.+)\/$/, '$1')
- },
-
- currentFolder() {
- if (!this.currentView?.id) {
- return
- }
-
- if (this.dir === '/') {
- return this.filesStore.getRoot(this.currentView.id)
- }
- const fileId = this.pathsStore.getPath(this.currentView.id, this.dir)
- return this.filesStore.getNode(fileId)
- },
-
- columns() {
- // Hide columns if the list is too small
- if (this.filesListWidth < 512) {
- return []
- }
- return this.currentView?.columns || []
- },
-
- totalSize() {
- // If we have the size already, let's use it
- if (this.currentFolder?.size) {
- return formatFileSize(this.currentFolder.size, true)
- }
-
- // Otherwise let's compute it
- return formatFileSize(this.nodes.reduce((total, node) => total + node.size || 0, 0), true)
- },
- },
-
- methods: {
- classForColumn(column) {
- return {
- 'files-list__row-column-custom': true,
- [`files-list__row-${this.currentView.id}-${column.id}`]: true,
- }
- },
-
- t: translate,
- },
-})
-</script>
-
-<style scoped lang="scss">
-// Scoped row
-tr {
- padding-bottom: 300px;
- border-top: 1px solid var(--color-border);
- // Prevent hover effect on the whole row
- background-color: transparent !important;
- border-bottom: none !important;
-}
-
-td {
- user-select: none;
- // Make sure the cell colors don't apply to column headers
- color: var(--color-text-maxcontrast) !important;
-}
-
-</style>
diff --git a/apps/files/src/components/FilesListHeaderActions.vue b/apps/files/src/components/FilesListHeaderActions.vue
deleted file mode 100644
index dfe892af772..00000000000
--- a/apps/files/src/components/FilesListHeaderActions.vue
+++ /dev/null
@@ -1,226 +0,0 @@
-<!--
- - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>
- -
- - @author John Molakvoæ <skjnldsv@protonmail.com>
- -
- - @license GNU AGPL version 3 or any later version
- -
- - This program is free software: you can redistribute it and/or modify
- - it under the terms of the GNU Affero General Public License as
- - published by the Free Software Foundation, either version 3 of the
- - License, or (at your option) any later version.
- -
- - This program is distributed in the hope that it will be useful,
- - but WITHOUT ANY WARRANTY; without even the implied warranty of
- - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- - GNU Affero General Public License for more details.
- -
- - You should have received a copy of the GNU Affero General Public License
- - along with this program. If not, see <http://www.gnu.org/licenses/>.
- -
- -->
-<template>
- <th class="files-list__column files-list__row-actions-batch" colspan="2">
- <NcActions ref="actionsMenu"
- :disabled="!!loading || areSomeNodesLoading"
- :force-name="true"
- :inline="inlineActions"
- :menu-name="inlineActions <= 1 ? t('files', 'Actions') : null"
- :open.sync="openedMenu">
- <NcActionButton v-for="action in enabledActions"
- :key="action.id"
- :class="'files-list__row-actions-batch-' + action.id"
- @click="onActionClick(action)">
- <template #icon>
- <NcLoadingIcon v-if="loading === action.id" :size="18" />
- <CustomSvgIconRender v-else :svg="action.iconSvgInline(nodes, currentView)" />
- </template>
- {{ action.displayName(nodes, currentView) }}
- </NcActionButton>
- </NcActions>
- </th>
-</template>
-
-<script lang="ts">
-import { showError, showSuccess } from '@nextcloud/dialogs'
-import { translate } from '@nextcloud/l10n'
-import NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'
-import NcActions from '@nextcloud/vue/dist/Components/NcActions.js'
-import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'
-import Vue from 'vue'
-
-import { getFileActions, useActionsMenuStore } from '../store/actionsmenu.ts'
-import { useFilesStore } from '../store/files.ts'
-import { useSelectionStore } from '../store/selection.ts'
-import filesListWidthMixin from '../mixins/filesListWidth.ts'
-import CustomSvgIconRender from './CustomSvgIconRender.vue'
-import logger from '../logger.js'
-import { NodeStatus } from '@nextcloud/files'
-
-// The registered actions list
-const actions = getFileActions()
-
-export default Vue.extend({
- name: 'FilesListHeaderActions',
-
- components: {
- CustomSvgIconRender,
- NcActions,
- NcActionButton,
- NcLoadingIcon,
- },
-
- mixins: [
- filesListWidthMixin,
- ],
-
- props: {
- currentView: {
- type: Object,
- required: true,
- },
- selectedNodes: {
- type: Array,
- default: () => ([]),
- },
- },
-
- setup() {
- const actionsMenuStore = useActionsMenuStore()
- const filesStore = useFilesStore()
- const selectionStore = useSelectionStore()
- return {
- actionsMenuStore,
- filesStore,
- selectionStore,
- }
- },
-
- data() {
- return {
- loading: null,
- }
- },
-
- computed: {
- dir() {
- // Remove any trailing slash but leave root slash
- return (this.$route?.query?.dir || '/').replace(/^(.+)\/$/, '$1')
- },
- enabledActions() {
- return actions
- .filter(action => action.execBatch)
- .filter(action => !action.enabled || action.enabled(this.nodes, this.currentView))
- .sort((a, b) => (a.order || 0) - (b.order || 0))
- },
-
- nodes() {
- return this.selectedNodes
- .map(fileid => this.getNode(fileid))
- .filter(node => node)
- },
-
- areSomeNodesLoading() {
- return this.nodes.some(node => node.status === NodeStatus.LOADING)
- },
-
- openedMenu: {
- get() {
- return this.actionsMenuStore.opened === 'global'
- },
- set(opened) {
- this.actionsMenuStore.opened = opened ? 'global' : null
- },
- },
-
- inlineActions() {
- if (this.filesListWidth < 512) {
- return 0
- }
- if (this.filesListWidth < 768) {
- return 1
- }
- if (this.filesListWidth < 1024) {
- return 2
- }
- return 3
- },
- },
-
- methods: {
- /**
- * Get a cached note from the store
- *
- * @param {number} fileId the file id to get
- * @return {Folder|File}
- */
- getNode(fileId) {
- return this.filesStore.getNode(fileId)
- },
-
- async onActionClick(action) {
- const displayName = action.displayName(this.nodes, this.currentView)
- const selectionIds = this.selectedNodes
- try {
- // Set loading markers
- this.loading = action.id
- this.nodes.forEach(node => {
- Vue.set(node, 'status', NodeStatus.LOADING)
- })
-
- // Dispatch action execution
- const results = await action.execBatch(this.nodes, this.currentView, this.dir)
-
- // Check if all actions returned null
- if (!results.some(result => result !== null)) {
- // If the actions returned null, we stay silent
- this.selectionStore.reset()
- return
- }
-
- // Handle potential failures
- if (results.some(result => result === false)) {
- // Remove the failed ids from the selection
- const failedIds = selectionIds
- .filter((fileid, index) => results[index] === false)
- this.selectionStore.set(failedIds)
-
- showError(this.t('files', '"{displayName}" failed on some elements ', { displayName }))
- return
- }
-
- // Show success message and clear selection
- showSuccess(this.t('files', '"{displayName}" batch action executed successfully', { displayName }))
- this.selectionStore.reset()
- } catch (e) {
- logger.error('Error while executing action', { action, e })
- showError(this.t('files', '"{displayName}" action failed', { displayName }))
- } finally {
- // Remove loading markers
- this.loading = null
- this.nodes.forEach(node => {
- Vue.set(node, 'status', undefined)
- })
- }
- },
-
- t: translate,
- },
-})
-</script>
-
-<style scoped lang="scss">
-.files-list__row-actions-batch {
- flex: 1 1 100% !important;
-
- // Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged
- ::v-deep .button-vue__wrapper {
- width: 100%;
- span.button-vue__text {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- }
-}
-</style>
diff --git a/apps/files/src/components/FilesListHeaderButton.vue b/apps/files/src/components/FilesListHeaderButton.vue
deleted file mode 100644
index 9aac83a185d..00000000000
--- a/apps/files/src/components/FilesListHeaderButton.vue
+++ /dev/null
@@ -1,122 +0,0 @@
-<!--
- - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>
- -
- - @author John Molakvoæ <skjnldsv@protonmail.com>
- -
- - @license GNU AGPL version 3 or any later version
- -
- - This program is free software: you can redistribute it and/or modify
- - it under the terms of the GNU Affero General Public License as
- - published by the Free Software Foundation, either version 3 of the
- - License, or (at your option) any later version.
- -
- - This program is distributed in the hope that it will be useful,
- - but WITHOUT ANY WARRANTY; without even the implied warranty of
- - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- - GNU Affero General Public License for more details.
- -
- - You should have received a copy of the GNU Affero General Public License
- - along with this program. If not, see <http://www.gnu.org/licenses/>.
- -
- -->
-<template>
- <NcButton :aria-label="sortAriaLabel(name)"
- :class="{'files-list__column-sort-button--active': sortingMode === mode}"
- class="files-list__column-sort-button"
- type="tertiary"
- @click.stop.prevent="toggleSortBy(mode)">
- <!-- Sort icon before text as size is align right -->
- <MenuUp v-if="sortingMode !== mode || isAscSorting" slot="icon" />
- <MenuDown v-else slot="icon" />
- {{ name }}
- </NcButton>
-</template>
-
-<script lang="ts">
-import { translate } from '@nextcloud/l10n'
-import MenuDown from 'vue-material-design-icons/MenuDown.vue'
-import MenuUp from 'vue-material-design-icons/MenuUp.vue'
-import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
-import Vue from 'vue'
-
-import filesSortingMixin from '../mixins/filesSorting.ts'
-
-export default Vue.extend({
- name: 'FilesListHeaderButton',
-
- components: {
- MenuDown,
- MenuUp,
- NcButton,
- },
-
- mixins: [
- filesSortingMixin,
- ],
-
- props: {
- name: {
- type: String,
- required: true,
- },
- mode: {
- type: String,
- required: true,
- },
- },
-
- methods: {
- sortAriaLabel(column) {
- const direction = this.isAscSorting
- ? this.t('files', 'ascending')
- : this.t('files', 'descending')
- return this.t('files', 'Sort list by {column} ({direction})', {
- column,
- direction,
- })
- },
-
- t: translate,
- },
-})
-</script>
-
-<style lang="scss">
-.files-list__column-sort-button {
- // Compensate for cells margin
- margin: 0 calc(var(--cell-margin) * -1);
- // Reverse padding
- padding: 0 4px 0 16px !important;
-
- // Icon after text
- .button-vue__wrapper {
- flex-direction: row-reverse;
- // Take max inner width for text overflow ellipsis
- // Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged
- width: 100%;
- }
-
- .button-vue__icon {
- transition-timing-function: linear;
- transition-duration: .1s;
- transition-property: opacity;
- opacity: 0;
- }
-
- // Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged
- .button-vue__text {
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
- }
-
- &--active,
- &:hover,
- &:focus,
- &:active {
- .button-vue__icon {
- opacity: 1 !important;
- }
- }
-}
-</style>
diff --git a/apps/files/src/components/FilesListTableFooter.vue b/apps/files/src/components/FilesListTableFooter.vue
index 3e8f49deace..bca4604d57d 100644
--- a/apps/files/src/components/FilesListTableFooter.vue
+++ b/apps/files/src/components/FilesListTableFooter.vue
@@ -159,17 +159,16 @@ export default Vue.extend({
<style scoped lang="scss">
// Scoped row
tr {
- padding-bottom: 300px;
+ margin-bottom: 300px;
border-top: 1px solid var(--color-border);
// Prevent hover effect on the whole row
background-color: transparent !important;
border-bottom: none !important;
-}
-td {
- user-select: none;
- // Make sure the cell colors don't apply to column headers
- color: var(--color-text-maxcontrast) !important;
+ td {
+ user-select: none;
+ // Make sure the cell colors don't apply to column headers
+ color: var(--color-text-maxcontrast) !important;
+ }
}
-
</style>
diff --git a/apps/files/src/components/FilesListTableHeader.vue b/apps/files/src/components/FilesListTableHeader.vue
index 52060d2589e..e619acf0623 100644
--- a/apps/files/src/components/FilesListTableHeader.vue
+++ b/apps/files/src/components/FilesListTableHeader.vue
@@ -34,6 +34,7 @@
<template v-else>
<!-- Link to file -->
<th class="files-list__column files-list__row-name files-list__column--sortable"
+ :aria-sort="ariaSortForMode('basename')"
@click.stop.prevent="toggleSortBy('basename')">
<!-- Icon or preview -->
<span class="files-list__row-icon" />
@@ -48,21 +49,24 @@
<!-- Size -->
<th v-if="isSizeAvailable"
:class="{'files-list__column--sortable': isSizeAvailable}"
- class="files-list__column files-list__row-size">
+ class="files-list__column files-list__row-size"
+ :aria-sort="ariaSortForMode('size')">
<FilesListTableHeaderButton :name="t('files', 'Size')" mode="size" />
</th>
<!-- Mtime -->
<th v-if="isMtimeAvailable"
:class="{'files-list__column--sortable': isMtimeAvailable}"
- class="files-list__column files-list__row-mtime">
+ class="files-list__column files-list__row-mtime"
+ :aria-sort="ariaSortForMode('mtime')">
<FilesListTableHeaderButton :name="t('files', 'Modified')" mode="mtime" />
</th>
<!-- Custom views columns -->
<th v-for="column in columns"
:key="column.id"
- :class="classForColumn(column)">
+ :class="classForColumn(column)"
+ :aria-sort="ariaSortForMode(column.id)">
<FilesListTableHeaderButton v-if="!!column.sort" :name="column.title" :mode="column.id" />
<span v-else>
{{ column.title }}
@@ -173,6 +177,13 @@ export default Vue.extend({
},
methods: {
+ ariaSortForMode(mode: string): ARIAMixin['ariaSort'] {
+ if (this.sortingMode === mode) {
+ return this.isAscSorting ? 'ascending' : 'descending'
+ }
+ return null
+ },
+
classForColumn(column) {
return {
'files-list__column': true,
diff --git a/apps/files/src/components/FilesListTableHeaderActions.vue b/apps/files/src/components/FilesListTableHeaderActions.vue
index e5247fb4b94..3b364a0b83d 100644
--- a/apps/files/src/components/FilesListTableHeaderActions.vue
+++ b/apps/files/src/components/FilesListTableHeaderActions.vue
@@ -33,7 +33,7 @@
@click="onActionClick(action)">
<template #icon>
<NcLoadingIcon v-if="loading === action.id" :size="18" />
- <CustomSvgIconRender v-else :svg="action.iconSvgInline(nodes, currentView)" />
+ <NcIconSvgWrapper v-else :svg="action.iconSvgInline(nodes, currentView)" />
</template>
{{ action.displayName(nodes, currentView) }}
</NcActionButton>
@@ -47,6 +47,7 @@ import { showError, showSuccess } from '@nextcloud/dialogs'
import { translate } from '@nextcloud/l10n'
import NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'
import NcActions from '@nextcloud/vue/dist/Components/NcActions.js'
+import NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'
import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'
import Vue from 'vue'
@@ -54,7 +55,6 @@ import { useActionsMenuStore } from '../store/actionsmenu.ts'
import { useFilesStore } from '../store/files.ts'
import { useSelectionStore } from '../store/selection.ts'
import filesListWidthMixin from '../mixins/filesListWidth.ts'
-import CustomSvgIconRender from './CustomSvgIconRender.vue'
import logger from '../logger.js'
// The registered actions list
@@ -64,9 +64,9 @@ export default Vue.extend({
name: 'FilesListTableHeaderActions',
components: {
- CustomSvgIconRender,
NcActions,
NcActionButton,
+ NcIconSvgWrapper,
NcLoadingIcon,
},
diff --git a/apps/files/src/components/FilesListTableHeaderButton.vue b/apps/files/src/components/FilesListTableHeaderButton.vue
index ebd1abb4314..659aee8e456 100644
--- a/apps/files/src/components/FilesListTableHeaderButton.vue
+++ b/apps/files/src/components/FilesListTableHeaderButton.vue
@@ -22,6 +22,7 @@
<template>
<NcButton :aria-label="sortAriaLabel(name)"
:class="{'files-list__column-sort-button--active': sortingMode === mode}"
+ :alignment="mode !== 'size' ? 'start-reverse' : undefined"
class="files-list__column-sort-button"
type="tertiary"
@click.stop.prevent="toggleSortBy(mode)">
@@ -67,12 +68,8 @@ export default Vue.extend({
methods: {
sortAriaLabel(column) {
- const direction = this.isAscSorting
- ? this.t('files', 'ascending')
- : this.t('files', 'descending')
- return this.t('files', 'Sort list by {column} ({direction})', {
+ return this.t('files', 'Sort list by {column}', {
column,
- direction,
})
},
@@ -85,16 +82,6 @@ export default Vue.extend({
.files-list__column-sort-button {
// Compensate for cells margin
margin: 0 calc(var(--cell-margin) * -1);
- // Reverse padding
- padding: 0 4px 0 16px !important;
-
- // Icon after text
- .button-vue__wrapper {
- flex-direction: row-reverse;
- // Take max inner width for text overflow ellipsis
- // Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged
- width: 100%;
- }
.button-vue__icon {
transition-timing-function: linear;
diff --git a/apps/files/src/components/FilesListVirtual.vue b/apps/files/src/components/FilesListVirtual.vue
index 9a55b9cdde4..7ada3e705ee 100644
--- a/apps/files/src/components/FilesListVirtual.vue
+++ b/apps/files/src/components/FilesListVirtual.vue
@@ -20,63 +20,80 @@
-
-->
<template>
- <VirtualList :data-component="FileEntry"
- :data-key="'source'"
- :data-sources="nodes"
- :item-height="56"
- :extra-props="{
- isMtimeAvailable,
- isSizeAvailable,
- nodes,
- filesListWidth,
- }"
- :scroll-to-index="scrollToIndex">
- <!-- Accessibility description and headers -->
- <template #before>
- <!-- Accessibility description -->
- <caption class="hidden-visually">
- {{ currentView.caption || t('files', 'List of files and folders.') }}
- {{ t('files', 'This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list.') }}
- </caption>
-
- <!-- Headers -->
- <FilesListHeader v-for="header in sortedHeaders"
- :key="header.id"
- :current-folder="currentFolder"
- :current-view="currentView"
- :header="header" />
- </template>
-
- <!-- Thead-->
- <template #header>
- <FilesListTableHeader :files-list-width="filesListWidth"
- :is-mtime-available="isMtimeAvailable"
- :is-size-available="isSizeAvailable"
- :nodes="nodes" />
- </template>
-
- <!-- Tfoot-->
- <template #footer>
- <FilesListTableFooter :files-list-width="filesListWidth"
- :is-mtime-available="isMtimeAvailable"
- :is-size-available="isSizeAvailable"
- :nodes="nodes"
- :summary="summary" />
- </template>
- </VirtualList>
+ <Fragment>
+ <!-- Drag and drop notice -->
+ <DragAndDropNotice v-if="canUpload && filesListWidth >= 512"
+ :current-folder="currentFolder"
+ :dragover.sync="dragover"
+ :style="{ height: dndNoticeHeight }" />
+
+ <VirtualList ref="table"
+ :data-component="userConfig.grid_view ? FileEntryGrid : FileEntry"
+ :data-key="'source'"
+ :data-sources="nodes"
+ :grid-mode="userConfig.grid_view"
+ :extra-props="{
+ isMtimeAvailable,
+ isSizeAvailable,
+ nodes,
+ filesListWidth,
+ }"
+ :scroll-to-index="scrollToIndex"
+ @scroll="onScroll">
+ <!-- Accessibility description and headers -->
+ <template #before>
+ <!-- Accessibility description -->
+ <caption class="hidden-visually">
+ {{ currentView.caption || t('files', 'List of files and folders.') }}
+ {{ t('files', 'This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list.') }}
+ </caption>
+
+ <!-- Headers -->
+ <FilesListHeader v-for="header in sortedHeaders"
+ :key="header.id"
+ :current-folder="currentFolder"
+ :current-view="currentView"
+ :header="header" />
+ </template>
+
+ <!-- Thead-->
+ <template #header>
+ <!-- Table header and sort buttons -->
+ <FilesListTableHeader ref="thead"
+ :files-list-width="filesListWidth"
+ :is-mtime-available="isMtimeAvailable"
+ :is-size-available="isSizeAvailable"
+ :nodes="nodes" />
+ </template>
+
+ <!-- Tfoot-->
+ <template #footer>
+ <FilesListTableFooter :files-list-width="filesListWidth"
+ :is-mtime-available="isMtimeAvailable"
+ :is-size-available="isSizeAvailable"
+ :nodes="nodes"
+ :summary="summary" />
+ </template>
+ </VirtualList>
+ </Fragment>
</template>
<script lang="ts">
+import type { Node as NcNode } from '@nextcloud/files'
import type { PropType } from 'vue'
-import type { Node } from '@nextcloud/files'
+import type { UserConfig } from '../types.ts'
-import { translate as t, translatePlural as n } from '@nextcloud/l10n'
-import { getFileListHeaders, Folder, View } from '@nextcloud/files'
+import { Fragment } from 'vue-frag'
+import { getFileListHeaders, Folder, View, Permission } from '@nextcloud/files'
import { showError } from '@nextcloud/dialogs'
+import { translate as t, translatePlural as n } from '@nextcloud/l10n'
import Vue from 'vue'
import { action as sidebarAction } from '../actions/sidebarAction.ts'
+import { useUserConfigStore } from '../store/userconfig.ts'
+import DragAndDropNotice from './DragAndDropNotice.vue'
import FileEntry from './FileEntry.vue'
+import FileEntryGrid from './FileEntryGrid.vue'
import FilesListHeader from './FilesListHeader.vue'
import FilesListTableFooter from './FilesListTableFooter.vue'
import FilesListTableHeader from './FilesListTableHeader.vue'
@@ -88,9 +105,11 @@ export default Vue.extend({
name: 'FilesListVirtual',
components: {
+ DragAndDropNotice,
FilesListHeader,
- FilesListTableHeader,
FilesListTableFooter,
+ FilesListTableHeader,
+ Fragment,
VirtualList,
},
@@ -108,26 +127,40 @@ export default Vue.extend({
required: true,
},
nodes: {
- type: Array as PropType<Node[]>,
+ type: Array as PropType<NcNode[]>,
required: true,
},
},
+ setup() {
+ const userConfigStore = useUserConfigStore()
+ return {
+ userConfigStore,
+ }
+ },
+
data() {
return {
FileEntry,
+ FileEntryGrid,
headers: getFileListHeaders(),
scrollToIndex: 0,
+ dragover: false,
+ dndNoticeHeight: 0,
}
},
computed: {
+ userConfig(): UserConfig {
+ return this.userConfigStore.userConfig
+ },
+
files() {
return this.nodes.filter(node => node.type === 'file')
},
fileId() {
- return parseInt(this.$route.params.fileid || this.$route.query.fileid) || null
+ return parseInt(this.$route.params.fileid) || null
},
summaryFile() {
@@ -163,40 +196,99 @@ export default Vue.extend({
return [...this.headers].sort((a, b) => a.order - b.order)
},
+
+ canUpload() {
+ return this.currentFolder && (this.currentFolder.permissions & Permission.CREATE) !== 0
+ },
+ },
+
+ watch: {
+ fileId(fileId) {
+ this.scrollToFile(fileId, false)
+ },
},
mounted() {
- // Scroll to the file if it's in the url
- if (this.fileId) {
- const index = this.nodes.findIndex(node => node.fileid === this.fileId)
- if (index === -1 && this.fileId !== this.currentFolder.fileid) {
- showError(this.t('files', 'File not found'))
- }
- this.scrollToIndex = Math.max(0, index)
- }
+ // Add events on parent to cover both the table and DragAndDrop notice
+ const mainContent = window.document.querySelector('main.app-content') as HTMLElement
+ mainContent.addEventListener('dragover', this.onDragOver)
+ mainContent.addEventListener('dragleave', this.onDragLeave)
+
+ this.scrollToFile(this.fileId)
+ this.openSidebarForFile(this.fileId)
+ },
+ methods: {
// Open the file sidebar if we have the room for it
- if (document.documentElement.clientWidth > 1024) {
- // Don't open the sidebar for the current folder
- if (this.currentFolder.fileid === this.fileId) {
- return
+ // but don't open the sidebar for the current folder
+ openSidebarForFile(fileId) {
+ if (document.documentElement.clientWidth > 1024 && this.currentFolder.fileid !== fileId) {
+ // Open the sidebar for the given URL fileid
+ // iif we just loaded the app.
+ const node = this.nodes.find(n => n.fileid === fileId) as NcNode
+ if (node && sidebarAction?.enabled?.([node], this.currentView)) {
+ logger.debug('Opening sidebar on file ' + node.path, { node })
+ sidebarAction.exec(node, this.currentView, this.currentFolder.path)
+ }
}
+ },
- // Open the sidebar for the given URL fileid
- // iif we just loaded the app.
- const node = this.nodes.find(n => n.fileid === this.fileId) as Node
- if (node && sidebarAction?.enabled?.([node], this.currentView)) {
- logger.debug('Opening sidebar on file ' + node.path, { node })
- sidebarAction.exec(node, this.currentView, this.currentFolder.path)
+ scrollToFile(fileId: number, warn = true) {
+ if (fileId) {
+ const index = this.nodes.findIndex(node => node.fileid === fileId)
+ if (warn && index === -1 && fileId !== this.currentFolder.fileid) {
+ showError(this.t('files', 'File not found'))
+ }
+ this.scrollToIndex = Math.max(0, index)
}
- }
- },
+ },
- methods: {
getFileId(node) {
return node.fileid
},
+ onDragOver(event: DragEvent) {
+ // Detect if we're only dragging existing files or not
+ const isForeignFile = event.dataTransfer?.types.includes('Files')
+ if (isForeignFile) {
+ this.dragover = true
+ } else {
+ this.dragover = false
+ }
+
+ event.preventDefault()
+ event.stopPropagation()
+
+ const tableTop = this.$refs.table.$el.getBoundingClientRect().top
+ const tableBottom = tableTop + this.$refs.table.$el.getBoundingClientRect().height
+
+ // If reaching top, scroll up. Using 100 because of the floating header
+ if (event.clientY < tableTop + 100) {
+ this.$refs.table.$el.scrollTop = this.$refs.table.$el.scrollTop - 25
+ return
+ }
+
+ // If reaching bottom, scroll down
+ if (event.clientY > tableBottom - 50) {
+ this.$refs.table.$el.scrollTop = this.$refs.table.$el.scrollTop + 25
+ }
+ },
+ onDragLeave(event: DragEvent) {
+ // Counter bubbling, make sure we're ending the drag
+ // only when we're leaving the current element
+ const currentTarget = event.currentTarget as HTMLElement
+ if (currentTarget?.contains(event.relatedTarget as HTMLElement)) {
+ return
+ }
+
+ this.dragover = false
+ },
+
+ onScroll() {
+ // Update the sticky position of the thead to adapt to the scroll
+ this.dndNoticeHeight = (this.$refs.thead.$el?.getBoundingClientRect?.()?.top ?? 0) + 'px'
+ },
+
t,
},
})
@@ -215,15 +307,27 @@ export default Vue.extend({
display: block;
overflow: auto;
height: 100%;
+ will-change: scroll-position;
&::v-deep {
// Table head, body and footer
tbody {
+ will-change: padding;
+ contain: layout paint style;
display: flex;
flex-direction: column;
width: 100%;
// Necessary for virtual scrolling absolute
position: relative;
+
+ /* Hover effect on tbody lines only */
+ tr {
+ contain: strict;
+ &:hover,
+ &:focus {
+ background-color: var(--color-background-dark);
+ }
+ }
}
// Before table and thead
@@ -232,6 +336,15 @@ export default Vue.extend({
flex-direction: column;
}
+ .files-list__thead,
+ .files-list__tfoot {
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ background-color: var(--color-main-background);
+
+ }
+
// Table header
.files-list__thead {
// Pinned on top when scrolling
@@ -240,12 +353,9 @@ export default Vue.extend({
top: 0;
}
- .files-list__thead,
+ // Table footer
.files-list__tfoot {
- display: flex;
- width: 100%;
- background-color: var(--color-main-background);
-
+ min-height: 300px;
}
tr {
@@ -255,7 +365,9 @@ export default Vue.extend({
width: 100%;
user-select: none;
border-bottom: 1px solid var(--color-border);
+ box-sizing: border-box;
user-select: none;
+ height: var(--row-height);
}
td, th {
@@ -316,7 +428,11 @@ export default Vue.extend({
.files-list__row {
&:hover, &:focus, &:active, &--active, &--dragover {
- background-color: var(--color-background-dark);
+ // WCAG AA compliant
+ background-color: var(--color-background-hover);
+ // text-maxcontrast have been designed to pass WCAG AA over
+ // a white background, we need to adjust then.
+ --color-text-maxcontrast: var(--color-main-text);
> * {
--color-border: var(--color-border-dark);
}
@@ -377,10 +493,15 @@ export default Vue.extend({
width: var(--icon-preview-size);
height: var(--icon-preview-size);
border-radius: var(--border-radius);
- background-repeat: no-repeat;
// Center and contain the preview
- background-position: center;
- background-size: contain;
+ object-fit: contain;
+ object-position: center;
+
+ /* Preview not loaded animation effect */
+ &:not(.files-list__row-icon-preview--loaded) {
+ background: var(--color-loading-dark);
+ // animation: preview-gradient-fade 1.2s ease-in-out infinite;
+ }
}
&-favorite {
@@ -388,6 +509,16 @@ export default Vue.extend({
top: 0px;
right: -10px;
}
+
+ // Folder overlay
+ &-overlay {
+ position: absolute;
+ max-height: calc(var(--icon-preview-size) * 0.5);
+ max-width: calc(var(--icon-preview-size) * 0.5);
+ color: var(--color-main-background);
+ // better alignment with the folder icon
+ margin-top: 2px;
+ }
}
// Entry link
@@ -430,6 +561,8 @@ export default Vue.extend({
.files-list__row-name-ext {
color: var(--color-text-maxcontrast);
+ // always show the extension
+ overflow: visible;
}
}
@@ -453,6 +586,7 @@ export default Vue.extend({
}
.files-list__row-actions {
+ // take as much space as necessary
width: auto;
// Add margin to all cells after the actions
@@ -475,19 +609,12 @@ export default Vue.extend({
.files-list__row-mtime,
.files-list__row-size {
- // Right align text
- justify-content: flex-end;
+ color: var(--color-text-maxcontrast);
+ }
+ .files-list__row-size {
width: calc(var(--row-height) * 1.5);
- // opacity varies with the size
- color: var(--color-main-text);
-
- // Icon is before text since size is right aligned
- .files-list__column-sort-button {
- padding: 0 16px 0 4px !important;
- .button-vue__wrapper {
- flex-direction: row;
- }
- }
+ // Right align content/text
+ justify-content: flex-end;
}
.files-list__row-mtime {
@@ -500,3 +627,91 @@ export default Vue.extend({
}
}
</style>
+
+<style lang="scss">
+// Grid mode
+tbody.files-list__tbody.files-list__tbody--grid {
+ --half-clickable-area: calc(var(--clickable-area) / 2);
+ --row-width: 160px;
+ // We use half of the clickable area as visual balance margin
+ --row-height: calc(var(--row-width) - var(--half-clickable-area));
+ --icon-preview-size: calc(var(--row-width) - var(--clickable-area));
+ --checkbox-padding: 0px;
+
+ display: grid;
+ grid-template-columns: repeat(auto-fill, var(--row-width));
+ grid-gap: 15px;
+ row-gap: 15px;
+
+ align-content: center;
+ align-items: center;
+ justify-content: space-around;
+ justify-items: center;
+
+ tr {
+ width: var(--row-width);
+ height: calc(var(--row-height) + var(--clickable-area));
+ border: none;
+ border-radius: var(--border-radius);
+ }
+
+ // Checkbox in the top left
+ .files-list__row-checkbox {
+ position: absolute;
+ z-index: 9;
+ top: 0;
+ left: 0;
+ overflow: hidden;
+ width: var(--clickable-area);
+ height: var(--clickable-area);
+ border-radius: var(--half-clickable-area);
+ }
+
+ // Star icon in the top right
+ .files-list__row-icon-favorite {
+ position: absolute;
+ top: 0;
+ right: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: var(--clickable-area);
+ height: var(--clickable-area);
+ }
+
+ .files-list__row-name {
+ display: grid;
+ justify-content: stretch;
+ width: 100%;
+ height: 100%;
+ grid-auto-rows: var(--row-height) var(--clickable-area);
+
+ span.files-list__row-icon {
+ width: 100%;
+ height: 100%;
+ // Visual balance, we use half of the clickable area
+ // as a margin around the preview
+ padding-top: var(--half-clickable-area);
+ }
+
+ a.files-list__row-name-link {
+ // Minus action menu
+ width: calc(100% - var(--clickable-area));
+ height: var(--clickable-area);
+ }
+
+ .files-list__row-name-text {
+ margin: 0;
+ padding-right: 0;
+ }
+ }
+
+ .files-list__row-actions {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ width: var(--clickable-area);
+ height: var(--clickable-area);
+ }
+}
+</style>
diff --git a/apps/files/src/components/NavigationQuota.vue b/apps/files/src/components/NavigationQuota.vue
index 4a877049fa8..25bdcde1b45 100644
--- a/apps/files/src/components/NavigationQuota.vue
+++ b/apps/files/src/components/NavigationQuota.vue
@@ -51,8 +51,8 @@ export default {
computed: {
storageStatsTitle() {
- const usedQuotaByte = formatFileSize(this.storageStats?.used)
- const quotaByte = formatFileSize(this.storageStats?.quota)
+ const usedQuotaByte = formatFileSize(this.storageStats?.used, false, false)
+ const quotaByte = formatFileSize(this.storageStats?.quota, false, false)
// If no quota set
if (this.storageStats?.quota < 0) {
diff --git a/apps/files/src/components/TransferOwnershipDialogue.vue b/apps/files/src/components/TransferOwnershipDialogue.vue
index 037c4fd4f68..66043220223 100644
--- a/apps/files/src/components/TransferOwnershipDialogue.vue
+++ b/apps/files/src/components/TransferOwnershipDialogue.vue
@@ -25,7 +25,9 @@
<form @submit.prevent="submit">
<p class="transfer-select-row">
<span>{{ readableDirectory }}</span>
- <NcButton v-if="directory === undefined" @click.prevent="start">
+ <NcButton v-if="directory === undefined"
+ class="transfer-select-row__choose_button"
+ @click.prevent="start">
{{ t('files', 'Choose file or folder to transfer') }}
</NcButton>
<NcButton v-else @click.prevent="start">
@@ -225,10 +227,12 @@ p {
}
.new-owner-row {
display: flex;
+ flex-wrap: wrap;
label {
display: flex;
align-items: center;
+ margin-bottom: calc(var(--default-grid-baseline) * 2);
span {
margin-right: 8px;
@@ -244,5 +248,9 @@ p {
span {
margin-right: 8px;
}
+
+ &__choose_button {
+ width: min(100%, 400px) !important;
+ }
}
</style>
diff --git a/apps/files/src/components/VirtualList.vue b/apps/files/src/components/VirtualList.vue
index 511053b2fa1..a579cfcc8f3 100644
--- a/apps/files/src/components/VirtualList.vue
+++ b/apps/files/src/components/VirtualList.vue
@@ -11,11 +11,13 @@
</thead>
<!-- Body -->
- <tbody :style="tbodyStyle" class="files-list__tbody" data-cy-files-list-tbody>
+ <tbody :style="tbodyStyle"
+ class="files-list__tbody"
+ :class="gridMode ? 'files-list__tbody--grid' : 'files-list__tbody--list'"
+ data-cy-files-list-tbody>
<component :is="dataComponent"
- v-for="(item, i) in renderedItems"
- :key="i"
- :visible="(i >= bufferItems || index <= bufferItems) && (i < shownItems - bufferItems)"
+ v-for="({key, item}, i) in renderedItems"
+ :key="key"
:source="item"
:index="i"
v-bind="extraProps" />
@@ -23,7 +25,6 @@
<!-- Footer -->
<tfoot v-show="isReady"
- ref="tfoot"
class="files-list__tfoot"
data-cy-files-list-tfoot>
<slot name="footer" />
@@ -32,16 +33,23 @@
</template>
<script lang="ts">
-import { File, Folder, debounce } from 'debounce'
-import Vue from 'vue'
+import type { File, Folder, Node } from '@nextcloud/files'
+import { debounce } from 'debounce'
+import Vue, { PropType } from 'vue'
+
+import filesListWidthMixin from '../mixins/filesListWidth.ts'
import logger from '../logger.js'
-// Items to render before and after the visible area
-const bufferItems = 3
+interface RecycledPoolItem {
+ key: string,
+ item: Node,
+}
export default Vue.extend({
name: 'VirtualList',
+ mixins: [filesListWidthMixin],
+
props: {
dataComponent: {
type: [Object, Function],
@@ -52,26 +60,25 @@ export default Vue.extend({
required: true,
},
dataSources: {
- type: Array as () => (File | Folder)[],
- required: true,
- },
- itemHeight: {
- type: Number,
+ type: Array as PropType<(File | Folder)[]>,
required: true,
},
extraProps: {
- type: Object,
+ type: Object as PropType<Record<string, unknown>>,
default: () => ({}),
},
scrollToIndex: {
type: Number,
default: 0,
},
+ gridMode: {
+ type: Boolean,
+ default: false,
+ },
},
data() {
return {
- bufferItems,
index: this.scrollToIndex,
beforeHeight: 0,
headerHeight: 0,
@@ -86,60 +93,126 @@ export default Vue.extend({
return this.tableHeight > 0
},
+ // Items to render before and after the visible area
+ bufferItems() {
+ if (this.gridMode) {
+ return this.columnCount
+ }
+ return 3
+ },
+
+ itemHeight() {
+ // Align with css in FilesListVirtual
+ // 138px + 44px (name) + 15px (grid gap)
+ return this.gridMode ? (138 + 44 + 15) : 55
+ },
+ // Grid mode only
+ itemWidth() {
+ // 160px + 15px grid gap
+ return 160 + 15
+ },
+
+ rowCount() {
+ return Math.ceil((this.tableHeight - this.headerHeight) / this.itemHeight) + (this.bufferItems / this.columnCount) * 2 + 1
+ },
+ columnCount() {
+ if (!this.gridMode) {
+ return 1
+ }
+ return Math.floor(this.filesListWidth / this.itemWidth)
+ },
+
startIndex() {
- return Math.max(0, this.index - bufferItems)
+ return Math.max(0, this.index - this.bufferItems)
},
shownItems() {
- return Math.ceil((this.tableHeight - this.headerHeight) / this.itemHeight) + bufferItems * 2
+ // If in grid mode, we need to multiply the number of rows by the number of columns
+ if (this.gridMode) {
+ return this.rowCount * this.columnCount
+ }
+
+ return this.rowCount
},
- renderedItems(): (File | Folder)[] {
+ renderedItems(): RecycledPoolItem[] {
if (!this.isReady) {
return []
}
- return this.dataSources.slice(this.startIndex, this.startIndex + this.shownItems)
+
+ const items = this.dataSources.slice(this.startIndex, this.startIndex + this.shownItems) as Node[]
+
+ const oldItems = items.filter(item => Object.values(this.$_recycledPool).includes(item[this.dataKey]))
+ const oldItemsKeys = oldItems.map(item => item[this.dataKey] as string)
+ const unusedKeys = Object.keys(this.$_recycledPool).filter(key => !oldItemsKeys.includes(this.$_recycledPool[key]))
+
+ return items.map(item => {
+ const index = Object.values(this.$_recycledPool).indexOf(item[this.dataKey])
+ // If defined, let's keep the key
+ if (index !== -1) {
+ return {
+ key: Object.keys(this.$_recycledPool)[index],
+ item,
+ }
+ }
+
+ // Get and consume reusable key or generate a new one
+ const key = unusedKeys.pop() || Math.random().toString(36).substr(2)
+ this.$_recycledPool[key] = item[this.dataKey]
+ return { key, item }
+ })
},
tbodyStyle() {
- const isOverScrolled = this.startIndex + this.shownItems > this.dataSources.length
+ const isOverScrolled = this.startIndex + this.rowCount > this.dataSources.length
const lastIndex = this.dataSources.length - this.startIndex - this.shownItems
- const hiddenAfterItems = Math.min(this.dataSources.length - this.startIndex, lastIndex)
+ const hiddenAfterItems = Math.floor(Math.min(this.dataSources.length - this.startIndex, lastIndex) / this.columnCount)
return {
- paddingTop: `${this.startIndex * this.itemHeight}px`,
+ paddingTop: `${Math.floor(this.startIndex / this.columnCount) * this.itemHeight}px`,
paddingBottom: isOverScrolled ? 0 : `${hiddenAfterItems * this.itemHeight}px`,
}
},
},
watch: {
- scrollToIndex() {
- this.index = this.scrollToIndex
- this.$el.scrollTop = this.index * this.itemHeight + this.beforeHeight
+ scrollToIndex(index) {
+ this.scrollTo(index)
+ },
+ columnCount(columnCount, oldColumnCount) {
+ if (oldColumnCount === 0) {
+ // We're initializing, the scroll position
+ // is handled on mounted
+ console.debug('VirtualList: columnCount is 0, skipping scroll')
+ return
+ }
+ // If the column count changes in grid view,
+ // update the scroll position again
+ this.scrollTo(this.index)
},
},
mounted() {
const before = this.$refs?.before as HTMLElement
const root = this.$el as HTMLElement
- const tfoot = this.$refs?.tfoot as HTMLElement
const thead = this.$refs?.thead as HTMLElement
this.resizeObserver = new ResizeObserver(debounce(() => {
this.beforeHeight = before?.clientHeight ?? 0
this.headerHeight = thead?.clientHeight ?? 0
this.tableHeight = root?.clientHeight ?? 0
- logger.debug('VirtualList resizeObserver updated')
+ logger.debug('VirtualList: resizeObserver updated')
this.onScroll()
}, 100, false))
this.resizeObserver.observe(before)
this.resizeObserver.observe(root)
- this.resizeObserver.observe(tfoot)
this.resizeObserver.observe(thead)
- this.$el.addEventListener('scroll', this.onScroll)
-
if (this.scrollToIndex) {
- this.$el.scrollTop = this.index * this.itemHeight + this.beforeHeight
+ this.scrollTo(this.scrollToIndex)
}
+
+ // Adding scroll listener AFTER the initial scroll to index
+ this.$el.addEventListener('scroll', this.onScroll, { passive: true })
+
+ this.$_recycledPool = {} as Record<string, any>
},
beforeDestroy() {
@@ -149,14 +222,24 @@ export default Vue.extend({
},
methods: {
+ scrollTo(index: number) {
+ this.index = index
+ // Scroll to one row and a half before the index
+ const scrollTop = (Math.floor(index / this.columnCount) - 0.5) * this.itemHeight + this.beforeHeight
+ logger.debug('VirtualList: scrolling to index ' + index, { scrollTop, columnCount: this.columnCount })
+ this.$el.scrollTop = scrollTop
+ },
+
onScroll() {
- // Max 0 to prevent negative index
- this.index = Math.max(0, Math.round((this.$el.scrollTop - this.beforeHeight) / this.itemHeight))
+ this._onScrollHandle ??= requestAnimationFrame(() => {
+ this._onScrollHandle = null;
+ const topScroll = this.$el.scrollTop - this.beforeHeight
+ const index = Math.floor(topScroll / this.itemHeight) * this.columnCount
+ // Max 0 to prevent negative index
+ this.index = Math.max(0, index)
+ this.$emit('scroll')
+ });
},
},
})
</script>
-
-<style scoped>
-
-</style>
diff --git a/apps/files/src/templates.js b/apps/files/src/init-templates.ts
index 9be12d8608f..90651826a7c 100644
--- a/apps/files/src/templates.js
+++ b/apps/files/src/init-templates.ts
@@ -20,17 +20,23 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
+import type { Entry } from '@nextcloud/files'
+import { Folder, Node, Permission, addNewFileMenuEntry, removeNewFileMenuEntry } from '@nextcloud/files'
+import { generateOcsUrl } from '@nextcloud/router'
import { getLoggerBuilder } from '@nextcloud/logger'
+import { join } from 'path'
import { loadState } from '@nextcloud/initial-state'
+import { showError } from '@nextcloud/dialogs'
import { translate as t, translatePlural as n } from '@nextcloud/l10n'
-import { generateOcsUrl } from '@nextcloud/router'
-import { getCurrentDirectory } from './utils/davUtils.js'
import axios from '@nextcloud/axios'
import Vue from 'vue'
+import PlusSvg from '@mdi/svg/svg/plus.svg?raw'
+
import TemplatePickerView from './views/TemplatePicker.vue'
-import { showError } from '@nextcloud/dialogs'
+import { getUniqueName } from './newMenu/newFolder'
+import { getCurrentUser } from '@nextcloud/auth'
// Set up logger
const logger = getLoggerBuilder()
@@ -66,67 +72,59 @@ const TemplatePicker = new View({
},
})
TemplatePicker.$mount('#template-picker')
+if (!templatesPath) {
+ logger.debug('Templates folder not initialized')
+ addNewFileMenuEntry({
+ id: 'template-picker',
+ displayName: t('files', 'Create new templates folder'),
+ iconSvgInline: PlusSvg,
+ order: 10,
+ enabled(context: Folder): boolean {
+ // Allow creation on your own folders only
+ if (context.owner !== getCurrentUser()?.uid) {
+ return false
+ }
+ return (context.permissions & Permission.CREATE) !== 0
+ },
+ handler(context: Folder, content: Node[]) {
+ // Check for conflicts
+ const contentNames = content.map((node: Node) => node.basename)
+ const name = getUniqueName(t('files', 'Templates'), contentNames)
-// Init template engine after load to make sure it's the last injected entry
-window.addEventListener('DOMContentLoaded', function() {
- if (!templatesPath) {
- logger.debug('Templates folder not initialized')
- const initTemplatesPlugin = {
- attach(menu) {
- // register the new menu entry
- menu.addMenuEntry({
- id: 'template-init',
- displayName: t('files', 'Set up templates folder'),
- templateName: t('files', 'Templates'),
- iconClass: 'icon-template-add',
- fileType: 'file',
- actionLabel: t('files', 'Create new templates folder'),
- actionHandler(name) {
- initTemplatesFolder(name)
- menu.removeMenuEntry('template-init')
- },
- })
- },
- }
- OC.Plugins.register('OCA.Files.NewFileMenu', initTemplatesPlugin)
- }
-})
+ // Create the template folder
+ initTemplatesFolder(context, name)
+
+ // Remove the menu entry
+ removeNewFileMenuEntry('template-picker')
+ },
+ } as Entry)
+}
// Init template files menu
templates.forEach((provider, index) => {
- const newTemplatePlugin = {
- attach(menu) {
- const fileList = menu.fileList
-
- // only attach to main file list, public view is not supported yet
- if (fileList.id !== 'files' && fileList.id !== 'files.public') {
- return
- }
+ addNewFileMenuEntry({
+ id: `template-new-${provider.app}-${index}`,
+ displayName: provider.label,
+ // TODO: migrate to inline svg
+ iconClass: provider.iconClass || 'icon-file',
+ enabled(context: Folder): boolean {
+ return (context.permissions & Permission.CREATE) !== 0
+ },
+ order: 11,
+ handler(context: Folder, content: Node[]) {
+ // Check for conflicts
+ const contentNames = content.map((node: Node) => node.basename)
+ const name = getUniqueName(provider.label + provider.extension, contentNames)
- // register the new menu entry
- menu.addMenuEntry({
- id: `template-new-${provider.app}-${index}`,
- displayName: provider.label,
- templateName: provider.label + provider.extension,
- iconClass: provider.iconClass || 'icon-file',
- fileType: 'file',
- actionLabel: provider.actionLabel,
- actionHandler(name) {
- TemplatePicker.open(name, provider)
- },
- })
+ // Create the file
+ TemplatePicker.open(name, provider)
},
- }
- OC.Plugins.register('OCA.Files.NewFileMenu', newTemplatePlugin)
+ } as Entry)
})
-/**
- * Init the template directory
- *
- * @param {string} name the templates folder name
- */
-const initTemplatesFolder = async function(name) {
- const templatePath = (getCurrentDirectory() + `/${name}`).replace('//', '/')
+// Init template folder
+const initTemplatesFolder = async function(directory: Folder, name: string) {
+ const templatePath = join(directory.path, name)
try {
logger.debug('Initializing the templates directory', { templatePath })
const response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/path'), {
@@ -135,7 +133,11 @@ const initTemplatesFolder = async function(name) {
})
// Go to template directory
- OCA.Files.App.currentFileList.changeDirectory(templatePath, true, true)
+ window.OCP.Files.Router.goToRoute(
+ null, // use default route
+ { view: 'files', fileid: undefined },
+ { dir: templatePath },
+ )
templates = response.data.ocs.data.templates
templatesPath = response.data.ocs.data.template_path
diff --git a/apps/files/src/init.ts b/apps/files/src/init.ts
index c3b70641ca1..9cbf3dc2e69 100644
--- a/apps/files/src/init.ts
+++ b/apps/files/src/init.ts
@@ -19,6 +19,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
+import { addNewFileMenuEntry, registerFileAction } from '@nextcloud/files'
+
import { action as deleteAction } from './actions/deleteAction'
import { action as downloadAction } from './actions/downloadAction'
import { action as editLocallyAction } from './actions/editLocallyAction'
@@ -35,7 +37,8 @@ import registerFavoritesView from './views/favorites'
import registerRecentView from './views/recent'
import registerFilesView from './views/files'
import registerPreviewServiceWorker from './services/ServiceWorker.js'
-import { addNewFileMenuEntry, registerFileAction } from '@nextcloud/files'
+
+import './init-templates'
// Register file actions
registerFileAction(deleteAction)
diff --git a/apps/files/src/main.ts b/apps/files/src/main.ts
index 38bec4ad087..1206b9cc711 100644
--- a/apps/files/src/main.ts
+++ b/apps/files/src/main.ts
@@ -1,6 +1,3 @@
-import './templates.js'
-import './legacy/filelistSearch.js'
-
import Vue from 'vue'
import { createPinia, PiniaVuePlugin } from 'pinia'
import { getNavigation } from '@nextcloud/files'
diff --git a/apps/files/src/mixins/filesListWidth.ts b/apps/files/src/mixins/filesListWidth.ts
index a2bb6b486bc..211ac881540 100644
--- a/apps/files/src/mixins/filesListWidth.ts
+++ b/apps/files/src/mixins/filesListWidth.ts
@@ -28,7 +28,7 @@ export default Vue.extend({
filesListWidth: null as number | null,
}
},
- created() {
+ mounted() {
const fileListEl = document.querySelector('#app-content-vue')
this.$resizeObserver = new ResizeObserver((entries) => {
if (entries.length > 0 && entries[0].target === fileListEl) {
diff --git a/apps/files/src/newMenu/newFolder.ts b/apps/files/src/newMenu/newFolder.ts
index 33fd113b7c3..d4da1baaab7 100644
--- a/apps/files/src/newMenu/newFolder.ts
+++ b/apps/files/src/newMenu/newFolder.ts
@@ -21,26 +21,30 @@
*/
import type { Entry, Node } from '@nextcloud/files'
-import { addNewFileMenuEntry, Permission, Folder } from '@nextcloud/files'
import { basename, extname } from 'path'
import { emit } from '@nextcloud/event-bus'
import { getCurrentUser } from '@nextcloud/auth'
+import { Permission, Folder } from '@nextcloud/files'
import { showSuccess } from '@nextcloud/dialogs'
import { translate as t } from '@nextcloud/l10n'
import axios from '@nextcloud/axios'
+
import FolderPlusSvg from '@mdi/svg/svg/folder-plus.svg?raw'
-import Vue from 'vue'
+
+import logger from '../logger'
type createFolderResponse = {
fileid: number
source: string
}
-const createNewFolder = async (root: string, name: string): Promise<createFolderResponse> => {
- const source = root + '/' + name
+const createNewFolder = async (root: Folder, name: string): Promise<createFolderResponse> => {
+ const source = root.source + '/' + name
+ const encodedSource = root.encodedSource + '/' + encodeURIComponent(name)
+
const response = await axios({
method: 'MKCOL',
- url: source,
+ url: encodedSource,
headers: {
Overwrite: 'F',
},
@@ -65,12 +69,13 @@ export const getUniqueName = (name: string, names: string[]): string => {
export const entry = {
id: 'newFolder',
displayName: t('files', 'New folder'),
- if: (context: Folder) => (context.permissions & Permission.CREATE) !== 0,
+ enabled: (context: Folder) => (context.permissions & Permission.CREATE) !== 0,
iconSvgInline: FolderPlusSvg,
+ order: 0,
async handler(context: Folder, content: Node[]) {
const contentNames = content.map((node: Node) => node.basename)
const name = getUniqueName(t('files', 'New folder'), contentNames)
- const { fileid, source } = await createNewFolder(context.source, name)
+ const { fileid, source } = await createNewFolder(context, name)
// Create the folder in the store
const folder = new Folder({
@@ -82,12 +87,8 @@ export const entry = {
root: context?.root || '/files/' + getCurrentUser()?.uid,
})
- if (!context._children) {
- Vue.set(context, '_children', [])
- }
- context._children.push(folder.fileid)
-
showSuccess(t('files', 'Created new folder "{name}"', { name: basename(source) }))
+ logger.debug('Created new folder', { folder, source })
emit('files:node:created', folder)
emit('files:node:rename', folder)
},
diff --git a/apps/files/src/store/paths.ts b/apps/files/src/store/paths.ts
index d678b5bc592..49b0ec9495b 100644
--- a/apps/files/src/store/paths.ts
+++ b/apps/files/src/store/paths.ts
@@ -21,12 +21,16 @@
*/
import type { FileId, PathsStore, PathOptions, ServicesState } from '../types'
import { defineStore } from 'pinia'
-import { Node, getNavigation } from '@nextcloud/files'
+import { FileType, Folder, Node, getNavigation } from '@nextcloud/files'
import { subscribe } from '@nextcloud/event-bus'
import Vue from 'vue'
import logger from '../logger'
+import { useFilesStore } from './files'
+
export const usePathsStore = function(...args) {
+ const files = useFilesStore()
+
const store = defineStore('paths', {
state: () => ({
paths: {} as ServicesState,
@@ -55,16 +59,52 @@ export const usePathsStore = function(...args) {
},
onCreatedNode(node: Node) {
- const currentView = getNavigation().active
+ const service = getNavigation()?.active?.id || 'files'
if (!node.fileid) {
logger.error('Node has no fileid', { node })
return
}
- this.addPath({
- service: currentView?.id || 'files',
- path: node.path,
- fileid: node.fileid,
- })
+
+ // Only add path if it's a folder
+ if (node.type === FileType.Folder) {
+ this.addPath({
+ service,
+ path: node.path,
+ fileid: node.fileid,
+ })
+ }
+
+ // Update parent folder children if exists
+ // If the folder is the root, get it and update it
+ if (node.dirname === '/') {
+ const root = files.getRoot(service)
+ if (!root._children) {
+ Vue.set(root, '_children', [])
+ }
+ root._children.push(node.fileid)
+ return
+ }
+
+ // If the folder doesn't exists yet, it will be
+ // fetched later and its children updated anyway.
+ if (this.paths[service][node.dirname]) {
+ const parentId = this.paths[service][node.dirname]
+ const parentFolder = files.getNode(parentId) as Folder
+ logger.debug('Path already exists, updating children', { parentFolder, node })
+
+ if (!parentFolder) {
+ logger.error('Parent folder not found', { parentId })
+ return
+ }
+
+ if (!parentFolder._children) {
+ Vue.set(parentFolder, '_children', [])
+ }
+ parentFolder._children.push(node.fileid)
+ return
+ }
+
+ logger.debug('Parent path does not exists, skipping children update', { node })
},
},
})
diff --git a/apps/files/src/store/userconfig.ts b/apps/files/src/store/userconfig.ts
index 42530a3b54d..cbd3f71600a 100644
--- a/apps/files/src/store/userconfig.ts
+++ b/apps/files/src/store/userconfig.ts
@@ -31,6 +31,7 @@ const userConfig = loadState('files', 'config', {
show_hidden: false,
crop_image_previews: true,
sort_favorites_first: true,
+ grid_view: false,
}) as UserConfig
export const useUserConfigStore = function(...args) {
diff --git a/apps/files/src/utils/davUtils.js b/apps/files/src/utils/davUtils.js
index 1bd63347518..22367d09a1a 100644
--- a/apps/files/src/utils/davUtils.js
+++ b/apps/files/src/utils/davUtils.js
@@ -38,16 +38,3 @@ export const isPublic = function() {
export const getToken = function() {
return document.getElementById('sharingToken') && document.getElementById('sharingToken').value
}
-
-/**
- * Return the current directory, fallback to root
- *
- * @return {string}
- */
-export const getCurrentDirectory = function() {
- const currentDirInfo = OCA?.Files?.App?.currentFileList?.dirInfo
- || { path: '/', name: '' }
-
- // Make sure we don't have double slashes
- return `${currentDirInfo.path}/${currentDirInfo.name}`.replace(/\/\//gi, '/')
-}
diff --git a/apps/files/src/views/FilesList.vue b/apps/files/src/views/FilesList.vue
index d43a2432dff..89ce6aeb7b0 100644
--- a/apps/files/src/views/FilesList.vue
+++ b/apps/files/src/views/FilesList.vue
@@ -25,7 +25,7 @@
<!-- Current folder breadcrumbs -->
<BreadCrumbs :path="dir" @reload="fetchContent">
<template #actions>
- <NcButton v-if="canShare"
+ <NcButton v-if="canShare && filesListWidth >= 512"
:aria-label="shareButtonLabel"
:class="{ 'files-list__header-share-button--shared': shareButtonType }"
:title="shareButtonLabel"
@@ -46,6 +46,18 @@
</template>
</BreadCrumbs>
+ <NcButton v-if="filesListWidth >= 512"
+ :aria-label="gridViewButtonLabel"
+ :title="gridViewButtonLabel"
+ class="files-list__header-grid-button"
+ type="tertiary"
+ @click="toggleGridView">
+ <template #icon>
+ <ListViewIcon v-if="userConfig.grid_view" />
+ <ViewGridIcon v-else />
+ </template>
+ </NcButton>
+
<!-- Secondary loading indicator -->
<NcLoadingIcon v-if="isRefreshing" class="files-list__refresh-icon" />
</div>
@@ -89,22 +101,25 @@ import type { Upload } from '@nextcloud/upload'
import type { UserConfig } from '../types.ts'
import type { View, ContentsWithRoot } from '@nextcloud/files'
+import { emit } from '@nextcloud/event-bus'
import { Folder, Node, Permission } from '@nextcloud/files'
import { getCapabilities } from '@nextcloud/capabilities'
import { join, dirname } from 'path'
import { orderBy } from 'natural-orderby'
import { translate, translatePlural } from '@nextcloud/l10n'
-import { UploadPicker } from '@nextcloud/upload'
import { Type } from '@nextcloud/sharing'
+import { UploadPicker } from '@nextcloud/upload'
import Vue from 'vue'
+import LinkIcon from 'vue-material-design-icons/Link.vue'
+import ListViewIcon from 'vue-material-design-icons/FormatListBulletedSquare.vue'
import NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js'
import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
import NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'
import NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'
import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'
-import LinkIcon from 'vue-material-design-icons/Link.vue'
import ShareVariantIcon from 'vue-material-design-icons/ShareVariant.vue'
+import ViewGridIcon from 'vue-material-design-icons/ViewGrid.vue'
import { action as sidebarAction } from '../actions/sidebarAction.ts'
import { useFilesStore } from '../store/files.ts'
@@ -115,6 +130,7 @@ import { useUserConfigStore } from '../store/userconfig.ts'
import { useViewConfigStore } from '../store/viewConfig.ts'
import BreadCrumbs from '../components/BreadCrumbs.vue'
import FilesListVirtual from '../components/FilesListVirtual.vue'
+import filesListWidthMixin from '../mixins/filesListWidth.ts'
import filesSortingMixin from '../mixins/filesSorting.ts'
import logger from '../logger.js'
@@ -127,6 +143,7 @@ export default Vue.extend({
BreadCrumbs,
FilesListVirtual,
LinkIcon,
+ ListViewIcon,
NcAppContent,
NcButton,
NcEmptyContent,
@@ -134,9 +151,11 @@ export default Vue.extend({
NcLoadingIcon,
ShareVariantIcon,
UploadPicker,
+ ViewGridIcon,
},
mixins: [
+ filesListWidthMixin,
filesSortingMixin,
],
@@ -295,6 +314,12 @@ export default Vue.extend({
return Type.SHARE_TYPE_USER
},
+ gridViewButtonLabel() {
+ return this.userConfig.grid_view
+ ? this.t('files', 'Switch to list view')
+ : this.t('files', 'Switch to grid view')
+ },
+
canUpload() {
return this.currentFolder && (this.currentFolder.permissions & Permission.CREATE) !== 0
},
@@ -326,6 +351,11 @@ export default Vue.extend({
this.$refs.filesListVirtual.$el.scrollTop = 0
}
},
+
+ dirContents(contents) {
+ logger.debug('Directory contents changed', { view: this.currentView, folder: this.currentFolder, contents })
+ emit('files:list:updated', { view: this.currentView, folder: this.currentFolder, contents })
+ },
},
mounted() {
@@ -360,7 +390,7 @@ export default Vue.extend({
// Define current directory children
// TODO: make it more official
- folder._children = contents.map(node => node.fileid)
+ Vue.set(folder, '_children', contents.map(node => node.fileid))
// If we're in the root dir, define the root
if (dir === '/') {
@@ -424,6 +454,10 @@ export default Vue.extend({
sidebarAction.exec(this.currentFolder, this.currentView, this.currentFolder.path)
},
+ toggleGridView() {
+ this.userConfigStore.update('grid_view', !this.userConfig.grid_view)
+ },
+
t: translate,
n: translatePlural,
},
@@ -437,6 +471,7 @@ export default Vue.extend({
overflow: hidden;
flex-direction: column;
max-height: 100%;
+ position: relative;
}
$margin: 4px;
@@ -445,11 +480,12 @@ $navigationToggleSize: 50px;
.files-list {
&__header {
display: flex;
- align-content: center;
+ align-items: center;
// Do not grow or shrink (vertically)
flex: 0 0;
// Align with the navigation toggle icon
margin: $margin $margin $margin $navigationToggleSize;
+ max-width: 100%;
> * {
// Do not grow or shrink (horizontally)
// Only the breadcrumbs shrinks
diff --git a/apps/files/src/views/Settings.vue b/apps/files/src/views/Settings.vue
index 957b26b30dc..1241b063dcf 100644
--- a/apps/files/src/views/Settings.vue
+++ b/apps/files/src/views/Settings.vue
@@ -38,6 +38,10 @@
@update:checked="setConfig('crop_image_previews', $event)">
{{ t('files', 'Crop image previews') }}
</NcCheckboxRadioSwitch>
+ <NcCheckboxRadioSwitch :checked="userConfig.grid_view"
+ @update:checked="setConfig('grid_view', $event)">
+ {{ t('files', 'Enable the grid view') }}
+ </NcCheckboxRadioSwitch>
</NcAppSettingsSection>
<!-- Settings API-->
diff --git a/apps/files/src/views/TemplatePicker.vue b/apps/files/src/views/TemplatePicker.vue
index a6bb9809b10..5f248602d4d 100644
--- a/apps/files/src/views/TemplatePicker.vue
+++ b/apps/files/src/views/TemplatePicker.vue
@@ -60,20 +60,24 @@
</NcModal>
</template>
-<script>
-import { normalize } from 'path'
+<script lang="ts">
+import { emit, subscribe } from '@nextcloud/event-bus'
+import { File } from '@nextcloud/files'
+import { generateRemoteUrl } from '@nextcloud/router'
+import { getCurrentUser } from '@nextcloud/auth'
+import { normalize, extname, join } from 'path'
import { showError } from '@nextcloud/dialogs'
import NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'
import NcModal from '@nextcloud/vue/dist/Components/NcModal.js'
+import Vue from 'vue'
-import { getCurrentDirectory } from '../utils/davUtils.js'
import { createFromTemplate, getTemplates } from '../services/Templates.js'
import TemplatePreview from '../components/TemplatePreview.vue'
const border = 2
const margin = 8
-export default {
+export default Vue.extend({
name: 'TemplatePicker',
components: {
@@ -101,15 +105,14 @@ export default {
},
computed: {
- /**
- * Strip away extension from name
- *
- * @return {string}
- */
+ extension() {
+ return extname(this.name)
+ },
nameWithoutExt() {
- return this.name.indexOf('.') > -1
- ? this.name.split('.').slice(0, -1).join('.')
- : this.name
+ // Strip extension from name if defined
+ return !this.extension
+ ? this.name
+ : this.name.slice(0, 0 - this.extension.length)
},
emptyTemplate() {
@@ -123,15 +126,23 @@ export default {
},
selectedTemplate() {
+ if (!this.provider) {
+ return null
+ }
+
return this.provider.templates.find(template => template.fileid === this.checked)
},
/**
- * Style css vars bin,d
+ * Style css vars bind
*
* @return {object}
*/
style() {
+ if (!this.provider) {
+ return {}
+ }
+
// Fallback to 16:9 landscape ratio
const ratio = this.provider.ratio ? this.provider.ratio : 1.77
// Landscape templates should be wider than tall ones
@@ -154,8 +165,7 @@ export default {
* @param {string} name the file name to create
* @param {object} provider the template provider picked
*/
- async open(name, provider) {
-
+ async open(name: string, provider) {
this.checked = this.emptyTemplate.fileid
this.name = name
this.provider = provider
@@ -199,12 +209,11 @@ export default {
async onSubmit() {
this.loading = true
- const currentDirectory = getCurrentDirectory()
- const fileList = OCA?.Files?.App?.currentFileList
+ const currentDirectory = new URL(window.location.href).searchParams.get('dir') || '/'
// If the file doesn't have an extension, add the default one
if (this.nameWithoutExt === this.name) {
- this.logger.debug('Fixed invalid filename', { name: this.name, extension: this.provider?.extension })
+ this.logger.warn('Fixed invalid filename', { name: this.name, extension: this.provider?.extension })
this.name = this.name + this.provider?.extension
}
@@ -216,35 +225,43 @@ export default {
)
this.logger.debug('Created new file', fileInfo)
- // Fetch FileInfo and model
- const data = await fileList?.addAndFetchFileInfo(this.name).then((status, data) => data)
- const model = new OCA.Files.FileInfoModel(data, {
- filesClient: fileList?.filesClient,
+ const owner = getCurrentUser()?.uid || null
+ const node = new File({
+ id: fileInfo.fileid,
+ source: generateRemoteUrl(join('dav/files', owner, fileInfo.filename)),
+ root: `/files/${owner}`,
+ mime: fileInfo.mime,
+ mtime: new Date(fileInfo.lastmod * 1000),
+ owner,
+ size: fileInfo.size,
+ permissions: fileInfo.permissions,
+ attributes: {
+ ...fileInfo,
+ 'has-preview': fileInfo.hasPreview,
+ },
})
- // Run default action
- const fileAction = OCA.Files.fileActions.getDefaultFileAction(fileInfo.mime, 'file', OC.PERMISSION_ALL)
- if (fileAction) {
- fileAction.action(fileInfo.basename, {
- $file: fileList?.findFileEl(this.name),
- dir: currentDirectory,
- fileList,
- fileActions: fileList?.fileActions,
- fileInfoModel: model,
- })
- }
+ // Update files list
+ emit('files:node:created', node)
+ // Open the new file
+ window.OCP.Files.Router.goToRoute(
+ null, // use default route
+ { view: 'files', fileid: node.fileid },
+ { dir: node.dirname, openfile: true },
+ )
+
+ // Close the picker
this.close()
} catch (error) {
- this.logger.error('Error while creating the new file from template')
- console.error(error)
+ this.logger.error('Error while creating the new file from template', { error })
showError(this.t('files', 'Unable to create new file from template'))
} finally {
this.loading = false
}
},
},
-}
+})
</script>
<style lang="scss" scoped>
diff --git a/apps/files/templates/appnavigation.php b/apps/files/templates/appnavigation.php
index 96df2b91a84..17409bdb189 100644
--- a/apps/files/templates/appnavigation.php
+++ b/apps/files/templates/appnavigation.php
@@ -37,7 +37,7 @@ function NavigationListElements($item, $l, $pinned) {
<?php if (isset($item['defaultExpandedState']) && $item['defaultExpandedState']) { ?> open<?php } ?>"
<?php if (isset($item['folderPosition'])) { ?> folderposition="<?php p($item['folderPosition']); ?>" <?php } ?>>
- <a href="<?php p(isset($item['href']) ? $item['href'] : '#') ?>"
+ <a href="<?php p($item['href'] ?? '#') ?>"
class="nav-icon-<?php p(isset($item['icon']) && $item['icon'] !== '' ? $item['icon'] : $item['id']) ?> svg"><?php p($item['name']); ?></a>
diff --git a/apps/files/tests/Controller/ViewControllerTest.php b/apps/files/tests/Controller/ViewControllerTest.php
index b997bbcad65..1f8a609106f 100644
--- a/apps/files/tests/Controller/ViewControllerTest.php
+++ b/apps/files/tests/Controller/ViewControllerTest.php
@@ -51,7 +51,6 @@ use OCP\IURLGenerator;
use OCP\IUser;
use OCP\IUserSession;
use OCP\Share\IManager;
-use OCP\Template;
use Test\TestCase;
/**
@@ -153,6 +152,12 @@ class ViewControllerTest extends TestCase {
'owner' => 'MyName',
'ownerDisplayName' => 'MyDisplayName',
]);
+
+ $this->config
+ ->expects($this->any())
+ ->method('getSystemValue')
+ ->with('forbidden_chars', [])
+ ->willReturn([]);
$this->config
->method('getUserValue')
->willReturnMap([