diff options
Diffstat (limited to 'apps/files')
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([ |