diff options
Diffstat (limited to 'apps/files')
-rw-r--r-- | apps/files/appinfo/info.xml | 2 | ||||
-rw-r--r-- | apps/files/composer/composer/autoload_classmap.php | 2 | ||||
-rw-r--r-- | apps/files/composer/composer/autoload_static.php | 2 | ||||
-rw-r--r-- | apps/files/l10n/be.js | 258 | ||||
-rw-r--r-- | apps/files/l10n/be.json | 256 | ||||
-rw-r--r-- | apps/files/l10n/de_DE.js | 8 | ||||
-rw-r--r-- | apps/files/l10n/de_DE.json | 8 | ||||
-rw-r--r-- | apps/files/l10n/pt_BR.js | 21 | ||||
-rw-r--r-- | apps/files/l10n/pt_BR.json | 21 | ||||
-rw-r--r-- | apps/files/l10n/sr.js | 25 | ||||
-rw-r--r-- | apps/files/l10n/sr.json | 25 | ||||
-rw-r--r-- | apps/files/lib/Command/Object/Multi/Rename.php | 108 | ||||
-rw-r--r-- | apps/files/lib/Command/Object/Multi/Users.php | 98 | ||||
-rw-r--r-- | apps/files/lib/Service/OwnershipTransferService.php | 13 |
14 files changed, 830 insertions, 17 deletions
diff --git a/apps/files/appinfo/info.xml b/apps/files/appinfo/info.xml index aedcd5b7ed5..fb53cef79b8 100644 --- a/apps/files/appinfo/info.xml +++ b/apps/files/appinfo/info.xml @@ -53,6 +53,8 @@ <command>OCA\Files\Command\Object\Info</command> <command>OCA\Files\Command\Object\ListObject</command> <command>OCA\Files\Command\Object\Orphans</command> + <command>OCA\Files\Command\Object\Multi\Users</command> + <command>OCA\Files\Command\Object\Multi\Rename</command> <command>OCA\Files\Command\WindowsCompatibleFilenames</command> </commands> diff --git a/apps/files/composer/composer/autoload_classmap.php b/apps/files/composer/composer/autoload_classmap.php index 070cb46de38..0c0f734251f 100644 --- a/apps/files/composer/composer/autoload_classmap.php +++ b/apps/files/composer/composer/autoload_classmap.php @@ -37,6 +37,8 @@ return array( 'OCA\\Files\\Command\\Object\\Get' => $baseDir . '/../lib/Command/Object/Get.php', 'OCA\\Files\\Command\\Object\\Info' => $baseDir . '/../lib/Command/Object/Info.php', 'OCA\\Files\\Command\\Object\\ListObject' => $baseDir . '/../lib/Command/Object/ListObject.php', + 'OCA\\Files\\Command\\Object\\Multi\\Rename' => $baseDir . '/../lib/Command/Object/Multi/Rename.php', + 'OCA\\Files\\Command\\Object\\Multi\\Users' => $baseDir . '/../lib/Command/Object/Multi/Users.php', 'OCA\\Files\\Command\\Object\\ObjectUtil' => $baseDir . '/../lib/Command/Object/ObjectUtil.php', 'OCA\\Files\\Command\\Object\\Orphans' => $baseDir . '/../lib/Command/Object/Orphans.php', 'OCA\\Files\\Command\\Object\\Put' => $baseDir . '/../lib/Command/Object/Put.php', diff --git a/apps/files/composer/composer/autoload_static.php b/apps/files/composer/composer/autoload_static.php index ce79d370e7c..19310ed4e92 100644 --- a/apps/files/composer/composer/autoload_static.php +++ b/apps/files/composer/composer/autoload_static.php @@ -52,6 +52,8 @@ class ComposerStaticInitFiles 'OCA\\Files\\Command\\Object\\Get' => __DIR__ . '/..' . '/../lib/Command/Object/Get.php', 'OCA\\Files\\Command\\Object\\Info' => __DIR__ . '/..' . '/../lib/Command/Object/Info.php', 'OCA\\Files\\Command\\Object\\ListObject' => __DIR__ . '/..' . '/../lib/Command/Object/ListObject.php', + 'OCA\\Files\\Command\\Object\\Multi\\Rename' => __DIR__ . '/..' . '/../lib/Command/Object/Multi/Rename.php', + 'OCA\\Files\\Command\\Object\\Multi\\Users' => __DIR__ . '/..' . '/../lib/Command/Object/Multi/Users.php', 'OCA\\Files\\Command\\Object\\ObjectUtil' => __DIR__ . '/..' . '/../lib/Command/Object/ObjectUtil.php', 'OCA\\Files\\Command\\Object\\Orphans' => __DIR__ . '/..' . '/../lib/Command/Object/Orphans.php', 'OCA\\Files\\Command\\Object\\Put' => __DIR__ . '/..' . '/../lib/Command/Object/Put.php', diff --git a/apps/files/l10n/be.js b/apps/files/l10n/be.js new file mode 100644 index 00000000000..1c72fa29839 --- /dev/null +++ b/apps/files/l10n/be.js @@ -0,0 +1,258 @@ +OC.L10N.register( + "files", + { + "Added to favorites" : "Дададзены ў абранае", + "Removed from favorites" : "Выдалены з абранага", + "You added {file} to your favorites" : "Вы дадалі {file} у абранае", + "You removed {file} from your favorites" : "Вы выдалілі {file} з абранага", + "Favorites" : "Абранае", + "File changes" : "Змены ў файлах", + "Created by {user}" : "Створаны карыстальнікам {user}", + "Changed by {user}" : "Зменены карыстальнікам {user}", + "Deleted by {user}" : "Выдалены карыстальнікам {user}", + "Restored by {user}" : "Адноўлены карыстальнікам {user}", + "Renamed by {user}" : "Перайменаваны карыстальнікам {user}", + "Moved by {user}" : "Перамешчаны карыстальнікам {user}", + "\"remote account\"" : "\"аддалены ўліковы запіс\"", + "You created {file}" : "Вы стварылі {file}", + "You created an encrypted file in {file}" : "Вы стварылі зашыфраваны файл у {file}", + "{user} created {file}" : "{user} стварыў(-ла) {file}", + "{user} created an encrypted file in {file}" : "{user} стварыў(-ла) зашыфраваны файл у {file}", + "You changed {file}" : "Вы змянілі {file}", + "You changed an encrypted file in {file}" : "Вы змянілі зашыфраваны файл у {file}", + "{user} changed {file}" : "{user} змяніў(-ла) {file}", + "{user} changed an encrypted file in {file}" : "{user} змяніў(-ла) зашыфраваны файл у {file}", + "You deleted {file}" : "Вы выдалілі {file}", + "You deleted an encrypted file in {file}" : "Вы выдалілі зашыфраваны файл у {file}", + "{user} deleted {file}" : "{user} выдаліў(-ла) {file}", + "{user} deleted an encrypted file in {file}" : "{user} выдаліў(-ла) зашыфраваны файл у {file}", + "You restored {file}" : "Вы аднавілі {file}", + "{user} restored {file}" : "{user} аднавіў(-ла) {file}", + "You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Вы перайменавалі {oldfile} (схаваны) у {newfile} (схаваны)", + "You renamed {oldfile} (hidden) to {newfile}" : "Вы перайменавалі {oldfile} (схаваны) у {newfile}", + "You renamed {oldfile} to {newfile} (hidden)" : "Вы перайменавалі {oldfile} у {newfile} (схаваны)", + "You renamed {oldfile} to {newfile}" : "Вы перайменавалі {oldfile} у {newfile}", + "{user} renamed {oldfile} (hidden) to {newfile} (hidden)" : "{user} перайменаваў(-ла) {oldfile} (схаваны) у {newfile} (схаваны)", + "{user} renamed {oldfile} (hidden) to {newfile}" : "{user} перайменаваў(-ла) {oldfile} (схаваны) ў {newfile}", + "{user} renamed {oldfile} to {newfile} (hidden)" : "{user} перайменаваў(-ла) {oldfile} у {newfile} (схаваны)", + "{user} renamed {oldfile} to {newfile}" : "{user} перайменаваў(-ла) {oldfile} у {newfile}", + "You moved {oldfile} to {newfile}" : "Вы перамясцілі {oldfile} у {newfile}", + "{user} moved {oldfile} to {newfile}" : "{user} перамясціў(-ла) {oldfile} у {newfile}", + "A file has been added to or removed from your <strong>favorites</strong>" : "Файл быў дададзены або выдалены з <strong>абраных</strong>", + "Files" : "Файлы", + "Folder not found" : "Папка не знойдзена", + "The file cannot be found" : "Файл не знойдзены", + "The destination path does not exist: %1$s" : "Шлях прызначэння не існуе: %1$s", + "Favorite files" : "Абраныя файлы", + "No favorites" : "Няма абраных", + "More favorites" : "Больш абраных", + "Accept" : "Прыняць", + "Reject" : "Адхіліць", + "in %s" : "у %s", + "Files compatibility" : "Сумяшчальнасць файлаў", + "File Management" : "Кіраванне файламі", + "Home" : "Дадому", + "Target folder does not exist any more" : "Мэтавая папка больш не існуе", + "Reload current directory" : "Перазагрузіць бягучы каталог", + "Go to the \"{dir}\" directory" : "Перайсці да каталога \"{dir}\"", + "Drag and drop files here to upload" : "Перацягніце файлы сюды, каб запампаваць іх", + "Favorite" : "Абранае", + "Back" : "Назад", + "File is loading" : "Файл загружаецца", + "Folder is loading" : "Папка загружаецца", + "Filename" : "Назва файла", + "Folder name" : "Назва папкі", + "Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" перайменаваны ў \"{newName}\"", + "Rename file" : "Перайменаваць файл", + "Folder" : "Папка", + "Unknown file type" : "Невядомы тып файла", + "{ext} image" : "Відарыс {ext}", + "{ext} video" : "Відэа {ext}", + "{ext} audio" : "Аўдыя {ext} ", + "{ext} text" : "Тэкст {ext}", + "Pending" : "У чаканні", + "Unknown date" : "Невядомая дата", + "Clear filter" : "Ачысціць фільтр", + "Modified" : "Зменены", + "Type" : "Тып", + "Active filters" : "Актыўныя фільтры", + "Remove filter" : "Выдаліць фільтр", + "Name" : "Назва", + "File type" : "Тып файла", + "Size" : "Памер", + "Actions" : "Дзеянні", + "List of files and folders." : "Спіс файлаў і папак.", + "File not found" : "Файл не знойдзены", + "{usedQuotaByte} used" : "Выкарыстана {usedQuotaByte}", + "{used} of {quota} used" : "Выкарыстана {used} з {quota}", + "{relative}% used" : "Выкарыстана {relative}%", + "New folder" : "Новая папка", + "Create new folder" : "Стварыць новую папку", + "This name is already in use." : "Гэта назва ўжо выкарыстоўваецца.", + "Create" : "Стварыць", + "Fill template fields" : "Запоўніце палі шаблону", + "Unknown error" : "Невядомая памылка", + "Change" : "Змяніць", + "New owner" : "Новы ўладальнік", + "Share" : "Абагуліць", + "Upload was cancelled by user" : "Карыстальнік скасаваў запампоўванне", + "Go back" : "Назад", + "Your files" : "Вашы файлы", + "File cannot be accessed" : "Немагчыма атрымаць доступ да файла", + "The file could not be found or you do not have permissions to view it. Ask the sender to share it." : "Файл не знойдзены, або ў вас няма правоў на яго прагляд. Папрасіце адпраўніка абагуліць яго.", + "No search results for “{query}”" : "Няма вынікаў пошуку па запыце \"{query}\"", + "Search for files" : "Пошук файлаў", + "Clipboard is not available" : "Буфер абмену недаступны", + "WebDAV URL copied" : "URL-адрас WebDAV скапіяваны", + "General" : "Агульныя", + "All files" : "Усе файлы", + "Personal files" : "Асабістыя файлы", + "Appearance" : "Знешні выгляд", + "Show file extensions" : "Паказваць пашырэнні файлаў", + "WebDAV" : "WebDAV", + "WebDAV URL" : "URL-адрас WebDAV", + "Copy" : "Капіяваць", + "Warnings" : "Папярэджанні", + "Keyboard shortcuts" : "Спалучэнні клавіш", + "File actions" : "Дзеянні з файламі", + "Rename" : "Перайменаваць", + "Delete" : "Выдаліць", + "Manage tags" : "Кіраванне тэгамі", + "Select all files" : "Выбраць усе файлы", + "Navigation" : "Навігацыя", + "You" : "Вы", + "Error while loading the file data" : "Памылка пры загрузцы даных файла", + "Owner" : "Уладальнік", + "Remove from favorites" : "Выдаліць з абранага", + "Add to favorites" : "У абранае", + "Tags" : "Тэгі", + "Unable to create new file from template" : "Немагчыма стварыць новы файл з шаблона", + "Pick a template for {name}" : "Выберыце шаблон для {name}", + "Create a new file with the selected template" : "Стварыць файл на падставе выбранага шаблона", + "Creating file" : "Стварэнне файла", + "Save as {displayName}" : "Захаваць як {displayName}", + "Save as …" : "Захаваць як …", + "Converting files …" : "Канвертацыя файлаў …", + "Converting file …" : "Канвертацыя файла …", + "File successfully converted" : "Файл паспяхова сканвертаваны", + "Delete permanently" : "Выдаліць назаўжды", + "Delete file" : "Выдаліць файл", + "Delete files" : "Выдаліць файлы", + "Delete folder" : "Выдаліць папку", + "Delete folders" : "Выдаліць папкі", + "_You are about to permanently delete {count} item_::_You are about to permanently delete {count} items_" : ["Вы збіраецеся назаўжды выдаліць {count} элемент","Вы збіраецеся назаўжды выдаліць {count} элементы","Вы збіраецеся назаўжды выдаліць {count} элементаў","Вы збіраецеся назаўжды выдаліць {count} элементаў"], + "_You are about to delete {count} item_::_You are about to delete {count} items_" : ["Вы збіраецеся выдаліць {count} элемент","Вы збіраецеся выдаліць {count} элементы","Вы збіраецеся выдаліць {count} элементаў","Вы збіраецеся выдаліць {count} элементаў"], + "Confirm deletion" : "Пацвердзіць выдаленне", + "Cancel" : "Скасаваць", + "Download" : "Спампаваць", + "Moving \"{source}\" to \"{destination}\" …" : "Перамяшчэнне \"{source}\" у \"{destination}\" …", + "Copying \"{source}\" to \"{destination}\" …" : "Капіяванне \"{source}\" у \"{destination}\" …", + "This file/folder is already in that directory" : "Гэты файл/папка ўжо знаходзіцца ў гэтым каталогу", + "(copy)" : "(копія)", + "(copy %n)" : "(копія %n)", + "A file or folder with that name already exists in this folder" : "Файл або папка з такой назвай ужо існуе ў гэтай папцы", + "The files are locked" : "Файлы заблакіраваны", + "The file does not exist anymore" : "Файл больш не існуе", + "Choose destination" : "Выберыце прызначэнне", + "Copy to {target}" : "Капіяваць у {target}", + "Move to {target}" : "Перамясціць у {target}", + "Move" : "Перамясціць", + "Move or copy" : "Перамясціць або капіяваць", + "Open folder {displayName}" : "Адкрыць папку {displayName}", + "Open locally" : "Адкрыць лакальна", + "Open file locally" : "Адкрыць файл лакальна", + "Today" : "Сёння", + "Last 7 days" : "Апошнія 7 дзён", + "Last 30 days" : "Апошнія 30 дзён", + "This year ({year})" : "Гэты год ({year})", + "Last year ({year})" : "Мінулы год ({year})", + "Documents" : "Дакументы", + "Spreadsheets" : "Табліцы", + "Presentations" : "Прэзентацыі", + "PDFs" : "PDF-файлы", + "Folders" : "Папкі", + "Audio" : "Аўдыя", + "Images" : "Відарысы", + "Videos" : "Відэа", + "Created new folder \"{name}\"" : "Створана новая папка \"{name}\"", + "Unable to initialize the templates directory" : "Немагчыма ініцыялізаваць каталог шаблонаў", + "Create templates folder" : "Стварыць папку шаблонаў", + "Templates" : "Шаблоны", + "New template folder" : "Новая папка шаблонаў", + "In folder" : "У папцы", + "One of the dropped files could not be processed" : "Адзін з перацягнутых файлаў не ўдалося апрацаваць", + "Your browser does not support the Filesystem API. Directories will not be uploaded" : "Ваш браўзер не падтрымлівае Filesystem API. Каталогі не будуць запампаваныя", + "No files to upload" : "Няма файлаў для запампоўвання", + "Unable to create the directory {directory}" : "Немагчыма стварыць папку {directory}", + "Some files could not be uploaded" : "Некаторыя файлы не ўдалося запампаваць", + "Files uploaded successfully" : "Файлы паспяхова запампаваныя", + "No files to process" : "Няма файлаў для апрацоўкі", + "Some files could not be copied" : "Некаторыя файлы не ўдалося скапіяваць", + "Some files could not be moved" : "Некаторыя файлы не ўдалося перамясціць", + "Files copied successfully" : "Файлы паспяхова скапіяваны", + "Files moved successfully" : "Файлы паспяхова перамешчаны", + "Conflicts resolution skipped" : "Рашэнне канфліктаў прапушчана", + "Upload cancelled" : "Запампоўванне скасавана", + "Could not rename \"{oldName}\"" : "Не атрымалася перайменаваць \"{oldName}\"", + "Unexpected error: {error}" : "Нечаканая памылка: {error}", + "_%n file_::_%n files_" : ["%n файл","%n файлы","%n файлаў","%n файлаў"], + "_%n folder_::_%n folders_" : ["%n папка","%n папкі","%n папак","%n папак"], + "_%n hidden_::_%n hidden_" : ["%n схаваны","%n схаваныя","%n схаваных","%n схаваных"], + "Filename must not be empty." : "Назва файла не можа быць пустой.", + "No favorites yet" : "Пакуль няма абраных", + "List of your files and folders." : "Спіс вашых файлаў і папак.", + "List of your files and folders that are not shared." : "Спіс вашых неабагуленых файлаў і папак.", + "No personal files found" : "Асабістых файлаў не знойдзена", + "Files that are not shared will show up here." : "Тут будуць адлюстроўвацца неабагуленыя файлы.", + "Recent" : "Нядаўнія", + "List of recently modified files and folders." : "Спіс нядаўна змененых файлаў і папак.", + "No recently modified files" : "Няма нядаўна змененых файлаў", + "Files and folders you recently modified will show up here." : "Тут будуць адлюстроўвацца нядаўна змененыя вамі файлы і папкі.", + "Search" : "Пошук", + "File could not be found" : "Файл не знойдзены", + "Close" : "Закрыць", + "Could not create folder \"{dir}\"" : "Не ўдалося стварыць папку \"{dir}\"", + "This will stop your current uploads." : "Гэта спыніць вашы бягучыя запампоўкі.", + "Upload cancelled." : "Запампоўванне скасавана.", + "Processing files …" : "Апрацоўка файлаў …", + "…" : "…", + "Unable to upload {filename} as it is a directory or has 0 bytes" : "Немагчыма запампаваць {filename}, бо гэта каталог або ён мае памер 0 байтаў", + "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})", + "Set reminder" : "Задаць напамін", + "Edit locally" : "Рэдагаваць лакальна", + "Open" : "Адкрыць", + "Unable to determine date" : "Немагчыма вызначыць дату", + "copy" : "копія", + "{newName} already exists" : "{newName} ужо існуе", + "{dirs} and {files}" : "{dirs} і {files}", + "_Uploading %n file_::_Uploading %n files_" : ["Запампоўванне %n файла","Запампоўванне %n файлаў","Запампоўванне %n файлаў","Запампоўванне %n файлаў"], + "New" : "Новы", + "{used}%" : "{used}%", + "{used} used" : "Выкарыстана {used}", + "Path" : "Шлях", + "Upload file" : "Запампаваць файл", + "WebDAV URL copied to clipboard" : "URL-адрас WebDAV скапіяваны ў буфер абмену", + "Copy to clipboard" : "Капіяваць у буфер абмену", + "Deletion cancelled" : "Выдаленне скасавана", + "Move cancelled" : "Перамяшчэнне скасавана", + "Photos and images" : "Фота і відарысы", + "New folder creation cancelled" : "Стварэнне новай папкі скасавана", + "_{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 папка"], + "All folders" : "Усе папкі", + "Personal Files" : "Асабістыя файлы", + "Text file" : "Тэкставы файл", + "%1$s (renamed)" : "%1$s (перайменаваны)", + "Rename a file" : "Перайменаваць файл", + "Delete a file" : "Выдаліць файл", + "Deselect all files" : "Скасаваць выбар усіх файлаў", + "Select a range of files" : "Выберыце дыяпазон файлаў" +}, +"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/apps/files/l10n/be.json b/apps/files/l10n/be.json new file mode 100644 index 00000000000..7cc4d30cdac --- /dev/null +++ b/apps/files/l10n/be.json @@ -0,0 +1,256 @@ +{ "translations": { + "Added to favorites" : "Дададзены ў абранае", + "Removed from favorites" : "Выдалены з абранага", + "You added {file} to your favorites" : "Вы дадалі {file} у абранае", + "You removed {file} from your favorites" : "Вы выдалілі {file} з абранага", + "Favorites" : "Абранае", + "File changes" : "Змены ў файлах", + "Created by {user}" : "Створаны карыстальнікам {user}", + "Changed by {user}" : "Зменены карыстальнікам {user}", + "Deleted by {user}" : "Выдалены карыстальнікам {user}", + "Restored by {user}" : "Адноўлены карыстальнікам {user}", + "Renamed by {user}" : "Перайменаваны карыстальнікам {user}", + "Moved by {user}" : "Перамешчаны карыстальнікам {user}", + "\"remote account\"" : "\"аддалены ўліковы запіс\"", + "You created {file}" : "Вы стварылі {file}", + "You created an encrypted file in {file}" : "Вы стварылі зашыфраваны файл у {file}", + "{user} created {file}" : "{user} стварыў(-ла) {file}", + "{user} created an encrypted file in {file}" : "{user} стварыў(-ла) зашыфраваны файл у {file}", + "You changed {file}" : "Вы змянілі {file}", + "You changed an encrypted file in {file}" : "Вы змянілі зашыфраваны файл у {file}", + "{user} changed {file}" : "{user} змяніў(-ла) {file}", + "{user} changed an encrypted file in {file}" : "{user} змяніў(-ла) зашыфраваны файл у {file}", + "You deleted {file}" : "Вы выдалілі {file}", + "You deleted an encrypted file in {file}" : "Вы выдалілі зашыфраваны файл у {file}", + "{user} deleted {file}" : "{user} выдаліў(-ла) {file}", + "{user} deleted an encrypted file in {file}" : "{user} выдаліў(-ла) зашыфраваны файл у {file}", + "You restored {file}" : "Вы аднавілі {file}", + "{user} restored {file}" : "{user} аднавіў(-ла) {file}", + "You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Вы перайменавалі {oldfile} (схаваны) у {newfile} (схаваны)", + "You renamed {oldfile} (hidden) to {newfile}" : "Вы перайменавалі {oldfile} (схаваны) у {newfile}", + "You renamed {oldfile} to {newfile} (hidden)" : "Вы перайменавалі {oldfile} у {newfile} (схаваны)", + "You renamed {oldfile} to {newfile}" : "Вы перайменавалі {oldfile} у {newfile}", + "{user} renamed {oldfile} (hidden) to {newfile} (hidden)" : "{user} перайменаваў(-ла) {oldfile} (схаваны) у {newfile} (схаваны)", + "{user} renamed {oldfile} (hidden) to {newfile}" : "{user} перайменаваў(-ла) {oldfile} (схаваны) ў {newfile}", + "{user} renamed {oldfile} to {newfile} (hidden)" : "{user} перайменаваў(-ла) {oldfile} у {newfile} (схаваны)", + "{user} renamed {oldfile} to {newfile}" : "{user} перайменаваў(-ла) {oldfile} у {newfile}", + "You moved {oldfile} to {newfile}" : "Вы перамясцілі {oldfile} у {newfile}", + "{user} moved {oldfile} to {newfile}" : "{user} перамясціў(-ла) {oldfile} у {newfile}", + "A file has been added to or removed from your <strong>favorites</strong>" : "Файл быў дададзены або выдалены з <strong>абраных</strong>", + "Files" : "Файлы", + "Folder not found" : "Папка не знойдзена", + "The file cannot be found" : "Файл не знойдзены", + "The destination path does not exist: %1$s" : "Шлях прызначэння не існуе: %1$s", + "Favorite files" : "Абраныя файлы", + "No favorites" : "Няма абраных", + "More favorites" : "Больш абраных", + "Accept" : "Прыняць", + "Reject" : "Адхіліць", + "in %s" : "у %s", + "Files compatibility" : "Сумяшчальнасць файлаў", + "File Management" : "Кіраванне файламі", + "Home" : "Дадому", + "Target folder does not exist any more" : "Мэтавая папка больш не існуе", + "Reload current directory" : "Перазагрузіць бягучы каталог", + "Go to the \"{dir}\" directory" : "Перайсці да каталога \"{dir}\"", + "Drag and drop files here to upload" : "Перацягніце файлы сюды, каб запампаваць іх", + "Favorite" : "Абранае", + "Back" : "Назад", + "File is loading" : "Файл загружаецца", + "Folder is loading" : "Папка загружаецца", + "Filename" : "Назва файла", + "Folder name" : "Назва папкі", + "Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" перайменаваны ў \"{newName}\"", + "Rename file" : "Перайменаваць файл", + "Folder" : "Папка", + "Unknown file type" : "Невядомы тып файла", + "{ext} image" : "Відарыс {ext}", + "{ext} video" : "Відэа {ext}", + "{ext} audio" : "Аўдыя {ext} ", + "{ext} text" : "Тэкст {ext}", + "Pending" : "У чаканні", + "Unknown date" : "Невядомая дата", + "Clear filter" : "Ачысціць фільтр", + "Modified" : "Зменены", + "Type" : "Тып", + "Active filters" : "Актыўныя фільтры", + "Remove filter" : "Выдаліць фільтр", + "Name" : "Назва", + "File type" : "Тып файла", + "Size" : "Памер", + "Actions" : "Дзеянні", + "List of files and folders." : "Спіс файлаў і папак.", + "File not found" : "Файл не знойдзены", + "{usedQuotaByte} used" : "Выкарыстана {usedQuotaByte}", + "{used} of {quota} used" : "Выкарыстана {used} з {quota}", + "{relative}% used" : "Выкарыстана {relative}%", + "New folder" : "Новая папка", + "Create new folder" : "Стварыць новую папку", + "This name is already in use." : "Гэта назва ўжо выкарыстоўваецца.", + "Create" : "Стварыць", + "Fill template fields" : "Запоўніце палі шаблону", + "Unknown error" : "Невядомая памылка", + "Change" : "Змяніць", + "New owner" : "Новы ўладальнік", + "Share" : "Абагуліць", + "Upload was cancelled by user" : "Карыстальнік скасаваў запампоўванне", + "Go back" : "Назад", + "Your files" : "Вашы файлы", + "File cannot be accessed" : "Немагчыма атрымаць доступ да файла", + "The file could not be found or you do not have permissions to view it. Ask the sender to share it." : "Файл не знойдзены, або ў вас няма правоў на яго прагляд. Папрасіце адпраўніка абагуліць яго.", + "No search results for “{query}”" : "Няма вынікаў пошуку па запыце \"{query}\"", + "Search for files" : "Пошук файлаў", + "Clipboard is not available" : "Буфер абмену недаступны", + "WebDAV URL copied" : "URL-адрас WebDAV скапіяваны", + "General" : "Агульныя", + "All files" : "Усе файлы", + "Personal files" : "Асабістыя файлы", + "Appearance" : "Знешні выгляд", + "Show file extensions" : "Паказваць пашырэнні файлаў", + "WebDAV" : "WebDAV", + "WebDAV URL" : "URL-адрас WebDAV", + "Copy" : "Капіяваць", + "Warnings" : "Папярэджанні", + "Keyboard shortcuts" : "Спалучэнні клавіш", + "File actions" : "Дзеянні з файламі", + "Rename" : "Перайменаваць", + "Delete" : "Выдаліць", + "Manage tags" : "Кіраванне тэгамі", + "Select all files" : "Выбраць усе файлы", + "Navigation" : "Навігацыя", + "You" : "Вы", + "Error while loading the file data" : "Памылка пры загрузцы даных файла", + "Owner" : "Уладальнік", + "Remove from favorites" : "Выдаліць з абранага", + "Add to favorites" : "У абранае", + "Tags" : "Тэгі", + "Unable to create new file from template" : "Немагчыма стварыць новы файл з шаблона", + "Pick a template for {name}" : "Выберыце шаблон для {name}", + "Create a new file with the selected template" : "Стварыць файл на падставе выбранага шаблона", + "Creating file" : "Стварэнне файла", + "Save as {displayName}" : "Захаваць як {displayName}", + "Save as …" : "Захаваць як …", + "Converting files …" : "Канвертацыя файлаў …", + "Converting file …" : "Канвертацыя файла …", + "File successfully converted" : "Файл паспяхова сканвертаваны", + "Delete permanently" : "Выдаліць назаўжды", + "Delete file" : "Выдаліць файл", + "Delete files" : "Выдаліць файлы", + "Delete folder" : "Выдаліць папку", + "Delete folders" : "Выдаліць папкі", + "_You are about to permanently delete {count} item_::_You are about to permanently delete {count} items_" : ["Вы збіраецеся назаўжды выдаліць {count} элемент","Вы збіраецеся назаўжды выдаліць {count} элементы","Вы збіраецеся назаўжды выдаліць {count} элементаў","Вы збіраецеся назаўжды выдаліць {count} элементаў"], + "_You are about to delete {count} item_::_You are about to delete {count} items_" : ["Вы збіраецеся выдаліць {count} элемент","Вы збіраецеся выдаліць {count} элементы","Вы збіраецеся выдаліць {count} элементаў","Вы збіраецеся выдаліць {count} элементаў"], + "Confirm deletion" : "Пацвердзіць выдаленне", + "Cancel" : "Скасаваць", + "Download" : "Спампаваць", + "Moving \"{source}\" to \"{destination}\" …" : "Перамяшчэнне \"{source}\" у \"{destination}\" …", + "Copying \"{source}\" to \"{destination}\" …" : "Капіяванне \"{source}\" у \"{destination}\" …", + "This file/folder is already in that directory" : "Гэты файл/папка ўжо знаходзіцца ў гэтым каталогу", + "(copy)" : "(копія)", + "(copy %n)" : "(копія %n)", + "A file or folder with that name already exists in this folder" : "Файл або папка з такой назвай ужо існуе ў гэтай папцы", + "The files are locked" : "Файлы заблакіраваны", + "The file does not exist anymore" : "Файл больш не існуе", + "Choose destination" : "Выберыце прызначэнне", + "Copy to {target}" : "Капіяваць у {target}", + "Move to {target}" : "Перамясціць у {target}", + "Move" : "Перамясціць", + "Move or copy" : "Перамясціць або капіяваць", + "Open folder {displayName}" : "Адкрыць папку {displayName}", + "Open locally" : "Адкрыць лакальна", + "Open file locally" : "Адкрыць файл лакальна", + "Today" : "Сёння", + "Last 7 days" : "Апошнія 7 дзён", + "Last 30 days" : "Апошнія 30 дзён", + "This year ({year})" : "Гэты год ({year})", + "Last year ({year})" : "Мінулы год ({year})", + "Documents" : "Дакументы", + "Spreadsheets" : "Табліцы", + "Presentations" : "Прэзентацыі", + "PDFs" : "PDF-файлы", + "Folders" : "Папкі", + "Audio" : "Аўдыя", + "Images" : "Відарысы", + "Videos" : "Відэа", + "Created new folder \"{name}\"" : "Створана новая папка \"{name}\"", + "Unable to initialize the templates directory" : "Немагчыма ініцыялізаваць каталог шаблонаў", + "Create templates folder" : "Стварыць папку шаблонаў", + "Templates" : "Шаблоны", + "New template folder" : "Новая папка шаблонаў", + "In folder" : "У папцы", + "One of the dropped files could not be processed" : "Адзін з перацягнутых файлаў не ўдалося апрацаваць", + "Your browser does not support the Filesystem API. Directories will not be uploaded" : "Ваш браўзер не падтрымлівае Filesystem API. Каталогі не будуць запампаваныя", + "No files to upload" : "Няма файлаў для запампоўвання", + "Unable to create the directory {directory}" : "Немагчыма стварыць папку {directory}", + "Some files could not be uploaded" : "Некаторыя файлы не ўдалося запампаваць", + "Files uploaded successfully" : "Файлы паспяхова запампаваныя", + "No files to process" : "Няма файлаў для апрацоўкі", + "Some files could not be copied" : "Некаторыя файлы не ўдалося скапіяваць", + "Some files could not be moved" : "Некаторыя файлы не ўдалося перамясціць", + "Files copied successfully" : "Файлы паспяхова скапіяваны", + "Files moved successfully" : "Файлы паспяхова перамешчаны", + "Conflicts resolution skipped" : "Рашэнне канфліктаў прапушчана", + "Upload cancelled" : "Запампоўванне скасавана", + "Could not rename \"{oldName}\"" : "Не атрымалася перайменаваць \"{oldName}\"", + "Unexpected error: {error}" : "Нечаканая памылка: {error}", + "_%n file_::_%n files_" : ["%n файл","%n файлы","%n файлаў","%n файлаў"], + "_%n folder_::_%n folders_" : ["%n папка","%n папкі","%n папак","%n папак"], + "_%n hidden_::_%n hidden_" : ["%n схаваны","%n схаваныя","%n схаваных","%n схаваных"], + "Filename must not be empty." : "Назва файла не можа быць пустой.", + "No favorites yet" : "Пакуль няма абраных", + "List of your files and folders." : "Спіс вашых файлаў і папак.", + "List of your files and folders that are not shared." : "Спіс вашых неабагуленых файлаў і папак.", + "No personal files found" : "Асабістых файлаў не знойдзена", + "Files that are not shared will show up here." : "Тут будуць адлюстроўвацца неабагуленыя файлы.", + "Recent" : "Нядаўнія", + "List of recently modified files and folders." : "Спіс нядаўна змененых файлаў і папак.", + "No recently modified files" : "Няма нядаўна змененых файлаў", + "Files and folders you recently modified will show up here." : "Тут будуць адлюстроўвацца нядаўна змененыя вамі файлы і папкі.", + "Search" : "Пошук", + "File could not be found" : "Файл не знойдзены", + "Close" : "Закрыць", + "Could not create folder \"{dir}\"" : "Не ўдалося стварыць папку \"{dir}\"", + "This will stop your current uploads." : "Гэта спыніць вашы бягучыя запампоўкі.", + "Upload cancelled." : "Запампоўванне скасавана.", + "Processing files …" : "Апрацоўка файлаў …", + "…" : "…", + "Unable to upload {filename} as it is a directory or has 0 bytes" : "Немагчыма запампаваць {filename}, бо гэта каталог або ён мае памер 0 байтаў", + "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})", + "Set reminder" : "Задаць напамін", + "Edit locally" : "Рэдагаваць лакальна", + "Open" : "Адкрыць", + "Unable to determine date" : "Немагчыма вызначыць дату", + "copy" : "копія", + "{newName} already exists" : "{newName} ужо існуе", + "{dirs} and {files}" : "{dirs} і {files}", + "_Uploading %n file_::_Uploading %n files_" : ["Запампоўванне %n файла","Запампоўванне %n файлаў","Запампоўванне %n файлаў","Запампоўванне %n файлаў"], + "New" : "Новы", + "{used}%" : "{used}%", + "{used} used" : "Выкарыстана {used}", + "Path" : "Шлях", + "Upload file" : "Запампаваць файл", + "WebDAV URL copied to clipboard" : "URL-адрас WebDAV скапіяваны ў буфер абмену", + "Copy to clipboard" : "Капіяваць у буфер абмену", + "Deletion cancelled" : "Выдаленне скасавана", + "Move cancelled" : "Перамяшчэнне скасавана", + "Photos and images" : "Фота і відарысы", + "New folder creation cancelled" : "Стварэнне новай папкі скасавана", + "_{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 папка"], + "All folders" : "Усе папкі", + "Personal Files" : "Асабістыя файлы", + "Text file" : "Тэкставы файл", + "%1$s (renamed)" : "%1$s (перайменаваны)", + "Rename a file" : "Перайменаваць файл", + "Delete a file" : "Выдаліць файл", + "Deselect all files" : "Скасаваць выбар усіх файлаў", + "Select a range of files" : "Выберыце дыяпазон файлаў" +},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" +}
\ No newline at end of file diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js index 4b897553f31..f5b58fcde18 100644 --- a/apps/files/l10n/de_DE.js +++ b/apps/files/l10n/de_DE.js @@ -115,7 +115,7 @@ OC.L10N.register( "Name" : "Name", "File type" : "Dateityp", "Size" : "Größe", - "{displayName}: failed on some elements" : "{displayName}: Ist bei einigen Elementen fehlgeschlagen", + "{displayName}: failed on some elements" : "{displayName}: Ist bei einigen Elementen fehlgeschlagen", "{displayName}: done" : "{displayName}: Abgeschlossen", "{displayName}: failed" : "{displayName}: Fehlgeschlagen", "Actions" : "Aktionen", @@ -126,8 +126,8 @@ OC.L10N.register( "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.", "File not found" : "Datei nicht gefunden", "_{count} selected_::_{count} selected_" : ["{count} ausgewählt","{count} ausgewählt"], - "Search everywhere …" : "Überall suchen …", - "Search here …" : "Hier suchen …", + "Search everywhere …" : "Überall suchen …", + "Search here …" : "Hier suchen …", "Search scope options" : "Suchbereichsoptionen", "Search here" : "Hier suchen", "{usedQuotaByte} used" : "{usedQuotaByte} verwendet", @@ -224,7 +224,7 @@ OC.L10N.register( "Selection" : "Auswahl", "Select all files" : "Alle Dateien auswählen", "Deselect all" : "Auswahl aufheben", - "Select or deselect" : "Aus- oder Abwählen", + "Select or deselect" : "Aus- oder abwählen", "Select a range" : "Einen Bereich auswählen", "Navigation" : "Navigation", "Go to parent folder" : "Zum übergeordneten Ordner wechseln", diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json index 26b5abdbd75..403987f92f0 100644 --- a/apps/files/l10n/de_DE.json +++ b/apps/files/l10n/de_DE.json @@ -113,7 +113,7 @@ "Name" : "Name", "File type" : "Dateityp", "Size" : "Größe", - "{displayName}: failed on some elements" : "{displayName}: Ist bei einigen Elementen fehlgeschlagen", + "{displayName}: failed on some elements" : "{displayName}: Ist bei einigen Elementen fehlgeschlagen", "{displayName}: done" : "{displayName}: Abgeschlossen", "{displayName}: failed" : "{displayName}: Fehlgeschlagen", "Actions" : "Aktionen", @@ -124,8 +124,8 @@ "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.", "File not found" : "Datei nicht gefunden", "_{count} selected_::_{count} selected_" : ["{count} ausgewählt","{count} ausgewählt"], - "Search everywhere …" : "Überall suchen …", - "Search here …" : "Hier suchen …", + "Search everywhere …" : "Überall suchen …", + "Search here …" : "Hier suchen …", "Search scope options" : "Suchbereichsoptionen", "Search here" : "Hier suchen", "{usedQuotaByte} used" : "{usedQuotaByte} verwendet", @@ -222,7 +222,7 @@ "Selection" : "Auswahl", "Select all files" : "Alle Dateien auswählen", "Deselect all" : "Auswahl aufheben", - "Select or deselect" : "Aus- oder Abwählen", + "Select or deselect" : "Aus- oder abwählen", "Select a range" : "Einen Bereich auswählen", "Navigation" : "Navigation", "Go to parent folder" : "Zum übergeordneten Ordner wechseln", diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js index 6b64267ec74..2b19b2bf39c 100644 --- a/apps/files/l10n/pt_BR.js +++ b/apps/files/l10n/pt_BR.js @@ -115,6 +115,9 @@ OC.L10N.register( "Name" : "Nome", "File type" : "Tipo de arquivo", "Size" : "Tamanho", + "{displayName}: failed on some elements" : "{displayName}: falhou em alguns elementos", + "{displayName}: done" : "{displayName}: feito", + "{displayName}: failed" : "{displayName}: fracassado", "Actions" : "Ações", "(selected)" : "(selecionados)", "List of files and folders." : "Lista de arquivos e pastas.", @@ -123,7 +126,10 @@ OC.L10N.register( "This list is not fully rendered for performance 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 à medida que você navegar pela lista.", "File not found" : "Arquivo não encontrado", "_{count} selected_::_{count} selected_" : ["{count} selecionado","{count} selecionados","{count} selecionados"], + "Search everywhere …" : "Pesquise em todos os lugares…", + "Search here …" : "Pesquise aqui…", "Search scope options" : "Opções de escopo da pesquisa", + "Search here" : "Pesquise aqui", "{usedQuotaByte} used" : "{usedQuotaByte} usado", "{used} of {quota} used" : "{used} de {quota} usados", "{relative}% used" : "{relative}% usado", @@ -187,6 +193,7 @@ OC.L10N.register( "No search results for “{query}”" : "Sem resultados de pesquisa para \"{query}\"", "Search for files" : "Pesquisar arquivos", "Clipboard is not available" : "A área de transferência não está disponível", + "WebDAV URL copied" : "URL do WebDAV copiada", "General" : "Geral", "Default view" : "Visualização padrão", "All files" : "Todos os arquivos", @@ -197,24 +204,37 @@ OC.L10N.register( "Appearance" : "Aparência", "Show hidden files" : "Mostrar arquivos ocultos", "Show file type column" : "Mostrar coluna de tipo de arquivo", + "Show file extensions" : "Mostrar extensões de arquivo", "Crop image previews" : "Cortar visualizações de imagem", "Additional settings" : "Configurações adicionais", "WebDAV" : "WebDAV", "WebDAV URL" : "URL WebDAV", "Copy" : "Copiar", + "How to access files using WebDAV" : "Como acessar arquivos usando WebDAV", "Two-Factor Authentication is enabled for your account, and therefore you need to use an app password to connect an external WebDAV client." : "A Autenticação de Dois Fatores está ativada para sua conta e, portanto, você precisa usar uma senha de aplicativo para conectar um cliente WebDAV externo.", "Warnings" : "Avisos", + "Warn before changing a file extension" : "Avisar antes de alterar uma extensão de arquivo", + "Warn before deleting files" : "Avisar antes de excluir arquivos", "Keyboard shortcuts" : "Atalhos do teclado", "File actions" : "Ações de arquivos", "Rename" : "Renomear", "Delete" : "Excluir", + "Add or remove favorite" : "Adicionar ou remover favoritos", "Manage tags" : "Gerenciar etiquetas", "Selection" : "Seleção", "Select all files" : "Selecionar todos os arquivos", "Deselect all" : "Desselecionar todos", + "Select or deselect" : "Selecionar ou desmarcar", + "Select a range" : "Selecione um intervalo", "Navigation" : "Navegação", + "Go to parent folder" : "Ir para a pasta mãe", + "Go to file above" : "Vá para o arquivo acima", + "Go to file below" : "Vá para o arquivo abaixo", + "Go left in grid" : "Vá para a esquerda na grade", + "Go right in grid" : "Vá para a direita na grade", "View" : "Visualização", "Toggle grid view" : "Alternar a visão em grade", + "Open file sidebar" : "Abrir barra lateral de arquivo", "Show those shortcuts" : "Mostrar esses atalhos", "You" : "Você", "Shared multiple times with different people" : "Compartilhado várias vezes com pessoas diferentes", @@ -322,6 +342,7 @@ OC.L10N.register( "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}\"", "This operation is forbidden" : "Esta operação é proibida", + "This folder is unavailable, please try again later or contact the administration" : "Esta pasta não está disponível, tente novamente mais tarde ou entre em contato com a administração", "Storage is temporarily not available" : "O armazenamento está temporariamente indisponível", "Unexpected error: {error}" : "Erro inesperado: {error}", "_%n file_::_%n files_" : ["%n arquivo","%n de arquivos","%n arquivos"], diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json index dd50c32b179..55a603b6107 100644 --- a/apps/files/l10n/pt_BR.json +++ b/apps/files/l10n/pt_BR.json @@ -113,6 +113,9 @@ "Name" : "Nome", "File type" : "Tipo de arquivo", "Size" : "Tamanho", + "{displayName}: failed on some elements" : "{displayName}: falhou em alguns elementos", + "{displayName}: done" : "{displayName}: feito", + "{displayName}: failed" : "{displayName}: fracassado", "Actions" : "Ações", "(selected)" : "(selecionados)", "List of files and folders." : "Lista de arquivos e pastas.", @@ -121,7 +124,10 @@ "This list is not fully rendered for performance 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 à medida que você navegar pela lista.", "File not found" : "Arquivo não encontrado", "_{count} selected_::_{count} selected_" : ["{count} selecionado","{count} selecionados","{count} selecionados"], + "Search everywhere …" : "Pesquise em todos os lugares…", + "Search here …" : "Pesquise aqui…", "Search scope options" : "Opções de escopo da pesquisa", + "Search here" : "Pesquise aqui", "{usedQuotaByte} used" : "{usedQuotaByte} usado", "{used} of {quota} used" : "{used} de {quota} usados", "{relative}% used" : "{relative}% usado", @@ -185,6 +191,7 @@ "No search results for “{query}”" : "Sem resultados de pesquisa para \"{query}\"", "Search for files" : "Pesquisar arquivos", "Clipboard is not available" : "A área de transferência não está disponível", + "WebDAV URL copied" : "URL do WebDAV copiada", "General" : "Geral", "Default view" : "Visualização padrão", "All files" : "Todos os arquivos", @@ -195,24 +202,37 @@ "Appearance" : "Aparência", "Show hidden files" : "Mostrar arquivos ocultos", "Show file type column" : "Mostrar coluna de tipo de arquivo", + "Show file extensions" : "Mostrar extensões de arquivo", "Crop image previews" : "Cortar visualizações de imagem", "Additional settings" : "Configurações adicionais", "WebDAV" : "WebDAV", "WebDAV URL" : "URL WebDAV", "Copy" : "Copiar", + "How to access files using WebDAV" : "Como acessar arquivos usando WebDAV", "Two-Factor Authentication is enabled for your account, and therefore you need to use an app password to connect an external WebDAV client." : "A Autenticação de Dois Fatores está ativada para sua conta e, portanto, você precisa usar uma senha de aplicativo para conectar um cliente WebDAV externo.", "Warnings" : "Avisos", + "Warn before changing a file extension" : "Avisar antes de alterar uma extensão de arquivo", + "Warn before deleting files" : "Avisar antes de excluir arquivos", "Keyboard shortcuts" : "Atalhos do teclado", "File actions" : "Ações de arquivos", "Rename" : "Renomear", "Delete" : "Excluir", + "Add or remove favorite" : "Adicionar ou remover favoritos", "Manage tags" : "Gerenciar etiquetas", "Selection" : "Seleção", "Select all files" : "Selecionar todos os arquivos", "Deselect all" : "Desselecionar todos", + "Select or deselect" : "Selecionar ou desmarcar", + "Select a range" : "Selecione um intervalo", "Navigation" : "Navegação", + "Go to parent folder" : "Ir para a pasta mãe", + "Go to file above" : "Vá para o arquivo acima", + "Go to file below" : "Vá para o arquivo abaixo", + "Go left in grid" : "Vá para a esquerda na grade", + "Go right in grid" : "Vá para a direita na grade", "View" : "Visualização", "Toggle grid view" : "Alternar a visão em grade", + "Open file sidebar" : "Abrir barra lateral de arquivo", "Show those shortcuts" : "Mostrar esses atalhos", "You" : "Você", "Shared multiple times with different people" : "Compartilhado várias vezes com pessoas diferentes", @@ -320,6 +340,7 @@ "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}\"", "This operation is forbidden" : "Esta operação é proibida", + "This folder is unavailable, please try again later or contact the administration" : "Esta pasta não está disponível, tente novamente mais tarde ou entre em contato com a administração", "Storage is temporarily not available" : "O armazenamento está temporariamente indisponível", "Unexpected error: {error}" : "Erro inesperado: {error}", "_%n file_::_%n files_" : ["%n arquivo","%n de arquivos","%n arquivos"], diff --git a/apps/files/l10n/sr.js b/apps/files/l10n/sr.js index da03fc7ccc4..50b07bbe6ca 100644 --- a/apps/files/l10n/sr.js +++ b/apps/files/l10n/sr.js @@ -115,6 +115,9 @@ OC.L10N.register( "Name" : "Назив", "File type" : "Тип фајла", "Size" : "Величина", + "{displayName}: failed on some elements" : "{displayName}: није успело на неким елементима", + "{displayName}: done" : "{displayName}: завршено", + "{displayName}: failed" : "{displayName}: није успело", "Actions" : "Радње", "(selected)" : "(изабрано)", "List of files and folders." : "Листа фајлова и фолдера.", @@ -123,7 +126,10 @@ OC.L10N.register( "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Ова листа није у потпуности приказана из разлога перформанси. Фајлови ће се приказивати како се крећете кроз листу.", "File not found" : "Фајл није нађен", "_{count} selected_::_{count} selected_" : ["изабран је {count}","изабрана су {count}","изабрано је {count}"], + "Search everywhere …" : "Претражи свуда", + "Search here …" : "Претражи овде…", "Search scope options" : "Опције опсега претраге", + "Search here" : "Претражи овде", "{usedQuotaByte} used" : "{usedQuotaByte} искоришћено", "{used} of {quota} used" : "{used} од {quota} искоришћено", "{relative}% used" : "{relative}% искоришћено", @@ -135,6 +141,7 @@ OC.L10N.register( "Create new folder" : "Направи нову фасциклу", "This name is already in use." : "Ово име се већ користи.", "Create" : "Направи", + "Files starting with a dot are hidden by default" : "Фајлови који почињу тачком су подразумевано скривени", "Fill template fields" : "Попуните поља шаблона", "Submitting fields …" : "Поља се подносе…", "Submit" : "Пошаљи", @@ -186,32 +193,48 @@ OC.L10N.register( "No search results for “{query}”" : "Није нађен ниједан резултат за „{query}”", "Search for files" : "Претражи фајлове", "Clipboard is not available" : "Клипборд није доступан", + "WebDAV URL copied" : "WebDAV URL је копиран", "General" : "Опште", "Default view" : "Подразумевани поглед", "All files" : "Сви фајлови", "Personal files" : "Лични фајлови", "Sort favorites first" : "Сортирај прво омиљене", "Sort folders before files" : "Поређај фолдере испред фајлова", + "Folder tree" : "Стабло фолдера", "Appearance" : "Изглед", "Show hidden files" : "Прикажи скривене фајлове", "Show file type column" : "Прикажи колону са типом фајла", + "Show file extensions" : "Прикажи екстензије фајла", "Crop image previews" : "Опсецање прегледа слика", "Additional settings" : "Додатне поставке", "WebDAV" : "ВебДАВ", "WebDAV URL" : "WebDAV URL", "Copy" : "Копирај", + "How to access files using WebDAV" : "Како да приступите фајловима преко WebDAV протокола", + "Two-Factor Authentication is enabled for your account, and therefore you need to use an app password to connect an external WebDAV client." : "Двофакторска потврда идентитета је укључена за ваш налог, тако да морате користити лозинку апликације да повежете спољни WebDAV клијент.", "Warnings" : "Упозорења", + "Warn before changing a file extension" : "Упозори пре измене екстензије фајла", + "Warn before deleting files" : "Упозори пре брисања фајлова", "Keyboard shortcuts" : "Пречице на тастатури", "File actions" : "Фајл акције", "Rename" : "Преименуј", "Delete" : "Обриши", + "Add or remove favorite" : "Додај или уклони омиљене", "Manage tags" : "Управљање ознакама", "Selection" : "Избор", "Select all files" : "Изабери све фајлове", "Deselect all" : "Поништи цео избор", + "Select or deselect" : "Изабери или уклони избор", + "Select a range" : "Изабери опсег", "Navigation" : "Навигација", + "Go to parent folder" : "Иди на фолдер родитељ", + "Go to file above" : "Иди на фајл изнад", + "Go to file below" : "Иди на фајл испод", + "Go left in grid" : "Иди на лево у мрежи", + "Go right in grid" : "Иди на десно у мреж", "View" : "Погледај", "Toggle grid view" : "Укључи/искључи приказ мреже", + "Open file sidebar" : "Отвори бочну траку за фајл", "Show those shortcuts" : "Прикажи те пречице", "You" : "Ви", "Shared multiple times with different people" : "Дељено више пута са разним људима", @@ -300,6 +323,7 @@ OC.L10N.register( "Templates" : "Шаблони", "New template folder" : "Нови фолдер шаблона", "In folder" : "У фолдеру", + "Search in all files" : "Претражи у свим фајловима", "Search in folder: {folder}" : "Претрага у фолдеру: {folder}", "One of the dropped files could not be processed" : "Један од упуштених фајлова не може да се обради", "Your browser does not support the Filesystem API. Directories will not be uploaded" : "Ваш интернет прегледач не подржава Filesystem API. Нећете моћи да отпремате директоријуме", @@ -318,6 +342,7 @@ OC.L10N.register( "The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Назив „{newName}” се већ користи у директоријуму „{dir}”. Молимо вас да изаберете неко друго име.", "Could not rename \"{oldName}\"" : "Не може да се промени име фајла „{oldName}”", "This operation is forbidden" : "Ова радња је забрањена", + "This folder is unavailable, please try again later or contact the administration" : "Овај фолдер није доступан, молимо вас да покушате касније или да контактирате администрацију", "Storage is temporarily not available" : "Складиште привремено није доступно", "Unexpected error: {error}" : "Неочекивана грешка: {error}", "_%n file_::_%n files_" : ["%n фајл","%n фајла","%n фајлова"], diff --git a/apps/files/l10n/sr.json b/apps/files/l10n/sr.json index b97d3ffc9b0..8746aa285a7 100644 --- a/apps/files/l10n/sr.json +++ b/apps/files/l10n/sr.json @@ -113,6 +113,9 @@ "Name" : "Назив", "File type" : "Тип фајла", "Size" : "Величина", + "{displayName}: failed on some elements" : "{displayName}: није успело на неким елементима", + "{displayName}: done" : "{displayName}: завршено", + "{displayName}: failed" : "{displayName}: није успело", "Actions" : "Радње", "(selected)" : "(изабрано)", "List of files and folders." : "Листа фајлова и фолдера.", @@ -121,7 +124,10 @@ "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Ова листа није у потпуности приказана из разлога перформанси. Фајлови ће се приказивати како се крећете кроз листу.", "File not found" : "Фајл није нађен", "_{count} selected_::_{count} selected_" : ["изабран је {count}","изабрана су {count}","изабрано је {count}"], + "Search everywhere …" : "Претражи свуда", + "Search here …" : "Претражи овде…", "Search scope options" : "Опције опсега претраге", + "Search here" : "Претражи овде", "{usedQuotaByte} used" : "{usedQuotaByte} искоришћено", "{used} of {quota} used" : "{used} од {quota} искоришћено", "{relative}% used" : "{relative}% искоришћено", @@ -133,6 +139,7 @@ "Create new folder" : "Направи нову фасциклу", "This name is already in use." : "Ово име се већ користи.", "Create" : "Направи", + "Files starting with a dot are hidden by default" : "Фајлови који почињу тачком су подразумевано скривени", "Fill template fields" : "Попуните поља шаблона", "Submitting fields …" : "Поља се подносе…", "Submit" : "Пошаљи", @@ -184,32 +191,48 @@ "No search results for “{query}”" : "Није нађен ниједан резултат за „{query}”", "Search for files" : "Претражи фајлове", "Clipboard is not available" : "Клипборд није доступан", + "WebDAV URL copied" : "WebDAV URL је копиран", "General" : "Опште", "Default view" : "Подразумевани поглед", "All files" : "Сви фајлови", "Personal files" : "Лични фајлови", "Sort favorites first" : "Сортирај прво омиљене", "Sort folders before files" : "Поређај фолдере испред фајлова", + "Folder tree" : "Стабло фолдера", "Appearance" : "Изглед", "Show hidden files" : "Прикажи скривене фајлове", "Show file type column" : "Прикажи колону са типом фајла", + "Show file extensions" : "Прикажи екстензије фајла", "Crop image previews" : "Опсецање прегледа слика", "Additional settings" : "Додатне поставке", "WebDAV" : "ВебДАВ", "WebDAV URL" : "WebDAV URL", "Copy" : "Копирај", + "How to access files using WebDAV" : "Како да приступите фајловима преко WebDAV протокола", + "Two-Factor Authentication is enabled for your account, and therefore you need to use an app password to connect an external WebDAV client." : "Двофакторска потврда идентитета је укључена за ваш налог, тако да морате користити лозинку апликације да повежете спољни WebDAV клијент.", "Warnings" : "Упозорења", + "Warn before changing a file extension" : "Упозори пре измене екстензије фајла", + "Warn before deleting files" : "Упозори пре брисања фајлова", "Keyboard shortcuts" : "Пречице на тастатури", "File actions" : "Фајл акције", "Rename" : "Преименуј", "Delete" : "Обриши", + "Add or remove favorite" : "Додај или уклони омиљене", "Manage tags" : "Управљање ознакама", "Selection" : "Избор", "Select all files" : "Изабери све фајлове", "Deselect all" : "Поништи цео избор", + "Select or deselect" : "Изабери или уклони избор", + "Select a range" : "Изабери опсег", "Navigation" : "Навигација", + "Go to parent folder" : "Иди на фолдер родитељ", + "Go to file above" : "Иди на фајл изнад", + "Go to file below" : "Иди на фајл испод", + "Go left in grid" : "Иди на лево у мрежи", + "Go right in grid" : "Иди на десно у мреж", "View" : "Погледај", "Toggle grid view" : "Укључи/искључи приказ мреже", + "Open file sidebar" : "Отвори бочну траку за фајл", "Show those shortcuts" : "Прикажи те пречице", "You" : "Ви", "Shared multiple times with different people" : "Дељено више пута са разним људима", @@ -298,6 +321,7 @@ "Templates" : "Шаблони", "New template folder" : "Нови фолдер шаблона", "In folder" : "У фолдеру", + "Search in all files" : "Претражи у свим фајловима", "Search in folder: {folder}" : "Претрага у фолдеру: {folder}", "One of the dropped files could not be processed" : "Један од упуштених фајлова не може да се обради", "Your browser does not support the Filesystem API. Directories will not be uploaded" : "Ваш интернет прегледач не подржава Filesystem API. Нећете моћи да отпремате директоријуме", @@ -316,6 +340,7 @@ "The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Назив „{newName}” се већ користи у директоријуму „{dir}”. Молимо вас да изаберете неко друго име.", "Could not rename \"{oldName}\"" : "Не може да се промени име фајла „{oldName}”", "This operation is forbidden" : "Ова радња је забрањена", + "This folder is unavailable, please try again later or contact the administration" : "Овај фолдер није доступан, молимо вас да покушате касније или да контактирате администрацију", "Storage is temporarily not available" : "Складиште привремено није доступно", "Unexpected error: {error}" : "Неочекивана грешка: {error}", "_%n file_::_%n files_" : ["%n фајл","%n фајла","%n фајлова"], diff --git a/apps/files/lib/Command/Object/Multi/Rename.php b/apps/files/lib/Command/Object/Multi/Rename.php new file mode 100644 index 00000000000..562c68eb07f --- /dev/null +++ b/apps/files/lib/Command/Object/Multi/Rename.php @@ -0,0 +1,108 @@ +<?php + +declare(strict_types=1); +/** + * SPDX-FileCopyrightText: 2025 Robin Appelman <robin@icewind.nl> + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\Files\Command\Object\Multi; + +use OC\Core\Command\Base; +use OC\Files\ObjectStore\PrimaryObjectStoreConfig; +use OCP\IConfig; +use OCP\IDBConnection; +use Symfony\Component\Console\Helper\QuestionHelper; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Question\ConfirmationQuestion; + +class Rename extends Base { + public function __construct( + private readonly IDBConnection $connection, + private readonly PrimaryObjectStoreConfig $objectStoreConfig, + private readonly IConfig $config, + ) { + parent::__construct(); + } + + protected function configure(): void { + parent::configure(); + $this + ->setName('files:object:multi:rename-config') + ->setDescription('Rename an object store configuration and move all users over to the new configuration,') + ->addArgument('source', InputArgument::REQUIRED, 'Object store configuration to rename') + ->addArgument('target', InputArgument::REQUIRED, 'New name for the object store configuration'); + } + + public function execute(InputInterface $input, OutputInterface $output): int { + $source = $input->getArgument('source'); + $target = $input->getArgument('target'); + + $configs = $this->objectStoreConfig->getObjectStoreConfigs(); + if (!isset($configs[$source])) { + $output->writeln('<error>Unknown object store configuration: ' . $source . '</error>'); + return 1; + } + + if ($source === 'root') { + $output->writeln('<error>Renaming the root configuration is not supported.</error>'); + return 1; + } + + if ($source === 'default') { + $output->writeln('<error>Renaming the default configuration is not supported.</error>'); + return 1; + } + + if (!isset($configs[$target])) { + $output->writeln('<comment>Target object store configuration ' . $target . ' doesn\'t exist yet.</comment>'); + $output->writeln('The target configuration can be created automatically.'); + $output->writeln('However, as this depends on modifying the config.php, this only works as long as the instance runs on a single node or all nodes in a clustered setup have a shared config file (such as from a shared network mount).'); + $output->writeln('If the different nodes have a separate copy of the config.php file, the automatic object store configuration creation will lead to the configuration going out of sync.'); + $output->writeln('If these requirements are not met, you can manually create the target object store configuration in each node\'s configuration before running the command.'); + $output->writeln(''); + $output->writeln('<error>Failure to check these requirements will lead to data loss for users.</error>'); + + /** @var QuestionHelper $helper */ + $helper = $this->getHelper('question'); + $question = new ConfirmationQuestion('Automatically create target object store configuration? [y/N] ', false); + if ($helper->ask($input, $output, $question)) { + $configs[$target] = $configs[$source]; + + // update all aliases + foreach ($configs as &$config) { + if ($config === $source) { + $config = $target; + } + } + $this->config->setSystemValue('objectstore', $configs); + } else { + return 0; + } + } elseif (($configs[$source] !== $configs[$target]) || $configs[$source] !== $target) { + $output->writeln('<error>Source and target configuration differ.</error>'); + $output->writeln(''); + $output->writeln('To ensure proper migration of users, the source and target configuration must be the same to ensure that the objects for the moved users exist on the target configuration.'); + $output->writeln('The usual migration process consists of creating a clone of the old configuration, moving the users from the old configuration to the new one, and then adjust the old configuration that is longer used.'); + return 1; + } + + $query = $this->connection->getQueryBuilder(); + $query->update('preferences') + ->set('configvalue', $query->createNamedParameter($target)) + ->where($query->expr()->eq('appid', $query->createNamedParameter('homeobjectstore'))) + ->andWhere($query->expr()->eq('configkey', $query->createNamedParameter('objectstore'))) + ->andWhere($query->expr()->eq('configvalue', $query->createNamedParameter($source))); + $count = $query->executeStatement(); + + if ($count > 0) { + $output->writeln('Moved <info>' . $count . '</info> users'); + } else { + $output->writeln('No users moved'); + } + + return 0; + } +} diff --git a/apps/files/lib/Command/Object/Multi/Users.php b/apps/files/lib/Command/Object/Multi/Users.php new file mode 100644 index 00000000000..e8f7d012641 --- /dev/null +++ b/apps/files/lib/Command/Object/Multi/Users.php @@ -0,0 +1,98 @@ +<?php + +declare(strict_types=1); +/** + * SPDX-FileCopyrightText: 2025 Robin Appelman <robin@icewind.nl> + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\Files\Command\Object\Multi; + +use OC\Core\Command\Base; +use OC\Files\ObjectStore\PrimaryObjectStoreConfig; +use OCP\IConfig; +use OCP\IUser; +use OCP\IUserManager; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class Users extends Base { + public function __construct( + private readonly IUserManager $userManager, + private readonly PrimaryObjectStoreConfig $objectStoreConfig, + private readonly IConfig $config, + ) { + parent::__construct(); + } + + protected function configure(): void { + parent::configure(); + $this + ->setName('files:object:multi:users') + ->setDescription('Get the mapping between users and object store buckets') + ->addOption('bucket', 'b', InputOption::VALUE_REQUIRED, 'Only list users using the specified bucket') + ->addOption('object-store', 'o', InputOption::VALUE_REQUIRED, 'Only list users using the specified object store configuration') + ->addOption('user', 'u', InputOption::VALUE_REQUIRED, 'Only show the mapping for the specified user, ignores all other options'); + } + + public function execute(InputInterface $input, OutputInterface $output): int { + if ($userId = $input->getOption('user')) { + $user = $this->userManager->get($userId); + if (!$user) { + $output->writeln("<error>User $userId not found</error>"); + return 1; + } + $users = new \ArrayIterator([$user]); + } else { + $bucket = (string)$input->getOption('bucket'); + $objectStore = (string)$input->getOption('object-store'); + if ($bucket !== '' && $objectStore === '') { + $users = $this->getUsers($this->config->getUsersForUserValue('homeobjectstore', 'bucket', $bucket)); + } elseif ($bucket === '' && $objectStore !== '') { + $users = $this->getUsers($this->config->getUsersForUserValue('homeobjectstore', 'objectstore', $objectStore)); + } elseif ($bucket) { + $users = $this->getUsers(array_intersect( + $this->config->getUsersForUserValue('homeobjectstore', 'bucket', $bucket), + $this->config->getUsersForUserValue('homeobjectstore', 'objectstore', $objectStore) + )); + } else { + $users = $this->userManager->getSeenUsers(); + } + } + + $this->writeStreamingTableInOutputFormat($input, $output, $this->infoForUsers($users), 100); + return 0; + } + + /** + * @param string[] $userIds + * @return \Iterator<IUser> + */ + private function getUsers(array $userIds): \Iterator { + foreach ($userIds as $userId) { + $user = $this->userManager->get($userId); + if ($user) { + yield $user; + } + } + } + + /** + * @param \Iterator<IUser> $users + * @return \Iterator<array> + */ + private function infoForUsers(\Iterator $users): \Iterator { + foreach ($users as $user) { + yield $this->infoForUser($user); + } + } + + private function infoForUser(IUser $user): array { + return [ + 'user' => $user->getUID(), + 'object-store' => $this->objectStoreConfig->getObjectStoreForUser($user), + 'bucket' => $this->objectStoreConfig->getSetBucketForUser($user) ?? 'unset', + ]; + } +} diff --git a/apps/files/lib/Service/OwnershipTransferService.php b/apps/files/lib/Service/OwnershipTransferService.php index 84c99f32109..afef5d2093d 100644 --- a/apps/files/lib/Service/OwnershipTransferService.php +++ b/apps/files/lib/Service/OwnershipTransferService.php @@ -333,15 +333,10 @@ class OwnershipTransferService { if ($path !== "$sourceUid/files") { $sharePage = array_filter($sharePage, function (IShare $share) use ($view, $normalizedPath) { try { - $relativePath = $view->getPath($share->getNodeId()); - $singleFileTranfer = $view->is_file($normalizedPath); - if ($singleFileTranfer) { - return Filesystem::normalizePath($relativePath) === $normalizedPath; - } + $sourceNode = $share->getNode(); + $relativePath = $view->getRelativePath($sourceNode->getPath()); - return mb_strpos( - Filesystem::normalizePath($relativePath . '/', false), - $normalizedPath . '/') === 0; + return str_starts_with($relativePath . '/', $normalizedPath . '/'); } catch (Exception $e) { return false; } @@ -357,7 +352,7 @@ class OwnershipTransferService { return array_values(array_filter(array_map(function (IShare $share) use ($view, $normalizedPath, $output, $sourceUid) { try { - $nodePath = $view->getPath($share->getNodeId()); + $nodePath = $view->getRelativePath($share->getNode()->getPath()); } catch (NotFoundException $e) { $output->writeln("<error>Failed to find path for shared file {$share->getNodeId()} for user $sourceUid, skipping</error>"); return null; |