diff options
Diffstat (limited to 'apps')
228 files changed, 2121 insertions, 544 deletions
diff --git a/apps/dashboard/l10n/ro.js b/apps/dashboard/l10n/ro.js index 8b522b96c13..994add35f36 100644 --- a/apps/dashboard/l10n/ro.js +++ b/apps/dashboard/l10n/ro.js @@ -13,6 +13,8 @@ OC.L10N.register( "Good evening, {name}" : "Bună seara, {name}", "Hello" : "Bună", "Hello, {name}" : "Bună, {name}", + "Happy birthday 🥳🤩🎂🎉" : "La mulți ani 🥳🤩🎂🎉", + "Happy birthday, {name} 🥳🤩🎂🎉" : "La mulți ani, {name} 🥳🤩🎂🎉", "Customize" : "Personalizează", "Edit widgets" : "Editează widget", "Get more widgets from the App Store" : "Obține mai multe widget-uri din App Store", diff --git a/apps/dashboard/l10n/ro.json b/apps/dashboard/l10n/ro.json index 9c1ab72eaa9..02048973360 100644 --- a/apps/dashboard/l10n/ro.json +++ b/apps/dashboard/l10n/ro.json @@ -11,6 +11,8 @@ "Good evening, {name}" : "Bună seara, {name}", "Hello" : "Bună", "Hello, {name}" : "Bună, {name}", + "Happy birthday 🥳🤩🎂🎉" : "La mulți ani 🥳🤩🎂🎉", + "Happy birthday, {name} 🥳🤩🎂🎉" : "La mulți ani, {name} 🥳🤩🎂🎉", "Customize" : "Personalizează", "Edit widgets" : "Editează widget", "Get more widgets from the App Store" : "Obține mai multe widget-uri din App Store", diff --git a/apps/dav/appinfo/info.xml b/apps/dav/appinfo/info.xml index a99bea224b6..ac8886555f6 100644 --- a/apps/dav/appinfo/info.xml +++ b/apps/dav/appinfo/info.xml @@ -60,6 +60,7 @@ <command>OCA\DAV\Command\CreateSubscription</command> <command>OCA\DAV\Command\DeleteCalendar</command> <command>OCA\DAV\Command\DeleteSubscription</command> + <command>OCA\DAV\Command\ExportCalendar</command> <command>OCA\DAV\Command\FixCalendarSyncCommand</command> <command>OCA\DAV\Command\ListAddressbooks</command> <command>OCA\DAV\Command\ListCalendars</command> diff --git a/apps/dav/appinfo/v1/publicwebdav.php b/apps/dav/appinfo/v1/publicwebdav.php index 85dbb19d290..aa16d6c584a 100644 --- a/apps/dav/appinfo/v1/publicwebdav.php +++ b/apps/dav/appinfo/v1/publicwebdav.php @@ -68,7 +68,7 @@ $requestUri = Server::get(IRequest::class)->getRequestUri(); $linkCheckPlugin = new PublicLinkCheckPlugin(); $filesDropPlugin = new FilesDropPlugin(); -$server = $serverFactory->createServer($baseuri, $requestUri, $authPlugin, function (\Sabre\DAV\Server $server) use ($authBackend, $linkCheckPlugin, $filesDropPlugin) { +$server = $serverFactory->createServer(false, $baseuri, $requestUri, $authPlugin, function (\Sabre\DAV\Server $server) use ($authBackend, $linkCheckPlugin, $filesDropPlugin) { $isAjax = in_array('XMLHttpRequest', explode(',', $_SERVER['HTTP_X_REQUESTED_WITH'] ?? '')); /** @var FederatedShareProvider $shareProvider */ $federatedShareProvider = Server::get(FederatedShareProvider::class); diff --git a/apps/dav/appinfo/v1/webdav.php b/apps/dav/appinfo/v1/webdav.php index baeae66bb20..92ff55c850e 100644 --- a/apps/dav/appinfo/v1/webdav.php +++ b/apps/dav/appinfo/v1/webdav.php @@ -68,7 +68,7 @@ $authPlugin->addBackend($bearerAuthPlugin); $requestUri = Server::get(IRequest::class)->getRequestUri(); -$server = $serverFactory->createServer($baseuri, $requestUri, $authPlugin, function () { +$server = $serverFactory->createServer(false, $baseuri, $requestUri, $authPlugin, function () { // use the view for the logged in user return Filesystem::getView(); }); diff --git a/apps/dav/appinfo/v2/publicremote.php b/apps/dav/appinfo/v2/publicremote.php index 27b8716f6ae..62336a9b80f 100644 --- a/apps/dav/appinfo/v2/publicremote.php +++ b/apps/dav/appinfo/v2/publicremote.php @@ -14,12 +14,15 @@ use OCA\DAV\Files\Sharing\FilesDropPlugin; use OCA\DAV\Files\Sharing\PublicLinkCheckPlugin; use OCA\DAV\Storage\PublicOwnerWrapper; use OCA\DAV\Storage\PublicShareWrapper; +use OCA\DAV\Upload\ChunkingPlugin; +use OCA\DAV\Upload\ChunkingV2Plugin; use OCA\FederatedFileSharing\FederatedShareProvider; use OCP\BeforeSabrePubliclyLoadedEvent; use OCP\Constants; use OCP\EventDispatcher\IEventDispatcher; use OCP\Files\IRootFolder; use OCP\Files\Mount\IMountManager; +use OCP\ICacheFactory; use OCP\IConfig; use OCP\IDBConnection; use OCP\IPreview; @@ -75,12 +78,8 @@ $serverFactory = new ServerFactory( $linkCheckPlugin = new PublicLinkCheckPlugin(); $filesDropPlugin = new FilesDropPlugin(); -// Define root url with /public.php/dav/files/TOKEN /** @var string $baseuri defined in public.php */ -preg_match('/(^files\/[a-z0-9-_]+)/i', substr($requestUri, strlen($baseuri)), $match); -$baseuri = $baseuri . $match[0]; - -$server = $serverFactory->createServer($baseuri, $requestUri, $authPlugin, function (\Sabre\DAV\Server $server) use ($authBackend, $linkCheckPlugin, $filesDropPlugin) { +$server = $serverFactory->createServer(true, $baseuri, $requestUri, $authPlugin, function (\Sabre\DAV\Server $server) use ($authBackend, $linkCheckPlugin, $filesDropPlugin) { // GET must be allowed for e.g. showing images and allowing Zip downloads if ($server->httpRequest->getMethod() !== 'GET') { // If this is *not* a GET request we only allow access to public DAV from AJAX or when Server2Server is allowed @@ -142,6 +141,8 @@ $server = $serverFactory->createServer($baseuri, $requestUri, $authPlugin, funct $server->addPlugin($linkCheckPlugin); $server->addPlugin($filesDropPlugin); +$server->addPlugin(new ChunkingV2Plugin(Server::get(ICacheFactory::class))); +$server->addPlugin(new ChunkingPlugin()); // allow setup of additional plugins $event = new BeforeSabrePubliclyLoadedEvent($server); diff --git a/apps/dav/composer/composer/autoload_classmap.php b/apps/dav/composer/composer/autoload_classmap.php index 0e0ae51bb7a..466ef98d433 100644 --- a/apps/dav/composer/composer/autoload_classmap.php +++ b/apps/dav/composer/composer/autoload_classmap.php @@ -64,6 +64,7 @@ return array( 'OCA\\DAV\\CalDAV\\EventReader' => $baseDir . '/../lib/CalDAV/EventReader.php', 'OCA\\DAV\\CalDAV\\EventReaderRDate' => $baseDir . '/../lib/CalDAV/EventReaderRDate.php', 'OCA\\DAV\\CalDAV\\EventReaderRRule' => $baseDir . '/../lib/CalDAV/EventReaderRRule.php', + 'OCA\\DAV\\CalDAV\\Export\\ExportService' => $baseDir . '/../lib/CalDAV/Export/ExportService.php', 'OCA\\DAV\\CalDAV\\FreeBusy\\FreeBusyGenerator' => $baseDir . '/../lib/CalDAV/FreeBusy/FreeBusyGenerator.php', 'OCA\\DAV\\CalDAV\\ICSExportPlugin\\ICSExportPlugin' => $baseDir . '/../lib/CalDAV/ICSExportPlugin/ICSExportPlugin.php', 'OCA\\DAV\\CalDAV\\IRestorable' => $baseDir . '/../lib/CalDAV/IRestorable.php', @@ -159,6 +160,7 @@ return array( 'OCA\\DAV\\Command\\CreateSubscription' => $baseDir . '/../lib/Command/CreateSubscription.php', 'OCA\\DAV\\Command\\DeleteCalendar' => $baseDir . '/../lib/Command/DeleteCalendar.php', 'OCA\\DAV\\Command\\DeleteSubscription' => $baseDir . '/../lib/Command/DeleteSubscription.php', + 'OCA\\DAV\\Command\\ExportCalendar' => $baseDir . '/../lib/Command/ExportCalendar.php', 'OCA\\DAV\\Command\\FixCalendarSyncCommand' => $baseDir . '/../lib/Command/FixCalendarSyncCommand.php', 'OCA\\DAV\\Command\\ListAddressbooks' => $baseDir . '/../lib/Command/ListAddressbooks.php', 'OCA\\DAV\\Command\\ListCalendars' => $baseDir . '/../lib/Command/ListCalendars.php', @@ -282,6 +284,7 @@ return array( 'OCA\\DAV\\Files\\RootCollection' => $baseDir . '/../lib/Files/RootCollection.php', 'OCA\\DAV\\Files\\Sharing\\FilesDropPlugin' => $baseDir . '/../lib/Files/Sharing/FilesDropPlugin.php', 'OCA\\DAV\\Files\\Sharing\\PublicLinkCheckPlugin' => $baseDir . '/../lib/Files/Sharing/PublicLinkCheckPlugin.php', + 'OCA\\DAV\\Files\\Sharing\\RootCollection' => $baseDir . '/../lib/Files/Sharing/RootCollection.php', 'OCA\\DAV\\Listener\\ActivityUpdaterListener' => $baseDir . '/../lib/Listener/ActivityUpdaterListener.php', 'OCA\\DAV\\Listener\\AddMissingIndicesListener' => $baseDir . '/../lib/Listener/AddMissingIndicesListener.php', 'OCA\\DAV\\Listener\\AddressbookListener' => $baseDir . '/../lib/Listener/AddressbookListener.php', diff --git a/apps/dav/composer/composer/autoload_static.php b/apps/dav/composer/composer/autoload_static.php index c6ac9757c5b..995d27adc2d 100644 --- a/apps/dav/composer/composer/autoload_static.php +++ b/apps/dav/composer/composer/autoload_static.php @@ -79,6 +79,7 @@ class ComposerStaticInitDAV 'OCA\\DAV\\CalDAV\\EventReader' => __DIR__ . '/..' . '/../lib/CalDAV/EventReader.php', 'OCA\\DAV\\CalDAV\\EventReaderRDate' => __DIR__ . '/..' . '/../lib/CalDAV/EventReaderRDate.php', 'OCA\\DAV\\CalDAV\\EventReaderRRule' => __DIR__ . '/..' . '/../lib/CalDAV/EventReaderRRule.php', + 'OCA\\DAV\\CalDAV\\Export\\ExportService' => __DIR__ . '/..' . '/../lib/CalDAV/Export/ExportService.php', 'OCA\\DAV\\CalDAV\\FreeBusy\\FreeBusyGenerator' => __DIR__ . '/..' . '/../lib/CalDAV/FreeBusy/FreeBusyGenerator.php', 'OCA\\DAV\\CalDAV\\ICSExportPlugin\\ICSExportPlugin' => __DIR__ . '/..' . '/../lib/CalDAV/ICSExportPlugin/ICSExportPlugin.php', 'OCA\\DAV\\CalDAV\\IRestorable' => __DIR__ . '/..' . '/../lib/CalDAV/IRestorable.php', @@ -174,6 +175,7 @@ class ComposerStaticInitDAV 'OCA\\DAV\\Command\\CreateSubscription' => __DIR__ . '/..' . '/../lib/Command/CreateSubscription.php', 'OCA\\DAV\\Command\\DeleteCalendar' => __DIR__ . '/..' . '/../lib/Command/DeleteCalendar.php', 'OCA\\DAV\\Command\\DeleteSubscription' => __DIR__ . '/..' . '/../lib/Command/DeleteSubscription.php', + 'OCA\\DAV\\Command\\ExportCalendar' => __DIR__ . '/..' . '/../lib/Command/ExportCalendar.php', 'OCA\\DAV\\Command\\FixCalendarSyncCommand' => __DIR__ . '/..' . '/../lib/Command/FixCalendarSyncCommand.php', 'OCA\\DAV\\Command\\ListAddressbooks' => __DIR__ . '/..' . '/../lib/Command/ListAddressbooks.php', 'OCA\\DAV\\Command\\ListCalendars' => __DIR__ . '/..' . '/../lib/Command/ListCalendars.php', @@ -297,6 +299,7 @@ class ComposerStaticInitDAV 'OCA\\DAV\\Files\\RootCollection' => __DIR__ . '/..' . '/../lib/Files/RootCollection.php', 'OCA\\DAV\\Files\\Sharing\\FilesDropPlugin' => __DIR__ . '/..' . '/../lib/Files/Sharing/FilesDropPlugin.php', 'OCA\\DAV\\Files\\Sharing\\PublicLinkCheckPlugin' => __DIR__ . '/..' . '/../lib/Files/Sharing/PublicLinkCheckPlugin.php', + 'OCA\\DAV\\Files\\Sharing\\RootCollection' => __DIR__ . '/..' . '/../lib/Files/Sharing/RootCollection.php', 'OCA\\DAV\\Listener\\ActivityUpdaterListener' => __DIR__ . '/..' . '/../lib/Listener/ActivityUpdaterListener.php', 'OCA\\DAV\\Listener\\AddMissingIndicesListener' => __DIR__ . '/..' . '/../lib/Listener/AddMissingIndicesListener.php', 'OCA\\DAV\\Listener\\AddressbookListener' => __DIR__ . '/..' . '/../lib/Listener/AddressbookListener.php', diff --git a/apps/dav/l10n/de.js b/apps/dav/l10n/de.js index e22163e7731..cf6e45c577d 100644 --- a/apps/dav/l10n/de.js +++ b/apps/dav/l10n/de.js @@ -309,9 +309,9 @@ OC.L10N.register( "Cancel" : "Abbrechen", "Import" : "Importieren", "Error while saving settings" : "Fehler beim Speichern der Einstellungen", - "Contact reset successfully" : "Kontakt erfolgreich zurückgesetzt", + "Contact reset successfully" : "Kontakt zurückgesetzt", "Error while resetting contact" : "Fehler beim Zurücksetzen des Kontakts", - "Contact imported successfully" : "Kontakt erfolgreich importiert", + "Contact imported successfully" : "Kontakt importiert", "Error while importing contact" : "Fehler beim Import des Kontakts", "Example Content" : "Beispielinhalt", "Set example content to be created on new user first login." : "Beispielinhalte festlegen, die bei der ersten Anmeldung eines neuen Benutzers erstellt werden sollen.", diff --git a/apps/dav/l10n/de.json b/apps/dav/l10n/de.json index 02a0a5707ab..6fceefcf9a7 100644 --- a/apps/dav/l10n/de.json +++ b/apps/dav/l10n/de.json @@ -307,9 +307,9 @@ "Cancel" : "Abbrechen", "Import" : "Importieren", "Error while saving settings" : "Fehler beim Speichern der Einstellungen", - "Contact reset successfully" : "Kontakt erfolgreich zurückgesetzt", + "Contact reset successfully" : "Kontakt zurückgesetzt", "Error while resetting contact" : "Fehler beim Zurücksetzen des Kontakts", - "Contact imported successfully" : "Kontakt erfolgreich importiert", + "Contact imported successfully" : "Kontakt importiert", "Error while importing contact" : "Fehler beim Import des Kontakts", "Example Content" : "Beispielinhalt", "Set example content to be created on new user first login." : "Beispielinhalte festlegen, die bei der ersten Anmeldung eines neuen Benutzers erstellt werden sollen.", diff --git a/apps/dav/l10n/et_EE.js b/apps/dav/l10n/et_EE.js index d32f6895bc3..cfa243264fa 100644 --- a/apps/dav/l10n/et_EE.js +++ b/apps/dav/l10n/et_EE.js @@ -68,11 +68,27 @@ OC.L10N.register( "Description: %s" : "Kirjeldus: %s", "Where: %s" : "Kus: %s", "%1$s via %2$s" : "%1$s %2$s kaudu", + "Cancelled: %1$s" : "Tühistatud: %1$s", + "\"%1$s\" has been canceled" : "„%1$s“ on tühistatud", + "Re: %1$s" : "Re: %1$s", + "%1$s has accepted your invitation" : "„%1$s“ on nõustunud sinu kutsega", + "%1$s has tentatively accepted your invitation" : "„%1$s“ on esialgselt nõustunud sinu kutsega", + "%1$s has declined your invitation" : "„%1$s“ on sinu kutsest keeldunud", + "%1$s has responded to your invitation" : "„%1$s“ on vastanud sinu kutsele", + "Invitation updated: %1$s" : "Kutse on uuendatud: %1$s", + "%1$s updated the event \"%2$s\"" : "„%1$s“ uuendas sündmust „%2$s“", + "Invitation: %1$s" : "Kutse: %1$s", + "%1$s would like to invite you to \"%2$s\"" : "„%1$s“ soovib saata sulle „%2$s“ kutset", + "Organizer:" : "Korraldaja:", + "Attendees:" : "Osalejad:", + "Title:" : "Pealkiri:", "When:" : "Millal:", "Location:" : "Asukoht:", "Link:" : "Link:", "Accept" : "Nõustu", "Decline" : "Keeldu", + "More options …" : "Täiendavad valikud…", + "More options at %s" : "Lisavalikud: %s", "Monday" : "Esmaspäev", "Tuesday" : "Teisipäev", "Wednesday" : "Kolmapäev", @@ -99,6 +115,13 @@ OC.L10N.register( "Fifth" : "Viies", "Last" : "Viimane", "Contacts" : "Kontaktid", + "You created address book {addressbook}" : "Sa lõid aadressiraamatu „{addressbook}“", + "{actor} deleted address book {addressbook}" : "„{actor}“ kustutas „{addressbook}“ aadressiraamatu", + "You deleted address book {addressbook}" : "Sa kustutasid aadressiraamatu „{addressbook}“", + "You shared address book {addressbook} with {user}" : "Sa jagasid „{addressbook}“ aadressiraamatut kasutajaga „{user}“", + "You deleted contact {card} from address book {addressbook}" : "Sa kustutasid „{card}“ kontakti „{addressbook}“ aadressiraamatus", + "You updated contact {card} in address book {addressbook}" : "Sa uuendasid „{card}“ kontakti „{addressbook}“ aadressiraamatus", + "A <strong>contact</strong> or <strong>address book</strong> was modified" : "<strong>Kontakti</strong> või <strong>aadressiraamatut</strong> muudeti", "Accounts" : "Kasutajakontod", "System address book which holds all accounts" : "Süsteemne aadressiraamat, kus leiduvad kõik kasutajakontod", "File is not updatable: %1$s" : "Fail pole uuendatav: %1$s", @@ -113,12 +136,16 @@ OC.L10N.register( "Failed to unlink: %1$s" : "Lingi eemaldamine ei õnnestunud: %1$s", "Failed to write file contents: %1$s" : "Faili sisu salvestamine ei õnnestunud: %1$s", "File not found: %1$s" : "Faili ei leidu: %1$s", + "Invalid target path" : "Vigane sihtasukoht", "System is in maintenance mode." : "Server on hooldusrežiimis.", "Upgrade needed" : "Uuendus on vajalik", + "Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Selleks, et sinu %s toimiks iOS-is/macOS-is CalDAV-i ja CardDAV-iga peab https olema seadistatud.", "Configures a CalDAV account" : "Seadistab CalDAV-i kasutajakonto", "Configures a CardDAV account" : "Seadistab CardDAV-i kasutajakonto", "Events" : "Sündmused", "Untitled task" : "Ilma nimeta pealkiri", + "Completed on %s" : "Lõpetatud %s", + "Due on %s by %s" : "Tähtaeg: %s, täitjaks %s", "Due on %s" : "Tähtaeg: %s", "System Address Book" : "Süsteemne aadressiraamat", "The system address book contains contact information for all users in your instance." : "Süsteemses aadressiraamatus leiduvad kõikde selle serveri kasutajate kontaktteave.", @@ -137,6 +164,8 @@ OC.L10N.register( "Failed to clear your absence settings" : "Sinu äraoleku seadistuste eemaldamine ei õnnestunud", "First day" : "Esimene päev", "Last day (inclusive)" : "Viimane päev (kaasaarvatud)", + "Out of office replacement (optional)" : "Asendaja äraoleku ajaks (valikuline)", + "Name of the replacement" : "Asendaja nimi", "No results." : "Vasteid ei leitud.", "Start typing." : "Alusta kirjutamist.", "Short absence status" : "Äraoleku lühinimi", @@ -148,10 +177,17 @@ OC.L10N.register( "Failed to save availability" : "Saadavuse salvestamine ei õnnestunud", "Time zone:" : "Ajavöönd:", "to" : "saaja", + "Delete slot" : "Kustuta ajavahemik", + "No working hours set" : "Tööajad on sisestamata", + "Add slot" : "Lisa ajavahemik", + "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Kõikide teavituste summutamiseks määra automaatselt kasutajale olek „Ära sega“ nendele aegadele, kus ta vaba ei ole.", "Availability" : "Saadavus", "Absence" : "Äraolek", "Configure your next absence period." : "Seadista järgmise äraoleku ajavahemik.", + "Calendar server" : "Kalendriserver", "Send invitations to attendees" : "Saada osalejatele kutsed", + "Automatically generate a birthday calendar" : "Koosta sünnipäevade kalender automaatselt", + "Send notifications for events" : "Saada sündmuste teavitusi", "Enable notifications for events via push" : "Võta kasutusele tõuketeenustepõhised teavitused", "Cancel" : "Tühista", "Import" : "Impordi", diff --git a/apps/dav/l10n/et_EE.json b/apps/dav/l10n/et_EE.json index 06543cb78bc..51f4d2bc914 100644 --- a/apps/dav/l10n/et_EE.json +++ b/apps/dav/l10n/et_EE.json @@ -66,11 +66,27 @@ "Description: %s" : "Kirjeldus: %s", "Where: %s" : "Kus: %s", "%1$s via %2$s" : "%1$s %2$s kaudu", + "Cancelled: %1$s" : "Tühistatud: %1$s", + "\"%1$s\" has been canceled" : "„%1$s“ on tühistatud", + "Re: %1$s" : "Re: %1$s", + "%1$s has accepted your invitation" : "„%1$s“ on nõustunud sinu kutsega", + "%1$s has tentatively accepted your invitation" : "„%1$s“ on esialgselt nõustunud sinu kutsega", + "%1$s has declined your invitation" : "„%1$s“ on sinu kutsest keeldunud", + "%1$s has responded to your invitation" : "„%1$s“ on vastanud sinu kutsele", + "Invitation updated: %1$s" : "Kutse on uuendatud: %1$s", + "%1$s updated the event \"%2$s\"" : "„%1$s“ uuendas sündmust „%2$s“", + "Invitation: %1$s" : "Kutse: %1$s", + "%1$s would like to invite you to \"%2$s\"" : "„%1$s“ soovib saata sulle „%2$s“ kutset", + "Organizer:" : "Korraldaja:", + "Attendees:" : "Osalejad:", + "Title:" : "Pealkiri:", "When:" : "Millal:", "Location:" : "Asukoht:", "Link:" : "Link:", "Accept" : "Nõustu", "Decline" : "Keeldu", + "More options …" : "Täiendavad valikud…", + "More options at %s" : "Lisavalikud: %s", "Monday" : "Esmaspäev", "Tuesday" : "Teisipäev", "Wednesday" : "Kolmapäev", @@ -97,6 +113,13 @@ "Fifth" : "Viies", "Last" : "Viimane", "Contacts" : "Kontaktid", + "You created address book {addressbook}" : "Sa lõid aadressiraamatu „{addressbook}“", + "{actor} deleted address book {addressbook}" : "„{actor}“ kustutas „{addressbook}“ aadressiraamatu", + "You deleted address book {addressbook}" : "Sa kustutasid aadressiraamatu „{addressbook}“", + "You shared address book {addressbook} with {user}" : "Sa jagasid „{addressbook}“ aadressiraamatut kasutajaga „{user}“", + "You deleted contact {card} from address book {addressbook}" : "Sa kustutasid „{card}“ kontakti „{addressbook}“ aadressiraamatus", + "You updated contact {card} in address book {addressbook}" : "Sa uuendasid „{card}“ kontakti „{addressbook}“ aadressiraamatus", + "A <strong>contact</strong> or <strong>address book</strong> was modified" : "<strong>Kontakti</strong> või <strong>aadressiraamatut</strong> muudeti", "Accounts" : "Kasutajakontod", "System address book which holds all accounts" : "Süsteemne aadressiraamat, kus leiduvad kõik kasutajakontod", "File is not updatable: %1$s" : "Fail pole uuendatav: %1$s", @@ -111,12 +134,16 @@ "Failed to unlink: %1$s" : "Lingi eemaldamine ei õnnestunud: %1$s", "Failed to write file contents: %1$s" : "Faili sisu salvestamine ei õnnestunud: %1$s", "File not found: %1$s" : "Faili ei leidu: %1$s", + "Invalid target path" : "Vigane sihtasukoht", "System is in maintenance mode." : "Server on hooldusrežiimis.", "Upgrade needed" : "Uuendus on vajalik", + "Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Selleks, et sinu %s toimiks iOS-is/macOS-is CalDAV-i ja CardDAV-iga peab https olema seadistatud.", "Configures a CalDAV account" : "Seadistab CalDAV-i kasutajakonto", "Configures a CardDAV account" : "Seadistab CardDAV-i kasutajakonto", "Events" : "Sündmused", "Untitled task" : "Ilma nimeta pealkiri", + "Completed on %s" : "Lõpetatud %s", + "Due on %s by %s" : "Tähtaeg: %s, täitjaks %s", "Due on %s" : "Tähtaeg: %s", "System Address Book" : "Süsteemne aadressiraamat", "The system address book contains contact information for all users in your instance." : "Süsteemses aadressiraamatus leiduvad kõikde selle serveri kasutajate kontaktteave.", @@ -135,6 +162,8 @@ "Failed to clear your absence settings" : "Sinu äraoleku seadistuste eemaldamine ei õnnestunud", "First day" : "Esimene päev", "Last day (inclusive)" : "Viimane päev (kaasaarvatud)", + "Out of office replacement (optional)" : "Asendaja äraoleku ajaks (valikuline)", + "Name of the replacement" : "Asendaja nimi", "No results." : "Vasteid ei leitud.", "Start typing." : "Alusta kirjutamist.", "Short absence status" : "Äraoleku lühinimi", @@ -146,10 +175,17 @@ "Failed to save availability" : "Saadavuse salvestamine ei õnnestunud", "Time zone:" : "Ajavöönd:", "to" : "saaja", + "Delete slot" : "Kustuta ajavahemik", + "No working hours set" : "Tööajad on sisestamata", + "Add slot" : "Lisa ajavahemik", + "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Kõikide teavituste summutamiseks määra automaatselt kasutajale olek „Ära sega“ nendele aegadele, kus ta vaba ei ole.", "Availability" : "Saadavus", "Absence" : "Äraolek", "Configure your next absence period." : "Seadista järgmise äraoleku ajavahemik.", + "Calendar server" : "Kalendriserver", "Send invitations to attendees" : "Saada osalejatele kutsed", + "Automatically generate a birthday calendar" : "Koosta sünnipäevade kalender automaatselt", + "Send notifications for events" : "Saada sündmuste teavitusi", "Enable notifications for events via push" : "Võta kasutusele tõuketeenustepõhised teavitused", "Cancel" : "Tühista", "Import" : "Impordi", diff --git a/apps/dav/lib/CalDAV/CachedSubscriptionImpl.php b/apps/dav/lib/CalDAV/CachedSubscriptionImpl.php index 4d25f5bb501..74efebb6e2a 100644 --- a/apps/dav/lib/CalDAV/CachedSubscriptionImpl.php +++ b/apps/dav/lib/CalDAV/CachedSubscriptionImpl.php @@ -9,11 +9,12 @@ declare(strict_types=1); namespace OCA\DAV\CalDAV; use OCP\Calendar\ICalendar; +use OCP\Calendar\ICalendarIsEnabled; use OCP\Calendar\ICalendarIsShared; use OCP\Calendar\ICalendarIsWritable; use OCP\Constants; -class CachedSubscriptionImpl implements ICalendar, ICalendarIsShared, ICalendarIsWritable { +class CachedSubscriptionImpl implements ICalendar, ICalendarIsEnabled, ICalendarIsShared, ICalendarIsWritable { public function __construct( private CachedSubscription $calendar, @@ -86,6 +87,13 @@ class CachedSubscriptionImpl implements ICalendar, ICalendarIsShared, ICalendarI return $result; } + /** + * @since 32.0.0 + */ + public function isEnabled(): bool { + return $this->calendarInfo['{http://owncloud.org/ns}calendar-enabled'] ?? true; + } + public function isWritable(): bool { return false; } diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php index 2ef57ca77bb..e69fe9ed3f0 100644 --- a/apps/dav/lib/CalDAV/CalDavBackend.php +++ b/apps/dav/lib/CalDAV/CalDavBackend.php @@ -9,6 +9,7 @@ namespace OCA\DAV\CalDAV; use DateTime; use DateTimeImmutable; use DateTimeInterface; +use Generator; use OCA\DAV\AppInfo\Application; use OCA\DAV\CalDAV\Sharing\Backend; use OCA\DAV\Connector\Sabre\Principal; @@ -28,6 +29,7 @@ use OCA\DAV\Events\SubscriptionCreatedEvent; use OCA\DAV\Events\SubscriptionDeletedEvent; use OCA\DAV\Events\SubscriptionUpdatedEvent; use OCP\AppFramework\Db\TTransactional; +use OCP\Calendar\CalendarExportOptions; use OCP\Calendar\Events\CalendarObjectCreatedEvent; use OCP\Calendar\Events\CalendarObjectDeletedEvent; use OCP\Calendar\Events\CalendarObjectMovedEvent; @@ -988,6 +990,44 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription } /** + * Returns all calendar entries as a stream of data + * + * @since 32.0.0 + * + * @return Generator<array> + */ + public function exportCalendar(int $calendarId, int $calendarType = self::CALENDAR_TYPE_CALENDAR, ?CalendarExportOptions $options = null): Generator { + // extract options + $rangeStart = $options?->getRangeStart(); + $rangeCount = $options?->getRangeCount(); + // construct query + $qb = $this->db->getQueryBuilder(); + $qb->select('*') + ->from('calendarobjects') + ->where($qb->expr()->eq('calendarid', $qb->createNamedParameter($calendarId))) + ->andWhere($qb->expr()->eq('calendartype', $qb->createNamedParameter($calendarType))) + ->andWhere($qb->expr()->isNull('deleted_at')); + if ($rangeStart !== null) { + $qb->andWhere($qb->expr()->gt('uid', $qb->createNamedParameter($rangeStart))); + } + if ($rangeCount !== null) { + $qb->setMaxResults($rangeCount); + } + if ($rangeStart !== null || $rangeCount !== null) { + $qb->orderBy('uid', 'ASC'); + } + $rs = $qb->executeQuery(); + // iterate through results + try { + while (($row = $rs->fetch()) !== false) { + yield $row; + } + } finally { + $rs->closeCursor(); + } + } + + /** * Returns all calendar objects with limited metadata for a calendar * * Every item contains an array with the following keys: diff --git a/apps/dav/lib/CalDAV/CalendarImpl.php b/apps/dav/lib/CalDAV/CalendarImpl.php index b3062f005ee..d36f46df901 100644 --- a/apps/dav/lib/CalDAV/CalendarImpl.php +++ b/apps/dav/lib/CalDAV/CalendarImpl.php @@ -8,9 +8,15 @@ declare(strict_types=1); */ namespace OCA\DAV\CalDAV; +use Generator; use OCA\DAV\CalDAV\Auth\CustomPrincipalPlugin; use OCA\DAV\CalDAV\InvitationResponse\InvitationResponseServer; +use OCP\Calendar\CalendarExportOptions; use OCP\Calendar\Exceptions\CalendarException; +use OCP\Calendar\ICalendarExport; +use OCP\Calendar\ICalendarIsEnabled; +use OCP\Calendar\ICalendarIsShared; +use OCP\Calendar\ICalendarIsWritable; use OCP\Calendar\ICreateFromString; use OCP\Calendar\IHandleImipMessage; use OCP\Constants; @@ -24,7 +30,7 @@ use Sabre\VObject\Property; use Sabre\VObject\Reader; use function Sabre\Uri\split as uriSplit; -class CalendarImpl implements ICreateFromString, IHandleImipMessage { +class CalendarImpl implements ICreateFromString, IHandleImipMessage, ICalendarIsWritable, ICalendarIsShared, ICalendarExport, ICalendarIsEnabled { public function __construct( private Calendar $calendar, /** @var array<string, mixed> */ @@ -132,6 +138,13 @@ class CalendarImpl implements ICreateFromString, IHandleImipMessage { } /** + * @since 32.0.0 + */ + public function isEnabled(): bool { + return $this->calendarInfo['{http://owncloud.org/ns}calendar-enabled'] ?? true; + } + + /** * @since 31.0.0 */ public function isWritable(): bool { @@ -257,4 +270,27 @@ class CalendarImpl implements ICreateFromString, IHandleImipMessage { public function getInvitationResponseServer(): InvitationResponseServer { return new InvitationResponseServer(false); } + + /** + * Export objects + * + * @since 32.0.0 + * + * @return Generator<mixed, \Sabre\VObject\Component\VCalendar, mixed, mixed> + */ + public function export(?CalendarExportOptions $options = null): Generator { + foreach ( + $this->backend->exportCalendar( + $this->calendarInfo['id'], + $this->backend::CALENDAR_TYPE_CALENDAR, + $options + ) as $event + ) { + $vObject = Reader::read($event['calendardata']); + if ($vObject instanceof VCalendar) { + yield $vObject; + } + } + } + } diff --git a/apps/dav/lib/CalDAV/CalendarProvider.php b/apps/dav/lib/CalDAV/CalendarProvider.php index a31322b2b49..3cc4039ed36 100644 --- a/apps/dav/lib/CalDAV/CalendarProvider.php +++ b/apps/dav/lib/CalDAV/CalendarProvider.php @@ -8,6 +8,8 @@ declare(strict_types=1); */ namespace OCA\DAV\CalDAV; +use OCA\DAV\Db\Property; +use OCA\DAV\Db\PropertyMapper; use OCP\Calendar\ICalendarProvider; use OCP\IConfig; use OCP\IL10N; @@ -20,6 +22,7 @@ class CalendarProvider implements ICalendarProvider { private IL10N $l10n, private IConfig $config, private LoggerInterface $logger, + private PropertyMapper $propertyMapper, ) { } @@ -35,6 +38,7 @@ class CalendarProvider implements ICalendarProvider { $iCalendars = []; foreach ($calendarInfos as $calendarInfo) { + $calendarInfo = array_merge($calendarInfo, $this->getAdditionalProperties($calendarInfo['principaluri'], $calendarInfo['uri'])); $calendar = new Calendar($this->calDavBackend, $calendarInfo, $this->l10n, $this->config, $this->logger); $iCalendars[] = new CalendarImpl( $calendar, @@ -44,4 +48,23 @@ class CalendarProvider implements ICalendarProvider { } return $iCalendars; } + + public function getAdditionalProperties(string $principalUri, string $calendarUri): array { + $user = str_replace('principals/users/', '', $principalUri); + $path = 'calendars/' . $user . '/' . $calendarUri; + + $properties = $this->propertyMapper->findPropertiesByPath($user, $path); + + $list = []; + foreach ($properties as $property) { + if ($property instanceof Property) { + $list[$property->getPropertyname()] = match ($property->getPropertyname()) { + '{http://owncloud.org/ns}calendar-enabled' => (bool)$property->getPropertyvalue(), + default => $property->getPropertyvalue() + }; + } + } + + return $list; + } } diff --git a/apps/dav/lib/CalDAV/Export/ExportService.php b/apps/dav/lib/CalDAV/Export/ExportService.php new file mode 100644 index 00000000000..393c53b92e4 --- /dev/null +++ b/apps/dav/lib/CalDAV/Export/ExportService.php @@ -0,0 +1,107 @@ +<?php + +declare(strict_types=1); +/** + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\DAV\CalDAV\Export; + +use Generator; +use OCP\Calendar\CalendarExportOptions; +use OCP\Calendar\ICalendarExport; +use OCP\ServerVersion; +use Sabre\VObject\Component; +use Sabre\VObject\Writer; + +/** + * Calendar Export Service + */ +class ExportService { + + public const FORMATS = ['ical', 'jcal', 'xcal']; + private string $systemVersion; + + public function __construct(ServerVersion $serverVersion) { + $this->systemVersion = $serverVersion->getVersionString(); + } + + /** + * Generates serialized content stream for a calendar and objects based in selected format + * + * @return Generator<string> + */ + public function export(ICalendarExport $calendar, CalendarExportOptions $options): Generator { + // output start of serialized content based on selected format + yield $this->exportStart($options->getFormat()); + // iterate through each returned vCalendar entry + // extract each component except timezones, convert to appropriate format and output + // extract any timezones and save them but do not output + $timezones = []; + foreach ($calendar->export($options) as $entry) { + $consecutive = false; + foreach ($entry->getComponents() as $vComponent) { + if ($vComponent->name === 'VTIMEZONE') { + if (isset($vComponent->TZID) && !isset($timezones[$vComponent->TZID->getValue()])) { + $timezones[$vComponent->TZID->getValue()] = clone $vComponent; + } + } else { + yield $this->exportObject($vComponent, $options->getFormat(), $consecutive); + $consecutive = true; + } + } + } + // iterate through each saved vTimezone entry, convert to appropriate format and output + foreach ($timezones as $vComponent) { + yield $this->exportObject($vComponent, $options->getFormat(), $consecutive); + $consecutive = true; + } + // output end of serialized content based on selected format + yield $this->exportFinish($options->getFormat()); + } + + /** + * Generates serialized content start based on selected format + */ + private function exportStart(string $format): string { + return match ($format) { + 'jcal' => '["vcalendar",[["version",{},"text","2.0"],["prodid",{},"text","-\/\/IDN nextcloud.com\/\/Calendar Export v' . $this->systemVersion . '\/\/EN"]],[', + 'xcal' => '<?xml version="1.0" encoding="UTF-8"?><icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0"><vcalendar><properties><version><text>2.0</text></version><prodid><text>-//IDN nextcloud.com//Calendar Export v' . $this->systemVersion . '//EN</text></prodid></properties><components>', + default => "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//IDN nextcloud.com//Calendar Export v" . $this->systemVersion . "//EN\n" + }; + } + + /** + * Generates serialized content end based on selected format + */ + private function exportFinish(string $format): string { + return match ($format) { + 'jcal' => ']]', + 'xcal' => '</components></vcalendar></icalendar>', + default => "END:VCALENDAR\n" + }; + } + + /** + * Generates serialized content for a component based on selected format + */ + private function exportObject(Component $vobject, string $format, bool $consecutive): string { + return match ($format) { + 'jcal' => $consecutive ? ',' . Writer::writeJson($vobject) : Writer::writeJson($vobject), + 'xcal' => $this->exportObjectXml($vobject), + default => Writer::write($vobject) + }; + } + + /** + * Generates serialized content for a component in xml format + */ + private function exportObjectXml(Component $vobject): string { + $writer = new \Sabre\Xml\Writer(); + $writer->openMemory(); + $writer->setIndent(false); + $vobject->xmlSerialize($writer); + return $writer->outputMemory(); + } + +} diff --git a/apps/dav/lib/Capabilities.php b/apps/dav/lib/Capabilities.php index ab4e53fce37..f321222b285 100644 --- a/apps/dav/lib/Capabilities.php +++ b/apps/dav/lib/Capabilities.php @@ -17,12 +17,13 @@ class Capabilities implements ICapability { } /** - * @return array{dav: array{chunking: string, bulkupload?: string, absence-supported?: bool, absence-replacement?: bool}} + * @return array{dav: array{chunking: string, public_shares_chunking: bool, bulkupload?: string, absence-supported?: bool, absence-replacement?: bool}} */ public function getCapabilities() { $capabilities = [ 'dav' => [ 'chunking' => '1.0', + 'public_shares_chunking' => true, ] ]; if ($this->config->getSystemValueBool('bulkupload.enabled', true)) { diff --git a/apps/dav/lib/Command/ExportCalendar.php b/apps/dav/lib/Command/ExportCalendar.php new file mode 100644 index 00000000000..5758cd4fa87 --- /dev/null +++ b/apps/dav/lib/Command/ExportCalendar.php @@ -0,0 +1,95 @@ +<?php + +declare(strict_types=1); +/** + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\DAV\Command; + +use InvalidArgumentException; +use OCA\DAV\CalDAV\Export\ExportService; +use OCP\Calendar\CalendarExportOptions; +use OCP\Calendar\ICalendarExport; +use OCP\Calendar\IManager; +use OCP\IUserManager; +use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +/** + * Calendar Export Command + * + * Used to export data from supported calendars to disk or stdout + */ +#[AsCommand( + name: 'calendar:export', + description: 'Export calendar data from supported calendars to disk or stdout', + hidden: false +)] +class ExportCalendar extends Command { + public function __construct( + private IUserManager $userManager, + private IManager $calendarManager, + private ExportService $exportService, + ) { + parent::__construct(); + } + + protected function configure(): void { + $this->setName('calendar:export') + ->setDescription('Export calendar data from supported calendars to disk or stdout') + ->addArgument('uid', InputArgument::REQUIRED, 'Id of system user') + ->addArgument('uri', InputArgument::REQUIRED, 'Uri of calendar') + ->addOption('format', null, InputOption::VALUE_REQUIRED, 'Format of output (ical, jcal, xcal) defaults to ical', 'ical') + ->addOption('location', null, InputOption::VALUE_REQUIRED, 'Location of where to write the output. defaults to stdout'); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $userId = $input->getArgument('uid'); + $calendarId = $input->getArgument('uri'); + $format = $input->getOption('format'); + $location = $input->getOption('location'); + + if (!$this->userManager->userExists($userId)) { + throw new InvalidArgumentException("User <$userId> not found."); + } + // retrieve calendar and evaluate if export is supported + $calendars = $this->calendarManager->getCalendarsForPrincipal('principals/users/' . $userId, [$calendarId]); + if ($calendars === []) { + throw new InvalidArgumentException("Calendar <$calendarId> not found."); + } + $calendar = $calendars[0]; + if (!$calendar instanceof ICalendarExport) { + throw new InvalidArgumentException("Calendar <$calendarId> does not support exporting"); + } + // construct options object + $options = new CalendarExportOptions(); + // evaluate if provided format is supported + if (!in_array($format, ExportService::FORMATS, true)) { + throw new InvalidArgumentException("Format <$format> is not valid."); + } + $options->setFormat($format); + // evaluate is a valid location was given and is usable otherwise output to stdout + if ($location !== null) { + $handle = fopen($location, 'wb'); + if ($handle === false) { + throw new InvalidArgumentException("Location <$location> is not valid. Can not open location for write operation."); + } + + foreach ($this->exportService->export($calendar, $options) as $chunk) { + fwrite($handle, $chunk); + } + fclose($handle); + } else { + foreach ($this->exportService->export($calendar, $options) as $chunk) { + $output->writeln($chunk); + } + } + + return self::SUCCESS; + } +} diff --git a/apps/dav/lib/Connector/Sabre/Directory.php b/apps/dav/lib/Connector/Sabre/Directory.php index 7f8fe3a84de..3ebaa55786c 100644 --- a/apps/dav/lib/Connector/Sabre/Directory.php +++ b/apps/dav/lib/Connector/Sabre/Directory.php @@ -13,7 +13,9 @@ use OCA\DAV\AppInfo\Application; use OCA\DAV\Connector\Sabre\Exception\FileLocked; use OCA\DAV\Connector\Sabre\Exception\Forbidden; use OCA\DAV\Connector\Sabre\Exception\InvalidPath; +use OCA\DAV\Storage\PublicShareWrapper; use OCP\App\IAppManager; +use OCP\Constants; use OCP\Files\FileInfo; use OCP\Files\Folder; use OCP\Files\ForbiddenException; @@ -172,7 +174,19 @@ class Directory extends Node implements \Sabre\DAV\ICollection, \Sabre\DAV\IQuot * @throws \Sabre\DAV\Exception\ServiceUnavailable */ public function getChild($name, $info = null, ?IRequest $request = null, ?IL10N $l10n = null) { - if (!$this->info->isReadable()) { + $storage = $this->info->getStorage(); + $allowDirectory = false; + if ($storage instanceof PublicShareWrapper) { + $share = $storage->getShare(); + $allowDirectory = + // Only allow directories for file drops + ($share->getPermissions() & Constants::PERMISSION_READ) !== Constants::PERMISSION_READ && + // And only allow it for directories which are a direct child of the share root + $this->info->getId() === $share->getNodeId(); + } + + // For file drop we need to be allowed to read the directory with the nickname + if (!$allowDirectory && !$this->info->isReadable()) { // avoid detecting files through this way throw new NotFound(); } @@ -198,6 +212,11 @@ class Directory extends Node implements \Sabre\DAV\ICollection, \Sabre\DAV\IQuot if ($info->getMimeType() === FileInfo::MIMETYPE_FOLDER) { $node = new \OCA\DAV\Connector\Sabre\Directory($this->fileView, $info, $this->tree, $this->shareManager); } else { + // In case reading a directory was allowed but it turns out the node was a not a directory, reject it now. + if (!$this->info->isReadable()) { + throw new NotFound(); + } + $node = new File($this->fileView, $info, $this->shareManager, $request, $l10n); } if ($this->tree) { diff --git a/apps/dav/lib/Connector/Sabre/FilesPlugin.php b/apps/dav/lib/Connector/Sabre/FilesPlugin.php index b886534f9de..9e2affddb6b 100644 --- a/apps/dav/lib/Connector/Sabre/FilesPlugin.php +++ b/apps/dav/lib/Connector/Sabre/FilesPlugin.php @@ -720,15 +720,15 @@ class FilesPlugin extends ServerPlugin { */ public function sendFileIdHeader($filePath, ?\Sabre\DAV\INode $node = null) { // we get the node for the given $filePath here because in case of afterCreateFile $node is the parent folder - if (!$this->server->tree->nodeExists($filePath)) { - return; - } - $node = $this->server->tree->getNodeForPath($filePath); - if ($node instanceof Node) { - $fileId = $node->getFileId(); - if (!is_null($fileId)) { - $this->server->httpResponse->setHeader('OC-FileId', $fileId); + try { + $node = $this->server->tree->getNodeForPath($filePath); + if ($node instanceof Node) { + $fileId = $node->getFileId(); + if (!is_null($fileId)) { + $this->server->httpResponse->setHeader('OC-FileId', $fileId); + } } + } catch (NotFound) { } } } diff --git a/apps/dav/lib/Connector/Sabre/Principal.php b/apps/dav/lib/Connector/Sabre/Principal.php index 515ef807a25..67edb1c4035 100644 --- a/apps/dav/lib/Connector/Sabre/Principal.php +++ b/apps/dav/lib/Connector/Sabre/Principal.php @@ -155,6 +155,11 @@ class Principal implements BackendInterface { 'uri' => 'principals/system/' . $name, '{DAV:}displayname' => $this->languageFactory->get('dav')->t('Accounts'), ]; + } elseif ($prefix === 'principals/shares') { + return [ + 'uri' => 'principals/shares/' . $name, + '{DAV:}displayname' => $name, + ]; } return null; } diff --git a/apps/dav/lib/Connector/Sabre/PublicAuth.php b/apps/dav/lib/Connector/Sabre/PublicAuth.php index ea59d9efc8f..b5d9ce3db72 100644 --- a/apps/dav/lib/Connector/Sabre/PublicAuth.php +++ b/apps/dav/lib/Connector/Sabre/PublicAuth.php @@ -15,6 +15,7 @@ use OCP\Defaults; use OCP\IRequest; use OCP\ISession; use OCP\Security\Bruteforce\IThrottler; +use OCP\Security\Bruteforce\MaxDelayReached; use OCP\Share\Exceptions\ShareNotFound; use OCP\Share\IManager; use OCP\Share\IShare; @@ -56,6 +57,7 @@ class PublicAuth extends AbstractBasic { * * @return array * @throws NotAuthenticated + * @throws MaxDelayReached * @throws ServiceUnavailable */ public function check(RequestInterface $request, ResponseInterface $response): array { @@ -75,7 +77,8 @@ class PublicAuth extends AbstractBasic { } return $this->checkToken(); - } catch (NotAuthenticated $e) { + } catch (NotAuthenticated|MaxDelayReached $e) { + $this->throttler->registerAttempt(self::BRUTEFORCE_ACTION, $this->request->getRemoteAddress()); throw $e; } catch (\Exception $e) { $class = get_class($e); @@ -94,7 +97,7 @@ class PublicAuth extends AbstractBasic { $path = $this->request->getPathInfo() ?: ''; // ['', 'dav', 'files', 'token'] $splittedPath = explode('/', $path); - + if (count($splittedPath) < 4 || $splittedPath[3] === '') { throw new NotFound(); } @@ -176,7 +179,7 @@ class PublicAuth extends AbstractBasic { } return true; } - + if ($this->session->exists(PublicAuth::DAV_AUTHENTICATED) && $this->session->get(PublicAuth::DAV_AUTHENTICATED) === $share->getId()) { return true; diff --git a/apps/dav/lib/Connector/Sabre/ServerFactory.php b/apps/dav/lib/Connector/Sabre/ServerFactory.php index 55cbb416457..bdd13b7f44e 100644 --- a/apps/dav/lib/Connector/Sabre/ServerFactory.php +++ b/apps/dav/lib/Connector/Sabre/ServerFactory.php @@ -8,11 +8,14 @@ namespace OCA\DAV\Connector\Sabre; use OC\Files\View; +use OC\KnownUser\KnownUserService; use OCA\DAV\AppInfo\PluginManager; use OCA\DAV\CalDAV\DefaultCalendarValidator; +use OCA\DAV\CalDAV\Proxy\ProxyMapper; use OCA\DAV\DAV\CustomPropertiesBackend; use OCA\DAV\DAV\ViewOnlyPlugin; use OCA\DAV\Files\BrowserErrorPagePlugin; +use OCA\DAV\Upload\CleanupService; use OCA\Theming\ThemingDefaults; use OCP\Accounts\IAccountManager; use OCP\App\IAppManager; @@ -20,6 +23,7 @@ use OCP\Comments\ICommentsManager; use OCP\EventDispatcher\IEventDispatcher; use OCP\Files\Folder; use OCP\Files\IFilenameValidator; +use OCP\Files\IRootFolder; use OCP\Files\Mount\IMountManager; use OCP\IConfig; use OCP\IDBConnection; @@ -28,12 +32,14 @@ use OCP\IL10N; use OCP\IPreview; use OCP\IRequest; use OCP\ITagManager; +use OCP\IUserManager; use OCP\IUserSession; use OCP\SabrePluginEvent; use OCP\SystemTag\ISystemTagManager; use OCP\SystemTag\ISystemTagObjectMapper; use Psr\Log\LoggerInterface; use Sabre\DAV\Auth\Plugin; +use Sabre\DAV\SimpleCollection; class ServerFactory { @@ -54,13 +60,22 @@ class ServerFactory { /** * @param callable $viewCallBack callback that should return the view for the dav endpoint */ - public function createServer(string $baseUri, + public function createServer( + bool $isPublicShare, + string $baseUri, string $requestUri, Plugin $authPlugin, - callable $viewCallBack): Server { + callable $viewCallBack, + ): Server { // Fire up server - $objectTree = new ObjectTree(); - $server = new Server($objectTree); + if ($isPublicShare) { + $rootCollection = new SimpleCollection('root'); + $tree = new CachingTree($rootCollection); + } else { + $rootCollection = null; + $tree = new ObjectTree(); + } + $server = new Server($tree); // Set URL explicitly due to reverse-proxy situations $server->httpRequest->setUrl($requestUri); $server->setBaseUri($baseUri); @@ -81,7 +96,7 @@ class ServerFactory { $server->addPlugin(new RequestIdHeaderPlugin($this->request)); $server->addPlugin(new ZipFolderPlugin( - $objectTree, + $tree, $this->logger, $this->eventDispatcher, )); @@ -101,7 +116,7 @@ class ServerFactory { } // wait with registering these until auth is handled and the filesystem is setup - $server->on('beforeMethod:*', function () use ($server, $objectTree, $viewCallBack): void { + $server->on('beforeMethod:*', function () use ($server, $tree, $viewCallBack, $isPublicShare, $rootCollection): void { // ensure the skeleton is copied $userFolder = \OC::$server->getUserFolder(); @@ -115,15 +130,49 @@ class ServerFactory { // Create Nextcloud Dir if ($rootInfo->getType() === 'dir') { - $root = new Directory($view, $rootInfo, $objectTree); + $root = new Directory($view, $rootInfo, $tree); } else { $root = new File($view, $rootInfo); } - $objectTree->init($root, $view, $this->mountManager); + + if ($isPublicShare) { + $userPrincipalBackend = new Principal( + \OCP\Server::get(IUserManager::class), + \OCP\Server::get(IGroupManager::class), + \OCP\Server::get(IAccountManager::class), + \OCP\Server::get(\OCP\Share\IManager::class), + \OCP\Server::get(IUserSession::class), + \OCP\Server::get(IAppManager::class), + \OCP\Server::get(ProxyMapper::class), + \OCP\Server::get(KnownUserService::class), + \OCP\Server::get(IConfig::class), + \OC::$server->getL10NFactory(), + ); + + // Mount the share collection at /public.php/dav/shares/<share token> + $rootCollection->addChild(new \OCA\DAV\Files\Sharing\RootCollection( + $root, + $userPrincipalBackend, + 'principals/shares', + )); + + // Mount the upload collection at /public.php/dav/uploads/<share token> + $rootCollection->addChild(new \OCA\DAV\Upload\RootCollection( + $userPrincipalBackend, + 'principals/shares', + \OCP\Server::get(CleanupService::class), + \OCP\Server::get(IRootFolder::class), + \OCP\Server::get(IUserSession::class), + \OCP\Server::get(\OCP\Share\IManager::class), + )); + } else { + /** @var ObjectTree $tree */ + $tree->init($root, $view, $this->mountManager); + } $server->addPlugin( new FilesPlugin( - $objectTree, + $tree, $this->config, $this->request, $this->previewManager, @@ -143,16 +192,16 @@ class ServerFactory { )); if ($this->userSession->isLoggedIn()) { - $server->addPlugin(new TagsPlugin($objectTree, $this->tagManager, $this->eventDispatcher, $this->userSession)); + $server->addPlugin(new TagsPlugin($tree, $this->tagManager, $this->eventDispatcher, $this->userSession)); $server->addPlugin(new SharesPlugin( - $objectTree, + $tree, $this->userSession, $userFolder, \OCP\Server::get(\OCP\Share\IManager::class) )); $server->addPlugin(new CommentPropertiesPlugin(\OCP\Server::get(ICommentsManager::class), $this->userSession)); $server->addPlugin(new FilesReportPlugin( - $objectTree, + $tree, $view, \OCP\Server::get(ISystemTagManager::class), \OCP\Server::get(ISystemTagObjectMapper::class), @@ -167,7 +216,7 @@ class ServerFactory { new \Sabre\DAV\PropertyStorage\Plugin( new CustomPropertiesBackend( $server, - $objectTree, + $tree, $this->databaseConnection, $this->userSession->getUser(), \OCP\Server::get(DefaultCalendarValidator::class), diff --git a/apps/dav/lib/Db/PropertyMapper.php b/apps/dav/lib/Db/PropertyMapper.php index a0ecb348ba4..1789194ee7a 100644 --- a/apps/dav/lib/Db/PropertyMapper.php +++ b/apps/dav/lib/Db/PropertyMapper.php @@ -38,4 +38,18 @@ class PropertyMapper extends QBMapper { return $this->findEntities($selectQb); } + /** + * @return Property[] + */ + public function findPropertiesByPath(string $userId, string $path): array { + $selectQb = $this->db->getQueryBuilder(); + $selectQb->select('*') + ->from(self::TABLE_NAME) + ->where( + $selectQb->expr()->eq('userid', $selectQb->createNamedParameter($userId)), + $selectQb->expr()->eq('propertypath', $selectQb->createNamedParameter($path)), + ); + return $this->findEntities($selectQb); + } + } diff --git a/apps/dav/lib/Direct/DirectHome.php b/apps/dav/lib/Direct/DirectHome.php index 10e1017f5a4..ac411c9b52f 100644 --- a/apps/dav/lib/Direct/DirectHome.php +++ b/apps/dav/lib/Direct/DirectHome.php @@ -53,7 +53,7 @@ class DirectHome implements ICollection { } catch (DoesNotExistException $e) { // Since the token space is so huge only throttle on non-existing token $this->throttler->registerAttempt('directlink', $this->request->getRemoteAddress()); - $this->throttler->sleepDelay($this->request->getRemoteAddress(), 'directlink'); + $this->throttler->sleepDelayOrThrowOnMax($this->request->getRemoteAddress(), 'directlink'); throw new NotFound(); } diff --git a/apps/dav/lib/Files/BrowserErrorPagePlugin.php b/apps/dav/lib/Files/BrowserErrorPagePlugin.php index de86c4995e2..85ed975a409 100644 --- a/apps/dav/lib/Files/BrowserErrorPagePlugin.php +++ b/apps/dav/lib/Files/BrowserErrorPagePlugin.php @@ -11,6 +11,7 @@ use OC\AppFramework\Http\Request; use OCP\AppFramework\Http\ContentSecurityPolicy; use OCP\AppFramework\Http\TemplateResponse; use OCP\IRequest; +use OCP\Security\Bruteforce\MaxDelayReached; use OCP\Template\ITemplateManager; use Sabre\DAV\Exception; use Sabre\DAV\Server; @@ -60,6 +61,9 @@ class BrowserErrorPagePlugin extends ServerPlugin { if ($ex instanceof Exception) { $httpCode = $ex->getHTTPCode(); $headers = $ex->getHTTPHeaders($this->server); + } elseif ($ex instanceof MaxDelayReached) { + $httpCode = 429; + $headers = []; } else { $httpCode = 500; $headers = []; @@ -81,7 +85,7 @@ class BrowserErrorPagePlugin extends ServerPlugin { $request = \OCP\Server::get(IRequest::class); $templateName = 'exception'; - if ($httpCode === 403 || $httpCode === 404) { + if ($httpCode === 403 || $httpCode === 404 || $httpCode === 429) { $templateName = (string)$httpCode; } diff --git a/apps/dav/lib/Files/Sharing/FilesDropPlugin.php b/apps/dav/lib/Files/Sharing/FilesDropPlugin.php index 9d883be81fc..ccf7cd28f4a 100644 --- a/apps/dav/lib/Files/Sharing/FilesDropPlugin.php +++ b/apps/dav/lib/Files/Sharing/FilesDropPlugin.php @@ -73,7 +73,7 @@ class FilesDropPlugin extends ServerPlugin { if ($isFileRequest && ($nickName == null || trim($nickName) === '')) { throw new MethodNotAllowed('Nickname is required for file requests'); } - + // If this is a file request we need to create a folder for the user if ($isFileRequest) { // Check if the folder already exists @@ -83,9 +83,9 @@ class FilesDropPlugin extends ServerPlugin { // Put all files in the subfolder $path = $nickName . '/' . $path; } - + $newName = \OC_Helper::buildNotExistingFileNameForView('/', $path, $this->view); - $url = $request->getBaseUrl() . $newName; + $url = $request->getBaseUrl() . '/files/' . $this->share->getToken() . $newName; $request->setUrl($url); } diff --git a/apps/dav/lib/Files/Sharing/RootCollection.php b/apps/dav/lib/Files/Sharing/RootCollection.php new file mode 100644 index 00000000000..dd585fbb59b --- /dev/null +++ b/apps/dav/lib/Files/Sharing/RootCollection.php @@ -0,0 +1,32 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\DAV\Files\Sharing; + +use Sabre\DAV\INode; +use Sabre\DAVACL\AbstractPrincipalCollection; +use Sabre\DAVACL\PrincipalBackend\BackendInterface; + +class RootCollection extends AbstractPrincipalCollection { + public function __construct( + private INode $root, + BackendInterface $principalBackend, + string $principalPrefix = 'principals', + ) { + parent::__construct($principalBackend, $principalPrefix); + } + + public function getChildForPrincipal(array $principalInfo): INode { + return $this->root; + } + + public function getName() { + return 'files'; + } +} diff --git a/apps/dav/lib/Listener/AddMissingIndicesListener.php b/apps/dav/lib/Listener/AddMissingIndicesListener.php index 035c6c9582e..d3a1cf4b224 100644 --- a/apps/dav/lib/Listener/AddMissingIndicesListener.php +++ b/apps/dav/lib/Listener/AddMissingIndicesListener.php @@ -30,6 +30,11 @@ class AddMissingIndicesListener implements IEventListener { 'dav_shares_resourceid_access', ['resourceid', 'access'] ); + $event->addMissingIndex( + 'calendarobjects', + 'calobjects_by_uid_index', + ['calendarid', 'calendartype', 'uid'] + ); } } diff --git a/apps/dav/lib/Migration/Version1006Date20180628111625.php b/apps/dav/lib/Migration/Version1006Date20180628111625.php index 5f3aa4b6fe2..f4be26e6ad0 100644 --- a/apps/dav/lib/Migration/Version1006Date20180628111625.php +++ b/apps/dav/lib/Migration/Version1006Date20180628111625.php @@ -49,6 +49,7 @@ class Version1006Date20180628111625 extends SimpleMigrationStep { $calendarObjectsTable->dropIndex('calobjects_index'); } $calendarObjectsTable->addUniqueIndex(['calendarid', 'calendartype', 'uri'], 'calobjects_index'); + $calendarObjectsTable->addUniqueIndex(['calendarid', 'calendartype', 'uid'], 'calobjects_by_uid_index'); } if ($schema->hasTable('calendarobjects_props')) { diff --git a/apps/dav/lib/RootCollection.php b/apps/dav/lib/RootCollection.php index b2b34b26980..f1963c0ef01 100644 --- a/apps/dav/lib/RootCollection.php +++ b/apps/dav/lib/RootCollection.php @@ -160,6 +160,7 @@ class RootCollection extends SimpleCollection { Server::get(CleanupService::class), $rootFolder, $userSession, + $shareManager, ); $uploadCollection->disableListing = $disableListing; diff --git a/apps/dav/lib/Upload/CleanupService.php b/apps/dav/lib/Upload/CleanupService.php index 36b75280504..ffa6bad533c 100644 --- a/apps/dav/lib/Upload/CleanupService.php +++ b/apps/dav/lib/Upload/CleanupService.php @@ -10,20 +10,18 @@ namespace OCA\DAV\Upload; use OCA\DAV\BackgroundJob\UploadCleanup; use OCP\BackgroundJob\IJobList; -use OCP\IUserSession; class CleanupService { public function __construct( - private IUserSession $userSession, private IJobList $jobList, ) { } - public function addJob(string $folder) { - $this->jobList->add(UploadCleanup::class, ['uid' => $this->userSession->getUser()->getUID(), 'folder' => $folder]); + public function addJob(string $uid, string $folder) { + $this->jobList->add(UploadCleanup::class, ['uid' => $uid, 'folder' => $folder]); } - public function removeJob(string $folder) { - $this->jobList->remove(UploadCleanup::class, ['uid' => $this->userSession->getUser()->getUID(), 'folder' => $folder]); + public function removeJob(string $uid, string $folder) { + $this->jobList->remove(UploadCleanup::class, ['uid' => $uid, 'folder' => $folder]); } } diff --git a/apps/dav/lib/Upload/RootCollection.php b/apps/dav/lib/Upload/RootCollection.php index 9ea2592702b..cd7ab7f5e0a 100644 --- a/apps/dav/lib/Upload/RootCollection.php +++ b/apps/dav/lib/Upload/RootCollection.php @@ -11,6 +11,7 @@ namespace OCA\DAV\Upload; use OCP\Files\IRootFolder; use OCP\IUserSession; +use OCP\Share\IManager; use Sabre\DAVACL\AbstractPrincipalCollection; use Sabre\DAVACL\PrincipalBackend; @@ -22,6 +23,7 @@ class RootCollection extends AbstractPrincipalCollection { private CleanupService $cleanupService, private IRootFolder $rootFolder, private IUserSession $userSession, + private IManager $shareManager, ) { parent::__construct($principalBackend, $principalPrefix); } @@ -30,7 +32,13 @@ class RootCollection extends AbstractPrincipalCollection { * @inheritdoc */ public function getChildForPrincipal(array $principalInfo): UploadHome { - return new UploadHome($principalInfo, $this->cleanupService, $this->rootFolder, $this->userSession); + return new UploadHome( + $principalInfo, + $this->cleanupService, + $this->rootFolder, + $this->userSession, + $this->shareManager, + ); } /** diff --git a/apps/dav/lib/Upload/UploadFolder.php b/apps/dav/lib/Upload/UploadFolder.php index 57e95d2b17b..8890d472f87 100644 --- a/apps/dav/lib/Upload/UploadFolder.php +++ b/apps/dav/lib/Upload/UploadFolder.php @@ -21,6 +21,7 @@ class UploadFolder implements ICollection { private Directory $node, private CleanupService $cleanupService, private IStorage $storage, + private string $uid, ) { } @@ -89,7 +90,7 @@ class UploadFolder implements ICollection { $this->node->delete(); // Background cleanup job is not needed anymore - $this->cleanupService->removeJob($this->getName()); + $this->cleanupService->removeJob($this->uid, $this->getName()); } public function getName() { diff --git a/apps/dav/lib/Upload/UploadHome.php b/apps/dav/lib/Upload/UploadHome.php index a6551d4d079..4042f1c4101 100644 --- a/apps/dav/lib/Upload/UploadHome.php +++ b/apps/dav/lib/Upload/UploadHome.php @@ -17,6 +17,7 @@ use Sabre\DAV\Exception\Forbidden; use Sabre\DAV\ICollection; class UploadHome implements ICollection { + private string $uid; private ?Folder $uploadFolder = null; public function __construct( @@ -24,7 +25,19 @@ class UploadHome implements ICollection { private readonly CleanupService $cleanupService, private readonly IRootFolder $rootFolder, private readonly IUserSession $userSession, + private readonly \OCP\Share\IManager $shareManager, ) { + [$prefix, $name] = \Sabre\Uri\split($principalInfo['uri']); + if ($prefix === 'principals/shares') { + $this->uid = $this->shareManager->getShareByToken($name)->getShareOwner(); + } else { + $user = $this->userSession->getUser(); + if (!$user) { + throw new Forbidden('Not logged in'); + } + + $this->uid = $user->getUID(); + } } public function createFile($name, $data = null) { @@ -35,16 +48,26 @@ class UploadHome implements ICollection { $this->impl()->createDirectory($name); // Add a cleanup job - $this->cleanupService->addJob($name); + $this->cleanupService->addJob($this->uid, $name); } public function getChild($name): UploadFolder { - return new UploadFolder($this->impl()->getChild($name), $this->cleanupService, $this->getStorage()); + return new UploadFolder( + $this->impl()->getChild($name), + $this->cleanupService, + $this->getStorage(), + $this->uid, + ); } public function getChildren(): array { return array_map(function ($node) { - return new UploadFolder($node, $this->cleanupService, $this->getStorage()); + return new UploadFolder( + $node, + $this->cleanupService, + $this->getStorage(), + $this->uid, + ); }, $this->impl()->getChildren()); } @@ -71,11 +94,7 @@ class UploadHome implements ICollection { private function getUploadFolder(): Folder { if ($this->uploadFolder === null) { - $user = $this->userSession->getUser(); - if (!$user) { - throw new Forbidden('Not logged in'); - } - $path = '/' . $user->getUID() . '/uploads'; + $path = '/' . $this->uid . '/uploads'; try { $folder = $this->rootFolder->get($path); if (!$folder instanceof Folder) { diff --git a/apps/dav/openapi.json b/apps/dav/openapi.json index 449ae09dff1..48d6ae03ee0 100644 --- a/apps/dav/openapi.json +++ b/apps/dav/openapi.json @@ -29,12 +29,16 @@ "dav": { "type": "object", "required": [ - "chunking" + "chunking", + "public_shares_chunking" ], "properties": { "chunking": { "type": "string" }, + "public_shares_chunking": { + "type": "boolean" + }, "bulkupload": { "type": "string" }, diff --git a/apps/dav/tests/unit/CalDAV/CalendarImplTest.php b/apps/dav/tests/unit/CalDAV/CalendarImplTest.php index ee9b85fafe8..0d5223739f3 100644 --- a/apps/dav/tests/unit/CalDAV/CalendarImplTest.php +++ b/apps/dav/tests/unit/CalDAV/CalendarImplTest.php @@ -5,6 +5,7 @@ */ namespace OCA\DAV\Tests\unit\CalDAV; +use Generator; use OCA\DAV\CalDAV\Auth\CustomPrincipalPlugin; use OCA\DAV\CalDAV\CalDavBackend; use OCA\DAV\CalDAV\Calendar; @@ -20,24 +21,19 @@ use Sabre\VObject\ITip\Message; use Sabre\VObject\Reader; class CalendarImplTest extends \Test\TestCase { - /** @var CalendarImpl */ - private $calendarImpl; - /** @var Calendar | \PHPUnit\Framework\MockObject\MockObject */ - private $calendar; - - /** @var array */ - private $calendarInfo; - - /** @var CalDavBackend | \PHPUnit\Framework\MockObject\MockObject */ - private $backend; + private Calendar|MockObject $calendar; + private array $calendarInfo; + private CalDavBackend|MockObject $backend; + private CalendarImpl|MockObject $calendarImpl; + private array $mockExportCollection; protected function setUp(): void { parent::setUp(); $this->calendar = $this->createMock(Calendar::class); $this->calendarInfo = [ - 'id' => 'fancy_id_123', + 'id' => 1, '{DAV:}displayname' => 'user readable name 123', '{http://apple.com/ns/ical/}calendar-color' => '#AABBCC', 'uri' => '/this/is/a/uri', @@ -45,13 +41,16 @@ class CalendarImplTest extends \Test\TestCase { ]; $this->backend = $this->createMock(CalDavBackend::class); - $this->calendarImpl = new CalendarImpl($this->calendar, - $this->calendarInfo, $this->backend); + $this->calendarImpl = new CalendarImpl( + $this->calendar, + $this->calendarInfo, + $this->backend + ); } public function testGetKey(): void { - $this->assertEquals($this->calendarImpl->getKey(), 'fancy_id_123'); + $this->assertEquals($this->calendarImpl->getKey(), 1); } public function testGetDisplayname(): void { @@ -261,4 +260,48 @@ EOF; $iTipMessage->message = $vObject; return $iTipMessage; } + + protected function mockExportGenerator(): Generator { + foreach ($this->mockExportCollection as $entry) { + yield $entry; + } + } + + public function testExport(): void { + // Arrange + // construct calendar with a 1 hour event and same start/end time zones + $vCalendar = new VCalendar(); + /** @var VEvent $vEvent */ + $vEvent = $vCalendar->add('VEVENT', []); + $vEvent->UID->setValue('96a0e6b1-d886-4a55-a60d-152b31401dcc'); + $vEvent->add('DTSTART', '20240701T080000', ['TZID' => 'America/Toronto']); + $vEvent->add('DTEND', '20240701T090000', ['TZID' => 'America/Toronto']); + $vEvent->add('SUMMARY', 'Test Recurrence Event'); + $vEvent->add('ORGANIZER', 'mailto:organizer@testing.com', ['CN' => 'Organizer']); + $vEvent->add('ATTENDEE', 'mailto:attendee1@testing.com', [ + 'CN' => 'Attendee One', + 'CUTYPE' => 'INDIVIDUAL', + 'PARTSTAT' => 'NEEDS-ACTION', + 'ROLE' => 'REQ-PARTICIPANT', + 'RSVP' => 'TRUE' + ]); + // construct data store return + $this->mockExportCollection[] = [ + 'id' => 1, + 'calendardata' => $vCalendar->serialize() + ]; + $this->backend->expects($this->once()) + ->method('exportCalendar') + ->with(1, $this->backend::CALENDAR_TYPE_CALENDAR, null) + ->willReturn($this->mockExportGenerator()); + + // Act + foreach ($this->calendarImpl->export(null) as $entry) { + $exported[] = $entry; + } + + // Assert + $this->assertCount(1, $exported, 'Invalid exported items count'); + } + } diff --git a/apps/dav/tests/unit/CalDAV/Export/ExportServiceTest.php b/apps/dav/tests/unit/CalDAV/Export/ExportServiceTest.php new file mode 100644 index 00000000000..f1e049c4a80 --- /dev/null +++ b/apps/dav/tests/unit/CalDAV/Export/ExportServiceTest.php @@ -0,0 +1,80 @@ +<?php +/** + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\DAV\Tests\unit\CalDAV\Export; + +use Generator; +use OCA\DAV\CalDAV\Export\ExportService; +use OCP\Calendar\CalendarExportOptions; +use OCP\Calendar\ICalendarExport; +use OCP\ServerVersion; +use PHPUnit\Framework\MockObject\MockObject; +use Sabre\VObject\Component\VCalendar; + +class ExportServiceTest extends \Test\TestCase { + + private ServerVersion|MockObject $serverVersion; + private ExportService $service; + private ICalendarExport|MockObject $calendar; + private array $mockExportCollection; + + protected function setUp(): void { + parent::setUp(); + + $this->serverVersion = $this->createMock(ServerVersion::class); + $this->serverVersion->method('getVersionString') + ->willReturn('32.0.0.0'); + $this->service = new ExportService($this->serverVersion); + $this->calendar = $this->createMock(ICalendarExport::class); + + } + + protected function mockGenerator(): Generator { + foreach ($this->mockExportCollection as $entry) { + yield $entry; + } + } + + public function testExport(): void { + // Arrange + // construct calendar with a 1 hour event and same start/end time zones + $vCalendar = new VCalendar(); + /** @var \Sabre\VObject\Component\VEvent $vEvent */ + $vEvent = $vCalendar->add('VEVENT', []); + $vEvent->UID->setValue('96a0e6b1-d886-4a55-a60d-152b31401dcc'); + $vEvent->add('DTSTART', '20240701T080000', ['TZID' => 'America/Toronto']); + $vEvent->add('DTEND', '20240701T090000', ['TZID' => 'America/Toronto']); + $vEvent->add('SUMMARY', 'Test Recurrence Event'); + $vEvent->add('ORGANIZER', 'mailto:organizer@testing.com', ['CN' => 'Organizer']); + $vEvent->add('ATTENDEE', 'mailto:attendee1@testing.com', [ + 'CN' => 'Attendee One', + 'CUTYPE' => 'INDIVIDUAL', + 'PARTSTAT' => 'NEEDS-ACTION', + 'ROLE' => 'REQ-PARTICIPANT', + 'RSVP' => 'TRUE' + ]); + // construct calendar return + $options = new CalendarExportOptions(); + $this->mockExportCollection[] = $vCalendar; + $this->calendar->expects($this->once()) + ->method('export') + ->with($options) + ->willReturn($this->mockGenerator()); + + // Act + $document = ''; + foreach ($this->service->export($this->calendar, $options) as $chunk) { + $document .= $chunk; + } + + // Assert + $this->assertStringContainsString('BEGIN:VCALENDAR', $document, 'Exported document calendar start missing'); + $this->assertStringContainsString('BEGIN:VEVENT', $document, 'Exported document event start missing'); + $this->assertStringContainsString('END:VEVENT', $document, 'Exported document event end missing'); + $this->assertStringContainsString('END:VCALENDAR', $document, 'Exported document calendar end missing'); + + } + +} diff --git a/apps/dav/tests/unit/CapabilitiesTest.php b/apps/dav/tests/unit/CapabilitiesTest.php index e99f7b8da5f..21d00ef183f 100644 --- a/apps/dav/tests/unit/CapabilitiesTest.php +++ b/apps/dav/tests/unit/CapabilitiesTest.php @@ -28,6 +28,7 @@ class CapabilitiesTest extends TestCase { $expected = [ 'dav' => [ 'chunking' => '1.0', + 'public_shares_chunking' => true, ], ]; $this->assertSame($expected, $capabilities->getCapabilities()); @@ -47,6 +48,7 @@ class CapabilitiesTest extends TestCase { $expected = [ 'dav' => [ 'chunking' => '1.0', + 'public_shares_chunking' => true, 'bulkupload' => '1.0', ], ]; @@ -67,6 +69,7 @@ class CapabilitiesTest extends TestCase { $expected = [ 'dav' => [ 'chunking' => '1.0', + 'public_shares_chunking' => true, 'absence-supported' => true, 'absence-replacement' => true, ], diff --git a/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTestCase.php b/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTestCase.php index a04aedb4e57..d02f1d76cac 100644 --- a/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTestCase.php +++ b/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTestCase.php @@ -137,7 +137,7 @@ abstract class RequestTestCase extends TestCase { $authBackend = new Auth($user, $password); $authPlugin = new \Sabre\DAV\Auth\Plugin($authBackend); - $server = $this->serverFactory->createServer('/', 'dummy', $authPlugin, function () use ($view) { + $server = $this->serverFactory->createServer(false, '/', 'dummy', $authPlugin, function () use ($view) { return $view; }); $server->addPlugin($exceptionPlugin); diff --git a/apps/dav/tests/unit/Direct/DirectHomeTest.php b/apps/dav/tests/unit/Direct/DirectHomeTest.php index 1134f0cd3af..06fb48a64d8 100644 --- a/apps/dav/tests/unit/Direct/DirectHomeTest.php +++ b/apps/dav/tests/unit/Direct/DirectHomeTest.php @@ -160,7 +160,7 @@ class DirectHomeTest extends TestCase { '1.2.3.4' ); $this->throttler->expects($this->once()) - ->method('sleepDelay') + ->method('sleepDelayOrThrowOnMax') ->with( '1.2.3.4', 'directlink' diff --git a/apps/dav/tests/unit/Files/Sharing/FilesDropPluginTest.php b/apps/dav/tests/unit/Files/Sharing/FilesDropPluginTest.php index 7264119f8c6..ce469a1c749 100644 --- a/apps/dav/tests/unit/Files/Sharing/FilesDropPluginTest.php +++ b/apps/dav/tests/unit/Files/Sharing/FilesDropPluginTest.php @@ -53,6 +53,10 @@ class FilesDropPluginTest extends TestCase { $this->share->expects($this->any()) ->method('getAttributes') ->willReturn($attributes); + + $this->share + ->method('getToken') + ->willReturn('token'); } public function testInitialize(): void { @@ -86,7 +90,7 @@ class FilesDropPluginTest extends TestCase { ->willReturn('PUT'); $this->request->method('getPath') - ->willReturn('file.txt'); + ->willReturn('/files/token/file.txt'); $this->request->method('getBaseUrl') ->willReturn('https://example.com'); @@ -97,7 +101,7 @@ class FilesDropPluginTest extends TestCase { $this->request->expects($this->once()) ->method('setUrl') - ->with('https://example.com/file.txt'); + ->with('https://example.com/files/token/file.txt'); $this->plugin->beforeMethod($this->request, $this->response); } @@ -111,7 +115,7 @@ class FilesDropPluginTest extends TestCase { ->willReturn('PUT'); $this->request->method('getPath') - ->willReturn('file.txt'); + ->willReturn('/files/token/file.txt'); $this->request->method('getBaseUrl') ->willReturn('https://example.com'); @@ -127,7 +131,7 @@ class FilesDropPluginTest extends TestCase { $this->request->expects($this->once()) ->method('setUrl') - ->with($this->equalTo('https://example.com/file (2).txt')); + ->with($this->equalTo('https://example.com/files/token/file (2).txt')); $this->plugin->beforeMethod($this->request, $this->response); } @@ -154,7 +158,7 @@ class FilesDropPluginTest extends TestCase { ->willReturn('PUT'); $this->request->method('getPath') - ->willReturn('folder/file.txt'); + ->willReturn('/files/token/folder/file.txt'); $this->request->method('getBaseUrl') ->willReturn('https://example.com'); @@ -170,7 +174,7 @@ class FilesDropPluginTest extends TestCase { $this->request->expects($this->once()) ->method('setUrl') - ->with($this->equalTo('https://example.com/file (2).txt')); + ->with($this->equalTo('https://example.com/files/token/file (2).txt')); $this->plugin->beforeMethod($this->request, $this->response); } diff --git a/apps/encryption/l10n/de.js b/apps/encryption/l10n/de.js index d32f6e03d33..d75e6ab3a18 100644 --- a/apps/encryption/l10n/de.js +++ b/apps/encryption/l10n/de.js @@ -4,7 +4,7 @@ OC.L10N.register( "Missing recovery key password" : "Schlüsselpasswort zur Wiederherstellung fehlt", "Please repeat the recovery key password" : "Schlüsselpasswort zur Wiederherstellung bitte wiederholen", "Repeated recovery key password does not match the provided recovery key password" : "Das wiederholte Schlüsselpasswort zur Wiederherstellung stimmt nicht mit dem geforderten Schlüsselpasswort zur Wiederherstellung überein", - "Recovery key successfully enabled" : "Wiederherstellungsschlüssel wurde erfolgreich aktiviert", + "Recovery key successfully enabled" : "Wiederherstellungsschlüssel wurde aktiviert", "Could not enable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden. Bitte überprüfe das Passwort für den Wiederherstellungsschlüssel!", "Recovery key successfully disabled" : "Wiederherstellungsschlüssel deaktiviert.", "Could not disable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Bitte überprüfe das Passwort für den Wiederherstellungsschlüssel!", diff --git a/apps/encryption/l10n/de.json b/apps/encryption/l10n/de.json index 8b47d1d9d94..a2559fdf4f3 100644 --- a/apps/encryption/l10n/de.json +++ b/apps/encryption/l10n/de.json @@ -2,7 +2,7 @@ "Missing recovery key password" : "Schlüsselpasswort zur Wiederherstellung fehlt", "Please repeat the recovery key password" : "Schlüsselpasswort zur Wiederherstellung bitte wiederholen", "Repeated recovery key password does not match the provided recovery key password" : "Das wiederholte Schlüsselpasswort zur Wiederherstellung stimmt nicht mit dem geforderten Schlüsselpasswort zur Wiederherstellung überein", - "Recovery key successfully enabled" : "Wiederherstellungsschlüssel wurde erfolgreich aktiviert", + "Recovery key successfully enabled" : "Wiederherstellungsschlüssel wurde aktiviert", "Could not enable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden. Bitte überprüfe das Passwort für den Wiederherstellungsschlüssel!", "Recovery key successfully disabled" : "Wiederherstellungsschlüssel deaktiviert.", "Could not disable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Bitte überprüfe das Passwort für den Wiederherstellungsschlüssel!", diff --git a/apps/encryption/l10n/de_DE.js b/apps/encryption/l10n/de_DE.js index 92226e19cf3..94d2501a80c 100644 --- a/apps/encryption/l10n/de_DE.js +++ b/apps/encryption/l10n/de_DE.js @@ -4,9 +4,9 @@ OC.L10N.register( "Missing recovery key password" : "Schlüsselpasswort zur Wiederherstellung fehlt", "Please repeat the recovery key password" : "Schlüsselpasswort zur Wiederherstellung bitte wiederholen", "Repeated recovery key password does not match the provided recovery key password" : "Das wiederholte Schlüsselpasswort zur Wiederherstellung stimmt nicht mit dem geforderten Schlüsselpasswort zur Wiederherstellung überein", - "Recovery key successfully enabled" : "Der Wiederherstellungsschlüssel wurde erfolgreich aktiviert.", + "Recovery key successfully enabled" : "Der Wiederherstellungsschlüssel wurde aktiviert.", "Could not enable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!", - "Recovery key successfully disabled" : "Der Wiederherstellungsschlüssel wurde erfolgreich deaktiviert.", + "Recovery key successfully disabled" : "Der Wiederherstellungsschlüssel wurde deaktiviert.", "Could not disable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!", "Missing parameters" : "Fehlende Parameter", "Please provide the old recovery password" : "Bitte das alte Wiederherstellungspasswort eingeben", diff --git a/apps/encryption/l10n/de_DE.json b/apps/encryption/l10n/de_DE.json index 21c6acc753c..7add3710d66 100644 --- a/apps/encryption/l10n/de_DE.json +++ b/apps/encryption/l10n/de_DE.json @@ -2,9 +2,9 @@ "Missing recovery key password" : "Schlüsselpasswort zur Wiederherstellung fehlt", "Please repeat the recovery key password" : "Schlüsselpasswort zur Wiederherstellung bitte wiederholen", "Repeated recovery key password does not match the provided recovery key password" : "Das wiederholte Schlüsselpasswort zur Wiederherstellung stimmt nicht mit dem geforderten Schlüsselpasswort zur Wiederherstellung überein", - "Recovery key successfully enabled" : "Der Wiederherstellungsschlüssel wurde erfolgreich aktiviert.", + "Recovery key successfully enabled" : "Der Wiederherstellungsschlüssel wurde aktiviert.", "Could not enable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!", - "Recovery key successfully disabled" : "Der Wiederherstellungsschlüssel wurde erfolgreich deaktiviert.", + "Recovery key successfully disabled" : "Der Wiederherstellungsschlüssel wurde deaktiviert.", "Could not disable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!", "Missing parameters" : "Fehlende Parameter", "Please provide the old recovery password" : "Bitte das alte Wiederherstellungspasswort eingeben", diff --git a/apps/encryption/lib/Command/FixEncryptedVersion.php b/apps/encryption/lib/Command/FixEncryptedVersion.php index 6635bb6cba9..462e3a5cc2a 100644 --- a/apps/encryption/lib/Command/FixEncryptedVersion.php +++ b/apps/encryption/lib/Command/FixEncryptedVersion.php @@ -12,6 +12,7 @@ use OC\Files\Storage\Wrapper\Encryption; use OC\Files\View; use OC\ServerNotAvailableException; use OCA\Encryption\Util; +use OCP\Encryption\Exceptions\InvalidHeaderException; use OCP\Files\IRootFolder; use OCP\HintException; use OCP\IConfig; @@ -196,7 +197,7 @@ class FixEncryptedVersion extends Command { \fclose($handle); return true; - } catch (ServerNotAvailableException $e) { + } catch (ServerNotAvailableException|InvalidHeaderException $e) { // not a "bad signature" error and likely "legacy cipher" exception // this could mean that the file is maybe not encrypted but the encrypted version is set if (!$this->supportLegacy && $ignoreCorrectEncVersionCall === true) { diff --git a/apps/federatedfilesharing/l10n/de_DE.js b/apps/federatedfilesharing/l10n/de_DE.js index 25b68d9c001..40ad6b5be23 100644 --- a/apps/federatedfilesharing/l10n/de_DE.js +++ b/apps/federatedfilesharing/l10n/de_DE.js @@ -69,7 +69,7 @@ OC.L10N.register( "Incoming share could not be processed" : "Eingehende Freigabe konnte nicht verarbeitet werden", "Clipboard is not available" : "Zwischenablage ist nicht verfügbar", "Your Federated Cloud ID:" : "Ihre Federated-Cloud-ID:", - "Twitter" : "Twitter", + "Twitter" : "X", "Diaspora" : "Diaspora" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/de_DE.json b/apps/federatedfilesharing/l10n/de_DE.json index da17581170c..c6cdd274032 100644 --- a/apps/federatedfilesharing/l10n/de_DE.json +++ b/apps/federatedfilesharing/l10n/de_DE.json @@ -67,7 +67,7 @@ "Incoming share could not be processed" : "Eingehende Freigabe konnte nicht verarbeitet werden", "Clipboard is not available" : "Zwischenablage ist nicht verfügbar", "Your Federated Cloud ID:" : "Ihre Federated-Cloud-ID:", - "Twitter" : "Twitter", + "Twitter" : "X", "Diaspora" : "Diaspora" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/pl.js b/apps/federatedfilesharing/l10n/pl.js index bc76be7c614..a86a3a7de0f 100644 --- a/apps/federatedfilesharing/l10n/pl.js +++ b/apps/federatedfilesharing/l10n/pl.js @@ -23,6 +23,7 @@ OC.L10N.register( "Sharing" : "Udostępnianie", "Federated file sharing" : "Udostępnianie federacyjne plików", "Provide federated file sharing across servers" : "Zezwól na udostępnianie federacyjne plików na serwerach", + "This is used to retrieve the federated cloud ID to make federated sharing easier." : "Służy do pobierania ID Chmury Federacyjnej, aby ułatwić udostępnianie federacyjne.", "Unable to update federated files sharing config" : "Nie można zaktualizować konfiguracji udostępniania federacyjnego plików", "Adjust how people can share between servers. This includes shares between people on this server as well if they are using federated sharing." : "Dostosuj sposób udostępniania między serwerami. Obejmuje to również udostępnianie między ludźmi na tym serwerze, jeśli korzystają z udostępniania federacyjnego.", "Allow people on this server to send shares to other servers (this option also allows WebDAV access to public shares)" : "Zezwalaj ludziom na tym serwerze na wysłanie udostępnień do innych serwerów (opcja ta umożliwia również dostęp WebDAV do udostępnień publicznych)", diff --git a/apps/federatedfilesharing/l10n/pl.json b/apps/federatedfilesharing/l10n/pl.json index b55118c022c..2797e9c8f2d 100644 --- a/apps/federatedfilesharing/l10n/pl.json +++ b/apps/federatedfilesharing/l10n/pl.json @@ -21,6 +21,7 @@ "Sharing" : "Udostępnianie", "Federated file sharing" : "Udostępnianie federacyjne plików", "Provide federated file sharing across servers" : "Zezwól na udostępnianie federacyjne plików na serwerach", + "This is used to retrieve the federated cloud ID to make federated sharing easier." : "Służy do pobierania ID Chmury Federacyjnej, aby ułatwić udostępnianie federacyjne.", "Unable to update federated files sharing config" : "Nie można zaktualizować konfiguracji udostępniania federacyjnego plików", "Adjust how people can share between servers. This includes shares between people on this server as well if they are using federated sharing." : "Dostosuj sposób udostępniania między serwerami. Obejmuje to również udostępnianie między ludźmi na tym serwerze, jeśli korzystają z udostępniania federacyjnego.", "Allow people on this server to send shares to other servers (this option also allows WebDAV access to public shares)" : "Zezwalaj ludziom na tym serwerze na wysłanie udostępnień do innych serwerów (opcja ta umożliwia również dostęp WebDAV do udostępnień publicznych)", diff --git a/apps/federatedfilesharing/l10n/pt_BR.js b/apps/federatedfilesharing/l10n/pt_BR.js index 2f4a3746efd..9963003678f 100644 --- a/apps/federatedfilesharing/l10n/pt_BR.js +++ b/apps/federatedfilesharing/l10n/pt_BR.js @@ -29,7 +29,7 @@ OC.L10N.register( "Enable data upload" : "Ativar upload de dados", "Confirm querying lookup server" : "Confirmar a consulta ao servidor de pesquisa", "When enabled, the search input when creating shares will be sent to an external system that provides a public and global address book." : "Quando ativada, a entrada de pesquisa ao criar compartilhamentos será enviada para um sistema externo que fornece um catálogo de endereços público e global.", - "This is used to retrieve the federated cloud ID to make federated sharing easier." : "Isso é usado para recuperar o ID da nuvem federada para facilitar o compartilhamento federado.", + "This is used to retrieve the federated cloud ID to make federated sharing easier." : "Isso é usado para obter o ID de nuvem federada para facilitar o compartilhamento federado.", "Moreover, email addresses of users might be sent to that system in order to verify them." : "Além disso, os endereços de e-mail dos usuários podem ser enviados para esse sistema a fim de verificá-los.", "Disable querying" : "Desativar consulta", "Enable querying" : "Ativar consulta", @@ -51,7 +51,7 @@ OC.L10N.register( "Clipboard not available. Please copy the cloud ID manually." : "Área de transferência indisponível. Copie o ID de Nuvem manualmente.", "Copied!" : "Copiado!", "Federated Cloud" : "Nuvem Federada", - "You can share with anyone who uses a Nextcloud server or other Open Cloud Mesh (OCM) compatible servers and services! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Você pode compartilhar com qualquer pessoa que use Nextcloud ou outros servidores compatíveis com o Open Cloud Mesh (OCM)! Basta colocar sua ID de nuvem federada na caixa de diálogo de compartilhamento. Algo como person@cloud.example.com", + "You can share with anyone who uses a Nextcloud server or other Open Cloud Mesh (OCM) compatible servers and services! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Você pode compartilhar com qualquer pessoa que use Nextcloud ou outros servidores compatíveis com o Open Cloud Mesh (OCM)! Basta colocar sua ID de Nuvem Federada na caixa de diálogo de compartilhamento. Algo como person@cloud.example.com", "Your Federated Cloud ID" : "Seu ID de Nuvem Federada", "Share it so your friends can share files with you:" : "Compartilhe para que seus amigos possam compartilhar arquivos com você:", "Facebook" : "Facebook", @@ -68,7 +68,7 @@ OC.L10N.register( "Remote share password" : "Senha do compartilhamento remoto", "Incoming share could not be processed" : "O compartilhamento recebido não pôde ser processado", "Clipboard is not available" : "A área de transferência não está disponível", - "Your Federated Cloud ID:" : "Sua ID de Nuvem Federada:", + "Your Federated Cloud ID:" : "Seu ID de Nuvem Federada:", "Twitter" : "Twitter", "Diaspora" : "Diaspora" }, diff --git a/apps/federatedfilesharing/l10n/pt_BR.json b/apps/federatedfilesharing/l10n/pt_BR.json index a95a7baa35b..916d02b92ad 100644 --- a/apps/federatedfilesharing/l10n/pt_BR.json +++ b/apps/federatedfilesharing/l10n/pt_BR.json @@ -27,7 +27,7 @@ "Enable data upload" : "Ativar upload de dados", "Confirm querying lookup server" : "Confirmar a consulta ao servidor de pesquisa", "When enabled, the search input when creating shares will be sent to an external system that provides a public and global address book." : "Quando ativada, a entrada de pesquisa ao criar compartilhamentos será enviada para um sistema externo que fornece um catálogo de endereços público e global.", - "This is used to retrieve the federated cloud ID to make federated sharing easier." : "Isso é usado para recuperar o ID da nuvem federada para facilitar o compartilhamento federado.", + "This is used to retrieve the federated cloud ID to make federated sharing easier." : "Isso é usado para obter o ID de nuvem federada para facilitar o compartilhamento federado.", "Moreover, email addresses of users might be sent to that system in order to verify them." : "Além disso, os endereços de e-mail dos usuários podem ser enviados para esse sistema a fim de verificá-los.", "Disable querying" : "Desativar consulta", "Enable querying" : "Ativar consulta", @@ -49,7 +49,7 @@ "Clipboard not available. Please copy the cloud ID manually." : "Área de transferência indisponível. Copie o ID de Nuvem manualmente.", "Copied!" : "Copiado!", "Federated Cloud" : "Nuvem Federada", - "You can share with anyone who uses a Nextcloud server or other Open Cloud Mesh (OCM) compatible servers and services! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Você pode compartilhar com qualquer pessoa que use Nextcloud ou outros servidores compatíveis com o Open Cloud Mesh (OCM)! Basta colocar sua ID de nuvem federada na caixa de diálogo de compartilhamento. Algo como person@cloud.example.com", + "You can share with anyone who uses a Nextcloud server or other Open Cloud Mesh (OCM) compatible servers and services! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Você pode compartilhar com qualquer pessoa que use Nextcloud ou outros servidores compatíveis com o Open Cloud Mesh (OCM)! Basta colocar sua ID de Nuvem Federada na caixa de diálogo de compartilhamento. Algo como person@cloud.example.com", "Your Federated Cloud ID" : "Seu ID de Nuvem Federada", "Share it so your friends can share files with you:" : "Compartilhe para que seus amigos possam compartilhar arquivos com você:", "Facebook" : "Facebook", @@ -66,7 +66,7 @@ "Remote share password" : "Senha do compartilhamento remoto", "Incoming share could not be processed" : "O compartilhamento recebido não pôde ser processado", "Clipboard is not available" : "A área de transferência não está disponível", - "Your Federated Cloud ID:" : "Sua ID de Nuvem Federada:", + "Your Federated Cloud ID:" : "Seu ID de Nuvem Federada:", "Twitter" : "Twitter", "Diaspora" : "Diaspora" },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" diff --git a/apps/federatedfilesharing/lib/FederatedShareProvider.php b/apps/federatedfilesharing/lib/FederatedShareProvider.php index d993b35845c..7c95b83a5dd 100644 --- a/apps/federatedfilesharing/lib/FederatedShareProvider.php +++ b/apps/federatedfilesharing/lib/FederatedShareProvider.php @@ -26,6 +26,7 @@ use OCP\Share\Exceptions\GenericShareException; use OCP\Share\Exceptions\ShareNotFound; use OCP\Share\IShare; use OCP\Share\IShareProvider; +use OCP\Share\IShareProviderSupportsAllSharesInFolder; use Psr\Log\LoggerInterface; /** @@ -33,7 +34,7 @@ use Psr\Log\LoggerInterface; * * @package OCA\FederatedFileSharing */ -class FederatedShareProvider implements IShareProvider { +class FederatedShareProvider implements IShareProvider, IShareProviderSupportsAllSharesInFolder { public const SHARE_TYPE_REMOTE = 6; /** @var string */ @@ -553,7 +554,17 @@ class FederatedShareProvider implements IShareProvider { if (!$shallow) { throw new \Exception('non-shallow getSharesInFolder is no longer supported'); } + return $this->getSharesInFolderInternal($userId, $node, $reshares); + } + + public function getAllSharesInFolder(Folder $node): array { + return $this->getSharesInFolderInternal(null, $node, null); + } + /** + * @return array<int, list<IShare>> + */ + private function getSharesInFolderInternal(?string $userId, Folder $node, ?bool $reshares): array { $qb = $this->dbConnection->getQueryBuilder(); $qb->select('*') ->from('share', 's') @@ -562,18 +573,20 @@ class FederatedShareProvider implements IShareProvider { $qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_REMOTE)) ); - /** - * Reshares for this user are shares where they are the owner. - */ - if ($reshares === false) { - $qb->andWhere($qb->expr()->eq('uid_initiator', $qb->createNamedParameter($userId))); - } else { - $qb->andWhere( - $qb->expr()->orX( - $qb->expr()->eq('uid_owner', $qb->createNamedParameter($userId)), - $qb->expr()->eq('uid_initiator', $qb->createNamedParameter($userId)) - ) - ); + if ($userId !== null) { + /** + * Reshares for this user are shares where they are the owner. + */ + if ($reshares !== true) { + $qb->andWhere($qb->expr()->eq('uid_initiator', $qb->createNamedParameter($userId))); + } else { + $qb->andWhere( + $qb->expr()->orX( + $qb->expr()->eq('uid_owner', $qb->createNamedParameter($userId)), + $qb->expr()->eq('uid_initiator', $qb->createNamedParameter($userId)) + ) + ); + } } $qb->innerJoin('s', 'filecache', 'f', $qb->expr()->eq('s.file_source', 'f.fileid')); diff --git a/apps/federation/l10n/de.js b/apps/federation/l10n/de.js index aa6591c4e75..070c7e76e92 100644 --- a/apps/federation/l10n/de.js +++ b/apps/federation/l10n/de.js @@ -6,7 +6,7 @@ OC.L10N.register( "Could not remove server" : "Server konnte nicht entfernt werden", "Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Server.", "No server to federate with found" : "Es wurde kein Server zum Verbinden per Federation gefunden", - "Could not add server" : "Konnte Server nicht hinzufügen", + "Could not add server" : "Server konnte nicht hinzugefügt werden", "Trusted servers" : "Vertrauenswürdige Server", "Federation" : "Federation", "Federation allows you to connect with other trusted servers to exchange the account directory." : "Federation ermöglicht die Verbindung mit anderen vertrauenswürdigen Servern, um das Kontenverzeichnis auszutauschen.", diff --git a/apps/federation/l10n/de.json b/apps/federation/l10n/de.json index 80129b204c9..ec1118bce91 100644 --- a/apps/federation/l10n/de.json +++ b/apps/federation/l10n/de.json @@ -4,7 +4,7 @@ "Could not remove server" : "Server konnte nicht entfernt werden", "Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Server.", "No server to federate with found" : "Es wurde kein Server zum Verbinden per Federation gefunden", - "Could not add server" : "Konnte Server nicht hinzufügen", + "Could not add server" : "Server konnte nicht hinzugefügt werden", "Trusted servers" : "Vertrauenswürdige Server", "Federation" : "Federation", "Federation allows you to connect with other trusted servers to exchange the account directory." : "Federation ermöglicht die Verbindung mit anderen vertrauenswürdigen Servern, um das Kontenverzeichnis auszutauschen.", diff --git a/apps/federation/l10n/de_DE.js b/apps/federation/l10n/de_DE.js index 4df9825a354..efb22f90bb5 100644 --- a/apps/federation/l10n/de_DE.js +++ b/apps/federation/l10n/de_DE.js @@ -6,7 +6,7 @@ OC.L10N.register( "Could not remove server" : "Server konnte nicht entfernt werden", "Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Servern.", "No server to federate with found" : "Es wurde kein Server zum Verbinden per Federation gefunden", - "Could not add server" : "Konnte Server nicht hinzufügen", + "Could not add server" : "Server konnte nicht hinzugefügt werden", "Trusted servers" : "Vertrauenswürdige Server", "Federation" : "Federation", "Federation allows you to connect with other trusted servers to exchange the account directory." : "Federation ermöglicht die Verbindung mit anderen vertrauenswürdigen Servern, um das Kontenverzeichnis auszutauschen.", diff --git a/apps/federation/l10n/de_DE.json b/apps/federation/l10n/de_DE.json index 743a5af0ee5..96f5fb099d3 100644 --- a/apps/federation/l10n/de_DE.json +++ b/apps/federation/l10n/de_DE.json @@ -4,7 +4,7 @@ "Could not remove server" : "Server konnte nicht entfernt werden", "Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Servern.", "No server to federate with found" : "Es wurde kein Server zum Verbinden per Federation gefunden", - "Could not add server" : "Konnte Server nicht hinzufügen", + "Could not add server" : "Server konnte nicht hinzugefügt werden", "Trusted servers" : "Vertrauenswürdige Server", "Federation" : "Federation", "Federation allows you to connect with other trusted servers to exchange the account directory." : "Federation ermöglicht die Verbindung mit anderen vertrauenswürdigen Servern, um das Kontenverzeichnis auszutauschen.", diff --git a/apps/files/appinfo/info.xml b/apps/files/appinfo/info.xml index 95f6153e1d7..aedcd5b7ed5 100644 --- a/apps/files/appinfo/info.xml +++ b/apps/files/appinfo/info.xml @@ -46,12 +46,14 @@ <command>OCA\Files\Command\Delete</command> <command>OCA\Files\Command\Copy</command> <command>OCA\Files\Command\Move</command> + <command>OCA\Files\Command\SanitizeFilenames</command> <command>OCA\Files\Command\Object\Delete</command> <command>OCA\Files\Command\Object\Get</command> <command>OCA\Files\Command\Object\Put</command> <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\WindowsCompatibleFilenames</command> </commands> <settings> diff --git a/apps/files/composer/composer/autoload_classmap.php b/apps/files/composer/composer/autoload_classmap.php index a74df7ba3d2..070cb46de38 100644 --- a/apps/files/composer/composer/autoload_classmap.php +++ b/apps/files/composer/composer/autoload_classmap.php @@ -42,9 +42,11 @@ return array( 'OCA\\Files\\Command\\Object\\Put' => $baseDir . '/../lib/Command/Object/Put.php', 'OCA\\Files\\Command\\Put' => $baseDir . '/../lib/Command/Put.php', 'OCA\\Files\\Command\\RepairTree' => $baseDir . '/../lib/Command/RepairTree.php', + 'OCA\\Files\\Command\\SanitizeFilenames' => $baseDir . '/../lib/Command/SanitizeFilenames.php', 'OCA\\Files\\Command\\Scan' => $baseDir . '/../lib/Command/Scan.php', 'OCA\\Files\\Command\\ScanAppData' => $baseDir . '/../lib/Command/ScanAppData.php', 'OCA\\Files\\Command\\TransferOwnership' => $baseDir . '/../lib/Command/TransferOwnership.php', + 'OCA\\Files\\Command\\WindowsCompatibleFilenames' => $baseDir . '/../lib/Command/WindowsCompatibleFilenames.php', 'OCA\\Files\\Controller\\ApiController' => $baseDir . '/../lib/Controller/ApiController.php', 'OCA\\Files\\Controller\\ConversionApiController' => $baseDir . '/../lib/Controller/ConversionApiController.php', 'OCA\\Files\\Controller\\DirectEditingController' => $baseDir . '/../lib/Controller/DirectEditingController.php', diff --git a/apps/files/composer/composer/autoload_static.php b/apps/files/composer/composer/autoload_static.php index 1d79f38e35a..ce79d370e7c 100644 --- a/apps/files/composer/composer/autoload_static.php +++ b/apps/files/composer/composer/autoload_static.php @@ -57,9 +57,11 @@ class ComposerStaticInitFiles 'OCA\\Files\\Command\\Object\\Put' => __DIR__ . '/..' . '/../lib/Command/Object/Put.php', 'OCA\\Files\\Command\\Put' => __DIR__ . '/..' . '/../lib/Command/Put.php', 'OCA\\Files\\Command\\RepairTree' => __DIR__ . '/..' . '/../lib/Command/RepairTree.php', + 'OCA\\Files\\Command\\SanitizeFilenames' => __DIR__ . '/..' . '/../lib/Command/SanitizeFilenames.php', 'OCA\\Files\\Command\\Scan' => __DIR__ . '/..' . '/../lib/Command/Scan.php', 'OCA\\Files\\Command\\ScanAppData' => __DIR__ . '/..' . '/../lib/Command/ScanAppData.php', 'OCA\\Files\\Command\\TransferOwnership' => __DIR__ . '/..' . '/../lib/Command/TransferOwnership.php', + 'OCA\\Files\\Command\\WindowsCompatibleFilenames' => __DIR__ . '/..' . '/../lib/Command/WindowsCompatibleFilenames.php', 'OCA\\Files\\Controller\\ApiController' => __DIR__ . '/..' . '/../lib/Controller/ApiController.php', 'OCA\\Files\\Controller\\ConversionApiController' => __DIR__ . '/..' . '/../lib/Controller/ConversionApiController.php', 'OCA\\Files\\Controller\\DirectEditingController' => __DIR__ . '/..' . '/../lib/Controller/DirectEditingController.php', diff --git a/apps/files/l10n/cs.js b/apps/files/l10n/cs.js index b5c6029a5fa..0d9ab61cef5 100644 --- a/apps/files/l10n/cs.js +++ b/apps/files/l10n/cs.js @@ -43,6 +43,8 @@ OC.L10N.register( "Files" : "Soubory", "A file or folder has been <strong>changed</strong>" : "Soubor nebo složka byla <strong>změněna</strong>", "A favorite file or folder has been <strong>changed</strong>" : "Oblíbený soubor nebo složka byla <strong>změněna</strong>", + "%1$s (renamed)" : "%1$s (přejmenované)", + "renamed file" : "přejmenovaný soubor", "Failed to authorize" : "Nepodařilo se získat pověření", "Invalid folder path" : "Neplatný popis umístění složky", "Folder not found" : "Složka nenalezena", @@ -71,6 +73,8 @@ OC.L10N.register( "Transferred from %1$s on %2$s" : "Převedeno z %1$s na %2$s", "Files compatibility" : "Kompatibilita souborů", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Umožňuje omezit názvy souborů aby bylo zajištěno, že soubory bude možné synchronizovat se všemi klienty. Ve výchozím stavu jsou povoleny veškeré názvy souborů, splňující standard POSIX (např. Linux nebo macOS).", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Po povolení názvů souborů, kompatibilních s Windows, stávající soubory už nebude možné změnit, ale je možné je přejmenovat na platné nové názvy jejich vlastníkem.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Po povolení tohoto natavení je také možné soubory stěhovat automaticky. Další informace viz dokumentace k příkazu occ.", "Enforce Windows compatibility" : "Vynutit kompatibilitu s Windows", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Toto bude blokovat použití názvů souborů, které nejsou platné na strojích s Windows, jako je použití vyhrazených názvů nebo speciálních znaků. Ale nevynutí kompatibilitu v případě rozlišování malých/VELKÝCH písmen.", "File Management" : "Správa souboru", diff --git a/apps/files/l10n/cs.json b/apps/files/l10n/cs.json index df32ef519de..029d7b5cd5c 100644 --- a/apps/files/l10n/cs.json +++ b/apps/files/l10n/cs.json @@ -41,6 +41,8 @@ "Files" : "Soubory", "A file or folder has been <strong>changed</strong>" : "Soubor nebo složka byla <strong>změněna</strong>", "A favorite file or folder has been <strong>changed</strong>" : "Oblíbený soubor nebo složka byla <strong>změněna</strong>", + "%1$s (renamed)" : "%1$s (přejmenované)", + "renamed file" : "přejmenovaný soubor", "Failed to authorize" : "Nepodařilo se získat pověření", "Invalid folder path" : "Neplatný popis umístění složky", "Folder not found" : "Složka nenalezena", @@ -69,6 +71,8 @@ "Transferred from %1$s on %2$s" : "Převedeno z %1$s na %2$s", "Files compatibility" : "Kompatibilita souborů", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Umožňuje omezit názvy souborů aby bylo zajištěno, že soubory bude možné synchronizovat se všemi klienty. Ve výchozím stavu jsou povoleny veškeré názvy souborů, splňující standard POSIX (např. Linux nebo macOS).", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Po povolení názvů souborů, kompatibilních s Windows, stávající soubory už nebude možné změnit, ale je možné je přejmenovat na platné nové názvy jejich vlastníkem.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Po povolení tohoto natavení je také možné soubory stěhovat automaticky. Další informace viz dokumentace k příkazu occ.", "Enforce Windows compatibility" : "Vynutit kompatibilitu s Windows", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Toto bude blokovat použití názvů souborů, které nejsou platné na strojích s Windows, jako je použití vyhrazených názvů nebo speciálních znaků. Ale nevynutí kompatibilitu v případě rozlišování malých/VELKÝCH písmen.", "File Management" : "Správa souboru", diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js index 78f6feeec1e..e1018075df1 100644 --- a/apps/files/l10n/de.js +++ b/apps/files/l10n/de.js @@ -43,6 +43,8 @@ OC.L10N.register( "Files" : "Dateien", "A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner wurde <strong>geändert</strong>", "A favorite file or folder has been <strong>changed</strong>" : "Eine favorisierte Datei oder ein Ordner wurde <strong>geändert</strong>", + "%1$s (renamed)" : "%1$s (umbenannt)", + "renamed file" : "Umbenannte Datei", "Failed to authorize" : "Autorisierung fehlgeschlagen", "Invalid folder path" : "Ungültiger Order-Pfad", "Folder not found" : "Ordner nicht gefunden", @@ -71,6 +73,8 @@ OC.L10N.register( "Transferred from %1$s on %2$s" : "Übertragen von %1$s auf %2$s", "Files compatibility" : "Dateikompatibilität", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Ermöglicht die Einschränkung von Dateinamen, um sicherzustellen, dass Dateien mit allen Clients synchronisiert werden können. Standardmäßig sind alle unter POSIX (z. B. Linux oder macOS) gültigen Dateinamen zulässig.", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Nach Aktivierung der Windows-kompatiblen Dateinamen können vorhandene Dateien nicht mehr geändert, aber von ihrem Besitzer in gültige neue Namen umbenannt werden.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Nach dem Aktivieren dieser Einstellung ist es auch möglich, Dateien automatisch zu migrieren. Weitere Informationen finden sich in der Dokumentation zum Befehl „occ“.", "Enforce Windows compatibility" : "Windows-Kompatibilität erzwingen", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Dadurch werden Dateinamen blockiert, die auf Windows-Systemen unzulässig sind, z. B. reservierte Namen oder Sonderzeichen. Die Kompatibilität der Groß-/Kleinschreibung wird dadurch jedoch nicht erzwungen.", "File Management" : "Dateiverwaltung", @@ -107,7 +111,7 @@ OC.L10N.register( "Name" : "Name", "Size" : "Größe", "\"{displayName}\" failed on some elements" : "\"{displayName}\" ist bei einigen Elementen fehlgeschlagen", - "\"{displayName}\" batch action executed successfully" : "Stapelaktion \"{displayName}\" erfolgreich ausgeführt", + "\"{displayName}\" batch action executed successfully" : "Stapelaktion \"{displayName}\" ausgeführt", "\"{displayName}\" action failed" : "Aktion \"{displayName}\" fehlgeschlagen", "Actions" : "Aktionen", "(selected)" : "(ausgewählt)", @@ -165,7 +169,7 @@ OC.L10N.register( "Error during upload: {message}" : "Fehler beim Hochladen: {message}", "Error during upload, status code {status}" : "Fehler beim Hochladen, Statuscode {status}", "Unknown error during upload" : "unbekannte Fehler während des Hochladens", - "\"{displayName}\" action executed successfully" : "Aktion \"{displayName}\" erfolgreich ausgeführt", + "\"{displayName}\" action executed successfully" : "Aktion \"{displayName}\" ausgeführt", "Loading current folder" : "Lade aktuellen Ordner", "Retry" : "Wiederholen", "No files in here" : "Keine Dateien vorhanden", @@ -236,7 +240,7 @@ OC.L10N.register( "All files failed to be converted" : "Alle Dateien konnten nicht konvertiert werden", "One file could not be converted: {message}" : "Eine Datei konnte nicht konvertiert werden: {message}", "_One file could not be converted_::_%n files could not be converted_" : ["Eine Datei konnte nicht konvertiert werden","%n Dateien konnten nicht konvertiert werden"], - "_One file successfully converted_::_%n files successfully converted_" : ["Eine Datei erfolgreich konvertiert","%n Dateien erfolgreich konvertiert"], + "_One file successfully converted_::_%n files successfully converted_" : ["Eine Datei konvertiert","%n Dateien konvertiert"], "Files successfully converted" : "Dateien konvertiert", "Failed to convert files" : "Dateien konnten nicht konvertiert werden", "Converting file …" : "Datei wird konvertiert …", diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json index 8715721ef1c..673f5c63b51 100644 --- a/apps/files/l10n/de.json +++ b/apps/files/l10n/de.json @@ -41,6 +41,8 @@ "Files" : "Dateien", "A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner wurde <strong>geändert</strong>", "A favorite file or folder has been <strong>changed</strong>" : "Eine favorisierte Datei oder ein Ordner wurde <strong>geändert</strong>", + "%1$s (renamed)" : "%1$s (umbenannt)", + "renamed file" : "Umbenannte Datei", "Failed to authorize" : "Autorisierung fehlgeschlagen", "Invalid folder path" : "Ungültiger Order-Pfad", "Folder not found" : "Ordner nicht gefunden", @@ -69,6 +71,8 @@ "Transferred from %1$s on %2$s" : "Übertragen von %1$s auf %2$s", "Files compatibility" : "Dateikompatibilität", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Ermöglicht die Einschränkung von Dateinamen, um sicherzustellen, dass Dateien mit allen Clients synchronisiert werden können. Standardmäßig sind alle unter POSIX (z. B. Linux oder macOS) gültigen Dateinamen zulässig.", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Nach Aktivierung der Windows-kompatiblen Dateinamen können vorhandene Dateien nicht mehr geändert, aber von ihrem Besitzer in gültige neue Namen umbenannt werden.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Nach dem Aktivieren dieser Einstellung ist es auch möglich, Dateien automatisch zu migrieren. Weitere Informationen finden sich in der Dokumentation zum Befehl „occ“.", "Enforce Windows compatibility" : "Windows-Kompatibilität erzwingen", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Dadurch werden Dateinamen blockiert, die auf Windows-Systemen unzulässig sind, z. B. reservierte Namen oder Sonderzeichen. Die Kompatibilität der Groß-/Kleinschreibung wird dadurch jedoch nicht erzwungen.", "File Management" : "Dateiverwaltung", @@ -105,7 +109,7 @@ "Name" : "Name", "Size" : "Größe", "\"{displayName}\" failed on some elements" : "\"{displayName}\" ist bei einigen Elementen fehlgeschlagen", - "\"{displayName}\" batch action executed successfully" : "Stapelaktion \"{displayName}\" erfolgreich ausgeführt", + "\"{displayName}\" batch action executed successfully" : "Stapelaktion \"{displayName}\" ausgeführt", "\"{displayName}\" action failed" : "Aktion \"{displayName}\" fehlgeschlagen", "Actions" : "Aktionen", "(selected)" : "(ausgewählt)", @@ -163,7 +167,7 @@ "Error during upload: {message}" : "Fehler beim Hochladen: {message}", "Error during upload, status code {status}" : "Fehler beim Hochladen, Statuscode {status}", "Unknown error during upload" : "unbekannte Fehler während des Hochladens", - "\"{displayName}\" action executed successfully" : "Aktion \"{displayName}\" erfolgreich ausgeführt", + "\"{displayName}\" action executed successfully" : "Aktion \"{displayName}\" ausgeführt", "Loading current folder" : "Lade aktuellen Ordner", "Retry" : "Wiederholen", "No files in here" : "Keine Dateien vorhanden", @@ -234,7 +238,7 @@ "All files failed to be converted" : "Alle Dateien konnten nicht konvertiert werden", "One file could not be converted: {message}" : "Eine Datei konnte nicht konvertiert werden: {message}", "_One file could not be converted_::_%n files could not be converted_" : ["Eine Datei konnte nicht konvertiert werden","%n Dateien konnten nicht konvertiert werden"], - "_One file successfully converted_::_%n files successfully converted_" : ["Eine Datei erfolgreich konvertiert","%n Dateien erfolgreich konvertiert"], + "_One file successfully converted_::_%n files successfully converted_" : ["Eine Datei konvertiert","%n Dateien konvertiert"], "Files successfully converted" : "Dateien konvertiert", "Failed to convert files" : "Dateien konnten nicht konvertiert werden", "Converting file …" : "Datei wird konvertiert …", diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js index d5e44fa78cc..fd1834ba5c2 100644 --- a/apps/files/l10n/de_DE.js +++ b/apps/files/l10n/de_DE.js @@ -43,6 +43,8 @@ OC.L10N.register( "Files" : "Dateien", "A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner wurde <strong>geändert</strong>", "A favorite file or folder has been <strong>changed</strong>" : "Eine favorisierte Datei oder ein Ordner wurde <strong>geändert</strong>", + "%1$s (renamed)" : "%1$s (umbenannt)", + "renamed file" : "Umbenannte Datei", "Failed to authorize" : "Autorisierung fehlgeschlagen", "Invalid folder path" : "Ungültiger Order-Pfad", "Folder not found" : "Ordner nicht gefunden", @@ -71,6 +73,8 @@ OC.L10N.register( "Transferred from %1$s on %2$s" : "Übertragen von %1$s an %2$s", "Files compatibility" : "Dateikompatibilität", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Ermöglicht die Einschränkung von Dateinamen, um sicherzustellen, dass Dateien mit allen Clients synchronisiert werden können. Standardmäßig sind alle unter POSIX (z. B. Linux oder macOS) gültigen Dateinamen zulässig.", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Nach Aktivierung der Windows-kompatiblen Dateinamen können vorhandene Dateien nicht mehr geändert, aber von ihrem Besitzer in gültige neue Namen umbenannt werden.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Nach dem Aktivieren dieser Einstellung ist es auch möglich, Dateien automatisch zu migrieren. Weitere Informationen finden sich in der Dokumentation zum Befehl \"occ“.", "Enforce Windows compatibility" : "Windows-Kompatibilität erzwingen", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Dadurch werden Dateinamen blockiert, die auf Windows-Systemen unzulässig sind, z. B. reservierte Namen oder Sonderzeichen. Die Kompatibilität der Groß-/Kleinschreibung wird dadurch jedoch nicht erzwungen.", "File Management" : "Dateiverwaltung", @@ -107,7 +111,7 @@ OC.L10N.register( "Name" : "Name", "Size" : "Größe", "\"{displayName}\" failed on some elements" : "\"{displayName}\" ist bei einigen Elementen fehlgeschlagen", - "\"{displayName}\" batch action executed successfully" : "Stapelaktion \"{displayName}\" erfolgreich ausgeführt", + "\"{displayName}\" batch action executed successfully" : "Stapelaktion \"{displayName}\" ausgeführt", "\"{displayName}\" action failed" : "Aktion \"{displayName}\" fehlgeschlagen", "Actions" : "Aktionen", "(selected)" : "(ausgewählt)", @@ -165,7 +169,7 @@ OC.L10N.register( "Error during upload: {message}" : "Fehler beim Hochladen: {message}", "Error during upload, status code {status}" : "Fehler beim Hochladen, Statuscode {status}", "Unknown error during upload" : "Unbekannter Fehler beim Hochladen", - "\"{displayName}\" action executed successfully" : "Aktion \"{displayName}\" erfolgreich ausgeführt", + "\"{displayName}\" action executed successfully" : "Aktion \"{displayName}\" ausgeführt", "Loading current folder" : "Lade aktuellen Ordner", "Retry" : "Wiederholen", "No files in here" : "Keine Dateien vorhanden", @@ -236,7 +240,7 @@ OC.L10N.register( "All files failed to be converted" : "Alle Dateien konnten nicht konvertiert werden", "One file could not be converted: {message}" : "Eine Datei konnte nicht konvertiert werden: {message}", "_One file could not be converted_::_%n files could not be converted_" : ["Eine Datei konnte nicht konvertiert werden","%n Dateien konnten nicht konvertiert werden"], - "_One file successfully converted_::_%n files successfully converted_" : ["Eine Datei erfolgreich konvertiert","%n Dateien konvertiert"], + "_One file successfully converted_::_%n files successfully converted_" : ["Eine Datei konvertiert","%n Dateien konvertiert"], "Files successfully converted" : "Dateien konvertiert", "Failed to convert files" : "Dateien konnten nicht konvertiert werden", "Converting file …" : "Datei wird konvertiert …", diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json index 823c70fcb47..2c3e20326d6 100644 --- a/apps/files/l10n/de_DE.json +++ b/apps/files/l10n/de_DE.json @@ -41,6 +41,8 @@ "Files" : "Dateien", "A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner wurde <strong>geändert</strong>", "A favorite file or folder has been <strong>changed</strong>" : "Eine favorisierte Datei oder ein Ordner wurde <strong>geändert</strong>", + "%1$s (renamed)" : "%1$s (umbenannt)", + "renamed file" : "Umbenannte Datei", "Failed to authorize" : "Autorisierung fehlgeschlagen", "Invalid folder path" : "Ungültiger Order-Pfad", "Folder not found" : "Ordner nicht gefunden", @@ -69,6 +71,8 @@ "Transferred from %1$s on %2$s" : "Übertragen von %1$s an %2$s", "Files compatibility" : "Dateikompatibilität", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Ermöglicht die Einschränkung von Dateinamen, um sicherzustellen, dass Dateien mit allen Clients synchronisiert werden können. Standardmäßig sind alle unter POSIX (z. B. Linux oder macOS) gültigen Dateinamen zulässig.", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Nach Aktivierung der Windows-kompatiblen Dateinamen können vorhandene Dateien nicht mehr geändert, aber von ihrem Besitzer in gültige neue Namen umbenannt werden.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Nach dem Aktivieren dieser Einstellung ist es auch möglich, Dateien automatisch zu migrieren. Weitere Informationen finden sich in der Dokumentation zum Befehl \"occ“.", "Enforce Windows compatibility" : "Windows-Kompatibilität erzwingen", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Dadurch werden Dateinamen blockiert, die auf Windows-Systemen unzulässig sind, z. B. reservierte Namen oder Sonderzeichen. Die Kompatibilität der Groß-/Kleinschreibung wird dadurch jedoch nicht erzwungen.", "File Management" : "Dateiverwaltung", @@ -105,7 +109,7 @@ "Name" : "Name", "Size" : "Größe", "\"{displayName}\" failed on some elements" : "\"{displayName}\" ist bei einigen Elementen fehlgeschlagen", - "\"{displayName}\" batch action executed successfully" : "Stapelaktion \"{displayName}\" erfolgreich ausgeführt", + "\"{displayName}\" batch action executed successfully" : "Stapelaktion \"{displayName}\" ausgeführt", "\"{displayName}\" action failed" : "Aktion \"{displayName}\" fehlgeschlagen", "Actions" : "Aktionen", "(selected)" : "(ausgewählt)", @@ -163,7 +167,7 @@ "Error during upload: {message}" : "Fehler beim Hochladen: {message}", "Error during upload, status code {status}" : "Fehler beim Hochladen, Statuscode {status}", "Unknown error during upload" : "Unbekannter Fehler beim Hochladen", - "\"{displayName}\" action executed successfully" : "Aktion \"{displayName}\" erfolgreich ausgeführt", + "\"{displayName}\" action executed successfully" : "Aktion \"{displayName}\" ausgeführt", "Loading current folder" : "Lade aktuellen Ordner", "Retry" : "Wiederholen", "No files in here" : "Keine Dateien vorhanden", @@ -234,7 +238,7 @@ "All files failed to be converted" : "Alle Dateien konnten nicht konvertiert werden", "One file could not be converted: {message}" : "Eine Datei konnte nicht konvertiert werden: {message}", "_One file could not be converted_::_%n files could not be converted_" : ["Eine Datei konnte nicht konvertiert werden","%n Dateien konnten nicht konvertiert werden"], - "_One file successfully converted_::_%n files successfully converted_" : ["Eine Datei erfolgreich konvertiert","%n Dateien konvertiert"], + "_One file successfully converted_::_%n files successfully converted_" : ["Eine Datei konvertiert","%n Dateien konvertiert"], "Files successfully converted" : "Dateien konvertiert", "Failed to convert files" : "Dateien konnten nicht konvertiert werden", "Converting file …" : "Datei wird konvertiert …", diff --git a/apps/files/l10n/en_GB.js b/apps/files/l10n/en_GB.js index c9c97b918ad..f19022f6ffb 100644 --- a/apps/files/l10n/en_GB.js +++ b/apps/files/l10n/en_GB.js @@ -43,6 +43,8 @@ OC.L10N.register( "Files" : "Files", "A file or folder has been <strong>changed</strong>" : "A file or folder has been <strong>changed</strong>", "A favorite file or folder has been <strong>changed</strong>" : "A favourite file or folder has been <strong>changed</strong>", + "%1$s (renamed)" : "%1$s (renamed)", + "renamed file" : "renamed file", "Failed to authorize" : "Failed to authorize", "Invalid folder path" : "Invalid folder path", "Folder not found" : "Folder not found", @@ -71,6 +73,8 @@ OC.L10N.register( "Transferred from %1$s on %2$s" : "Transferred from %1$s on %2$s", "Files compatibility" : "Files compatibility", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed.", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command.", "Enforce Windows compatibility" : "Enforce Windows compatibility", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity.", "File Management" : "File Management", @@ -328,6 +332,7 @@ OC.L10N.register( "Unexpected error: {error}" : "Unexpected error: {error}", "_%n file_::_%n files_" : ["%n file","%n files"], "_%n folder_::_%n folders_" : ["%n folder","%n folders"], + "_%n hidden_::_%n hidden_" : ["%n hidden","%n hidden"], "Filename must not be empty." : "Filename must not be empty.", "\"{char}\" is not allowed inside a filename." : "\"{char}\" is not allowed inside a filename.", "\"{segment}\" is a reserved name and not allowed for filenames." : "\"{segment}\" is a reserved name and not allowed for filenames.", diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json index 7c4b5e470fa..ff092108295 100644 --- a/apps/files/l10n/en_GB.json +++ b/apps/files/l10n/en_GB.json @@ -41,6 +41,8 @@ "Files" : "Files", "A file or folder has been <strong>changed</strong>" : "A file or folder has been <strong>changed</strong>", "A favorite file or folder has been <strong>changed</strong>" : "A favourite file or folder has been <strong>changed</strong>", + "%1$s (renamed)" : "%1$s (renamed)", + "renamed file" : "renamed file", "Failed to authorize" : "Failed to authorize", "Invalid folder path" : "Invalid folder path", "Folder not found" : "Folder not found", @@ -69,6 +71,8 @@ "Transferred from %1$s on %2$s" : "Transferred from %1$s on %2$s", "Files compatibility" : "Files compatibility", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed.", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command.", "Enforce Windows compatibility" : "Enforce Windows compatibility", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity.", "File Management" : "File Management", @@ -326,6 +330,7 @@ "Unexpected error: {error}" : "Unexpected error: {error}", "_%n file_::_%n files_" : ["%n file","%n files"], "_%n folder_::_%n folders_" : ["%n folder","%n folders"], + "_%n hidden_::_%n hidden_" : ["%n hidden","%n hidden"], "Filename must not be empty." : "Filename must not be empty.", "\"{char}\" is not allowed inside a filename." : "\"{char}\" is not allowed inside a filename.", "\"{segment}\" is a reserved name and not allowed for filenames." : "\"{segment}\" is a reserved name and not allowed for filenames.", diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js index 452372aa9b2..54e89b8c5e6 100644 --- a/apps/files/l10n/es.js +++ b/apps/files/l10n/es.js @@ -43,6 +43,8 @@ OC.L10N.register( "Files" : "Archivos", "A file or folder has been <strong>changed</strong>" : "Se ha <strong>modificado</strong> un archivo o carpeta", "A favorite file or folder has been <strong>changed</strong>" : "Un archivo o carpeta favorito ha sido <strong>cambiado</strong>", + "%1$s (renamed)" : "%1$s (renombrado)", + "renamed file" : "archivo renombrado", "Failed to authorize" : "Fallo al autorizar", "Invalid folder path" : "Ruta de carpeta inválida", "Folder not found" : "Carpeta no encontrada", @@ -71,6 +73,8 @@ OC.L10N.register( "Transferred from %1$s on %2$s" : "Se transfirió desde %1$s en %2$s", "Files compatibility" : "Compatibilidad de archivos", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Permitir la restricción en nombres de archivo para asegurar que los archivos se puedan sincronizar con todos los clientes. Por defecto, se permiten todos los nombres de archivos válidos en POSIX (por ejemplo, Linux o macOS).", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Luego de habilitar los nombres de archivo compatibles con windows, los archivos existentes no podrán ser modificados, pero, podrán ser renombrados a nuevos nombres válidos por su respectivo propietario.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "También es posible migrar los archivos automáticamente luego de habilitar este ajuste. Por favor, refiérase a la documentación sobre el comando occ.", "Enforce Windows compatibility" : "Forzar la compatibilidad con Windows", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Esto bloqueará los nombres de archivos inválidos en sistemas Windows, tales como usar nombres reservados o caracteres especiales. Pero no forzará la compatibilidad del uso de mayúsculas y minúsculas.", "File Management" : "Gestión de archivos", @@ -328,6 +332,7 @@ OC.L10N.register( "Unexpected error: {error}" : "Error inesperado: {error}", "_%n file_::_%n files_" : ["%n archivo","%n archivos","%n archivos"], "_%n folder_::_%n folders_" : ["%n carpeta","%n carpetas","%n carpetas"], + "_%n hidden_::_%n hidden_" : ["%n oculto","%n ocultos","%n ocultos"], "Filename must not be empty." : "El nombre de archivo no debe estar vacío.", "\"{char}\" is not allowed inside a filename." : "\"{char}\" no está permitido en el nombre de archivo.", "\"{segment}\" is a reserved name and not allowed for filenames." : "\"{segment}\" es un nombre reservado y no se permite para los nombres de archivo.", diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json index e59a967242e..79fb844a32c 100644 --- a/apps/files/l10n/es.json +++ b/apps/files/l10n/es.json @@ -41,6 +41,8 @@ "Files" : "Archivos", "A file or folder has been <strong>changed</strong>" : "Se ha <strong>modificado</strong> un archivo o carpeta", "A favorite file or folder has been <strong>changed</strong>" : "Un archivo o carpeta favorito ha sido <strong>cambiado</strong>", + "%1$s (renamed)" : "%1$s (renombrado)", + "renamed file" : "archivo renombrado", "Failed to authorize" : "Fallo al autorizar", "Invalid folder path" : "Ruta de carpeta inválida", "Folder not found" : "Carpeta no encontrada", @@ -69,6 +71,8 @@ "Transferred from %1$s on %2$s" : "Se transfirió desde %1$s en %2$s", "Files compatibility" : "Compatibilidad de archivos", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Permitir la restricción en nombres de archivo para asegurar que los archivos se puedan sincronizar con todos los clientes. Por defecto, se permiten todos los nombres de archivos válidos en POSIX (por ejemplo, Linux o macOS).", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Luego de habilitar los nombres de archivo compatibles con windows, los archivos existentes no podrán ser modificados, pero, podrán ser renombrados a nuevos nombres válidos por su respectivo propietario.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "También es posible migrar los archivos automáticamente luego de habilitar este ajuste. Por favor, refiérase a la documentación sobre el comando occ.", "Enforce Windows compatibility" : "Forzar la compatibilidad con Windows", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Esto bloqueará los nombres de archivos inválidos en sistemas Windows, tales como usar nombres reservados o caracteres especiales. Pero no forzará la compatibilidad del uso de mayúsculas y minúsculas.", "File Management" : "Gestión de archivos", @@ -326,6 +330,7 @@ "Unexpected error: {error}" : "Error inesperado: {error}", "_%n file_::_%n files_" : ["%n archivo","%n archivos","%n archivos"], "_%n folder_::_%n folders_" : ["%n carpeta","%n carpetas","%n carpetas"], + "_%n hidden_::_%n hidden_" : ["%n oculto","%n ocultos","%n ocultos"], "Filename must not be empty." : "El nombre de archivo no debe estar vacío.", "\"{char}\" is not allowed inside a filename." : "\"{char}\" no está permitido en el nombre de archivo.", "\"{segment}\" is a reserved name and not allowed for filenames." : "\"{segment}\" es un nombre reservado y no se permite para los nombres de archivo.", diff --git a/apps/files/l10n/et_EE.js b/apps/files/l10n/et_EE.js index bfd02fbac25..246a7f7b064 100644 --- a/apps/files/l10n/et_EE.js +++ b/apps/files/l10n/et_EE.js @@ -43,6 +43,8 @@ OC.L10N.register( "Files" : "Failid", "A file or folder has been <strong>changed</strong>" : "Fail või kaust on <strong>muudetud</strong>", "A favorite file or folder has been <strong>changed</strong>" : "Lemmikuks märgitud faili või kausta on <strong>muudetud</strong>", + "%1$s (renamed)" : "%1$s (nimi on muudetud)", + "renamed file" : "muudetud nimega fail", "Failed to authorize" : "Autoriseerimine ei õnnestunud", "Invalid folder path" : "Kausta vigane asukoht", "Folder not found" : "Kausta ei leidu", @@ -71,6 +73,8 @@ OC.L10N.register( "Transferred from %1$s on %2$s" : "Üleantud kasutajalt %1$s %2$s", "Files compatibility" : "Failide ühilduvus", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Luba failinimede piiramine tagamaks, et sünkroniseerimine toimib kõikide platvormide klientide vahel. Vaikimisi on lubatud kõik POSIX-i standardile vastavad failinimed (seda järgivad Linux ja macOS).", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Kui võtad kasutusele Windowsiga ühilduvad failinimed, siis olemasolevad mitteühilduvaid faile ei saa enam muuta, aga faili omanik saab failinime muuta ühilduvaks.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Lisaks on peale selle seadistuse kasutuselevõtmist võimalik kõik mitteühilduvad failid automaatselt ära muuta. Asjakohast teavet leiad kasutusjuhendist occ-käsku kirjeldavast peatükist.", "Enforce Windows compatibility" : "Kasuta ühilduvust Windowsiga", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Sellega blokeerid niisuguste failinimede kasutamise, mis Windowsis ei toimiks. See tähendab mõnede nimede ja tähemärkide keelamist. Aga see seadistus ei jõusta suur- ja väiketähtede kasutust.", "File Management" : "Failihaldus", diff --git a/apps/files/l10n/et_EE.json b/apps/files/l10n/et_EE.json index 719433481f8..00ffe074653 100644 --- a/apps/files/l10n/et_EE.json +++ b/apps/files/l10n/et_EE.json @@ -41,6 +41,8 @@ "Files" : "Failid", "A file or folder has been <strong>changed</strong>" : "Fail või kaust on <strong>muudetud</strong>", "A favorite file or folder has been <strong>changed</strong>" : "Lemmikuks märgitud faili või kausta on <strong>muudetud</strong>", + "%1$s (renamed)" : "%1$s (nimi on muudetud)", + "renamed file" : "muudetud nimega fail", "Failed to authorize" : "Autoriseerimine ei õnnestunud", "Invalid folder path" : "Kausta vigane asukoht", "Folder not found" : "Kausta ei leidu", @@ -69,6 +71,8 @@ "Transferred from %1$s on %2$s" : "Üleantud kasutajalt %1$s %2$s", "Files compatibility" : "Failide ühilduvus", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Luba failinimede piiramine tagamaks, et sünkroniseerimine toimib kõikide platvormide klientide vahel. Vaikimisi on lubatud kõik POSIX-i standardile vastavad failinimed (seda järgivad Linux ja macOS).", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Kui võtad kasutusele Windowsiga ühilduvad failinimed, siis olemasolevad mitteühilduvaid faile ei saa enam muuta, aga faili omanik saab failinime muuta ühilduvaks.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Lisaks on peale selle seadistuse kasutuselevõtmist võimalik kõik mitteühilduvad failid automaatselt ära muuta. Asjakohast teavet leiad kasutusjuhendist occ-käsku kirjeldavast peatükist.", "Enforce Windows compatibility" : "Kasuta ühilduvust Windowsiga", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Sellega blokeerid niisuguste failinimede kasutamise, mis Windowsis ei toimiks. See tähendab mõnede nimede ja tähemärkide keelamist. Aga see seadistus ei jõusta suur- ja väiketähtede kasutust.", "File Management" : "Failihaldus", diff --git a/apps/files/l10n/mk.js b/apps/files/l10n/mk.js index 73102302b23..b0d9db8ffd1 100644 --- a/apps/files/l10n/mk.js +++ b/apps/files/l10n/mk.js @@ -91,7 +91,7 @@ OC.L10N.register( "Total rows summary" : "Резиме на вкупно редови", "Name" : "Име", "Size" : "Големина", - "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" сериската акцијата е успешно извршена", + "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" сериската акција е успешно извршена", "\"{displayName}\" action failed" : "\"{displayName}\" акцијата не успеа", "Actions" : "Акции", "(selected)" : "(означени)", diff --git a/apps/files/l10n/mk.json b/apps/files/l10n/mk.json index d3d8c86c448..9a7349b9d52 100644 --- a/apps/files/l10n/mk.json +++ b/apps/files/l10n/mk.json @@ -89,7 +89,7 @@ "Total rows summary" : "Резиме на вкупно редови", "Name" : "Име", "Size" : "Големина", - "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" сериската акцијата е успешно извршена", + "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" сериската акција е успешно извршена", "\"{displayName}\" action failed" : "\"{displayName}\" акцијата не успеа", "Actions" : "Акции", "(selected)" : "(означени)", diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js index 906004d2172..a06c4433bdc 100644 --- a/apps/files/l10n/pl.js +++ b/apps/files/l10n/pl.js @@ -43,6 +43,8 @@ OC.L10N.register( "Files" : "Pliki", "A file or folder has been <strong>changed</strong>" : "Plik lub katalog został <strong>zmieniony</strong>", "A favorite file or folder has been <strong>changed</strong>" : "Ulubiony plik lub katalog został <strong>zmieniony</strong>", + "%1$s (renamed)" : "%1$s (zmieniona nazwa)", + "renamed file" : "zmieniona nazwa pliku", "Failed to authorize" : "Błąd autoryzacji", "Invalid folder path" : "Nieprawidłowa ścieżka katalogu", "Folder not found" : "Nie znaleziono katalogu", @@ -71,6 +73,8 @@ OC.L10N.register( "Transferred from %1$s on %2$s" : "Przeniesiono z %1$s dnia %2$s", "Files compatibility" : "Zgodność plików", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Zezwalaj na ograniczenie nazw plików, aby zapewnić synchronizację plików ze wszystkimi klientami. Domyślnie dozwolone są wszystkie nazwy plików obowiązujące w systemie POSIX (np. Linux lub macOS).", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Po włączeniu nazw plików zgodnych z systemem Windows, istniejących plików nie można już modyfikować, ale ich właściciel może zmienić ich nazwy na nowe, prawidłowe.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Możliwe jest również automatyczne migrowanie plików po włączeniu tego ustawienia. Więcej informacji można znaleźć w dokumentacji polecenia occ.", "Enforce Windows compatibility" : "Wymuszaj zgodność z systemem Windows", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Spowoduje to zablokowanie nazw plików nieprawidłowych w systemach Windows, na przykład nazw zastrzeżonych lub znaków specjalnych. Nie wymusi to jednak zgodności z rozróżnianiem wielkości liter.", "File Management" : "Zarządzanie plikami", @@ -328,6 +332,7 @@ OC.L10N.register( "Unexpected error: {error}" : "Nieoczekiwany błąd: {error}", "_%n file_::_%n files_" : ["%n plik","%n pliki","%n plików","%n plików"], "_%n folder_::_%n folders_" : ["%n katalog","%n katalogi","%n katalogów","%n katalogów"], + "_%n hidden_::_%n hidden_" : ["%n ukryty","%n ukryte","%n ukrytych","%n ukrytych"], "Filename must not be empty." : "Nazwa pliku nie może być pusta.", "\"{char}\" is not allowed inside a filename." : "„{char}” nie jest dozwolone w nazwie pliku.", "\"{segment}\" is a reserved name and not allowed for filenames." : "„{segment}” jest nazwą zastrzeżoną i nie jest dozwolona w przypadku nazw plików.", diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json index b312784d273..2705ef5eea4 100644 --- a/apps/files/l10n/pl.json +++ b/apps/files/l10n/pl.json @@ -41,6 +41,8 @@ "Files" : "Pliki", "A file or folder has been <strong>changed</strong>" : "Plik lub katalog został <strong>zmieniony</strong>", "A favorite file or folder has been <strong>changed</strong>" : "Ulubiony plik lub katalog został <strong>zmieniony</strong>", + "%1$s (renamed)" : "%1$s (zmieniona nazwa)", + "renamed file" : "zmieniona nazwa pliku", "Failed to authorize" : "Błąd autoryzacji", "Invalid folder path" : "Nieprawidłowa ścieżka katalogu", "Folder not found" : "Nie znaleziono katalogu", @@ -69,6 +71,8 @@ "Transferred from %1$s on %2$s" : "Przeniesiono z %1$s dnia %2$s", "Files compatibility" : "Zgodność plików", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Zezwalaj na ograniczenie nazw plików, aby zapewnić synchronizację plików ze wszystkimi klientami. Domyślnie dozwolone są wszystkie nazwy plików obowiązujące w systemie POSIX (np. Linux lub macOS).", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Po włączeniu nazw plików zgodnych z systemem Windows, istniejących plików nie można już modyfikować, ale ich właściciel może zmienić ich nazwy na nowe, prawidłowe.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Możliwe jest również automatyczne migrowanie plików po włączeniu tego ustawienia. Więcej informacji można znaleźć w dokumentacji polecenia occ.", "Enforce Windows compatibility" : "Wymuszaj zgodność z systemem Windows", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Spowoduje to zablokowanie nazw plików nieprawidłowych w systemach Windows, na przykład nazw zastrzeżonych lub znaków specjalnych. Nie wymusi to jednak zgodności z rozróżnianiem wielkości liter.", "File Management" : "Zarządzanie plikami", @@ -326,6 +330,7 @@ "Unexpected error: {error}" : "Nieoczekiwany błąd: {error}", "_%n file_::_%n files_" : ["%n plik","%n pliki","%n plików","%n plików"], "_%n folder_::_%n folders_" : ["%n katalog","%n katalogi","%n katalogów","%n katalogów"], + "_%n hidden_::_%n hidden_" : ["%n ukryty","%n ukryte","%n ukrytych","%n ukrytych"], "Filename must not be empty." : "Nazwa pliku nie może być pusta.", "\"{char}\" is not allowed inside a filename." : "„{char}” nie jest dozwolone w nazwie pliku.", "\"{segment}\" is a reserved name and not allowed for filenames." : "„{segment}” jest nazwą zastrzeżoną i nie jest dozwolona w przypadku nazw plików.", diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js index 62a20efeddd..3ddf3495fa4 100644 --- a/apps/files/l10n/pt_BR.js +++ b/apps/files/l10n/pt_BR.js @@ -43,6 +43,8 @@ OC.L10N.register( "Files" : "Arquivos", "A file or folder has been <strong>changed</strong>" : "Um arquivo ou pasta foi <strong>modificado</strong>", "A favorite file or folder has been <strong>changed</strong>" : "Um arquivo ou pasta favorita foi <strong>modificado</strong>", + "%1$s (renamed)" : "%1$s (renomeado)", + "renamed file" : "arquivo renomeado", "Failed to authorize" : "Falha ao autorizar", "Invalid folder path" : "Caminho de pasta inválido", "Folder not found" : "Pasta não encontrada", @@ -71,6 +73,8 @@ OC.L10N.register( "Transferred from %1$s on %2$s" : "Transferido de %1$s para %2$s", "Files compatibility" : "Compatibilidade de arquivos", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Permitir restringir nomes de arquivos para garantir que os arquivos possam ser sincronizados com todos os clientes. Por padrão, todos os nomes de arquivos válidos em POSIX (p. ex., Linux ou macOS) são permitidos.", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Depois de ativar os nomes de arquivos compatíveis com o Windows, os arquivos existentes não podem mais ser modificados, mas podem ser renomeados para novos nomes válidos pelo proprietário.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Também é possível migrar arquivos automaticamente depois de ativar essa configuração. Consulte a documentação sobre o comando occ.", "Enforce Windows compatibility" : "Forçar compatibilidade com Windows ", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Isso bloqueará nomes de arquivos não válidos em sistemas Windows, como nomes reservados ou caracteres especiais. Mas isso não imporá a compatibilidade da distinção entre maiúsculas e minúsculas.", "File Management" : "Gerenciamento de Arquivos", @@ -309,7 +313,7 @@ OC.L10N.register( "New template folder" : "Nova pasta de modelo", "In folder" : "Na pasta", "Search in folder: {folder}" : "Pesquisar na pasta: {folder}", - "One of the dropped files could not be processed" : "Um dos arquivos descartados não pôde ser processado", + "One of the dropped files could not be processed" : "Um dos arquivos depositados não pôde ser processado", "Your browser does not support the Filesystem API. Directories will not be uploaded" : "Seu navegador não oferece suporte à API Filesystem. Os diretórios não serão carregados", "No files to upload" : "Não há arquivos para enviar", "Unable to create the directory {directory}" : "Não foi possível criar o diretório {directory}", @@ -328,6 +332,7 @@ OC.L10N.register( "Unexpected error: {error}" : "Erro inesperado: {error}", "_%n file_::_%n files_" : ["%n arquivo","%n arquivos","%n arquivos"], "_%n folder_::_%n folders_" : ["%n pasta","%n pastas","%n pastas"], + "_%n hidden_::_%n hidden_" : ["%n oculto","%n ocultos","%n ocultos"], "Filename must not be empty." : "O nome do arquivo não pode estar vazio.", "\"{char}\" is not allowed inside a filename." : "\"{char}\" não é permitido dentro de um nome de arquivo.", "\"{segment}\" is a reserved name and not allowed for filenames." : "\"{segment}\" é um nome reservado e não é permitido para nomes de arquivos.", diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json index 1473d0d62a8..4e5c1e7d051 100644 --- a/apps/files/l10n/pt_BR.json +++ b/apps/files/l10n/pt_BR.json @@ -41,6 +41,8 @@ "Files" : "Arquivos", "A file or folder has been <strong>changed</strong>" : "Um arquivo ou pasta foi <strong>modificado</strong>", "A favorite file or folder has been <strong>changed</strong>" : "Um arquivo ou pasta favorita foi <strong>modificado</strong>", + "%1$s (renamed)" : "%1$s (renomeado)", + "renamed file" : "arquivo renomeado", "Failed to authorize" : "Falha ao autorizar", "Invalid folder path" : "Caminho de pasta inválido", "Folder not found" : "Pasta não encontrada", @@ -69,6 +71,8 @@ "Transferred from %1$s on %2$s" : "Transferido de %1$s para %2$s", "Files compatibility" : "Compatibilidade de arquivos", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Permitir restringir nomes de arquivos para garantir que os arquivos possam ser sincronizados com todos os clientes. Por padrão, todos os nomes de arquivos válidos em POSIX (p. ex., Linux ou macOS) são permitidos.", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Depois de ativar os nomes de arquivos compatíveis com o Windows, os arquivos existentes não podem mais ser modificados, mas podem ser renomeados para novos nomes válidos pelo proprietário.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Também é possível migrar arquivos automaticamente depois de ativar essa configuração. Consulte a documentação sobre o comando occ.", "Enforce Windows compatibility" : "Forçar compatibilidade com Windows ", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Isso bloqueará nomes de arquivos não válidos em sistemas Windows, como nomes reservados ou caracteres especiais. Mas isso não imporá a compatibilidade da distinção entre maiúsculas e minúsculas.", "File Management" : "Gerenciamento de Arquivos", @@ -307,7 +311,7 @@ "New template folder" : "Nova pasta de modelo", "In folder" : "Na pasta", "Search in folder: {folder}" : "Pesquisar na pasta: {folder}", - "One of the dropped files could not be processed" : "Um dos arquivos descartados não pôde ser processado", + "One of the dropped files could not be processed" : "Um dos arquivos depositados não pôde ser processado", "Your browser does not support the Filesystem API. Directories will not be uploaded" : "Seu navegador não oferece suporte à API Filesystem. Os diretórios não serão carregados", "No files to upload" : "Não há arquivos para enviar", "Unable to create the directory {directory}" : "Não foi possível criar o diretório {directory}", @@ -326,6 +330,7 @@ "Unexpected error: {error}" : "Erro inesperado: {error}", "_%n file_::_%n files_" : ["%n arquivo","%n arquivos","%n arquivos"], "_%n folder_::_%n folders_" : ["%n pasta","%n pastas","%n pastas"], + "_%n hidden_::_%n hidden_" : ["%n oculto","%n ocultos","%n ocultos"], "Filename must not be empty." : "O nome do arquivo não pode estar vazio.", "\"{char}\" is not allowed inside a filename." : "\"{char}\" não é permitido dentro de um nome de arquivo.", "\"{segment}\" is a reserved name and not allowed for filenames." : "\"{segment}\" é um nome reservado e não é permitido para nomes de arquivos.", diff --git a/apps/files/l10n/sc.js b/apps/files/l10n/sc.js index 5fe5f9b3545..ce6a33178ab 100644 --- a/apps/files/l10n/sc.js +++ b/apps/files/l10n/sc.js @@ -174,7 +174,11 @@ OC.L10N.register( "Created new folder \"{name}\"" : "Cartella noa \"{name}\" creada", "Unable to initialize the templates directory" : "Non faghet a initzializare sa cartella de is modellos", "Templates" : "Modellos", + "No files to upload" : "Perunu archìviu de carrigare", + "Some files could not be uploaded" : "No at fatu a carrigare unos cantos archìvios", + "Files uploaded successfully" : "Archìvios carrigados", "Some files could not be moved" : "No at fatu a tramudare carchi archìviu", + "Upload cancelled" : "Carrigamentu annulladu", "This operation is forbidden" : "Custa operatzione no est permìtida", "This directory is unavailable, please check the logs or contact the administrator" : "Custa cartella no est a disponimentu, controlla is informes o cuntata s'amministratzione", "Storage is temporarily not available" : "S'archiviatzione immoe no est a disponimentu", @@ -184,6 +188,7 @@ OC.L10N.register( "Files and folders you mark as favorite will show up here" : "Is archìvios e is cartellas chi marcas comente preferidos ant a aparèssere inoghe", "All files" : "Totu is archìvios", "List of your files and folders." : "Lista de is cartellas e is archìvios tuos.", + "All folders" : "Totu is cartellas", "Personal files" : "Archìvios personales", "No personal files found" : "Perunu archìviu personale agatadu", "Recent" : "Reghente", @@ -271,7 +276,7 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Favorited" : "Preferidu", "Copy direct link (only works for people who have access to this file/folder)" : "Còpia su ligòngiu diretu (funtzionat isceti pro gente chi tenet atzessu a custu archìviu o cartella)", - "Upload file" : "Carriga archìviu", + "Upload file" : "Càrriga archìviu", "Not favorited" : "Non preferidu", "An error occurred while trying to update the tags" : "B'at àpidu un'errore proende a agiornare is etichetas", "Storage informations" : "Informatziones de s'archiviatzione", @@ -288,6 +293,7 @@ OC.L10N.register( "List of favorites files and folders." : "Lista de cartellas e de archìvios preferidos.", "Personal Files" : "Archìvios personales", "Text file" : "Archìviu de testu", - "New text file.txt" : "Archìviu de testu .txt nou" + "New text file.txt" : "Archìviu de testu .txt nou", + "Filter filenames…" : "Filtra nùmenes de archìviu..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/sc.json b/apps/files/l10n/sc.json index 93e34ec62fe..b62a8bfe963 100644 --- a/apps/files/l10n/sc.json +++ b/apps/files/l10n/sc.json @@ -172,7 +172,11 @@ "Created new folder \"{name}\"" : "Cartella noa \"{name}\" creada", "Unable to initialize the templates directory" : "Non faghet a initzializare sa cartella de is modellos", "Templates" : "Modellos", + "No files to upload" : "Perunu archìviu de carrigare", + "Some files could not be uploaded" : "No at fatu a carrigare unos cantos archìvios", + "Files uploaded successfully" : "Archìvios carrigados", "Some files could not be moved" : "No at fatu a tramudare carchi archìviu", + "Upload cancelled" : "Carrigamentu annulladu", "This operation is forbidden" : "Custa operatzione no est permìtida", "This directory is unavailable, please check the logs or contact the administrator" : "Custa cartella no est a disponimentu, controlla is informes o cuntata s'amministratzione", "Storage is temporarily not available" : "S'archiviatzione immoe no est a disponimentu", @@ -182,6 +186,7 @@ "Files and folders you mark as favorite will show up here" : "Is archìvios e is cartellas chi marcas comente preferidos ant a aparèssere inoghe", "All files" : "Totu is archìvios", "List of your files and folders." : "Lista de is cartellas e is archìvios tuos.", + "All folders" : "Totu is cartellas", "Personal files" : "Archìvios personales", "No personal files found" : "Perunu archìviu personale agatadu", "Recent" : "Reghente", @@ -269,7 +274,7 @@ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Favorited" : "Preferidu", "Copy direct link (only works for people who have access to this file/folder)" : "Còpia su ligòngiu diretu (funtzionat isceti pro gente chi tenet atzessu a custu archìviu o cartella)", - "Upload file" : "Carriga archìviu", + "Upload file" : "Càrriga archìviu", "Not favorited" : "Non preferidu", "An error occurred while trying to update the tags" : "B'at àpidu un'errore proende a agiornare is etichetas", "Storage informations" : "Informatziones de s'archiviatzione", @@ -286,6 +291,7 @@ "List of favorites files and folders." : "Lista de cartellas e de archìvios preferidos.", "Personal Files" : "Archìvios personales", "Text file" : "Archìviu de testu", - "New text file.txt" : "Archìviu de testu .txt nou" + "New text file.txt" : "Archìviu de testu .txt nou", + "Filter filenames…" : "Filtra nùmenes de archìviu..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/sr.js b/apps/files/l10n/sr.js index c2388dff6a9..94e6e94c5a4 100644 --- a/apps/files/l10n/sr.js +++ b/apps/files/l10n/sr.js @@ -43,6 +43,8 @@ OC.L10N.register( "Files" : "Фајлови", "A file or folder has been <strong>changed</strong>" : "Фајл или фасцикла су <strong>измењени</strong>", "A favorite file or folder has been <strong>changed</strong>" : "Омиљени фајл или фасцикла су <strong>измењени</strong>", + "%1$s (renamed)" : "%1$s (преименован)", + "renamed file" : "преименован фајл", "Failed to authorize" : "Није успело добијање дозволе", "Invalid folder path" : "Неисправна путања фолдера", "Folder not found" : "Није пронађен фолдер", @@ -71,6 +73,8 @@ OC.L10N.register( "Transferred from %1$s on %2$s" : "Пренесено са %1$s на %2$s", "Files compatibility" : "Компатибилност фајлова", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Дозвољава се ограничавање имена фајлова тако да сви клијенти могу да их синхронизују. Подразумевано се дозвољавају сва имена фајлова која су исправна на POSIX системима (нпр. Linux или macOS).", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Када се укључе windows компатибилна имена фајлова, постојећи фајлови се више неће моћи мењати, али њихов власник може да им промени име на исправно ново име.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Фајлови такође могу аутоматски да се мигрирају након укључивања овог подешавања, молимо вас да погледате документацију у вези са occ командом.", "Enforce Windows compatibility" : "Форсирај Windows компатибилност", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Ово ће да блокира имена фајлова која су неисправна на Windows системима, као што су она која користе резервисана имена или специјалне карактере. Али ово неће форсирати компатибилност разликовања малих и великих слова.", "File Management" : "Управљање фајловима", diff --git a/apps/files/l10n/sr.json b/apps/files/l10n/sr.json index f736a5c7f94..280c8cc2afd 100644 --- a/apps/files/l10n/sr.json +++ b/apps/files/l10n/sr.json @@ -41,6 +41,8 @@ "Files" : "Фајлови", "A file or folder has been <strong>changed</strong>" : "Фајл или фасцикла су <strong>измењени</strong>", "A favorite file or folder has been <strong>changed</strong>" : "Омиљени фајл или фасцикла су <strong>измењени</strong>", + "%1$s (renamed)" : "%1$s (преименован)", + "renamed file" : "преименован фајл", "Failed to authorize" : "Није успело добијање дозволе", "Invalid folder path" : "Неисправна путања фолдера", "Folder not found" : "Није пронађен фолдер", @@ -69,6 +71,8 @@ "Transferred from %1$s on %2$s" : "Пренесено са %1$s на %2$s", "Files compatibility" : "Компатибилност фајлова", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Дозвољава се ограничавање имена фајлова тако да сви клијенти могу да их синхронизују. Подразумевано се дозвољавају сва имена фајлова која су исправна на POSIX системима (нпр. Linux или macOS).", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Када се укључе windows компатибилна имена фајлова, постојећи фајлови се више неће моћи мењати, али њихов власник може да им промени име на исправно ново име.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Фајлови такође могу аутоматски да се мигрирају након укључивања овог подешавања, молимо вас да погледате документацију у вези са occ командом.", "Enforce Windows compatibility" : "Форсирај Windows компатибилност", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Ово ће да блокира имена фајлова која су неисправна на Windows системима, као што су она која користе резервисана имена или специјалне карактере. Али ово неће форсирати компатибилност разликовања малих и великих слова.", "File Management" : "Управљање фајловима", diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js index e2a51702f92..d6827bb0ab3 100644 --- a/apps/files/l10n/sv.js +++ b/apps/files/l10n/sv.js @@ -43,6 +43,8 @@ OC.L10N.register( "Files" : "Filer", "A file or folder has been <strong>changed</strong>" : "En ny fil eller mapp har blivit <strong>ändrad</strong>", "A favorite file or folder has been <strong>changed</strong>" : "En favorit-fil eller mapp har blivit <strong>ändrad</strong>", + "%1$s (renamed)" : "%1$s (omdöpt)", + "renamed file" : "omdöpt fil", "Failed to authorize" : "Det gick inte att auktorisera", "Invalid folder path" : "Ogiltig mappsökväg", "Folder not found" : "Mappen hittades inte", @@ -71,6 +73,8 @@ OC.L10N.register( "Transferred from %1$s on %2$s" : "Överförd från %1$s på %2$s", "Files compatibility" : "Filkompatibilitet", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Tillåt att begränsa filnamn för att säkerställa att filer kan synkroniseras med alla klienter. Som standard är alla filnamn som är giltiga på POSIX (t.ex. Linux eller macOS) tillåtna.", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "När Windows-kompatibla filnamn har aktiverats kan befintliga filer inte längre ändras, men de kan byta namn till giltiga nya namn av sin ägare.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Det är också möjligt att migrera filer automatiskt efter att den här inställningen har aktiverats. Se dokumentationen om kommandot occ för mer information.", "Enforce Windows compatibility" : "Tvinga Windows-kompatibilitet", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Detta kommer att blockera filnamn som inte är giltiga på Windows-system, som att använda reserverade namn eller specialtecken. Men detta kommer inte att framtvinga kompatibiliteten för skiftlägeskänslighet.", "File Management" : "Filhantering", diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json index 1be129fa66c..c5b48b00897 100644 --- a/apps/files/l10n/sv.json +++ b/apps/files/l10n/sv.json @@ -41,6 +41,8 @@ "Files" : "Filer", "A file or folder has been <strong>changed</strong>" : "En ny fil eller mapp har blivit <strong>ändrad</strong>", "A favorite file or folder has been <strong>changed</strong>" : "En favorit-fil eller mapp har blivit <strong>ändrad</strong>", + "%1$s (renamed)" : "%1$s (omdöpt)", + "renamed file" : "omdöpt fil", "Failed to authorize" : "Det gick inte att auktorisera", "Invalid folder path" : "Ogiltig mappsökväg", "Folder not found" : "Mappen hittades inte", @@ -69,6 +71,8 @@ "Transferred from %1$s on %2$s" : "Överförd från %1$s på %2$s", "Files compatibility" : "Filkompatibilitet", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Tillåt att begränsa filnamn för att säkerställa att filer kan synkroniseras med alla klienter. Som standard är alla filnamn som är giltiga på POSIX (t.ex. Linux eller macOS) tillåtna.", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "När Windows-kompatibla filnamn har aktiverats kan befintliga filer inte längre ändras, men de kan byta namn till giltiga nya namn av sin ägare.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Det är också möjligt att migrera filer automatiskt efter att den här inställningen har aktiverats. Se dokumentationen om kommandot occ för mer information.", "Enforce Windows compatibility" : "Tvinga Windows-kompatibilitet", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Detta kommer att blockera filnamn som inte är giltiga på Windows-system, som att använda reserverade namn eller specialtecken. Men detta kommer inte att framtvinga kompatibiliteten för skiftlägeskänslighet.", "File Management" : "Filhantering", diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js index 3dafbd00fb2..17571dc849b 100644 --- a/apps/files/l10n/zh_CN.js +++ b/apps/files/l10n/zh_CN.js @@ -43,6 +43,8 @@ OC.L10N.register( "Files" : "文件", "A file or folder has been <strong>changed</strong>" : "文件或文件夹已经被<strong>修改</strong>", "A favorite file or folder has been <strong>changed</strong>" : "一个收藏的文件或文件夹已经被<strong>修改</strong>", + "%1$s (renamed)" : "%1$s(已重命名)", + "renamed file" : "已重命名文件", "Failed to authorize" : "授权失败", "Invalid folder path" : "无效文件夹路径", "Folder not found" : "未找到文件夹", @@ -71,6 +73,8 @@ OC.L10N.register( "Transferred from %1$s on %2$s" : "从 %1$s 转移至 %2$s", "Files compatibility" : "文件兼容性", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "允许限制文件名称以确保文件可以与所有客户端同步。默认状态下,所有POSIX(例如 Linux 或 macOS)系统有效的文件名都是被允许的。", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "启用与 Windows 兼容的文件名后,无法再修改现有文件,但可以由其所有者重命名为有效的新名称。", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "启用此设置后,也可以自动迁移文件,请参阅有关 occ 命令的文档。", "Enforce Windows compatibility" : "强制 Windows 兼容性", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "这将阻止在 Windows 系统中无效的文件名称,比如使用保留字符。但这不会强制大小写敏感性兼容。", "File Management" : "文件管理", diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json index bb82495355a..e872bd42873 100644 --- a/apps/files/l10n/zh_CN.json +++ b/apps/files/l10n/zh_CN.json @@ -41,6 +41,8 @@ "Files" : "文件", "A file or folder has been <strong>changed</strong>" : "文件或文件夹已经被<strong>修改</strong>", "A favorite file or folder has been <strong>changed</strong>" : "一个收藏的文件或文件夹已经被<strong>修改</strong>", + "%1$s (renamed)" : "%1$s(已重命名)", + "renamed file" : "已重命名文件", "Failed to authorize" : "授权失败", "Invalid folder path" : "无效文件夹路径", "Folder not found" : "未找到文件夹", @@ -69,6 +71,8 @@ "Transferred from %1$s on %2$s" : "从 %1$s 转移至 %2$s", "Files compatibility" : "文件兼容性", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "允许限制文件名称以确保文件可以与所有客户端同步。默认状态下,所有POSIX(例如 Linux 或 macOS)系统有效的文件名都是被允许的。", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "启用与 Windows 兼容的文件名后,无法再修改现有文件,但可以由其所有者重命名为有效的新名称。", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "启用此设置后,也可以自动迁移文件,请参阅有关 occ 命令的文档。", "Enforce Windows compatibility" : "强制 Windows 兼容性", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "这将阻止在 Windows 系统中无效的文件名称,比如使用保留字符。但这不会强制大小写敏感性兼容。", "File Management" : "文件管理", diff --git a/apps/files/l10n/zh_HK.js b/apps/files/l10n/zh_HK.js index 0a634d1de70..0b68516c402 100644 --- a/apps/files/l10n/zh_HK.js +++ b/apps/files/l10n/zh_HK.js @@ -43,6 +43,8 @@ OC.L10N.register( "Files" : "檔案", "A file or folder has been <strong>changed</strong>" : "檔案或資料夾有所<strong>更改</strong>", "A favorite file or folder has been <strong>changed</strong>" : "收藏的檔案或資料夾有所<strong>更改</strong>", + "%1$s (renamed)" : "%1$s(已重新命名)", + "renamed file" : "已重新命名的檔案", "Failed to authorize" : "無法授權", "Invalid folder path" : "無效的資料夾路徑", "Folder not found" : "找不到資料夾", @@ -71,6 +73,8 @@ OC.L10N.register( "Transferred from %1$s on %2$s" : "於 %2$s 從 %1$s 轉移", "Files compatibility" : "檔案兼容性", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "允許限製檔案名稱以確保檔案可以與所有客戶端同步。默認情況下,允許 POSIX(例如 Linux 或 macOS)上有效的所有檔案名稱。", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "啟用 Windows 兼容檔案名後,現有的檔案無法再被修改,但其擁有者可以將其重新命名為有效的新名稱。", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "啟用此設定後,還可以自動遷移檔案,請參考有關 occ 指令的說明書。", "Enforce Windows compatibility" : "實施 Windows 兼容性", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "這將阻止在 Windows 系統上無效的檔案名,例如使用保留名稱或特殊字元。但這不會強制區分大小寫的兼容性。", "File Management" : "檔案管理", @@ -328,6 +332,7 @@ OC.L10N.register( "Unexpected error: {error}" : "意外錯誤:{error}", "_%n file_::_%n files_" : ["%n 個檔案"], "_%n folder_::_%n folders_" : ["%n 個資料夾"], + "_%n hidden_::_%n hidden_" : ["%n 個隱藏"], "Filename must not be empty." : "檔案名稱不能為空。", "\"{char}\" is not allowed inside a filename." : "檔案名稱中不允許出現「{char}」", "\"{segment}\" is a reserved name and not allowed for filenames." : "「{segment}」是保留名稱,不允許用在檔案名稱。", diff --git a/apps/files/l10n/zh_HK.json b/apps/files/l10n/zh_HK.json index 04ff1f24cea..def7021f66e 100644 --- a/apps/files/l10n/zh_HK.json +++ b/apps/files/l10n/zh_HK.json @@ -41,6 +41,8 @@ "Files" : "檔案", "A file or folder has been <strong>changed</strong>" : "檔案或資料夾有所<strong>更改</strong>", "A favorite file or folder has been <strong>changed</strong>" : "收藏的檔案或資料夾有所<strong>更改</strong>", + "%1$s (renamed)" : "%1$s(已重新命名)", + "renamed file" : "已重新命名的檔案", "Failed to authorize" : "無法授權", "Invalid folder path" : "無效的資料夾路徑", "Folder not found" : "找不到資料夾", @@ -69,6 +71,8 @@ "Transferred from %1$s on %2$s" : "於 %2$s 從 %1$s 轉移", "Files compatibility" : "檔案兼容性", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "允許限製檔案名稱以確保檔案可以與所有客戶端同步。默認情況下,允許 POSIX(例如 Linux 或 macOS)上有效的所有檔案名稱。", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "啟用 Windows 兼容檔案名後,現有的檔案無法再被修改,但其擁有者可以將其重新命名為有效的新名稱。", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "啟用此設定後,還可以自動遷移檔案,請參考有關 occ 指令的說明書。", "Enforce Windows compatibility" : "實施 Windows 兼容性", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "這將阻止在 Windows 系統上無效的檔案名,例如使用保留名稱或特殊字元。但這不會強制區分大小寫的兼容性。", "File Management" : "檔案管理", @@ -326,6 +330,7 @@ "Unexpected error: {error}" : "意外錯誤:{error}", "_%n file_::_%n files_" : ["%n 個檔案"], "_%n folder_::_%n folders_" : ["%n 個資料夾"], + "_%n hidden_::_%n hidden_" : ["%n 個隱藏"], "Filename must not be empty." : "檔案名稱不能為空。", "\"{char}\" is not allowed inside a filename." : "檔案名稱中不允許出現「{char}」", "\"{segment}\" is a reserved name and not allowed for filenames." : "「{segment}」是保留名稱,不允許用在檔案名稱。", diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js index d38585d78a5..9ee3f40b41d 100644 --- a/apps/files/l10n/zh_TW.js +++ b/apps/files/l10n/zh_TW.js @@ -43,6 +43,8 @@ OC.L10N.register( "Files" : "檔案", "A file or folder has been <strong>changed</strong>" : "檔案或資料夾已被<strong>變更</strong>", "A favorite file or folder has been <strong>changed</strong>" : "一個喜愛的檔案或資料夾已<strong>變更</strong>", + "%1$s (renamed)" : "%1$s(已重新命名)", + "renamed file" : "已重新命名檔案", "Failed to authorize" : "授權失敗", "Invalid folder path" : "無效的資料夾路徑", "Folder not found" : "找不到資料夾", @@ -71,6 +73,8 @@ OC.L10N.register( "Transferred from %1$s on %2$s" : "於 %2$s 從 %1$s 轉移", "Files compatibility" : "檔案相容性", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "允許限制檔案名稱以確保檔案可以與所有客戶端同步。預設情況下,允許 POSIX(例如 Linux 或 macOS)上所有有效的檔案名稱。", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "啟用與 Windows 相容的檔案名稱後,無法再修改現有檔案,但可以由其擁有者重新命名為有效的新名稱。", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "啟用此設定後,也可以自動遷移檔案,詳情請參閱關於 occ 命令的文件。", "Enforce Windows compatibility" : "強制 Windows 相容性", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "這會封鎖在 Windows 系統上無效的檔案名稱,例如使用保留名稱或特殊字元。但這不會強制區分大小寫的相容性。", "File Management" : "檔案管理", diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json index 761f82ddd03..4814a6d91af 100644 --- a/apps/files/l10n/zh_TW.json +++ b/apps/files/l10n/zh_TW.json @@ -41,6 +41,8 @@ "Files" : "檔案", "A file or folder has been <strong>changed</strong>" : "檔案或資料夾已被<strong>變更</strong>", "A favorite file or folder has been <strong>changed</strong>" : "一個喜愛的檔案或資料夾已<strong>變更</strong>", + "%1$s (renamed)" : "%1$s(已重新命名)", + "renamed file" : "已重新命名檔案", "Failed to authorize" : "授權失敗", "Invalid folder path" : "無效的資料夾路徑", "Folder not found" : "找不到資料夾", @@ -69,6 +71,8 @@ "Transferred from %1$s on %2$s" : "於 %2$s 從 %1$s 轉移", "Files compatibility" : "檔案相容性", "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "允許限制檔案名稱以確保檔案可以與所有客戶端同步。預設情況下,允許 POSIX(例如 Linux 或 macOS)上所有有效的檔案名稱。", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "啟用與 Windows 相容的檔案名稱後,無法再修改現有檔案,但可以由其擁有者重新命名為有效的新名稱。", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "啟用此設定後,也可以自動遷移檔案,詳情請參閱關於 occ 命令的文件。", "Enforce Windows compatibility" : "強制 Windows 相容性", "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "這會封鎖在 Windows 系統上無效的檔案名稱,例如使用保留名稱或特殊字元。但這不會強制區分大小寫的相容性。", "File Management" : "檔案管理", diff --git a/apps/files/lib/Activity/Provider.php b/apps/files/lib/Activity/Provider.php index 0b8e051c877..faa2bbd0b3b 100644 --- a/apps/files/lib/Activity/Provider.php +++ b/apps/files/lib/Activity/Provider.php @@ -319,7 +319,7 @@ class Provider implements IProvider { protected function getFile($parameter, ?IEvent $event = null): array { if (is_array($parameter)) { $path = reset($parameter); - $id = (string)key($parameter); + $id = (int)key($parameter); } elseif ($event !== null) { // Legacy from before ownCloud 8.2 $path = $parameter; @@ -341,7 +341,7 @@ class Provider implements IProvider { return [ 'type' => 'file', - 'id' => $encryptionContainer->getId(), + 'id' => (string)$encryptionContainer->getId(), 'name' => $encryptionContainer->getName(), 'path' => $path, 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $encryptionContainer->getId()]), @@ -354,7 +354,7 @@ class Provider implements IProvider { return [ 'type' => 'file', - 'id' => $id, + 'id' => (string)$id, 'name' => basename($path), 'path' => trim($path, '/'), 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]), diff --git a/apps/files/lib/Command/SanitizeFilenames.php b/apps/files/lib/Command/SanitizeFilenames.php new file mode 100644 index 00000000000..ea01afd20d6 --- /dev/null +++ b/apps/files/lib/Command/SanitizeFilenames.php @@ -0,0 +1,168 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\Files\Command; + +use Exception; +use OC\Core\Command\Base; +use OC\Files\FilenameValidator; +use OCP\Files\Folder; +use OCP\Files\IRootFolder; +use OCP\Files\NotPermittedException; +use OCP\IUser; +use OCP\IUserManager; +use OCP\IUserSession; +use OCP\L10N\IFactory; +use OCP\Lock\LockedException; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class SanitizeFilenames extends Base { + + private OutputInterface $output; + private string $charReplacement; + private bool $dryRun; + + public function __construct( + private IUserManager $userManager, + private IRootFolder $rootFolder, + private IUserSession $session, + private IFactory $l10nFactory, + private FilenameValidator $filenameValidator, + ) { + parent::__construct(); + } + + protected function configure(): void { + parent::configure(); + + $forbiddenCharacter = $this->filenameValidator->getForbiddenCharacters(); + $charReplacement = array_diff([' ', '_', '-'], $forbiddenCharacter); + $charReplacement = reset($charReplacement) ?: ''; + + $this + ->setName('files:sanitize-filenames') + ->setDescription('Renames files to match naming constraints') + ->addArgument( + 'user_id', + InputArgument::OPTIONAL | InputArgument::IS_ARRAY, + 'will only rename files the given user(s) have access to' + ) + ->addOption( + 'dry-run', + mode: InputOption::VALUE_NONE, + description: 'Do not actually rename any files but just check filenames.', + ) + ->addOption( + 'char-replacement', + 'c', + mode: InputOption::VALUE_REQUIRED, + description: 'Replacement for invalid character (by default space, underscore or dash is used)', + default: $charReplacement, + ); + + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $this->charReplacement = $input->getOption('char-replacement'); + if ($this->charReplacement === '' || mb_strlen($this->charReplacement) > 1) { + $output->writeln('<error>No character replacement given</error>'); + return 1; + } + + $this->dryRun = $input->getOption('dry-run'); + if ($this->dryRun) { + $output->writeln('<info>Dry run is enabled, no actual renaming will be applied.</>'); + } + + $this->output = $output; + $users = $input->getArgument('user_id'); + if (!empty($users)) { + foreach ($users as $userId) { + $user = $this->userManager->get($userId); + if ($user === null) { + $output->writeln("<error>User '$userId' does not exist - skipping</>"); + continue; + } + $this->sanitizeUserFiles($user); + } + } else { + $this->userManager->callForSeenUsers($this->sanitizeUserFiles(...)); + } + return self::SUCCESS; + } + + private function sanitizeUserFiles(IUser $user): void { + // Set an active user so that event listeners can correctly work (e.g. files versions) + $this->session->setVolatileActiveUser($user); + + $this->output->writeln('<info>Analyzing files of ' . $user->getUID() . '</>'); + + $folder = $this->rootFolder->getUserFolder($user->getUID()); + $this->sanitizeFiles($folder); + } + + private function sanitizeFiles(Folder $folder): void { + foreach ($folder->getDirectoryListing() as $node) { + $this->output->writeln('scanning: ' . $node->getPath(), OutputInterface::VERBOSITY_VERBOSE); + + try { + $oldName = $node->getName(); + if (!$this->filenameValidator->isFilenameValid($oldName)) { + $newName = $this->sanitizeName($oldName); + $newName = $folder->getNonExistingName($newName); + $path = rtrim(dirname($node->getPath()), '/'); + + if (!$this->dryRun) { + $node->move("$path/$newName"); + } elseif (!$folder->isCreatable()) { + // simulate error for dry run + throw new NotPermittedException(); + } + $this->output->writeln('renamed: "' . $oldName . '" to "' . $newName . '"'); + } + } catch (LockedException) { + $this->output->writeln('<comment>skipping: ' . $node->getPath() . ' (file is locked)</>'); + } catch (NotPermittedException) { + $this->output->writeln('<comment>skipping: ' . $node->getPath() . ' (no permissions)</>'); + } catch (Exception) { + $this->output->writeln('<error>failed: ' . $node->getPath() . '</>'); + } + + if ($node instanceof Folder) { + $this->sanitizeFiles($node); + } + } + } + + private function sanitizeName(string $name): string { + $l10n = $this->l10nFactory->get('files'); + + foreach ($this->filenameValidator->getForbiddenExtensions() as $extension) { + if (str_ends_with($name, $extension)) { + $name = substr($name, 0, strlen($name) - strlen($extension)); + } + } + + $basename = substr($name, 0, strpos($name, '.', 1) ?: null); + if (in_array($basename, $this->filenameValidator->getForbiddenBasenames())) { + $name = str_replace($basename, $l10n->t('%1$s (renamed)', [$basename]), $name); + } + + if ($name === '') { + $name = $l10n->t('renamed file'); + } + + $forbiddenCharacter = $this->filenameValidator->getForbiddenCharacters(); + $name = str_replace($forbiddenCharacter, $this->charReplacement, $name); + + return $name; + } +} diff --git a/apps/files/lib/Command/Scan.php b/apps/files/lib/Command/Scan.php index 9c57f4b2971..7f45a9ea518 100644 --- a/apps/files/lib/Command/Scan.php +++ b/apps/files/lib/Command/Scan.php @@ -24,6 +24,7 @@ use OCP\Files\NotFoundException; use OCP\Files\StorageNotAvailableException; use OCP\FilesMetadata\IFilesMetadataManager; use OCP\IUserManager; +use OCP\Lock\LockedException; use OCP\Server; use Psr\Log\LoggerInterface; use Symfony\Component\Console\Helper\Table; @@ -165,6 +166,12 @@ class Scan extends Base { } catch (NotFoundException $e) { $output->writeln('<error>Path not found: ' . $e->getMessage() . '</error>'); ++$this->errorsCounter; + } catch (LockedException $e) { + if (str_starts_with($e->getPath(), 'scanner::')) { + $output->writeln('<error>Another process is already scanning \'' . substr($e->getPath(), strlen('scanner::')) . '\'</error>'); + } else { + throw $e; + } } catch (\Exception $e) { $output->writeln('<error>Exception during scan: ' . $e->getMessage() . '</error>'); $output->writeln('<error>' . $e->getTraceAsString() . '</error>'); diff --git a/apps/files/lib/Command/WindowsCompatibleFilenames.php b/apps/files/lib/Command/WindowsCompatibleFilenames.php new file mode 100644 index 00000000000..84a1b277824 --- /dev/null +++ b/apps/files/lib/Command/WindowsCompatibleFilenames.php @@ -0,0 +1,52 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\Files\Command; + +use OC\Core\Command\Base; +use OCA\Files\Service\SettingsService; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class WindowsCompatibleFilenames extends Base { + + public function __construct( + private SettingsService $service, + ) { + parent::__construct(); + } + + protected function configure(): void { + parent::configure(); + + $this + ->setName('files:windows-compatible-filenames') + ->setDescription('Enforce naming constraints for windows compatible filenames') + ->addOption('enable', description: 'Enable windows naming constraints') + ->addOption('disable', description: 'Disable windows naming constraints'); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + if ($input->getOption('enable')) { + if ($this->service->hasFilesWindowsSupport()) { + $output->writeln('<error>Windows compatible filenames already enforced.</error>', OutputInterface::VERBOSITY_VERBOSE); + } + $this->service->setFilesWindowsSupport(true); + $output->writeln('Windows compatible filenames enforced.'); + } elseif ($input->getOption('disable')) { + if (!$this->service->hasFilesWindowsSupport()) { + $output->writeln('<error>Windows compatible filenames already disabled.</error>', OutputInterface::VERBOSITY_VERBOSE); + } + $this->service->setFilesWindowsSupport(false); + $output->writeln('Windows compatible filename constraints removed.'); + } else { + $output->writeln('Windows compatible filenames are ' . ($this->service->hasFilesWindowsSupport() ? 'enforced' : 'disabled')); + } + return self::SUCCESS; + } +} diff --git a/apps/files/lib/Settings/DeclarativeAdminSettings.php b/apps/files/lib/Settings/DeclarativeAdminSettings.php index e509ad2233b..bbf97cc4d32 100644 --- a/apps/files/lib/Settings/DeclarativeAdminSettings.php +++ b/apps/files/lib/Settings/DeclarativeAdminSettings.php @@ -9,6 +9,7 @@ namespace OCA\Files\Settings; use OCA\Files\Service\SettingsService; use OCP\IL10N; +use OCP\IURLGenerator; use OCP\IUser; use OCP\Settings\DeclarativeSettingsTypes; use OCP\Settings\IDeclarativeSettingsFormWithHandlers; @@ -18,6 +19,7 @@ class DeclarativeAdminSettings implements IDeclarativeSettingsFormWithHandlers { public function __construct( private IL10N $l, private SettingsService $service, + private IURLGenerator $urlGenerator, ) { } @@ -44,7 +46,12 @@ class DeclarativeAdminSettings implements IDeclarativeSettingsFormWithHandlers { 'section_id' => 'server', 'storage_type' => DeclarativeSettingsTypes::STORAGE_TYPE_EXTERNAL, 'title' => $this->l->t('Files compatibility'), - 'description' => $this->l->t('Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed.'), + 'doc_url' => $this->urlGenerator->linkToDocs('admin-windows-compatible-filenames'), + 'description' => ( + $this->l->t('Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed.') + . "\n" . $this->l->t('After enabling the Windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner.') + . "\n" . $this->l->t('It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command.') + ), 'fields' => [ [ diff --git a/apps/files/src/components/FileEntryMixin.ts b/apps/files/src/components/FileEntryMixin.ts index 589073e7b9a..735490c45b3 100644 --- a/apps/files/src/components/FileEntryMixin.ts +++ b/apps/files/src/components/FileEntryMixin.ts @@ -356,7 +356,7 @@ export default defineComponent({ // if ctrl+click / cmd+click (MacOS uses the meta key) or middle mouse button (button & 4), open in new tab // also if there is no default action use this as a fallback - const metaKeyPressed = event.ctrlKey || event.metaKey || Boolean(event.button & 4) + const metaKeyPressed = event.ctrlKey || event.metaKey || event.button === 1 if (metaKeyPressed || !this.defaultFileAction) { // If no download permission, then we can not allow to download (direct link) the files if (isPublicShare() && !isDownloadable(this.source)) { @@ -368,7 +368,9 @@ export default defineComponent({ : generateUrl('/f/{fileId}', { fileId: this.fileid }) event.preventDefault() event.stopPropagation() - window.open(url, metaKeyPressed ? '_self' : undefined) + + // Open the file in a new tab if the meta key or the middle mouse button is clicked + window.open(url, metaKeyPressed ? '_blank' : '_self') return } diff --git a/apps/files/tests/Activity/ProviderTest.php b/apps/files/tests/Activity/ProviderTest.php index 7803563a11c..7b91e980842 100644 --- a/apps/files/tests/Activity/ProviderTest.php +++ b/apps/files/tests/Activity/ProviderTest.php @@ -93,7 +93,7 @@ class ProviderTest extends TestCase { return [ [[42 => '/FortyTwo.txt'], null, '42', 'FortyTwo.txt', 'FortyTwo.txt'], [['23' => '/Twenty/Three.txt'], null, '23', 'Three.txt', 'Twenty/Three.txt'], - ['/Foo/Bar.txt', 128, 128, 'Bar.txt', 'Foo/Bar.txt'], // Legacy from ownCloud 8.2 and before + ['/Foo/Bar.txt', 128, '128', 'Bar.txt', 'Foo/Bar.txt'], // Legacy from ownCloud 8.2 and before ]; } diff --git a/apps/files_external/composer/composer/autoload_classmap.php b/apps/files_external/composer/composer/autoload_classmap.php index 156847d5620..3e246225484 100644 --- a/apps/files_external/composer/composer/autoload_classmap.php +++ b/apps/files_external/composer/composer/autoload_classmap.php @@ -22,6 +22,7 @@ return array( 'OCA\\Files_External\\Command\\Scan' => $baseDir . '/../lib/Command/Scan.php', 'OCA\\Files_External\\Command\\StorageAuthBase' => $baseDir . '/../lib/Command/StorageAuthBase.php', 'OCA\\Files_External\\Command\\Verify' => $baseDir . '/../lib/Command/Verify.php', + 'OCA\\Files_External\\ConfigLexicon' => $baseDir . '/../lib/ConfigLexicon.php', 'OCA\\Files_External\\Config\\ConfigAdapter' => $baseDir . '/../lib/Config/ConfigAdapter.php', 'OCA\\Files_External\\Config\\ExternalMountPoint' => $baseDir . '/../lib/Config/ExternalMountPoint.php', 'OCA\\Files_External\\Config\\IConfigHandler' => $baseDir . '/../lib/Config/IConfigHandler.php', diff --git a/apps/files_external/composer/composer/autoload_static.php b/apps/files_external/composer/composer/autoload_static.php index 186f85bc5bc..86ad9eb3f78 100644 --- a/apps/files_external/composer/composer/autoload_static.php +++ b/apps/files_external/composer/composer/autoload_static.php @@ -37,6 +37,7 @@ class ComposerStaticInitFiles_External 'OCA\\Files_External\\Command\\Scan' => __DIR__ . '/..' . '/../lib/Command/Scan.php', 'OCA\\Files_External\\Command\\StorageAuthBase' => __DIR__ . '/..' . '/../lib/Command/StorageAuthBase.php', 'OCA\\Files_External\\Command\\Verify' => __DIR__ . '/..' . '/../lib/Command/Verify.php', + 'OCA\\Files_External\\ConfigLexicon' => __DIR__ . '/..' . '/../lib/ConfigLexicon.php', 'OCA\\Files_External\\Config\\ConfigAdapter' => __DIR__ . '/..' . '/../lib/Config/ConfigAdapter.php', 'OCA\\Files_External\\Config\\ExternalMountPoint' => __DIR__ . '/..' . '/../lib/Config/ExternalMountPoint.php', 'OCA\\Files_External\\Config\\IConfigHandler' => __DIR__ . '/..' . '/../lib/Config/IConfigHandler.php', diff --git a/apps/files_external/l10n/de.js b/apps/files_external/l10n/de.js index c70905522af..719065c6e6a 100644 --- a/apps/files_external/l10n/de.js +++ b/apps/files_external/l10n/de.js @@ -106,7 +106,7 @@ OC.L10N.register( "Unable to update this external storage config. {statusMessage}" : "Diese externe Speicherkonfiguration konnte nicht aktualisiert werden. {statusMessage}", "New configuration successfully saved" : "Neue Konfiguration gespeichert", "Enter missing credentials" : "Fehlende Anmeldeinformationen eingeben", - "Credentials successfully set" : "Anmeldeinformationen erfolgreich festgelegt", + "Credentials successfully set" : "Anmeldeinformationen festgelegt", "Error while setting credentials: {error}" : "Fehler beim Festlegen der Anmeldeinformationen: {error}", "Checking storage …" : "Prüfe Speicher …", "There was an error with this external storage." : "Mit diesem externen Speicher ist ein Fehler aufgetreten.", diff --git a/apps/files_external/l10n/de.json b/apps/files_external/l10n/de.json index f9a162bd1ad..d6448798ae4 100644 --- a/apps/files_external/l10n/de.json +++ b/apps/files_external/l10n/de.json @@ -104,7 +104,7 @@ "Unable to update this external storage config. {statusMessage}" : "Diese externe Speicherkonfiguration konnte nicht aktualisiert werden. {statusMessage}", "New configuration successfully saved" : "Neue Konfiguration gespeichert", "Enter missing credentials" : "Fehlende Anmeldeinformationen eingeben", - "Credentials successfully set" : "Anmeldeinformationen erfolgreich festgelegt", + "Credentials successfully set" : "Anmeldeinformationen festgelegt", "Error while setting credentials: {error}" : "Fehler beim Festlegen der Anmeldeinformationen: {error}", "Checking storage …" : "Prüfe Speicher …", "There was an error with this external storage." : "Mit diesem externen Speicher ist ein Fehler aufgetreten.", diff --git a/apps/files_external/l10n/de_DE.js b/apps/files_external/l10n/de_DE.js index 900a3728b2f..d0541618efe 100644 --- a/apps/files_external/l10n/de_DE.js +++ b/apps/files_external/l10n/de_DE.js @@ -106,7 +106,7 @@ OC.L10N.register( "Unable to update this external storage config. {statusMessage}" : "Diese externe Speicherkonfiguration konnte nicht aktualisiert werden. {statusMessage}", "New configuration successfully saved" : "Neue Konfiguration gespeichert", "Enter missing credentials" : "Fehlende Anmeldeinformationen eingeben", - "Credentials successfully set" : "Anmeldeinformationen erfolgreich festgelegt", + "Credentials successfully set" : "Anmeldeinformationen festgelegt", "Error while setting credentials: {error}" : "Fehler beim Festlegen der Anmeldeinformationen: {error}", "Checking storage …" : "Prüfe Speicher…", "There was an error with this external storage." : "Mit diesem externen Speicher ist ein Fehler aufgetreten.", diff --git a/apps/files_external/l10n/de_DE.json b/apps/files_external/l10n/de_DE.json index 4e16f7b7de7..e5fc8adb012 100644 --- a/apps/files_external/l10n/de_DE.json +++ b/apps/files_external/l10n/de_DE.json @@ -104,7 +104,7 @@ "Unable to update this external storage config. {statusMessage}" : "Diese externe Speicherkonfiguration konnte nicht aktualisiert werden. {statusMessage}", "New configuration successfully saved" : "Neue Konfiguration gespeichert", "Enter missing credentials" : "Fehlende Anmeldeinformationen eingeben", - "Credentials successfully set" : "Anmeldeinformationen erfolgreich festgelegt", + "Credentials successfully set" : "Anmeldeinformationen festgelegt", "Error while setting credentials: {error}" : "Fehler beim Festlegen der Anmeldeinformationen: {error}", "Checking storage …" : "Prüfe Speicher…", "There was an error with this external storage." : "Mit diesem externen Speicher ist ein Fehler aufgetreten.", diff --git a/apps/files_external/lib/AppInfo/Application.php b/apps/files_external/lib/AppInfo/Application.php index 761fc97b7aa..5dae81d558c 100644 --- a/apps/files_external/lib/AppInfo/Application.php +++ b/apps/files_external/lib/AppInfo/Application.php @@ -9,6 +9,7 @@ namespace OCA\Files_External\AppInfo; use OCA\Files\Event\LoadAdditionalScriptsEvent; use OCA\Files_External\Config\ConfigAdapter; use OCA\Files_External\Config\UserPlaceholderHandler; +use OCA\Files_External\ConfigLexicon; use OCA\Files_External\Lib\Auth\AmazonS3\AccessKey; use OCA\Files_External\Lib\Auth\Builtin; use OCA\Files_External\Lib\Auth\NullMechanism; @@ -73,6 +74,7 @@ class Application extends App implements IBackendProvider, IAuthMechanismProvide $context->registerEventListener(UserDeletedEvent::class, UserDeletedListener::class); $context->registerEventListener(GroupDeletedEvent::class, GroupDeletedListener::class); $context->registerEventListener(LoadAdditionalScriptsEvent::class, LoadAdditionalListener::class); + $context->registerConfigLexicon(ConfigLexicon::class); } public function boot(IBootContext $context): void { diff --git a/apps/files_external/lib/Command/Backends.php b/apps/files_external/lib/Command/Backends.php index c2d844dc781..399bdadcacf 100644 --- a/apps/files_external/lib/Command/Backends.php +++ b/apps/files_external/lib/Command/Backends.php @@ -94,7 +94,7 @@ class Backends extends Base { */ private function formatConfiguration(array $parameters): array { $configuration = array_filter($parameters, function (DefinitionParameter $parameter) { - return $parameter->getType() !== DefinitionParameter::VALUE_HIDDEN; + return $parameter->isFlagSet(DefinitionParameter::FLAG_HIDDEN); }); return array_map(function (DefinitionParameter $parameter) { return $parameter->getTypeName(); diff --git a/apps/files_external/lib/Command/Scan.php b/apps/files_external/lib/Command/Scan.php index bd54415df55..4f29dae1ce0 100644 --- a/apps/files_external/lib/Command/Scan.php +++ b/apps/files_external/lib/Command/Scan.php @@ -11,6 +11,7 @@ namespace OCA\Files_External\Command; use OC\Files\Cache\Scanner; use OCA\Files_External\Service\GlobalStoragesService; use OCP\IUserManager; +use OCP\Lock\LockedException; use Symfony\Component\Console\Helper\Table; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -82,7 +83,19 @@ class Scan extends StorageAuthBase { $this->abortIfInterrupted(); }); - $scanner->scan($path); + try { + $scanner->scan($path); + } catch (LockedException $e) { + if (is_string($e->getReadablePath()) && str_starts_with($e->getReadablePath(), 'scanner::')) { + if ($e->getReadablePath() === 'scanner::') { + $output->writeln('<error>Another process is already scanning this storage</error>'); + } else { + $output->writeln('<error>Another process is already scanning \'' . substr($e->getReadablePath(), strlen('scanner::')) . '\' in this storage</error>'); + } + } else { + throw $e; + } + } $this->presentStats($output); diff --git a/apps/files_external/lib/ConfigLexicon.php b/apps/files_external/lib/ConfigLexicon.php new file mode 100644 index 00000000000..e162efc92cf --- /dev/null +++ b/apps/files_external/lib/ConfigLexicon.php @@ -0,0 +1,41 @@ +<?php + +declare(strict_types=1); +/** + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\Files_External; + +use NCU\Config\Lexicon\ConfigLexiconEntry; +use NCU\Config\Lexicon\ConfigLexiconStrictness; +use NCU\Config\Lexicon\IConfigLexicon; +use NCU\Config\ValueType; + +/** + * Config Lexicon for files_sharing. + * + * Please Add & Manage your Config Keys in that file and keep the Lexicon up to date! + * + * {@see IConfigLexicon} + */ +class ConfigLexicon implements IConfigLexicon { + public const ALLOW_USER_MOUNTING = 'allow_user_mounting'; + public const USER_MOUNTING_BACKENDS = 'user_mounting_backends'; + + public function getStrictness(): ConfigLexiconStrictness { + return ConfigLexiconStrictness::NOTICE; + } + + public function getAppConfigs(): array { + return [ + new ConfigLexiconEntry(self::ALLOW_USER_MOUNTING, ValueType::BOOL, false, 'allow users to mount their own external filesystems', true), + new ConfigLexiconEntry(self::USER_MOUNTING_BACKENDS, ValueType::STRING, '', 'list of mounting backends available for users', true), + ]; + } + + public function getUserConfigs(): array { + return []; + } +} diff --git a/apps/files_external/lib/Lib/Auth/OAuth1/OAuth1.php b/apps/files_external/lib/Lib/Auth/OAuth1/OAuth1.php index b215201b4f4..688e04c4210 100644 --- a/apps/files_external/lib/Lib/Auth/OAuth1/OAuth1.php +++ b/apps/files_external/lib/Lib/Auth/OAuth1/OAuth1.php @@ -21,14 +21,17 @@ class OAuth1 extends AuthMechanism { ->setText($l->t('OAuth1')) ->addParameters([ (new DefinitionParameter('configured', 'configured')) - ->setType(DefinitionParameter::VALUE_HIDDEN), + ->setType(DefinitionParameter::VALUE_TEXT) + ->setFlag(DefinitionParameter::FLAG_HIDDEN), new DefinitionParameter('app_key', $l->t('App key')), (new DefinitionParameter('app_secret', $l->t('App secret'))) ->setType(DefinitionParameter::VALUE_PASSWORD), (new DefinitionParameter('token', 'token')) - ->setType(DefinitionParameter::VALUE_HIDDEN), + ->setType(DefinitionParameter::VALUE_PASSWORD) + ->setFlag(DefinitionParameter::FLAG_HIDDEN), (new DefinitionParameter('token_secret', 'token_secret')) - ->setType(DefinitionParameter::VALUE_HIDDEN), + ->setType(DefinitionParameter::VALUE_PASSWORD) + ->setFlag(DefinitionParameter::FLAG_HIDDEN), ]) ->addCustomJs('oauth1') ; diff --git a/apps/files_external/lib/Lib/Auth/OAuth2/OAuth2.php b/apps/files_external/lib/Lib/Auth/OAuth2/OAuth2.php index 6b41fef90d5..b6c1e1d9557 100644 --- a/apps/files_external/lib/Lib/Auth/OAuth2/OAuth2.php +++ b/apps/files_external/lib/Lib/Auth/OAuth2/OAuth2.php @@ -21,12 +21,14 @@ class OAuth2 extends AuthMechanism { ->setText($l->t('OAuth2')) ->addParameters([ (new DefinitionParameter('configured', 'configured')) - ->setType(DefinitionParameter::VALUE_HIDDEN), + ->setType(DefinitionParameter::VALUE_TEXT) + ->setFlag(DefinitionParameter::FLAG_HIDDEN), new DefinitionParameter('client_id', $l->t('Client ID')), (new DefinitionParameter('client_secret', $l->t('Client secret'))) ->setType(DefinitionParameter::VALUE_PASSWORD), (new DefinitionParameter('token', 'token')) - ->setType(DefinitionParameter::VALUE_HIDDEN), + ->setType(DefinitionParameter::VALUE_PASSWORD) + ->setFlag(DefinitionParameter::FLAG_HIDDEN), ]) ->addCustomJs('oauth2') ; diff --git a/apps/files_external/lib/Lib/Auth/Password/LoginCredentials.php b/apps/files_external/lib/Lib/Auth/Password/LoginCredentials.php index e3453a477d4..57df6316361 100644 --- a/apps/files_external/lib/Lib/Auth/Password/LoginCredentials.php +++ b/apps/files_external/lib/Lib/Auth/Password/LoginCredentials.php @@ -43,7 +43,9 @@ class LoginCredentials extends AuthMechanism { ->setText($l->t('Log-in credentials, save in database')) ->addParameters([ (new DefinitionParameter('password', $l->t('Password'))) - ->setType(DefinitionParameter::VALUE_PASSWORD), + ->setType(DefinitionParameter::VALUE_PASSWORD) + ->setFlag(DefinitionParameter::FLAG_HIDDEN) + ->setFlag(DefinitionParameter::FLAG_OPTIONAL), ]); $eventDispatcher->addServiceListener(UserLoggedInEvent::class, StorePasswordListener::class); diff --git a/apps/files_external/lib/Lib/Auth/Password/SessionCredentials.php b/apps/files_external/lib/Lib/Auth/Password/SessionCredentials.php index 6b7a51a8828..8af82ab228c 100644 --- a/apps/files_external/lib/Lib/Auth/Password/SessionCredentials.php +++ b/apps/files_external/lib/Lib/Auth/Password/SessionCredentials.php @@ -32,7 +32,9 @@ class SessionCredentials extends AuthMechanism { ->setText($l->t('Log-in credentials, save in session')) ->addParameters([ (new DefinitionParameter('password', $l->t('Password'))) - ->setType(DefinitionParameter::VALUE_PASSWORD), + ->setType(DefinitionParameter::VALUE_PASSWORD) + ->setFlag(DefinitionParameter::FLAG_HIDDEN) + ->setFlag(DefinitionParameter::FLAG_OPTIONAL), ]); } diff --git a/apps/files_external/lib/Lib/Auth/PublicKey/RSA.php b/apps/files_external/lib/Lib/Auth/PublicKey/RSA.php index 2371ce0a219..87072299d6d 100644 --- a/apps/files_external/lib/Lib/Auth/PublicKey/RSA.php +++ b/apps/files_external/lib/Lib/Auth/PublicKey/RSA.php @@ -31,7 +31,8 @@ class RSA extends AuthMechanism { new DefinitionParameter('user', $l->t('Login')), new DefinitionParameter('public_key', $l->t('Public key')), (new DefinitionParameter('private_key', 'private_key')) - ->setType(DefinitionParameter::VALUE_HIDDEN), + ->setType(DefinitionParameter::VALUE_PASSWORD) + ->setFlag(DefinitionParameter::FLAG_HIDDEN), ]) ->addCustomJs('public_key') ; diff --git a/apps/files_external/lib/Lib/Backend/LegacyBackend.php b/apps/files_external/lib/Lib/Backend/LegacyBackend.php index 11396913fbd..a74412e8373 100644 --- a/apps/files_external/lib/Lib/Backend/LegacyBackend.php +++ b/apps/files_external/lib/Lib/Backend/LegacyBackend.php @@ -52,10 +52,6 @@ class LegacyBackend extends Backend { $type = DefinitionParameter::VALUE_PASSWORD; $placeholder = substr($placeholder, 1); break; - case '#': - $type = DefinitionParameter::VALUE_HIDDEN; - $placeholder = substr($placeholder, 1); - break; } $this->addParameter((new DefinitionParameter($name, $placeholder)) ->setType($type) diff --git a/apps/files_external/lib/Lib/Backend/SMB.php b/apps/files_external/lib/Lib/Backend/SMB.php index c4a68fea6e1..b246b0638f0 100644 --- a/apps/files_external/lib/Lib/Backend/SMB.php +++ b/apps/files_external/lib/Lib/Backend/SMB.php @@ -49,8 +49,9 @@ class SMB extends Backend { ->setFlag(DefinitionParameter::FLAG_OPTIONAL) ->setTooltip($l->t("Check the ACL's of each file or folder inside a directory to filter out items where the account has no read permissions, comes with a performance penalty")), (new DefinitionParameter('timeout', $l->t('Timeout'))) - ->setType(DefinitionParameter::VALUE_HIDDEN) - ->setFlag(DefinitionParameter::FLAG_OPTIONAL), + ->setType(DefinitionParameter::VALUE_TEXT) + ->setFlag(DefinitionParameter::FLAG_OPTIONAL) + ->setFlag(DefinitionParameter::FLAG_HIDDEN), ]) ->addAuthScheme(AuthMechanism::SCHEME_PASSWORD) ->addAuthScheme(AuthMechanism::SCHEME_SMB) diff --git a/apps/files_external/lib/Lib/DefinitionParameter.php b/apps/files_external/lib/Lib/DefinitionParameter.php index 1e611edd1ed..3c668c6b83d 100644 --- a/apps/files_external/lib/Lib/DefinitionParameter.php +++ b/apps/files_external/lib/Lib/DefinitionParameter.php @@ -18,12 +18,12 @@ class DefinitionParameter implements \JsonSerializable { public const VALUE_TEXT = 0; public const VALUE_BOOLEAN = 1; public const VALUE_PASSWORD = 2; - public const VALUE_HIDDEN = 3; /** Flag constants */ public const FLAG_NONE = 0; public const FLAG_OPTIONAL = 1; public const FLAG_USER_PROVIDED = 2; + public const FLAG_HIDDEN = 4; /** @var string human-readable parameter tooltip */ private string $tooltip = ''; diff --git a/apps/files_external/lib/Listener/LoadAdditionalListener.php b/apps/files_external/lib/Listener/LoadAdditionalListener.php index 66d06675291..6ba917759c3 100644 --- a/apps/files_external/lib/Listener/LoadAdditionalListener.php +++ b/apps/files_external/lib/Listener/LoadAdditionalListener.php @@ -10,10 +10,11 @@ namespace OCA\Files_External\Listener; use OCA\Files\Event\LoadAdditionalScriptsEvent; use OCA\Files_External\AppInfo\Application; +use OCA\Files_External\ConfigLexicon; use OCP\AppFramework\Services\IInitialState; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; -use OCP\IConfig; +use OCP\IAppConfig; use OCP\Util; /** @@ -22,7 +23,7 @@ use OCP\Util; class LoadAdditionalListener implements IEventListener { public function __construct( - private IConfig $config, + private readonly IAppConfig $appConfig, private IInitialState $initialState, ) { } @@ -32,7 +33,7 @@ class LoadAdditionalListener implements IEventListener { return; } - $allowUserMounting = $this->config->getAppValue('files_external', 'allow_user_mounting', 'no') === 'yes'; + $allowUserMounting = $this->appConfig->getValueBool('files_external', ConfigLexicon::ALLOW_USER_MOUNTING); $this->initialState->provideInitialState('allowUserMounting', $allowUserMounting); Util::addInitScript(Application::APP_ID, 'init'); diff --git a/apps/files_external/lib/Service/BackendService.php b/apps/files_external/lib/Service/BackendService.php index b452b27e175..4726dbd4cad 100644 --- a/apps/files_external/lib/Service/BackendService.php +++ b/apps/files_external/lib/Service/BackendService.php @@ -7,14 +7,14 @@ namespace OCA\Files_External\Service; use OCA\Files_External\Config\IConfigHandler; +use OCA\Files_External\ConfigLexicon; use OCA\Files_External\Lib\Auth\AuthMechanism; use OCA\Files_External\Lib\Backend\Backend; - use OCA\Files_External\Lib\Config\IAuthMechanismProvider; use OCA\Files_External\Lib\Config\IBackendProvider; use OCP\EventDispatcher\GenericEvent; use OCP\EventDispatcher\IEventDispatcher; -use OCP\IConfig; +use OCP\IAppConfig; use OCP\Server; /** @@ -56,19 +56,12 @@ class BackendService { private $configHandlers = []; - /** - * @param IConfig $config - */ public function __construct( - protected IConfig $config, + protected IAppConfig $appConfig, ) { // Load config values - if ($this->config->getAppValue('files_external', 'allow_user_mounting', 'yes') !== 'yes') { - $this->userMountingAllowed = false; - } - $this->userMountingBackends = explode(',', - $this->config->getAppValue('files_external', 'user_mounting_backends', '') - ); + $this->userMountingAllowed = $appConfig->getValueBool('files_external', ConfigLexicon::ALLOW_USER_MOUNTING); + $this->userMountingBackends = explode(',', $appConfig->getValueString('files_external', ConfigLexicon::USER_MOUNTING_BACKENDS)); // if no backend is in the list an empty string is in the array and user mounting is disabled if ($this->userMountingBackends === ['']) { diff --git a/apps/files_external/src/settings.js b/apps/files_external/src/settings.js index aa9b57786d9..033696c9d24 100644 --- a/apps/files_external/src/settings.js +++ b/apps/files_external/src/settings.js @@ -647,13 +647,13 @@ const MountConfigListView = function($el, options) { MountConfigListView.ParameterFlags = { OPTIONAL: 1, USER_PROVIDED: 2, + HIDDEN: 4, } MountConfigListView.ParameterTypes = { TEXT: 0, BOOLEAN: 1, PASSWORD: 2, - HIDDEN: 3, } /** @@ -1142,13 +1142,13 @@ MountConfigListView.prototype = _.extend({ let newElement const trimmedPlaceholder = placeholder.value - if (placeholder.type === MountConfigListView.ParameterTypes.PASSWORD) { + if (hasFlag(MountConfigListView.ParameterFlags.HIDDEN)) { + newElement = $('<input type="hidden" class="' + classes.join(' ') + '" data-parameter="' + parameter + '" />') + } else if (placeholder.type === MountConfigListView.ParameterTypes.PASSWORD) { newElement = $('<input type="password" class="' + classes.join(' ') + '" data-parameter="' + parameter + '" placeholder="' + trimmedPlaceholder + '" />') } else if (placeholder.type === MountConfigListView.ParameterTypes.BOOLEAN) { const checkboxId = _.uniqueId('checkbox_') newElement = $('<div><label><input type="checkbox" id="' + checkboxId + '" class="' + classes.join(' ') + '" data-parameter="' + parameter + '" />' + trimmedPlaceholder + '</label></div>') - } else if (placeholder.type === MountConfigListView.ParameterTypes.HIDDEN) { - newElement = $('<input type="hidden" class="' + classes.join(' ') + '" data-parameter="' + parameter + '" />') } else { newElement = $('<input type="text" class="' + classes.join(' ') + '" data-parameter="' + parameter + '" placeholder="' + trimmedPlaceholder + '" />') } diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php index d1a8f78076a..5aad7b018af 100644 --- a/apps/files_external/templates/settings.php +++ b/apps/files_external/templates/settings.php @@ -7,7 +7,6 @@ */ use OCA\Files_External\Lib\Auth\AuthMechanism; use OCA\Files_External\Lib\Backend\Backend; -use OCA\Files_External\Lib\DefinitionParameter; use OCA\Files_External\Service\BackendService; /** @var array $_ */ @@ -42,63 +41,6 @@ foreach ($_['authMechanisms'] as $authMechanism) { } } -function writeParameterInput($parameter, $options, $classes = []) { - $value = ''; - if (isset($options[$parameter->getName()])) { - $value = $options[$parameter->getName()]; - } - $placeholder = $parameter->getText(); - $is_optional = $parameter->isFlagSet(DefinitionParameter::FLAG_OPTIONAL); - - switch ($parameter->getType()) { - case DefinitionParameter::VALUE_PASSWORD: ?> - <?php if ($is_optional) { - $classes[] = 'optional'; - } ?> - <input type="password" - <?php if (!empty($classes)): ?> class="<?php p(implode(' ', $classes)); ?>"<?php endif; ?> - data-parameter="<?php p($parameter->getName()); ?>" - value="<?php p($value); ?>" - placeholder="<?php p($placeholder); ?>" - /> - <?php - break; - case DefinitionParameter::VALUE_BOOLEAN: ?> - <?php $checkboxId = uniqid('checkbox_'); ?> - <div> - <label> - <input type="checkbox" - id="<?php p($checkboxId); ?>" - <?php if (!empty($classes)): ?> class="checkbox <?php p(implode(' ', $classes)); ?>"<?php endif; ?> - data-parameter="<?php p($parameter->getName()); ?>" - <?php if ($value === true): ?> checked="checked"<?php endif; ?> - /> - <?php p($placeholder); ?> - </label> - </div> - <?php - break; - case DefinitionParameter::VALUE_HIDDEN: ?> - <input type="hidden" - <?php if (!empty($classes)): ?> class="<?php p(implode(' ', $classes)); ?>"<?php endif; ?> - data-parameter="<?php p($parameter->getName()); ?>" - value="<?php p($value); ?>" - /> - <?php - break; - default: ?> - <?php if ($is_optional) { - $classes[] = 'optional'; - } ?> - <input type="text" - <?php if (!empty($classes)): ?> class="<?php p(implode(' ', $classes)); ?>"<?php endif; ?> - data-parameter="<?php p($parameter->getName()); ?>" - value="<?php p($value); ?>" - placeholder="<?php p($placeholder); ?>" - /> - <?php - } -} ?> <div class="emptyfilelist emptycontent hidden"> diff --git a/apps/files_external/tests/Backend/LegacyBackendTest.php b/apps/files_external/tests/Backend/LegacyBackendTest.php index 303700c6611..cea46c1a0cd 100644 --- a/apps/files_external/tests/Backend/LegacyBackendTest.php +++ b/apps/files_external/tests/Backend/LegacyBackendTest.php @@ -32,7 +32,6 @@ class LegacyBackendTest extends \Test\TestCase { 'textfield' => 'Text field', 'passwordfield' => '*Password field', 'checkbox' => '!Checkbox', - 'hiddenfield' => '#Hidden field', 'optionaltext' => '&Optional text field', 'optionalpassword' => '&*Optional password field', ], @@ -66,9 +65,6 @@ class LegacyBackendTest extends \Test\TestCase { $this->assertEquals('Checkbox', $parameters['checkbox']->getText()); $this->assertEquals(DefinitionParameter::VALUE_BOOLEAN, $parameters['checkbox']->getType()); $this->assertEquals(DefinitionParameter::FLAG_NONE, $parameters['checkbox']->getFlags()); - $this->assertEquals('Hidden field', $parameters['hiddenfield']->getText()); - $this->assertEquals(DefinitionParameter::VALUE_HIDDEN, $parameters['hiddenfield']->getType()); - $this->assertEquals(DefinitionParameter::FLAG_NONE, $parameters['hiddenfield']->getFlags()); $this->assertEquals('Optional text field', $parameters['optionaltext']->getText()); $this->assertEquals(DefinitionParameter::VALUE_TEXT, $parameters['optionaltext']->getType()); $this->assertEquals(DefinitionParameter::FLAG_OPTIONAL, $parameters['optionaltext']->getFlags()); diff --git a/apps/files_external/tests/DefinitionParameterTest.php b/apps/files_external/tests/DefinitionParameterTest.php index 0b1d11bbf0c..3fc65eaf897 100644 --- a/apps/files_external/tests/DefinitionParameterTest.php +++ b/apps/files_external/tests/DefinitionParameterTest.php @@ -38,12 +38,12 @@ class DefinitionParameterTest extends \Test\TestCase { 'tooltip' => '', ], $param->jsonSerialize()); - $param->setType(Param::VALUE_HIDDEN); - $param->setFlags(Param::FLAG_NONE); + $param->setType(Param::VALUE_TEXT); + $param->setFlags(Param::FLAG_HIDDEN); $this->assertEquals([ 'value' => 'bar', - 'flags' => Param::FLAG_NONE, - 'type' => Param::VALUE_HIDDEN, + 'flags' => Param::FLAG_HIDDEN, + 'type' => Param::VALUE_TEXT, 'tooltip' => '', ], $param->jsonSerialize()); } @@ -53,6 +53,7 @@ class DefinitionParameterTest extends \Test\TestCase { [Param::VALUE_TEXT, Param::FLAG_NONE, 'abc', true], [Param::VALUE_TEXT, Param::FLAG_NONE, '', false], [Param::VALUE_TEXT, Param::FLAG_OPTIONAL, '', true], + [Param::VALUE_TEXT, Param::FLAG_HIDDEN, '', false], [Param::VALUE_BOOLEAN, Param::FLAG_NONE, false, true], [Param::VALUE_BOOLEAN, Param::FLAG_NONE, 123, false], @@ -62,8 +63,6 @@ class DefinitionParameterTest extends \Test\TestCase { [Param::VALUE_PASSWORD, Param::FLAG_NONE, 'foobar', true], [Param::VALUE_PASSWORD, Param::FLAG_NONE, '', false], - - [Param::VALUE_HIDDEN, Param::FLAG_NONE, '', false] ]; } diff --git a/apps/files_external/tests/Service/BackendServiceTest.php b/apps/files_external/tests/Service/BackendServiceTest.php index e7644d8e523..c3a77d81b67 100644 --- a/apps/files_external/tests/Service/BackendServiceTest.php +++ b/apps/files_external/tests/Service/BackendServiceTest.php @@ -12,15 +12,15 @@ use OCA\Files_External\Lib\Backend\Backend; use OCA\Files_External\Lib\Config\IAuthMechanismProvider; use OCA\Files_External\Lib\Config\IBackendProvider; use OCA\Files_External\Service\BackendService; -use OCP\IConfig; +use OCP\IAppConfig; class BackendServiceTest extends \Test\TestCase { - /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */ - protected $config; + /** @var IAppConfig|\PHPUnit\Framework\MockObject\MockObject */ + protected $appConfig; protected function setUp(): void { - $this->config = $this->createMock(IConfig::class); + $this->appConfig = $this->createMock(IAppConfig::class); } /** @@ -52,7 +52,7 @@ class BackendServiceTest extends \Test\TestCase { } public function testRegisterBackend(): void { - $service = new BackendService($this->config); + $service = new BackendService($this->appConfig); $backend = $this->getBackendMock('\Foo\Bar'); @@ -80,7 +80,7 @@ class BackendServiceTest extends \Test\TestCase { } public function testBackendProvider(): void { - $service = new BackendService($this->config); + $service = new BackendService($this->appConfig); $backend1 = $this->getBackendMock('\Foo\Bar'); $backend2 = $this->getBackendMock('\Bar\Foo'); @@ -99,7 +99,7 @@ class BackendServiceTest extends \Test\TestCase { } public function testAuthMechanismProvider(): void { - $service = new BackendService($this->config); + $service = new BackendService($this->appConfig); $backend1 = $this->getAuthMechanismMock('\Foo\Bar'); $backend2 = $this->getAuthMechanismMock('\Bar\Foo'); @@ -118,7 +118,7 @@ class BackendServiceTest extends \Test\TestCase { } public function testMultipleBackendProviders(): void { - $service = new BackendService($this->config); + $service = new BackendService($this->appConfig); $backend1a = $this->getBackendMock('\Foo\Bar'); $backend1b = $this->getBackendMock('\Bar\Foo'); @@ -146,14 +146,16 @@ class BackendServiceTest extends \Test\TestCase { } public function testUserMountingBackends(): void { - $this->config->expects($this->exactly(2)) - ->method('getAppValue') - ->willReturnMap([ - ['files_external', 'allow_user_mounting', 'yes', 'yes'], - ['files_external', 'user_mounting_backends', '', 'identifier:\User\Mount\Allowed,identifier_alias'] - ]); + $this->appConfig->expects($this->once()) + ->method('getValueString') + ->with('files_external', 'user_mounting_backends') + ->willReturn('identifier:\User\Mount\Allowed,identifier_alias'); + $this->appConfig->expects($this->once()) + ->method('getValueBool') + ->with('files_external', 'allow_user_mounting') + ->willReturn(true); - $service = new BackendService($this->config); + $service = new BackendService($this->appConfig); $backendAllowed = $this->getBackendMock('\User\Mount\Allowed'); $backendAllowed->expects($this->never()) @@ -177,7 +179,7 @@ class BackendServiceTest extends \Test\TestCase { } public function testGetAvailableBackends(): void { - $service = new BackendService($this->config); + $service = new BackendService($this->appConfig); $backendAvailable = $this->getBackendMock('\Backend\Available'); $backendAvailable->expects($this->once()) @@ -220,7 +222,7 @@ class BackendServiceTest extends \Test\TestCase { public function testRegisterConfigHandlerInvalid(array $placeholders): void { $this->expectException(\RuntimeException::class); - $service = new BackendService($this->config); + $service = new BackendService($this->appConfig); $mock = $this->createMock(IConfigHandler::class); $cb = function () use ($mock) { return $mock; @@ -231,7 +233,7 @@ class BackendServiceTest extends \Test\TestCase { } public function testConfigHandlers(): void { - $service = new BackendService($this->config); + $service = new BackendService($this->appConfig); $mock = $this->createMock(IConfigHandler::class); $mock->expects($this->exactly(3)) ->method('handle'); diff --git a/apps/files_reminders/l10n/en_GB.js b/apps/files_reminders/l10n/en_GB.js index 39e216c1089..84d29ac5b18 100644 --- a/apps/files_reminders/l10n/en_GB.js +++ b/apps/files_reminders/l10n/en_GB.js @@ -6,6 +6,8 @@ OC.L10N.register( "View file" : "View file", "View folder" : "View folder", "Files reminder" : "Files reminder", + "The \"files_reminders\" app can work properly." : "The \"files_reminders\" app can work properly.", + "The \"files_reminders\" app needs the notification app to work properly. You should either enable notifications or disable files_reminder." : "The \"files_reminders\" app needs the notification app to work properly. You should either enable notifications or disable files_reminder.", "Set file reminders" : "Set file reminders", "**📣 File reminders**\n\nSet file reminders.\n\nNote: to use the `File reminders` app, ensure that the `Notifications` app is installed and enabled. The `Notifications` app provides the necessary APIs for the `File reminders` app to work correctly." : "**📣 File reminders**\n\nSet file reminders.\n\nNote: to use the `File reminders` app, ensure that the `Notifications` app is installed and enabled. The `Notifications` app provides the necessary APIs for the `File reminders` app to work correctly.", "Set reminder for \"{fileName}\"" : "Set reminder for \"{fileName}\"", diff --git a/apps/files_reminders/l10n/en_GB.json b/apps/files_reminders/l10n/en_GB.json index ba7020cb8a0..495be5f0bd9 100644 --- a/apps/files_reminders/l10n/en_GB.json +++ b/apps/files_reminders/l10n/en_GB.json @@ -4,6 +4,8 @@ "View file" : "View file", "View folder" : "View folder", "Files reminder" : "Files reminder", + "The \"files_reminders\" app can work properly." : "The \"files_reminders\" app can work properly.", + "The \"files_reminders\" app needs the notification app to work properly. You should either enable notifications or disable files_reminder." : "The \"files_reminders\" app needs the notification app to work properly. You should either enable notifications or disable files_reminder.", "Set file reminders" : "Set file reminders", "**📣 File reminders**\n\nSet file reminders.\n\nNote: to use the `File reminders` app, ensure that the `Notifications` app is installed and enabled. The `Notifications` app provides the necessary APIs for the `File reminders` app to work correctly." : "**📣 File reminders**\n\nSet file reminders.\n\nNote: to use the `File reminders` app, ensure that the `Notifications` app is installed and enabled. The `Notifications` app provides the necessary APIs for the `File reminders` app to work correctly.", "Set reminder for \"{fileName}\"" : "Set reminder for \"{fileName}\"", diff --git a/apps/files_reminders/l10n/zh_HK.js b/apps/files_reminders/l10n/zh_HK.js index 2651cac8cdd..4bd677a177e 100644 --- a/apps/files_reminders/l10n/zh_HK.js +++ b/apps/files_reminders/l10n/zh_HK.js @@ -6,6 +6,8 @@ OC.L10N.register( "View file" : "檢視檔案", "View folder" : "檢視資料夾", "Files reminder" : "檔案提醒", + "The \"files_reminders\" app can work properly." : "「files_reminders」應用程式可以正常運作。", + "The \"files_reminders\" app needs the notification app to work properly. You should either enable notifications or disable files_reminder." : "「files_reminder」應用程式需要通知應用程式才能正常運作。您應該啟用通知或停用 files_reminder。", "Set file reminders" : "設定檔案提醒", "**📣 File reminders**\n\nSet file reminders.\n\nNote: to use the `File reminders` app, ensure that the `Notifications` app is installed and enabled. The `Notifications` app provides the necessary APIs for the `File reminders` app to work correctly." : "**📣 檔案提醒**\n\n設定檔案提醒。\n\n注意:要使用「檔案提醒」應用程式,請確定已安裝並啟用「通知」應用程式。「通知」應用程式提供必要的 API,讓「檔案提醒」應用程式能正常運作。", "Set reminder for \"{fileName}\"" : "設定「{fileName}」的提醒", @@ -28,6 +30,8 @@ OC.L10N.register( "This weekend" : "本週末", "Set reminder for this weekend" : "設定本週末的提醒", "Next week" : "下星期", - "Set reminder for next week" : "設定下星期的提醒" + "Set reminder for next week" : "設定下星期的提醒", + "This files_reminder can work properly." : "此 files_reminder 可以正常運作。", + "The files_reminder app needs the notification app to work properly. You should either enable notifications or disable files_reminder." : "files_reminder 應用程式需要通知應用程式才能正常運作。您應該啟用通知或停用 files_reminder。" }, "nplurals=1; plural=0;"); diff --git a/apps/files_reminders/l10n/zh_HK.json b/apps/files_reminders/l10n/zh_HK.json index d973c4eba37..676c4164157 100644 --- a/apps/files_reminders/l10n/zh_HK.json +++ b/apps/files_reminders/l10n/zh_HK.json @@ -4,6 +4,8 @@ "View file" : "檢視檔案", "View folder" : "檢視資料夾", "Files reminder" : "檔案提醒", + "The \"files_reminders\" app can work properly." : "「files_reminders」應用程式可以正常運作。", + "The \"files_reminders\" app needs the notification app to work properly. You should either enable notifications or disable files_reminder." : "「files_reminder」應用程式需要通知應用程式才能正常運作。您應該啟用通知或停用 files_reminder。", "Set file reminders" : "設定檔案提醒", "**📣 File reminders**\n\nSet file reminders.\n\nNote: to use the `File reminders` app, ensure that the `Notifications` app is installed and enabled. The `Notifications` app provides the necessary APIs for the `File reminders` app to work correctly." : "**📣 檔案提醒**\n\n設定檔案提醒。\n\n注意:要使用「檔案提醒」應用程式,請確定已安裝並啟用「通知」應用程式。「通知」應用程式提供必要的 API,讓「檔案提醒」應用程式能正常運作。", "Set reminder for \"{fileName}\"" : "設定「{fileName}」的提醒", @@ -26,6 +28,8 @@ "This weekend" : "本週末", "Set reminder for this weekend" : "設定本週末的提醒", "Next week" : "下星期", - "Set reminder for next week" : "設定下星期的提醒" + "Set reminder for next week" : "設定下星期的提醒", + "This files_reminder can work properly." : "此 files_reminder 可以正常運作。", + "The files_reminder app needs the notification app to work properly. You should either enable notifications or disable files_reminder." : "files_reminder 應用程式需要通知應用程式才能正常運作。您應該啟用通知或停用 files_reminder。" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_sharing/composer/composer/autoload_classmap.php b/apps/files_sharing/composer/composer/autoload_classmap.php index 8682fd5f238..92751ead730 100644 --- a/apps/files_sharing/composer/composer/autoload_classmap.php +++ b/apps/files_sharing/composer/composer/autoload_classmap.php @@ -29,6 +29,7 @@ return array( 'OCA\\Files_Sharing\\Command\\ExiprationNotification' => $baseDir . '/../lib/Command/ExiprationNotification.php', 'OCA\\Files_Sharing\\Command\\FixShareOwners' => $baseDir . '/../lib/Command/FixShareOwners.php', 'OCA\\Files_Sharing\\Command\\ListShares' => $baseDir . '/../lib/Command/ListShares.php', + 'OCA\\Files_Sharing\\Config\\ConfigLexicon' => $baseDir . '/../lib/Config/ConfigLexicon.php', 'OCA\\Files_Sharing\\Controller\\AcceptController' => $baseDir . '/../lib/Controller/AcceptController.php', 'OCA\\Files_Sharing\\Controller\\DeletedShareAPIController' => $baseDir . '/../lib/Controller/DeletedShareAPIController.php', 'OCA\\Files_Sharing\\Controller\\ExternalSharesController' => $baseDir . '/../lib/Controller/ExternalSharesController.php', diff --git a/apps/files_sharing/composer/composer/autoload_static.php b/apps/files_sharing/composer/composer/autoload_static.php index 3bf5bcdffda..6ca952007a1 100644 --- a/apps/files_sharing/composer/composer/autoload_static.php +++ b/apps/files_sharing/composer/composer/autoload_static.php @@ -44,6 +44,7 @@ class ComposerStaticInitFiles_Sharing 'OCA\\Files_Sharing\\Command\\ExiprationNotification' => __DIR__ . '/..' . '/../lib/Command/ExiprationNotification.php', 'OCA\\Files_Sharing\\Command\\FixShareOwners' => __DIR__ . '/..' . '/../lib/Command/FixShareOwners.php', 'OCA\\Files_Sharing\\Command\\ListShares' => __DIR__ . '/..' . '/../lib/Command/ListShares.php', + 'OCA\\Files_Sharing\\Config\\ConfigLexicon' => __DIR__ . '/..' . '/../lib/Config/ConfigLexicon.php', 'OCA\\Files_Sharing\\Controller\\AcceptController' => __DIR__ . '/..' . '/../lib/Controller/AcceptController.php', 'OCA\\Files_Sharing\\Controller\\DeletedShareAPIController' => __DIR__ . '/..' . '/../lib/Controller/DeletedShareAPIController.php', 'OCA\\Files_Sharing\\Controller\\ExternalSharesController' => __DIR__ . '/..' . '/../lib/Controller/ExternalSharesController.php', diff --git a/apps/files_sharing/l10n/ar.js b/apps/files_sharing/l10n/ar.js index eae64a56eae..f1f2b87e7e4 100644 --- a/apps/files_sharing/l10n/ar.js +++ b/apps/files_sharing/l10n/ar.js @@ -313,16 +313,15 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "استَعمِل هذه الطريقة لمشاركة الملفات مع الأفراد أو الفرق داخل مؤسستك. إذا كان المستلم لديه بالفعل حق الوصول إلى المشاركة ولكنه لا يستطيع تحديد موقعها، فيمكنك إرسال رابط المشاركة الداخلي إليه لتسهيل وصوله إليها.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "استَعمِل هذه الطريقة لمشاركة الملفات مع الأفراد أو المؤسسات خارج مؤسستك. يمكن مشاركة الملفات والمجلدات عبر روابط المشاركة العامة وعناوين البريد الإلكتروني. يمكنك أيضًا المشاركة مع حسابات نكست كلاود الأخرى المستضافة على خوادم مختلفة باستخدام مُعرِّف سحابتها الاتحاديّة.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "المشاركات التي لا تشكل جزءاً من المشاركات الداخلية أو الخارجية تُعد مُشارَكات من تطبيقات أو مصادر أخرى.", + "Share with accounts and teams" : "المشاركة مع حسابات وفِرَق", "Unable to load the shares list" : "تعذّر تحميل قائمة المشاركات", "Expires {relativetime}" : "تنتهي الصلاحية في {relativetime}", "this share just expired." : "صلاحية هذه المشاركة إنتَهَت للتَّوّ.", "Shared with you by {owner}" : "تمّت مشاركته معك من قِبَل {owner}", "Internal shares" : "مشاركات داخلية", "Internal shares explanation" : "شرح المشاركات الداخلية", - "Share with accounts and teams" : "المشاركة مع حسابات وفِرَق", "External shares" : "مشاركات خارجية", "External shares explanation" : "شرح مشاركات خارجية", - "Email, federated cloud id" : "بريد إلكتروني، مُعرِّف سحابة اتحاديّة", "Additional shares" : "مشاركات إضافية", "Additional shares explanation" : "شرح مشاركات إضافية", "Link to a file" : "رابط إلى ملف", @@ -422,6 +421,7 @@ OC.L10N.register( "Share expire date saved" : "تمّ حفظ تاريخ انتهاء صلاحية المشاركة", "You are not allowed to edit link shares that you don't own" : "أنت غير مسموحٍ لك بتعديل مشاركات الروابط التي لا تملكها", "_1 email address already added_::_{count} email addresses already added_" : ["{count} عنوان إيميل سبقت إضافته سلفاً","1 عنوان إيميل سبقت إضافته سلفاً","{count} عنوان إيميل سبقت إضافته سلفاً","{count} عناوين إيميل سبقت إضافتهت سلفاً","{count} عناوين إيميل سبقت إضافتها سلفاً","{count} عناوين إيميل سبقت إضافتها سلفاً"], - "_1 email address added_::_{count} email addresses added_" : ["{count} عنوان إيميل تمت إضافته","1 عنوان إيميل تمت إضافته","{count} عناوين إيميل تمت إضافتها","{count} عناوين إيميل تمت إضافتها","{count} عناوين إيميل تمت إضافتها","{count} عناوين إيميل تمت إضافتها"] + "_1 email address added_::_{count} email addresses added_" : ["{count} عنوان إيميل تمت إضافته","1 عنوان إيميل تمت إضافته","{count} عناوين إيميل تمت إضافتها","{count} عناوين إيميل تمت إضافتها","{count} عناوين إيميل تمت إضافتها","{count} عناوين إيميل تمت إضافتها"], + "Email, federated cloud id" : "بريد إلكتروني، مُعرِّف سحابة اتحاديّة" }, "nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"); diff --git a/apps/files_sharing/l10n/ar.json b/apps/files_sharing/l10n/ar.json index 35eebb01014..e992b33fcb7 100644 --- a/apps/files_sharing/l10n/ar.json +++ b/apps/files_sharing/l10n/ar.json @@ -311,16 +311,15 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "استَعمِل هذه الطريقة لمشاركة الملفات مع الأفراد أو الفرق داخل مؤسستك. إذا كان المستلم لديه بالفعل حق الوصول إلى المشاركة ولكنه لا يستطيع تحديد موقعها، فيمكنك إرسال رابط المشاركة الداخلي إليه لتسهيل وصوله إليها.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "استَعمِل هذه الطريقة لمشاركة الملفات مع الأفراد أو المؤسسات خارج مؤسستك. يمكن مشاركة الملفات والمجلدات عبر روابط المشاركة العامة وعناوين البريد الإلكتروني. يمكنك أيضًا المشاركة مع حسابات نكست كلاود الأخرى المستضافة على خوادم مختلفة باستخدام مُعرِّف سحابتها الاتحاديّة.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "المشاركات التي لا تشكل جزءاً من المشاركات الداخلية أو الخارجية تُعد مُشارَكات من تطبيقات أو مصادر أخرى.", + "Share with accounts and teams" : "المشاركة مع حسابات وفِرَق", "Unable to load the shares list" : "تعذّر تحميل قائمة المشاركات", "Expires {relativetime}" : "تنتهي الصلاحية في {relativetime}", "this share just expired." : "صلاحية هذه المشاركة إنتَهَت للتَّوّ.", "Shared with you by {owner}" : "تمّت مشاركته معك من قِبَل {owner}", "Internal shares" : "مشاركات داخلية", "Internal shares explanation" : "شرح المشاركات الداخلية", - "Share with accounts and teams" : "المشاركة مع حسابات وفِرَق", "External shares" : "مشاركات خارجية", "External shares explanation" : "شرح مشاركات خارجية", - "Email, federated cloud id" : "بريد إلكتروني، مُعرِّف سحابة اتحاديّة", "Additional shares" : "مشاركات إضافية", "Additional shares explanation" : "شرح مشاركات إضافية", "Link to a file" : "رابط إلى ملف", @@ -420,6 +419,7 @@ "Share expire date saved" : "تمّ حفظ تاريخ انتهاء صلاحية المشاركة", "You are not allowed to edit link shares that you don't own" : "أنت غير مسموحٍ لك بتعديل مشاركات الروابط التي لا تملكها", "_1 email address already added_::_{count} email addresses already added_" : ["{count} عنوان إيميل سبقت إضافته سلفاً","1 عنوان إيميل سبقت إضافته سلفاً","{count} عنوان إيميل سبقت إضافته سلفاً","{count} عناوين إيميل سبقت إضافتهت سلفاً","{count} عناوين إيميل سبقت إضافتها سلفاً","{count} عناوين إيميل سبقت إضافتها سلفاً"], - "_1 email address added_::_{count} email addresses added_" : ["{count} عنوان إيميل تمت إضافته","1 عنوان إيميل تمت إضافته","{count} عناوين إيميل تمت إضافتها","{count} عناوين إيميل تمت إضافتها","{count} عناوين إيميل تمت إضافتها","{count} عناوين إيميل تمت إضافتها"] + "_1 email address added_::_{count} email addresses added_" : ["{count} عنوان إيميل تمت إضافته","1 عنوان إيميل تمت إضافته","{count} عناوين إيميل تمت إضافتها","{count} عناوين إيميل تمت إضافتها","{count} عناوين إيميل تمت إضافتها","{count} عناوين إيميل تمت إضافتها"], + "Email, federated cloud id" : "بريد إلكتروني، مُعرِّف سحابة اتحاديّة" },"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/ca.js b/apps/files_sharing/l10n/ca.js index 174a1e96fa0..b2d3d998762 100644 --- a/apps/files_sharing/l10n/ca.js +++ b/apps/files_sharing/l10n/ca.js @@ -313,16 +313,15 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Utilitzeu aquest mètode per compartició de fitxers amb persones o equips de la vostra organització. Si el destinatari ja té accés a la compartició però no la pot localitzar, podeu enviar-li l'enllaç de compartició intern per accedir-hi fàcilment.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Utilitzeu aquest mètode per compartir fitxers amb persones o organitzacions fora de la vostra organització. Els fitxers i les carpetes es poden compartir mitjançant enllaços compartits públics i adreces de correu electrònic. També podeu compartir amb altres comptes de Nextcloud allotjats en diferents instàncies mitjançant el seu ID de núvol federat.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Comparticions que no formen part de comparticions internes o externes. Això pot ser compartit des d'aplicacions o d'altres fonts.", + "Share with accounts and teams" : "Comparteix amb comptes i equips", "Unable to load the shares list" : "No s'ha pogut carregar la llista d'elements compartits", "Expires {relativetime}" : "Caduca {relativetime}", "this share just expired." : "aquest element compartit acaba de caducar.", "Shared with you by {owner}" : "{owner} l'ha compartit amb vós", "Internal shares" : "Comparticions internes", "Internal shares explanation" : "Explicació de comparticions internes", - "Share with accounts and teams" : "Comparteix amb comptes i equips", "External shares" : "Comparticions externes", "External shares explanation" : "Explicació de les comparticions externes", - "Email, federated cloud id" : "Correu, identificador del núvol federat", "Additional shares" : "Comparticions addicionals", "Additional shares explanation" : "Explicació addicional de les comparticions", "Link to a file" : "Enllaç a un fitxer", @@ -422,6 +421,7 @@ OC.L10N.register( "Share expire date saved" : "S'ha desat la data de caducitat de la compartició", "You are not allowed to edit link shares that you don't own" : "No teniu permès editar els elements compartits d'enllaços dels que no sigueu propietaris", "_1 email address already added_::_{count} email addresses already added_" : ["Ja s'ha afegit 1 adreça de correu","Ja s’han afegit {count} adreces de correu"], - "_1 email address added_::_{count} email addresses added_" : ["S'ha afegit 1 adreça de correu","S’han afegit {count} adreces de correu"] + "_1 email address added_::_{count} email addresses added_" : ["S'ha afegit 1 adreça de correu","S’han afegit {count} adreces de correu"], + "Email, federated cloud id" : "Correu, identificador del núvol federat" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/ca.json b/apps/files_sharing/l10n/ca.json index 47c46ebf19d..80c01c4b562 100644 --- a/apps/files_sharing/l10n/ca.json +++ b/apps/files_sharing/l10n/ca.json @@ -311,16 +311,15 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Utilitzeu aquest mètode per compartició de fitxers amb persones o equips de la vostra organització. Si el destinatari ja té accés a la compartició però no la pot localitzar, podeu enviar-li l'enllaç de compartició intern per accedir-hi fàcilment.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Utilitzeu aquest mètode per compartir fitxers amb persones o organitzacions fora de la vostra organització. Els fitxers i les carpetes es poden compartir mitjançant enllaços compartits públics i adreces de correu electrònic. També podeu compartir amb altres comptes de Nextcloud allotjats en diferents instàncies mitjançant el seu ID de núvol federat.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Comparticions que no formen part de comparticions internes o externes. Això pot ser compartit des d'aplicacions o d'altres fonts.", + "Share with accounts and teams" : "Comparteix amb comptes i equips", "Unable to load the shares list" : "No s'ha pogut carregar la llista d'elements compartits", "Expires {relativetime}" : "Caduca {relativetime}", "this share just expired." : "aquest element compartit acaba de caducar.", "Shared with you by {owner}" : "{owner} l'ha compartit amb vós", "Internal shares" : "Comparticions internes", "Internal shares explanation" : "Explicació de comparticions internes", - "Share with accounts and teams" : "Comparteix amb comptes i equips", "External shares" : "Comparticions externes", "External shares explanation" : "Explicació de les comparticions externes", - "Email, federated cloud id" : "Correu, identificador del núvol federat", "Additional shares" : "Comparticions addicionals", "Additional shares explanation" : "Explicació addicional de les comparticions", "Link to a file" : "Enllaç a un fitxer", @@ -420,6 +419,7 @@ "Share expire date saved" : "S'ha desat la data de caducitat de la compartició", "You are not allowed to edit link shares that you don't own" : "No teniu permès editar els elements compartits d'enllaços dels que no sigueu propietaris", "_1 email address already added_::_{count} email addresses already added_" : ["Ja s'ha afegit 1 adreça de correu","Ja s’han afegit {count} adreces de correu"], - "_1 email address added_::_{count} email addresses added_" : ["S'ha afegit 1 adreça de correu","S’han afegit {count} adreces de correu"] + "_1 email address added_::_{count} email addresses added_" : ["S'ha afegit 1 adreça de correu","S’han afegit {count} adreces de correu"], + "Email, federated cloud id" : "Correu, identificador del núvol federat" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/cs.js b/apps/files_sharing/l10n/cs.js index 81a56ccd0b6..b81d24b6513 100644 --- a/apps/files_sharing/l10n/cs.js +++ b/apps/files_sharing/l10n/cs.js @@ -313,16 +313,15 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Tuto metodu použijte pro nasdílení souborů jednotlivcům nebo týmům ve vaší organizaci. Pokud příjemce už má přístup ke sdílení, ale nemůže ho nalézt, můžete mu přístup usnadnit zasláním vnitřního odkazu na sdílení.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Tuto metodu používejte pro sdílení souborů s jednotlivci nebo organizacemi vně té vaší. Soubory a složky je možné nasdílet prostřednictvím veřejných odkazů na sdílení a e-mailových adres. Je také možné nasdílet ostatním Nextcloud účtům hostovaným na různých instancích a to prostřednictvím jejich identifikátorů v rámci federovaného cloudu.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Sdílení, která nejsou součástí interních nebo externích sdílení. Toto mohou být sdílení z aplikací nebo jiných zdrojů.", + "Share with accounts and teams" : "Nasdílet účtům a týmům", "Unable to load the shares list" : "Nedaří se načíst seznam sdílení", "Expires {relativetime}" : "Platnost končí {relativetime}", "this share just expired." : "platnost tohoto sdílení právě skončila.", "Shared with you by {owner}" : "S vámi sdílí {owner}", "Internal shares" : "Vnitřní sdílení", "Internal shares explanation" : "Vysvětlení vnitřních sdílení", - "Share with accounts and teams" : "Nasdílet účtům a týmům", "External shares" : "Externí sdílení", "External shares explanation" : "Vysvětlení externích sdílení", - "Email, federated cloud id" : "E-mail, identif. federovaného cloudu", "Additional shares" : "Další sdílení", "Additional shares explanation" : "Vysvětlení dalších sdílen", "Link to a file" : "Odkaz na soubor", @@ -422,6 +421,8 @@ OC.L10N.register( "Share expire date saved" : "Datum skončení platnosti sdílení uloženo", "You are not allowed to edit link shares that you don't own" : "Nemáte oprávnění upravovat sdílení odkazem, která nevlastníte", "_1 email address already added_::_{count} email addresses already added_" : ["1 e-mailová adresa už přidána","{count} e-mailové adresy už přidány","{count} e-mailových adres už přidáno","{count} e-mailové adresy už přidány"], - "_1 email address added_::_{count} email addresses added_" : ["Jedna e-mailová adresa přidána","{count} e-mailové adresy přidány","{count} e-mailových adres přidáno","{count} e-mailové adresy přidány"] + "_1 email address added_::_{count} email addresses added_" : ["Jedna e-mailová adresa přidána","{count} e-mailové adresy přidány","{count} e-mailových adres přidáno","{count} e-mailové adresy přidány"], + "Share with accounts, teams, federated cloud id" : "Nasdílejte účtům, týmům, identifikátorům v rámci federovaného cloudu", + "Email, federated cloud id" : "E-mail, identif. federovaného cloudu" }, "nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"); diff --git a/apps/files_sharing/l10n/cs.json b/apps/files_sharing/l10n/cs.json index df979b969de..fc3d8509e17 100644 --- a/apps/files_sharing/l10n/cs.json +++ b/apps/files_sharing/l10n/cs.json @@ -311,16 +311,15 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Tuto metodu použijte pro nasdílení souborů jednotlivcům nebo týmům ve vaší organizaci. Pokud příjemce už má přístup ke sdílení, ale nemůže ho nalézt, můžete mu přístup usnadnit zasláním vnitřního odkazu na sdílení.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Tuto metodu používejte pro sdílení souborů s jednotlivci nebo organizacemi vně té vaší. Soubory a složky je možné nasdílet prostřednictvím veřejných odkazů na sdílení a e-mailových adres. Je také možné nasdílet ostatním Nextcloud účtům hostovaným na různých instancích a to prostřednictvím jejich identifikátorů v rámci federovaného cloudu.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Sdílení, která nejsou součástí interních nebo externích sdílení. Toto mohou být sdílení z aplikací nebo jiných zdrojů.", + "Share with accounts and teams" : "Nasdílet účtům a týmům", "Unable to load the shares list" : "Nedaří se načíst seznam sdílení", "Expires {relativetime}" : "Platnost končí {relativetime}", "this share just expired." : "platnost tohoto sdílení právě skončila.", "Shared with you by {owner}" : "S vámi sdílí {owner}", "Internal shares" : "Vnitřní sdílení", "Internal shares explanation" : "Vysvětlení vnitřních sdílení", - "Share with accounts and teams" : "Nasdílet účtům a týmům", "External shares" : "Externí sdílení", "External shares explanation" : "Vysvětlení externích sdílení", - "Email, federated cloud id" : "E-mail, identif. federovaného cloudu", "Additional shares" : "Další sdílení", "Additional shares explanation" : "Vysvětlení dalších sdílen", "Link to a file" : "Odkaz na soubor", @@ -420,6 +419,8 @@ "Share expire date saved" : "Datum skončení platnosti sdílení uloženo", "You are not allowed to edit link shares that you don't own" : "Nemáte oprávnění upravovat sdílení odkazem, která nevlastníte", "_1 email address already added_::_{count} email addresses already added_" : ["1 e-mailová adresa už přidána","{count} e-mailové adresy už přidány","{count} e-mailových adres už přidáno","{count} e-mailové adresy už přidány"], - "_1 email address added_::_{count} email addresses added_" : ["Jedna e-mailová adresa přidána","{count} e-mailové adresy přidány","{count} e-mailových adres přidáno","{count} e-mailové adresy přidány"] + "_1 email address added_::_{count} email addresses added_" : ["Jedna e-mailová adresa přidána","{count} e-mailové adresy přidány","{count} e-mailových adres přidáno","{count} e-mailové adresy přidány"], + "Share with accounts, teams, federated cloud id" : "Nasdílejte účtům, týmům, identifikátorům v rámci federovaného cloudu", + "Email, federated cloud id" : "E-mail, identif. federovaného cloudu" },"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/da.js b/apps/files_sharing/l10n/da.js index c2a539394b2..de52d70bb36 100644 --- a/apps/files_sharing/l10n/da.js +++ b/apps/files_sharing/l10n/da.js @@ -313,16 +313,15 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Anvend denne metode til at dele filer med brugere eller teams indenfor din organisation. Hvis modtageren allerede har adgang til delingen, men ikke kan finde det, så kan du sende det interne delingslink til dem, så de har let adgang", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Anvend denne metode til at dele filer med brugere eller organisationer udenfor din organisation. Filer og mapper kan deles via offentlige delingslinks og e-mailadresser. Du kan også dele til andre Nextcloud konti der er hostet på andre instanser ved anvendelse af sammenkoblings cloud ID.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Delinger som ikke er del af de interne eller eksterne delinger. Dette kan være delinger fra apps eller andre kilder.", + "Share with accounts and teams" : "Deling med konti og teams", "Unable to load the shares list" : "Kan ikke indlæse liste med delinger", "Expires {relativetime}" : "Udløber {relativetime}", "this share just expired." : "denne deling er netop udløbet.", "Shared with you by {owner}" : "Delt med dig {owner}", "Internal shares" : "Interne delinger", "Internal shares explanation" : "Interne delinger forklaring", - "Share with accounts and teams" : "Deling med konti og teams", "External shares" : "Eksterne delinger", "External shares explanation" : "Eksterne delinger forklaring", - "Email, federated cloud id" : "E-mail, sammenkoblings cloud id", "Additional shares" : "Yderligere delinger", "Additional shares explanation" : "Yderliger delinger forklaring", "Link to a file" : "Link til en fil", @@ -422,6 +421,7 @@ OC.L10N.register( "Share expire date saved" : "Udløbsdato for deling gemt", "You are not allowed to edit link shares that you don't own" : "Du har ikke tilladelse til at redigere link delinger som du ikke ejer", "_1 email address already added_::_{count} email addresses already added_" : ["1 e-mailadresse allerede tilføjet","{count} e-mailadresser allerede tilføjet"], - "_1 email address added_::_{count} email addresses added_" : ["1 e-mailadresse tilføjet","{count} e-mailadresser tilføjet"] + "_1 email address added_::_{count} email addresses added_" : ["1 e-mailadresse tilføjet","{count} e-mailadresser tilføjet"], + "Email, federated cloud id" : "E-mail, sammenkoblings cloud id" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/da.json b/apps/files_sharing/l10n/da.json index 3a773a16f3e..9cfd2f58530 100644 --- a/apps/files_sharing/l10n/da.json +++ b/apps/files_sharing/l10n/da.json @@ -311,16 +311,15 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Anvend denne metode til at dele filer med brugere eller teams indenfor din organisation. Hvis modtageren allerede har adgang til delingen, men ikke kan finde det, så kan du sende det interne delingslink til dem, så de har let adgang", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Anvend denne metode til at dele filer med brugere eller organisationer udenfor din organisation. Filer og mapper kan deles via offentlige delingslinks og e-mailadresser. Du kan også dele til andre Nextcloud konti der er hostet på andre instanser ved anvendelse af sammenkoblings cloud ID.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Delinger som ikke er del af de interne eller eksterne delinger. Dette kan være delinger fra apps eller andre kilder.", + "Share with accounts and teams" : "Deling med konti og teams", "Unable to load the shares list" : "Kan ikke indlæse liste med delinger", "Expires {relativetime}" : "Udløber {relativetime}", "this share just expired." : "denne deling er netop udløbet.", "Shared with you by {owner}" : "Delt med dig {owner}", "Internal shares" : "Interne delinger", "Internal shares explanation" : "Interne delinger forklaring", - "Share with accounts and teams" : "Deling med konti og teams", "External shares" : "Eksterne delinger", "External shares explanation" : "Eksterne delinger forklaring", - "Email, federated cloud id" : "E-mail, sammenkoblings cloud id", "Additional shares" : "Yderligere delinger", "Additional shares explanation" : "Yderliger delinger forklaring", "Link to a file" : "Link til en fil", @@ -420,6 +419,7 @@ "Share expire date saved" : "Udløbsdato for deling gemt", "You are not allowed to edit link shares that you don't own" : "Du har ikke tilladelse til at redigere link delinger som du ikke ejer", "_1 email address already added_::_{count} email addresses already added_" : ["1 e-mailadresse allerede tilføjet","{count} e-mailadresser allerede tilføjet"], - "_1 email address added_::_{count} email addresses added_" : ["1 e-mailadresse tilføjet","{count} e-mailadresser tilføjet"] + "_1 email address added_::_{count} email addresses added_" : ["1 e-mailadresse tilføjet","{count} e-mailadresser tilføjet"], + "Email, federated cloud id" : "E-mail, sammenkoblings cloud id" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js index 3a897c97c5c..f547ac5d350 100644 --- a/apps/files_sharing/l10n/de.js +++ b/apps/files_sharing/l10n/de.js @@ -313,16 +313,17 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Diese Methode verwenden, um Dateien für Einzelpersonen oder Teams innerhalb deiner Organisation freizugeben. Wenn der Empfangende bereits Zugriff auf die Freigabe hat, diese aber nicht finden kann, kannst du ihnen den internen Freigabelink für einen einfachen Zugriff senden.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Verwende diese Methode, um Dateien für Personen oder Organisationen außerhalb deiner Organisation freizugeben. Dateien und Ordner können über öffentliche Freigabelinks und E-Mail-Adressen freigegeben werden. Du kannst auch Dateien für andere Nextcloud-Konten freigeben, die auf verschiedenen Instanzen gehostet werden, indem du deren Federated-Cloud-ID verwenden.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Freigaben, die nicht zu internen oder externen Freigaben gehören. Dies können Freigaben von Apps oder anderen Quellen sein.", + "Share with accounts, teams, federated cloud IDs" : "Teilen mit Konten, Teams, Federated-Cloud-IDs", + "Share with accounts and teams" : "Teile mit Konten und Teams", + "Email, federated cloud ID" : "Name, Federated-Cloud-ID", "Unable to load the shares list" : "Liste der Freigaben konnte nicht geladen werden", "Expires {relativetime}" : "Läuft {relativetime} ab", "this share just expired." : "Diese Freigabe ist gerade abgelaufen.", "Shared with you by {owner}" : "{owner} hat dies mit dir geteilt", "Internal shares" : "Interne Freigaben", "Internal shares explanation" : "Erklärung interner Freigaben", - "Share with accounts and teams" : "Teile mit Konten und Teams", "External shares" : "Externe Freigaben", "External shares explanation" : "Erklärung externer Freigaben", - "Email, federated cloud id" : "Name, Federated-Cloud-ID", "Additional shares" : "Zusätzliche Freigaben", "Additional shares explanation" : "Erklärung zusätzlicher Freigaben", "Link to a file" : "Mit einer Datei verknüpfen", @@ -422,6 +423,8 @@ OC.L10N.register( "Share expire date saved" : "Freigabe-Ablaufdatum gespeichert", "You are not allowed to edit link shares that you don't own" : "Du darfst keine Linkfreigaben bearbeiten, die du nicht besitzst", "_1 email address already added_::_{count} email addresses already added_" : ["1 E-Mail-Adresse bereits hinzugefügt","{count} E-Mail-Adressen bereits hinzugefügt"], - "_1 email address added_::_{count} email addresses added_" : ["1 E-Mail-Adresse hinzugefügt","{count} E-Mail-Adressen hinzugefügt"] + "_1 email address added_::_{count} email addresses added_" : ["1 E-Mail-Adresse hinzugefügt","{count} E-Mail-Adressen hinzugefügt"], + "Share with accounts, teams, federated cloud id" : "Teilen mit Konten, Teams, Federated-Cloud-IDs", + "Email, federated cloud id" : "Name, Federated-Cloud-ID" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json index 4dc0f6a273b..ec1399b28fa 100644 --- a/apps/files_sharing/l10n/de.json +++ b/apps/files_sharing/l10n/de.json @@ -311,16 +311,17 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Diese Methode verwenden, um Dateien für Einzelpersonen oder Teams innerhalb deiner Organisation freizugeben. Wenn der Empfangende bereits Zugriff auf die Freigabe hat, diese aber nicht finden kann, kannst du ihnen den internen Freigabelink für einen einfachen Zugriff senden.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Verwende diese Methode, um Dateien für Personen oder Organisationen außerhalb deiner Organisation freizugeben. Dateien und Ordner können über öffentliche Freigabelinks und E-Mail-Adressen freigegeben werden. Du kannst auch Dateien für andere Nextcloud-Konten freigeben, die auf verschiedenen Instanzen gehostet werden, indem du deren Federated-Cloud-ID verwenden.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Freigaben, die nicht zu internen oder externen Freigaben gehören. Dies können Freigaben von Apps oder anderen Quellen sein.", + "Share with accounts, teams, federated cloud IDs" : "Teilen mit Konten, Teams, Federated-Cloud-IDs", + "Share with accounts and teams" : "Teile mit Konten und Teams", + "Email, federated cloud ID" : "Name, Federated-Cloud-ID", "Unable to load the shares list" : "Liste der Freigaben konnte nicht geladen werden", "Expires {relativetime}" : "Läuft {relativetime} ab", "this share just expired." : "Diese Freigabe ist gerade abgelaufen.", "Shared with you by {owner}" : "{owner} hat dies mit dir geteilt", "Internal shares" : "Interne Freigaben", "Internal shares explanation" : "Erklärung interner Freigaben", - "Share with accounts and teams" : "Teile mit Konten und Teams", "External shares" : "Externe Freigaben", "External shares explanation" : "Erklärung externer Freigaben", - "Email, federated cloud id" : "Name, Federated-Cloud-ID", "Additional shares" : "Zusätzliche Freigaben", "Additional shares explanation" : "Erklärung zusätzlicher Freigaben", "Link to a file" : "Mit einer Datei verknüpfen", @@ -420,6 +421,8 @@ "Share expire date saved" : "Freigabe-Ablaufdatum gespeichert", "You are not allowed to edit link shares that you don't own" : "Du darfst keine Linkfreigaben bearbeiten, die du nicht besitzst", "_1 email address already added_::_{count} email addresses already added_" : ["1 E-Mail-Adresse bereits hinzugefügt","{count} E-Mail-Adressen bereits hinzugefügt"], - "_1 email address added_::_{count} email addresses added_" : ["1 E-Mail-Adresse hinzugefügt","{count} E-Mail-Adressen hinzugefügt"] + "_1 email address added_::_{count} email addresses added_" : ["1 E-Mail-Adresse hinzugefügt","{count} E-Mail-Adressen hinzugefügt"], + "Share with accounts, teams, federated cloud id" : "Teilen mit Konten, Teams, Federated-Cloud-IDs", + "Email, federated cloud id" : "Name, Federated-Cloud-ID" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js index dcf87c7df98..b8928cb36b9 100644 --- a/apps/files_sharing/l10n/de_DE.js +++ b/apps/files_sharing/l10n/de_DE.js @@ -313,16 +313,17 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Diese Methode verwenden, um Dateien für Einzelpersonen oder Teams innerhalb Ihrer Organisation freizugeben. Wenn der Empfänger bereits Zugriff auf die Freigabe hat, diese aber nicht finden kann, können Sie ihm den internen Freigabelink für einen einfachen Zugriff senden.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Verwenden Sie diese Methode, um Dateien für Personen oder Organisationen außerhalb Ihrer Organisation freizugeben. Dateien und Ordner können über öffentliche Freigabelinks und E-Mail-Adressen freigegeben werden. Sie können auch Dateien für andere Nextcloud-Konten freigeben, die auf verschiedenen Instanzen gehostet werden, indem Sie deren Federated-Cloud-ID verwenden.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Freigaben, die nicht zu internen oder externen Freigaben gehören. Dies können Freigaben von Apps oder anderen Quellen sein.", + "Share with accounts, teams, federated cloud IDs" : "Teilen mit Konten, Teams, Federated-Cloud-IDs", + "Share with accounts and teams" : "Teile mit Konten und Teams", + "Email, federated cloud ID" : "Name, Federated-Cloud-ID", "Unable to load the shares list" : "Liste der Freigaben kann nicht geladen werden", "Expires {relativetime}" : "Läuft {relativetime} ab", "this share just expired." : "Diese Freigabe ist gerade abgelaufen.", "Shared with you by {owner}" : "{owner} hat diese mit Ihnen geteilt", "Internal shares" : "Interne Freigaben", "Internal shares explanation" : "Erklärung interner Freigaben", - "Share with accounts and teams" : "Teile mit Konten und Teams", "External shares" : "Externe Freigaben", "External shares explanation" : "Erklärung externer Freigaben", - "Email, federated cloud id" : "Name, Federated-Cloud-ID", "Additional shares" : "Zusätzliche Freigaben", "Additional shares explanation" : "Erklärung zusätzlicher Freigaben", "Link to a file" : "Mit einer Datei verknüpfen", @@ -422,6 +423,8 @@ OC.L10N.register( "Share expire date saved" : "Freigabe-Ablaufdatum gespeichert", "You are not allowed to edit link shares that you don't own" : "Sie dürfen keine Linkfreigaben bearbeiten, die Sie nicht besitzen", "_1 email address already added_::_{count} email addresses already added_" : ["1 E-Mail-Adresse bereits hinzugefügt","{count} E-Mail-Adressen bereits hinzugefügt"], - "_1 email address added_::_{count} email addresses added_" : ["1 E-Mail-Adresse hinzugefügt","{count} E-Mail-Adressen hinzugefügt"] + "_1 email address added_::_{count} email addresses added_" : ["1 E-Mail-Adresse hinzugefügt","{count} E-Mail-Adressen hinzugefügt"], + "Share with accounts, teams, federated cloud id" : "Teilen mit Konten, Teams, Federated-Cloud-IDs", + "Email, federated cloud id" : "Name, Federated-Cloud-ID" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json index b918effcbd8..1a2c0380c70 100644 --- a/apps/files_sharing/l10n/de_DE.json +++ b/apps/files_sharing/l10n/de_DE.json @@ -311,16 +311,17 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Diese Methode verwenden, um Dateien für Einzelpersonen oder Teams innerhalb Ihrer Organisation freizugeben. Wenn der Empfänger bereits Zugriff auf die Freigabe hat, diese aber nicht finden kann, können Sie ihm den internen Freigabelink für einen einfachen Zugriff senden.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Verwenden Sie diese Methode, um Dateien für Personen oder Organisationen außerhalb Ihrer Organisation freizugeben. Dateien und Ordner können über öffentliche Freigabelinks und E-Mail-Adressen freigegeben werden. Sie können auch Dateien für andere Nextcloud-Konten freigeben, die auf verschiedenen Instanzen gehostet werden, indem Sie deren Federated-Cloud-ID verwenden.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Freigaben, die nicht zu internen oder externen Freigaben gehören. Dies können Freigaben von Apps oder anderen Quellen sein.", + "Share with accounts, teams, federated cloud IDs" : "Teilen mit Konten, Teams, Federated-Cloud-IDs", + "Share with accounts and teams" : "Teile mit Konten und Teams", + "Email, federated cloud ID" : "Name, Federated-Cloud-ID", "Unable to load the shares list" : "Liste der Freigaben kann nicht geladen werden", "Expires {relativetime}" : "Läuft {relativetime} ab", "this share just expired." : "Diese Freigabe ist gerade abgelaufen.", "Shared with you by {owner}" : "{owner} hat diese mit Ihnen geteilt", "Internal shares" : "Interne Freigaben", "Internal shares explanation" : "Erklärung interner Freigaben", - "Share with accounts and teams" : "Teile mit Konten und Teams", "External shares" : "Externe Freigaben", "External shares explanation" : "Erklärung externer Freigaben", - "Email, federated cloud id" : "Name, Federated-Cloud-ID", "Additional shares" : "Zusätzliche Freigaben", "Additional shares explanation" : "Erklärung zusätzlicher Freigaben", "Link to a file" : "Mit einer Datei verknüpfen", @@ -420,6 +421,8 @@ "Share expire date saved" : "Freigabe-Ablaufdatum gespeichert", "You are not allowed to edit link shares that you don't own" : "Sie dürfen keine Linkfreigaben bearbeiten, die Sie nicht besitzen", "_1 email address already added_::_{count} email addresses already added_" : ["1 E-Mail-Adresse bereits hinzugefügt","{count} E-Mail-Adressen bereits hinzugefügt"], - "_1 email address added_::_{count} email addresses added_" : ["1 E-Mail-Adresse hinzugefügt","{count} E-Mail-Adressen hinzugefügt"] + "_1 email address added_::_{count} email addresses added_" : ["1 E-Mail-Adresse hinzugefügt","{count} E-Mail-Adressen hinzugefügt"], + "Share with accounts, teams, federated cloud id" : "Teilen mit Konten, Teams, Federated-Cloud-IDs", + "Email, federated cloud id" : "Name, Federated-Cloud-ID" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/en_GB.js b/apps/files_sharing/l10n/en_GB.js index 8173311cd51..bc251e25b28 100644 --- a/apps/files_sharing/l10n/en_GB.js +++ b/apps/files_sharing/l10n/en_GB.js @@ -313,16 +313,17 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Shares that are not part of the internal or external shares. This can be shares from apps or other sources.", + "Share with accounts, teams, federated cloud IDs" : "Share with accounts, teams, federated cloud IDs", + "Share with accounts and teams" : "Share with accounts and teams", + "Email, federated cloud ID" : "Email, federated cloud ID", "Unable to load the shares list" : "Unable to load the shares list", "Expires {relativetime}" : "Expires {relativetime}", "this share just expired." : "this share just expired.", "Shared with you by {owner}" : "Shared with you by {owner}", "Internal shares" : "Internal shares", "Internal shares explanation" : "Internal shares explanation", - "Share with accounts and teams" : "Share with accounts and teams", "External shares" : "External shares", "External shares explanation" : "External shares explanation", - "Email, federated cloud id" : "Email, federated cloud id", "Additional shares" : "Additional shares", "Additional shares explanation" : "Additional shares explanation", "Link to a file" : "Link to a file", @@ -422,6 +423,8 @@ OC.L10N.register( "Share expire date saved" : "Share expire date saved", "You are not allowed to edit link shares that you don't own" : "You are not allowed to edit link shares that you don't own", "_1 email address already added_::_{count} email addresses already added_" : ["1 email address already added","{count} email addresses already added"], - "_1 email address added_::_{count} email addresses added_" : ["1 email address added","{count} email addresses added"] + "_1 email address added_::_{count} email addresses added_" : ["1 email address added","{count} email addresses added"], + "Share with accounts, teams, federated cloud id" : "Share with accounts, teams, federated cloud id", + "Email, federated cloud id" : "Email, federated cloud id" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/en_GB.json b/apps/files_sharing/l10n/en_GB.json index b2cab53805c..5c90c9dd3a4 100644 --- a/apps/files_sharing/l10n/en_GB.json +++ b/apps/files_sharing/l10n/en_GB.json @@ -311,16 +311,17 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Shares that are not part of the internal or external shares. This can be shares from apps or other sources.", + "Share with accounts, teams, federated cloud IDs" : "Share with accounts, teams, federated cloud IDs", + "Share with accounts and teams" : "Share with accounts and teams", + "Email, federated cloud ID" : "Email, federated cloud ID", "Unable to load the shares list" : "Unable to load the shares list", "Expires {relativetime}" : "Expires {relativetime}", "this share just expired." : "this share just expired.", "Shared with you by {owner}" : "Shared with you by {owner}", "Internal shares" : "Internal shares", "Internal shares explanation" : "Internal shares explanation", - "Share with accounts and teams" : "Share with accounts and teams", "External shares" : "External shares", "External shares explanation" : "External shares explanation", - "Email, federated cloud id" : "Email, federated cloud id", "Additional shares" : "Additional shares", "Additional shares explanation" : "Additional shares explanation", "Link to a file" : "Link to a file", @@ -420,6 +421,8 @@ "Share expire date saved" : "Share expire date saved", "You are not allowed to edit link shares that you don't own" : "You are not allowed to edit link shares that you don't own", "_1 email address already added_::_{count} email addresses already added_" : ["1 email address already added","{count} email addresses already added"], - "_1 email address added_::_{count} email addresses added_" : ["1 email address added","{count} email addresses added"] + "_1 email address added_::_{count} email addresses added_" : ["1 email address added","{count} email addresses added"], + "Share with accounts, teams, federated cloud id" : "Share with accounts, teams, federated cloud id", + "Email, federated cloud id" : "Email, federated cloud id" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js index be4cd272423..11c78e8daf2 100644 --- a/apps/files_sharing/l10n/es.js +++ b/apps/files_sharing/l10n/es.js @@ -313,16 +313,15 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Utiliza este método para compartir archivos con individuos o equipos dentro de tu organización. Si el destinatario ya tiene acceso pero no puede encontrarlos, puedes enviarle este enlace interno para facilitarle el acceso.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Usa este método para compartir archivos con individuos u organizaciones externas a tu organización. Los archivos y carpetas pueden ser compartidos mediante enlaces públicos y por correo. También puedes compartir con otras cuentas de Nextcloud alojadas en otras instancias utilizando su ID de nube federada.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Recursos compartidos que no son internos o externos. Pueden estar compartidos desde aplicaciones u otras fuentes.", + "Share with accounts and teams" : "Compartir con cuentas y equipos", "Unable to load the shares list" : "No se pudo cargar la lista de recursos compartidos", "Expires {relativetime}" : "Caduca en {relativetime}", "this share just expired." : "este recurso compartido acaba de caducar.", "Shared with you by {owner}" : "Compartido contigo por {owner}", "Internal shares" : "Compartir internamente", "Internal shares explanation" : "Compartir internamente explicado", - "Share with accounts and teams" : "Compartir con cuentas y equipos", "External shares" : "Compartir con el exterior", "External shares explanation" : "Compartir con el exterior explicado", - "Email, federated cloud id" : "Email, ID de nube federada", "Additional shares" : "Otras formas de compartir", "Additional shares explanation" : "Otras formas de compartir explicadas", "Link to a file" : "Enlace al archivo", @@ -422,6 +421,8 @@ OC.L10N.register( "Share expire date saved" : "Fecha de caducidad del recurso compartido guardada", "You are not allowed to edit link shares that you don't own" : "No tiene permitido editar los enlaces compartidos que no le pertenecen", "_1 email address already added_::_{count} email addresses already added_" : ["Ya se ha añadido 1 dirección de correo electrónico","Ya se han añadido {count} direcciones de correo electrónico","Ya se han añadido {count} direcciones de correo electrónico"], - "_1 email address added_::_{count} email addresses added_" : ["Se ha añadido una dirección de correo","Se han añadido {count} direcciones de correo","Se han añadido {count} direcciones de correo"] + "_1 email address added_::_{count} email addresses added_" : ["Se ha añadido una dirección de correo","Se han añadido {count} direcciones de correo","Se han añadido {count} direcciones de correo"], + "Share with accounts, teams, federated cloud id" : "Comparta con cuentas, equipos, id de nube federada", + "Email, federated cloud id" : "Email, ID de nube federada" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json index 6b4ded82049..b04f7a769ad 100644 --- a/apps/files_sharing/l10n/es.json +++ b/apps/files_sharing/l10n/es.json @@ -311,16 +311,15 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Utiliza este método para compartir archivos con individuos o equipos dentro de tu organización. Si el destinatario ya tiene acceso pero no puede encontrarlos, puedes enviarle este enlace interno para facilitarle el acceso.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Usa este método para compartir archivos con individuos u organizaciones externas a tu organización. Los archivos y carpetas pueden ser compartidos mediante enlaces públicos y por correo. También puedes compartir con otras cuentas de Nextcloud alojadas en otras instancias utilizando su ID de nube federada.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Recursos compartidos que no son internos o externos. Pueden estar compartidos desde aplicaciones u otras fuentes.", + "Share with accounts and teams" : "Compartir con cuentas y equipos", "Unable to load the shares list" : "No se pudo cargar la lista de recursos compartidos", "Expires {relativetime}" : "Caduca en {relativetime}", "this share just expired." : "este recurso compartido acaba de caducar.", "Shared with you by {owner}" : "Compartido contigo por {owner}", "Internal shares" : "Compartir internamente", "Internal shares explanation" : "Compartir internamente explicado", - "Share with accounts and teams" : "Compartir con cuentas y equipos", "External shares" : "Compartir con el exterior", "External shares explanation" : "Compartir con el exterior explicado", - "Email, federated cloud id" : "Email, ID de nube federada", "Additional shares" : "Otras formas de compartir", "Additional shares explanation" : "Otras formas de compartir explicadas", "Link to a file" : "Enlace al archivo", @@ -420,6 +419,8 @@ "Share expire date saved" : "Fecha de caducidad del recurso compartido guardada", "You are not allowed to edit link shares that you don't own" : "No tiene permitido editar los enlaces compartidos que no le pertenecen", "_1 email address already added_::_{count} email addresses already added_" : ["Ya se ha añadido 1 dirección de correo electrónico","Ya se han añadido {count} direcciones de correo electrónico","Ya se han añadido {count} direcciones de correo electrónico"], - "_1 email address added_::_{count} email addresses added_" : ["Se ha añadido una dirección de correo","Se han añadido {count} direcciones de correo","Se han añadido {count} direcciones de correo"] + "_1 email address added_::_{count} email addresses added_" : ["Se ha añadido una dirección de correo","Se han añadido {count} direcciones de correo","Se han añadido {count} direcciones de correo"], + "Share with accounts, teams, federated cloud id" : "Comparta con cuentas, equipos, id de nube federada", + "Email, federated cloud id" : "Email, ID de nube federada" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/et_EE.js b/apps/files_sharing/l10n/et_EE.js index be6e39964a3..4936e43efc1 100644 --- a/apps/files_sharing/l10n/et_EE.js +++ b/apps/files_sharing/l10n/et_EE.js @@ -15,6 +15,7 @@ OC.L10N.register( "You removed group {group} from {file}" : "Sa eemaldasid grupi {group} faili {file} jagamisest", "{actor} shared {file} with group {group}" : "{actor} jagas faili {file} grupiga {group}", "{actor} removed group {group} from {file}" : "{actor} eemaldas grupi {group} faili {file} jagamisest", + "Share for file {file} with group {group} expired" : "Grupile „{group}“ mõeldud jagatud fail „{file}“ aegus", "Shared as public link" : "Jaga avaliku lingina", "Removed public link" : "Avalik link on eemaldatud", "Public link expired" : "Avalik link aegus", @@ -41,43 +42,72 @@ OC.L10N.register( "{actor} removed share for {user}" : "{actor} eemaldas jagamise kasutajaga {user}", "Shared by {actor}" : "Jagatud kasutajalt {actor}", "{actor} removed share" : "{actor} eemaldas jagamise", + "Share for {user} expired" : "Kasutajale „{user}“ mõeldud jaosmeedia aegus", "Share expired" : "Jagamine aegus", "You shared {file} with {user}" : "Sa jagasid {file} kasutajaga {user}", "You removed {user} from {file}" : "Sa eemaldasid faili {file} jagamise kasutajaga {user} ", + "You removed yourself from {file}" : "Sa eemaldasid end „{file}“ failist", + "{actor} removed themselves from {file}" : "„{actor}“ eemaldas end „{file}“ failist", "{actor} shared {file} with {user}" : "{actor} jagas {file} kasutajaga {user}", "{actor} removed {user} from {file}" : "{actor} eemaldas {user} jagamise faililt {file}", "{actor} shared {file} with you" : "{actor} jagas sinuga {file}", "{actor} removed you from the share named {file}" : "{actor} lõpetas sinuga {file} jagamise", + "Share for file {file} with {user} expired" : "Kasutajale „{user}“ mõeldud jagatud fail „{file}“ aegus", + "Share for file {file} expired" : "„{file}“ faili jagamine aegus", "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Fail või kaust mis on jagatud e-posti või avaliku lingiga <strong>laaditi alla</strong>", + "Files have been <strong>uploaded</strong> to a folder shared by mail or by public link" : "Failid on <strong>laaditud üles</strong> kausta, mida on jagatud e-posti või avaliku lingiga", "A file or folder was shared from <strong>another server</strong>" : "Fail või kaust jagati <strong>teisest serverist</strong>", "Sharing" : "Jagamine", "A file or folder has been <strong>shared</strong>" : "Fail või kaust on <strong>jagatud</strong>", "Shared link" : "Jagatud link", + "Wrong share ID, share does not exist" : "Jaosmedia vigane tunnus - sellist pole olemas", "Could not delete share" : "Ei saanud jagamist eemaldada", "Please specify a file or folder path" : "Palun määra faili või kausta rada", "Wrong path, file/folder does not exist" : "Vale asukoht faili või kausta pole olemas", "Could not create share" : "Ei saanud jagamist luua", + "Please specify a valid account to share with" : "Palun määra korrektne kasutajakonto, kellega soovid jagada", "Group sharing is disabled by the administrator" : "Grupiga jagamine on administraatori poolt keelatud", "Please specify a valid group" : "Palun määra kehtiv grupp", "Public link sharing is disabled by the administrator" : "Avaliku lingiga jagamine on administraatori poolt keelatud", + "Please specify a valid email address" : "Palun määra kehtiv e-posti aadress", + "Sharing %s sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "Kuna Nextcloud Talk pole serverisse paigaldatud, siis ei saanud selle teenuse abil ka „%s“ jaosmeedia salasõna jagada", + "Sharing %1$s failed because the back end does not allow shares from type %2$s" : "„%1$s“ jagamine ei õnnestunud, sest server ei luba „%2$s“ tüüpi jagamisi", + "Please specify a valid federated account ID" : "Palun määra korrektne kasutaja liitpilves, kellega soovid jagada", + "Please specify a valid federated group ID" : "Palun määra korrektne grupp liitpilves, kellega soovid jagada", "You cannot share to a Team if the app is not enabled" : "Sa ei saa jagada tiimiga, kui see rakendus pole lubatud", "Please specify a valid team" : "Palun määratle korrektne tiim", + "Sharing %s failed because the back end does not support room shares" : "„%s“ jagamine ei õnnestunud, sest taustateenus ei toeta jututubadesse jagamist", + "Sharing %s failed because the back end does not support ScienceMesh shares" : "„%s“ jagamine ei õnnestunud, sest taustateenus ei toeta ScienceMeshi meedia jagamist", "Unknown share type" : "Tundmatu jagamise tüüp", "Not a directory" : "Ei ole kaust", + "Could not lock node" : "Sõlme ei õnnestunud lukustada", "Public upload is only possible for publicly shared folders" : "Avalik üleslaadminie on võimalik ainult avalikult jagatud kaustades", "Share must at least have READ or CREATE permissions" : "jaosmeedial peavad olema vähemalt logemis- ja loomisõigused", "Public upload disabled by the administrator" : "Avalik üleslaadimine on administraatori poolt keelatud", "Could not lock path" : "Ei saanud rada lukustada", + "no sharing rights on this item" : "selle objekti kontekstis pole jagamisõigusi", + "You are not allowed to edit incoming shares" : "Sul pole lubatud vastuvõetud jaosmeediat muuta", "Wrong or no update parameter given" : "Antud vale või aegunud parameeter", + "\"Sending the password by Nextcloud Talk\" for sharing a file or folder failed because Nextcloud Talk is not enabled." : "Kuna Nextcloud Talk pole serverisse paigaldatud, siis ei saanud selle teenuse abil ka jaosmeedia salasõna jagada", + "Invalid date. Format must be YYYY-MM-DD" : "Vigane kuupäev, vorming peab olema YYYY-MM-DD", + "No sharing rights on this item" : "Selle objekti kontekstis pole jagamisõigusi", + "Invalid share attributes provided: \"%s\"" : "Vigased jagamisatribuudid: „%s“", + "You are not allowed to send mail notifications" : "Sul pole lubatud e-postiga teavitusi saata", + "No mail notification configured for this share type" : "Selle jagamistüübi kohta pole e-posti teel saadetavat teavitust lisatud", "Wrong password" : "Vale salasõna", + "Error while sending mail notification" : "Viga e-postiga teavituse saatmisel", "Failed to generate a unique token" : "Ei õnnestunud luua unikaalset tunnusluba", "This share does not exist or is no longer available" : "See jaosmeedia pole enam olemas või saadaval", "shared by %s" : "jagas %s", "Download" : "Laadi alla", + "Add to your %s" : "Lisa oma teenusesse: %s", "Direct link" : "Otsene link", "Share API is disabled" : "Jagamise API on keelatud", "File sharing" : "Faide jagamine", "Share will expire tomorrow" : "Jagamine aegub homme", + "Your share of {node} will expire tomorrow" : "Sinu „{node}“ jaosmeedia aegub homme", + "You received {share} as a share by {user}" : "Kasutaja „{user}“ on saatnud sulle „{share}“ jaosmeedia", + "You received {share} to group {group} as a share by {user}" : "Kasutaja „{user}“ on saatnud „{group}“ grupile „{share}“ jaosmeedia", "Accept" : "Nõustu", "Decline" : "Keeldu", "Remember to upload the files to %s" : "Ära unusta laadida faile kausta %s", @@ -85,27 +115,51 @@ OC.L10N.register( "Open \"%s\"" : "Ava „%s“", "People" : "Inimesed", "Filter accounts" : "Filtreeri kasutajakontosid", + "The request will expire on {date} at midnight and will be password protected." : "Päring aegub {date} keskööl ning on kaitstud salasõnaga.", + "The request will expire on {date} at midnight." : "Päring aegub {date} keskööl.", + "The request will be password protected." : "Päring on kaitstud salasõnaga.", + "When should the request expire?" : "Millal peaks see päring aeguma?", + "Set a submission expiration date" : "Määra aegumise kuupäev", "Expiration date" : "Aegumise kuupäev", "Select a date" : "Vali kuupäev", + "Your administrator has enforced a {count} days expiration policy." : "Sinu serveri peakasutaja on kehtestanud {count}-päevase aegumisreegli.", + "What password should be used for the request?" : "Mis salasõna peaks selle päringu puhul kasutama?", "Set a password" : "Lisa salasõna", "Password" : "Salasõna", "Enter a valid password" : "Sisesta korrektne salasõna", "Generate a new password" : "Loo uus salasõna", + "Your administrator has enforced a password protection." : "Sinu serveri peakasutaja on kehtestanud salasõna kasutamise reegli.", + "Automatically copying failed, please copy the share link manually" : "Automaatne kopeerimine ei toimi, palun kopeeri jagamislink käsitsi", "Link copied to clipboard" : "Link on lõikelauale kopeeritud", "Email already added" : "E-posti aadress on juba lisatud", "Invalid email address" : "Vigane e-posti aadress", + "_The following email address is not valid: {emails}_::_The following email addresses are not valid: {emails}_" : ["Järgnev e-posti aadress pole korrektne: {emails}","Järgnevad e-posti aadressid pole korrektsed: {emails}"], "_{count} email address already added_::_{count} email addresses already added_" : ["{count} e-posti aadress on juba lisatud","{count} e-posti aadressi on juba lisatud"], "_{count} email address added_::_{count} email addresses added_" : ["{count} e-posti aadress on lisatud","{count} e-posti aadressi on lisatud"], + "You can now share the link below to allow people to upload files to your directory." : "Nüüd saad teistega jagada alltoodud linki ning neil on võimalik faile sinu kausta üles laadida.", "Share link" : "Jaga link", "Copy to clipboard" : "Kopeeri lõikepuhvrisse", "Send link via email" : "Saada link e-kirjaga", + "Enter an email address or paste a list" : "Sisesta e-posti aadress või lisa loend", + "Remove email" : "Eemalda e-posti aadress", + "Select a destination" : "Vali sihtkaust", "Select" : "Vali", + "What are you requesting?" : "Missugust faili soovid saada?", + "Request subject" : "Päringu teema", + "Birthday party photos, History assignment…" : "Sünnipäevapeo fotod, uurimistöö…", + "Where should these files go?" : "Kuhu peaksid need failid sattuma?", + "Upload destination" : "Üleslaadimise sihtkaust", + "Revert to default" : "Kasuta vaikimisi kausta", + "The uploaded files are visible only to you unless you choose to share them." : "Kui sa just neid edasi ei jaga, siis on üleslaaditud failid nähtavad vaid sulle.", "Add a note" : "Lisa märge", "Note for recipient" : "Märge saajale", - "Add a note to help people understand what you are requesting." : "Lisa teise osapoole jaoks märge, mis aitab neil mõista, missugust faili sa temalt soovid.", + "Add a note to help people understand what you are requesting." : "Lisa teise osapoole jaoks märge, mis aitab tal mõista, missugust faili sa temalt soovid.", + "You can add links, date or any other information that will help the recipient understand what you are requesting." : "Lisa teise osapoole jaoks linke, kuupäevi või muud teavet, mis aitab tal mõista, missugust faili sa temalt soovid.", "Close" : "Sulge", "_Send email and close_::_Send {count} emails and close_" : ["Saada e-kiri ja sulge","Saada {count} e-kirja ja sulge"], "Please select a folder, you cannot share the root directory." : "Palun vali kaust ülaltpool - sa ei saa jagada juurkausta.", + "File request created" : "Failipäring on loodud", + "_File request created and email sent_::_File request created and {count} emails sent_" : ["Failipäring on loodud ja e-kiri on saadetud","Failipäring on loodud ja {count} e-kirja on saadetud"], "Error creating the share: {errorMessage}" : "Viga jaosmeedia loomisel: {errorMessage}", "Error creating the share" : "Viga jaosmeedia loomisel", "Error sending emails: {errorMessage}" : "Viga e-kirjade saatmisel: {errorMessage}", @@ -120,6 +174,7 @@ OC.L10N.register( "Close without sending emails" : "Sulge ilma e-kirju saatmata", "Continue" : "Jätka", "Error while toggling options" : "Viga valikute sisse/välja lülitamisel", + "Accept shares from other accounts and groups by default" : "Aktsepteeri vaikimisi muude kasutajakontode ja rühmade jagamisi automaatselt", "Choose a default folder for accepted shares" : "Vali vaikimisi kaust jaosmeedia vastuvõtmiseks", "Invalid path selected" : "Vigane asukoht on valitud", "Unknown error" : "Tundmatu viga", @@ -134,8 +189,12 @@ OC.L10N.register( "remote group" : "Kauggrupp", "guest" : "külaline", "by {initiator}" : "kasutajalt {initiator}", + "Shared with the group {user} by {owner}" : "„{owner}“ jagas seda sinuga ja „{user}“ grupiga", + "Shared with the conversation {user} by {owner}" : "„{owner}“ jagas seda vestluses „{user}“ grupiga või kasutajaga", + "Shared with {user} by {owner}" : "„{owner}“ jagas seda „{user}“ kasutajaga", "Open Sharing Details" : "Ava jaosmeedia üksikasjad", "Added by {initiator}" : "Selle lisas {initiator}", + "Via “{folder}”" : "„{folder}“ kausta kaudu", "Unshare" : "Lõpeta jagamine", "Cannot copy, please copy the link manually" : "Ei saa kopeerida, palun kopeeri link käsitsi", "Copy internal link to clipboard" : "Kopeeri sisemine link lõikelauale", @@ -143,10 +202,20 @@ OC.L10N.register( "Only works for people with access to this file" : "Toimib vaid kasutajate puhul, kellel on ligipääs sellele failile", "Link copied" : "Link kopeeritud", "Internal link" : "Sisemine link", + "{shareWith} by {initiator}" : "{shareWith} kasutajalt {initiator}", + "Shared via link by {initiator}" : "„{initiator}“ jagas seda lingiga", + "File request ({label})" : "Failipäring ({label})", + "Mail share ({label})" : "Jagamine e-kirjaga ({label})", "Share link ({label})" : "Jagamise link ({label})", + "Mail share" : "E-posti jagamine", "Share link ({index})" : "Jagamise link ({index})", "Create public link" : "Loo avalik link", + "Actions for \"{title}\"" : "„{title}“ tegevused", + "Copy public link of \"{title}\" to clipboard" : "Kopeeri „{title}“ avalik link lõikelauale", + "Error, please enter proper password and/or expiration date" : "Viga, palun sisesta korrektne salasõna ja/või aegumise kuupäev", + "Link share created" : "Lingi jagamine on loodud", "Error while creating the share" : "Viga jaosmeedia loomisel", + "Please enter the following required information before creating the share" : "Enne jaosmeedia loomist palun sisesta järgmine vajalik teave", "Password protection (enforced)" : "Paroolikaitse (jõustatud)", "Password protection" : "Password protection", "Enter a password" : "Enter a password", @@ -159,17 +228,23 @@ OC.L10N.register( "Generate QR code" : "Loo QR-kood", "Add another link" : "Lisa veel üks link", "Create a new share link" : "Loo uus jagamislink", + "Quick share options, the current selected is \"{selectedOption}\"" : "Kiirjagamise valikud, hetkel on valitud „{selectedOption}“", "View only" : "Ainult vaatamine", "Can edit" : "Võib redigeerida", + "Custom permissions" : "Kohandatud õigused", "Resharing is not allowed" : "Edasijagamine pole lubatud", "Name or email …" : "Nimi või e-posti aadress…", "Name, email, or Federated Cloud ID …" : "Nimi, e-posti aadress või liitpilve kasutajatunnus…", - "Searching …" : "Otsin ...", + "Searching …" : "Otsin...", + "No elements found." : "Elemente ei leidu.", + "Search globally" : "Otsi kõikjalt", "Guest" : "Külaline", "Group" : "Grupp", "Email" : "Epost", "Team" : "Tiim", "Talk conversation" : "Talk suhtlus", + "Deck board" : "Kanbani tahvel", + "ScienceMesh" : "ScienceMesh", "on {server}" : " {server}", "Enter external recipients" : "Lisa välised saajad", "Search for internal recipients" : "Otsi rakendusesiseseid saajaid", @@ -181,7 +256,9 @@ OC.L10N.register( "View terms of service" : "Vaata kasutustingimusi", "Terms of service" : "Kasutustingimused", "Upload files to {folder}" : "Laadi failid üles kausta {folder}", + "Submit name" : "Salvesta nimi", "{ownerDisplayName} shared a folder with you." : "{ownerDisplayName} jagas sinuga kausta.", + "To upload files, you need to provide your name first." : "Faili üleslaadimiseks pead esmalt oma nime sisestama.", "Name" : "Nimi", "Enter your name" : "Sisesta oma nimi", "Share with {userName}" : "Jaga kasutajaga {userName}", @@ -195,7 +272,7 @@ OC.L10N.register( "Save share" : "Salvesta jaosmeedia", "Read" : "Lugemine", "Create" : "Lisa", - "Edit" : "Redigeeri", + "Edit" : "Muuda", "Share" : "Jaga", "Delete" : "Kustuta", "Password field cannot be empty" : "Salasõna väli ei saa olla tühi", @@ -212,6 +289,7 @@ OC.L10N.register( "Set password" : "Määra salasõna", "Password expires {passwordExpirationTime}" : "Salasõna aegub {passwordExpirationTime}", "Password expired" : "Salasõna on aegunud", + "Video verification" : "Verifitseerimine videoga", "Expiration date (enforced)" : "Aegumise kuupäev (jõustatud)", "Set expiration date" : "Määra aegumise kuupäev", "Hide download" : "Peida allalaaditu", @@ -220,25 +298,38 @@ OC.L10N.register( "Enter a note for the share recipient" : "Lisa märkus jaosmeedia saajale", "Show files in grid view" : "Näita faile ruudustikuvaates", "Delete share" : "Kustuta jagamine", + "Others with access" : "Teised, kellel on ligipääs", + "No other accounts with access found" : "Teisi ligipääsuga kasutajakontosid ei leidu", + "Toggle list of others with access to this directory" : "Näita teisi, kellele on ligipääs sellele kaustale või peida nad", + "Toggle list of others with access to this file" : "Näita teisi, kellele on ligipääs sellele failile või peida nad", + "Unable to fetch inherited shares" : "Päritud jaosmeedia laadimine ei õnnestu", "Link shares" : "Jaoslingid", "Shares" : "Jagamisi", + "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Kasuta seda jagamismeetodit jagamisel oma organisatsiooni kasutajatega ja tiimidega. Kui kasutajal juba on jaosmeediale ligipääs, kuid ei suuad seda leida, siis lihtsuse mõttes saada talle süsteemisisene jagamislink.", + "Share with accounts, teams, federated cloud IDs" : "Jaga kasutajatega, tiimidega ja liitpilves osalejatega", + "Share with accounts and teams" : "Jaga kasutajate ja tiimidega", + "Email, federated cloud ID" : "E-posti aadress, liitpilve kasutajatunnus", + "Unable to load the shares list" : "Jaosmeedia loendi laadimine ei õnnestu", "Expires {relativetime}" : "Aegub {relativetime}", "this share just expired." : "see jagamine aegus äsja", "Shared with you by {owner}" : "Jagatud sinuga {owner} poolt", "Internal shares" : "Sisemised jaoskaustad", "Internal shares explanation" : "Sisemiste jaoskaustade selgitus", - "Share with accounts and teams" : "Jaga kasutajate ja tiimidega", "External shares" : "Välised jaoskaustad", "External shares explanation" : "Väliste jaoskaustade selgitus", - "Email, federated cloud id" : "E-posti aadress, liitpilve kasutajatunnus", "Additional shares" : "Täiendavad jaoskaustad", "Additional shares explanation" : "Täiendavate jaoskaustade selgitus", + "Link to a file" : "Link failile", + "_Accept share_::_Accept shares_" : ["Võta jaosmeedia vastu","Võta jaosmeedia vastu"], "Open in Files" : "Ava failirakenduses", + "_Reject share_::_Reject shares_" : ["Keeldu jaosmeediast","Keeldu jaosmeediast"], + "_Restore share_::_Restore shares_" : ["Taasta jaosmeedia","Taasta jaosmeedia"], "Shared" : "Jagatud", "Shared by {ownerDisplayName}" : "Jagaja: {ownerDisplayName}", "Shared multiple times with different people" : "Jagatud mitu korda eri kasutajate poolt", "Show sharing options" : "Näita jagamise valikuid", "Shared with others" : "Teistega jagatud", + "Create file request" : "Koosta failipäring", "Upload files to {foldername}" : "Laadi failid üles kausta {foldername}", "Public file share" : "Avalikud jaosfailid", "Publicly shared file." : "Avalikult jagatud fail.", @@ -248,19 +339,36 @@ OC.L10N.register( "Publicly shared files." : "Avalikult jagatud failid.", "No files" : "Faile pole", "Files and folders shared with you will show up here" : "Sinuga jagatud failid ja kaustad on siin nähtavad", + "Overview of shared files." : "Jagatud failide ülevaade.", "No shares" : "Jagamisi pole", + "Files and folders you shared or have been shared with you will show up here" : "Sinu poolt jagatud ning sinuga jagatud failid ja kaustad saavad olema nähtavad siin", "Shared with you" : "Sinuga jagatud", + "List of files that are shared with you." : "Sinuga jagatud failide loend.", "Nothing shared with you yet" : "Sinuga pole veel midagi jagatud", + "Files and folders others shared with you will show up here" : "Sinuga jagatud failid ja kaustad saavad olema nähtavad siin", + "List of files that you shared with others." : "Sinu poolt teisega jagatud failide loend.", "Nothing shared yet" : "Midagi pole veel jagatud", + "Files and folders you shared will show up here" : "Sinu poolt jagatud failid ja kaustad saavad olema nähtavad siin", "Shared by link" : "Jagatud lingiga", + "List of files that are shared by link." : "Lingiga jagatud failide loend.", "No shared links" : "Jagatud linke pole", + "Files and folders you shared by link will show up here" : "Sinu poolt lingiga jagatud failid ja kaustad saavad olema nähtavad siin", "File requests" : "Failipäringud", "List of file requests." : "Failipäringute loend.", "No file requests" : "Failipäringuid ei leidu", + "File requests you have created will show up here" : "Sinu loodud failipäringus saavad olema nähtavad siin.", "Deleted shares" : "Kustutatud jagamised", + "List of shares you left." : "Jaosmeedia loend, kust sa oled lahkunud.", "No deleted shares" : "Kustutatud jagamisi pole", + "Shares you have left will show up here" : "Jaosmeedia loend, kust sa oled lahkunud, saab olema nähtav siin", "Pending shares" : "Ootel jagamised", + "List of unapproved shares." : "Vastuvõtmata jaosmeedia loend.", "No pending shares" : "Ootel jagamisi pole", + "Shares you have received but not approved will show up here" : "Jaosmeedia, mille oled saanud, kuid pole nõustunud, saab olema nähtav siin", + "Error updating the share: {errorMessage}" : "Viga jaosmeedia uuendamisel: {errorMessage}", + "Error updating the share" : "Viga jaosmeedia uuendamisel", + "File \"{path}\" has been unshared" : "„{path}“ faili jagamine on lõpetatud", + "Folder \"{path}\" has been unshared" : "„{path}“ kausta jagamine on lõpetatud", "Could not update share" : "Jaosmeedia andmete uuendamine ei õnnestunud", "Share saved" : "Jaosmeedia andmed on salvestatud", "Share expiry date saved" : "Jaosmeedia aegumise kuupäev on salvestatud", @@ -271,7 +379,12 @@ OC.L10N.register( "Share permissions saved" : "Jaosmeedia õigused on salvestatud", "Shared by" : "Jagas", "Shared with" : "Jagatud", + "Password created successfully" : "Salasõna loomine õnnestus", + "Error generating password from password policy" : "Viga salasõnareeglitele vastava salasõna loomisel", "Shared with you and the group {group} by {owner}" : "Jagatud sinu ja grupiga {group} {owner} poolt", + "Shared with you and {circle} by {owner}" : "„{owner}“ jagas seda sinuga ja „{circle}“ tiimiga", + "Shared with you and the conversation {conversation} by {owner}" : "„{owner}“ jagas seda sinuga ja vestlusega „{conversation}“", + "Shared with you in a conversation by {owner}" : "„{owner}“ jagas seda sinuga vestluses", "Share note" : "Jaga märget", "Show list view" : "Näita loendivaadet", "Show grid view" : "Näita ruudustikuvaadet", @@ -279,7 +392,9 @@ OC.L10N.register( "%s shared a folder with you." : "%s jagas sinuga kausta.", "Note" : "Märge", "Select or drop files" : "Vali või lohista failid", + "Uploading files" : "Failid on üleslaadimisel", "Uploaded files:" : "Üleslaaditud failid:", + "By uploading files, you agree to the %1$sterms of service%2$s." : "Faile üleslaadides nõustud sa „%2$s“ teenuse „%1$s“ kasutustingimustega.", "Share not found" : "Jagamist ei leidu", "Back to %s" : "Tagasi siia: %s", "Add to your Nextcloud" : "Lisa oma Nextcloudi", @@ -294,12 +409,15 @@ OC.L10N.register( "Failed to add the public link to your Nextcloud" : "Avaliku lingi lisamine sinu Nextcloudi ebaõnnestus", "Files" : "Failid", "Download all files" : "Laadi kõik failid alla", + "Search for share recipients" : "Otsi jaosmeedia saajaid", "No recommendations. Start typing." : "Soovitusi pole. Alusta trükkimist.", "Password field can't be empty" : "Salasõna väli ei saa olla tühi", "Allow download" : "Luba allalaadimine", "Share expire date saved" : "Jaosmeedia aegumise kuupäev on salvestatud", "You are not allowed to edit link shares that you don't own" : "Sa ei saa muuta lingi jagamist, mis pole sinu oma", "_1 email address already added_::_{count} email addresses already added_" : ["1 e-posti aadress on juba lisatud","{count} e-posti aadressi on juba lisatud"], - "_1 email address added_::_{count} email addresses added_" : ["1 e-posti aadress on lisatud","{count} e-posti aadressi on lisatud"] + "_1 email address added_::_{count} email addresses added_" : ["1 e-posti aadress on lisatud","{count} e-posti aadressi on lisatud"], + "Share with accounts, teams, federated cloud id" : "Jaga kasutajatega, tiimidega ja liitpilves osalejatega", + "Email, federated cloud id" : "E-posti aadress, liitpilve kasutajatunnus" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/et_EE.json b/apps/files_sharing/l10n/et_EE.json index 8126f506958..85ded811275 100644 --- a/apps/files_sharing/l10n/et_EE.json +++ b/apps/files_sharing/l10n/et_EE.json @@ -13,6 +13,7 @@ "You removed group {group} from {file}" : "Sa eemaldasid grupi {group} faili {file} jagamisest", "{actor} shared {file} with group {group}" : "{actor} jagas faili {file} grupiga {group}", "{actor} removed group {group} from {file}" : "{actor} eemaldas grupi {group} faili {file} jagamisest", + "Share for file {file} with group {group} expired" : "Grupile „{group}“ mõeldud jagatud fail „{file}“ aegus", "Shared as public link" : "Jaga avaliku lingina", "Removed public link" : "Avalik link on eemaldatud", "Public link expired" : "Avalik link aegus", @@ -39,43 +40,72 @@ "{actor} removed share for {user}" : "{actor} eemaldas jagamise kasutajaga {user}", "Shared by {actor}" : "Jagatud kasutajalt {actor}", "{actor} removed share" : "{actor} eemaldas jagamise", + "Share for {user} expired" : "Kasutajale „{user}“ mõeldud jaosmeedia aegus", "Share expired" : "Jagamine aegus", "You shared {file} with {user}" : "Sa jagasid {file} kasutajaga {user}", "You removed {user} from {file}" : "Sa eemaldasid faili {file} jagamise kasutajaga {user} ", + "You removed yourself from {file}" : "Sa eemaldasid end „{file}“ failist", + "{actor} removed themselves from {file}" : "„{actor}“ eemaldas end „{file}“ failist", "{actor} shared {file} with {user}" : "{actor} jagas {file} kasutajaga {user}", "{actor} removed {user} from {file}" : "{actor} eemaldas {user} jagamise faililt {file}", "{actor} shared {file} with you" : "{actor} jagas sinuga {file}", "{actor} removed you from the share named {file}" : "{actor} lõpetas sinuga {file} jagamise", + "Share for file {file} with {user} expired" : "Kasutajale „{user}“ mõeldud jagatud fail „{file}“ aegus", + "Share for file {file} expired" : "„{file}“ faili jagamine aegus", "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Fail või kaust mis on jagatud e-posti või avaliku lingiga <strong>laaditi alla</strong>", + "Files have been <strong>uploaded</strong> to a folder shared by mail or by public link" : "Failid on <strong>laaditud üles</strong> kausta, mida on jagatud e-posti või avaliku lingiga", "A file or folder was shared from <strong>another server</strong>" : "Fail või kaust jagati <strong>teisest serverist</strong>", "Sharing" : "Jagamine", "A file or folder has been <strong>shared</strong>" : "Fail või kaust on <strong>jagatud</strong>", "Shared link" : "Jagatud link", + "Wrong share ID, share does not exist" : "Jaosmedia vigane tunnus - sellist pole olemas", "Could not delete share" : "Ei saanud jagamist eemaldada", "Please specify a file or folder path" : "Palun määra faili või kausta rada", "Wrong path, file/folder does not exist" : "Vale asukoht faili või kausta pole olemas", "Could not create share" : "Ei saanud jagamist luua", + "Please specify a valid account to share with" : "Palun määra korrektne kasutajakonto, kellega soovid jagada", "Group sharing is disabled by the administrator" : "Grupiga jagamine on administraatori poolt keelatud", "Please specify a valid group" : "Palun määra kehtiv grupp", "Public link sharing is disabled by the administrator" : "Avaliku lingiga jagamine on administraatori poolt keelatud", + "Please specify a valid email address" : "Palun määra kehtiv e-posti aadress", + "Sharing %s sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "Kuna Nextcloud Talk pole serverisse paigaldatud, siis ei saanud selle teenuse abil ka „%s“ jaosmeedia salasõna jagada", + "Sharing %1$s failed because the back end does not allow shares from type %2$s" : "„%1$s“ jagamine ei õnnestunud, sest server ei luba „%2$s“ tüüpi jagamisi", + "Please specify a valid federated account ID" : "Palun määra korrektne kasutaja liitpilves, kellega soovid jagada", + "Please specify a valid federated group ID" : "Palun määra korrektne grupp liitpilves, kellega soovid jagada", "You cannot share to a Team if the app is not enabled" : "Sa ei saa jagada tiimiga, kui see rakendus pole lubatud", "Please specify a valid team" : "Palun määratle korrektne tiim", + "Sharing %s failed because the back end does not support room shares" : "„%s“ jagamine ei õnnestunud, sest taustateenus ei toeta jututubadesse jagamist", + "Sharing %s failed because the back end does not support ScienceMesh shares" : "„%s“ jagamine ei õnnestunud, sest taustateenus ei toeta ScienceMeshi meedia jagamist", "Unknown share type" : "Tundmatu jagamise tüüp", "Not a directory" : "Ei ole kaust", + "Could not lock node" : "Sõlme ei õnnestunud lukustada", "Public upload is only possible for publicly shared folders" : "Avalik üleslaadminie on võimalik ainult avalikult jagatud kaustades", "Share must at least have READ or CREATE permissions" : "jaosmeedial peavad olema vähemalt logemis- ja loomisõigused", "Public upload disabled by the administrator" : "Avalik üleslaadimine on administraatori poolt keelatud", "Could not lock path" : "Ei saanud rada lukustada", + "no sharing rights on this item" : "selle objekti kontekstis pole jagamisõigusi", + "You are not allowed to edit incoming shares" : "Sul pole lubatud vastuvõetud jaosmeediat muuta", "Wrong or no update parameter given" : "Antud vale või aegunud parameeter", + "\"Sending the password by Nextcloud Talk\" for sharing a file or folder failed because Nextcloud Talk is not enabled." : "Kuna Nextcloud Talk pole serverisse paigaldatud, siis ei saanud selle teenuse abil ka jaosmeedia salasõna jagada", + "Invalid date. Format must be YYYY-MM-DD" : "Vigane kuupäev, vorming peab olema YYYY-MM-DD", + "No sharing rights on this item" : "Selle objekti kontekstis pole jagamisõigusi", + "Invalid share attributes provided: \"%s\"" : "Vigased jagamisatribuudid: „%s“", + "You are not allowed to send mail notifications" : "Sul pole lubatud e-postiga teavitusi saata", + "No mail notification configured for this share type" : "Selle jagamistüübi kohta pole e-posti teel saadetavat teavitust lisatud", "Wrong password" : "Vale salasõna", + "Error while sending mail notification" : "Viga e-postiga teavituse saatmisel", "Failed to generate a unique token" : "Ei õnnestunud luua unikaalset tunnusluba", "This share does not exist or is no longer available" : "See jaosmeedia pole enam olemas või saadaval", "shared by %s" : "jagas %s", "Download" : "Laadi alla", + "Add to your %s" : "Lisa oma teenusesse: %s", "Direct link" : "Otsene link", "Share API is disabled" : "Jagamise API on keelatud", "File sharing" : "Faide jagamine", "Share will expire tomorrow" : "Jagamine aegub homme", + "Your share of {node} will expire tomorrow" : "Sinu „{node}“ jaosmeedia aegub homme", + "You received {share} as a share by {user}" : "Kasutaja „{user}“ on saatnud sulle „{share}“ jaosmeedia", + "You received {share} to group {group} as a share by {user}" : "Kasutaja „{user}“ on saatnud „{group}“ grupile „{share}“ jaosmeedia", "Accept" : "Nõustu", "Decline" : "Keeldu", "Remember to upload the files to %s" : "Ära unusta laadida faile kausta %s", @@ -83,27 +113,51 @@ "Open \"%s\"" : "Ava „%s“", "People" : "Inimesed", "Filter accounts" : "Filtreeri kasutajakontosid", + "The request will expire on {date} at midnight and will be password protected." : "Päring aegub {date} keskööl ning on kaitstud salasõnaga.", + "The request will expire on {date} at midnight." : "Päring aegub {date} keskööl.", + "The request will be password protected." : "Päring on kaitstud salasõnaga.", + "When should the request expire?" : "Millal peaks see päring aeguma?", + "Set a submission expiration date" : "Määra aegumise kuupäev", "Expiration date" : "Aegumise kuupäev", "Select a date" : "Vali kuupäev", + "Your administrator has enforced a {count} days expiration policy." : "Sinu serveri peakasutaja on kehtestanud {count}-päevase aegumisreegli.", + "What password should be used for the request?" : "Mis salasõna peaks selle päringu puhul kasutama?", "Set a password" : "Lisa salasõna", "Password" : "Salasõna", "Enter a valid password" : "Sisesta korrektne salasõna", "Generate a new password" : "Loo uus salasõna", + "Your administrator has enforced a password protection." : "Sinu serveri peakasutaja on kehtestanud salasõna kasutamise reegli.", + "Automatically copying failed, please copy the share link manually" : "Automaatne kopeerimine ei toimi, palun kopeeri jagamislink käsitsi", "Link copied to clipboard" : "Link on lõikelauale kopeeritud", "Email already added" : "E-posti aadress on juba lisatud", "Invalid email address" : "Vigane e-posti aadress", + "_The following email address is not valid: {emails}_::_The following email addresses are not valid: {emails}_" : ["Järgnev e-posti aadress pole korrektne: {emails}","Järgnevad e-posti aadressid pole korrektsed: {emails}"], "_{count} email address already added_::_{count} email addresses already added_" : ["{count} e-posti aadress on juba lisatud","{count} e-posti aadressi on juba lisatud"], "_{count} email address added_::_{count} email addresses added_" : ["{count} e-posti aadress on lisatud","{count} e-posti aadressi on lisatud"], + "You can now share the link below to allow people to upload files to your directory." : "Nüüd saad teistega jagada alltoodud linki ning neil on võimalik faile sinu kausta üles laadida.", "Share link" : "Jaga link", "Copy to clipboard" : "Kopeeri lõikepuhvrisse", "Send link via email" : "Saada link e-kirjaga", + "Enter an email address or paste a list" : "Sisesta e-posti aadress või lisa loend", + "Remove email" : "Eemalda e-posti aadress", + "Select a destination" : "Vali sihtkaust", "Select" : "Vali", + "What are you requesting?" : "Missugust faili soovid saada?", + "Request subject" : "Päringu teema", + "Birthday party photos, History assignment…" : "Sünnipäevapeo fotod, uurimistöö…", + "Where should these files go?" : "Kuhu peaksid need failid sattuma?", + "Upload destination" : "Üleslaadimise sihtkaust", + "Revert to default" : "Kasuta vaikimisi kausta", + "The uploaded files are visible only to you unless you choose to share them." : "Kui sa just neid edasi ei jaga, siis on üleslaaditud failid nähtavad vaid sulle.", "Add a note" : "Lisa märge", "Note for recipient" : "Märge saajale", - "Add a note to help people understand what you are requesting." : "Lisa teise osapoole jaoks märge, mis aitab neil mõista, missugust faili sa temalt soovid.", + "Add a note to help people understand what you are requesting." : "Lisa teise osapoole jaoks märge, mis aitab tal mõista, missugust faili sa temalt soovid.", + "You can add links, date or any other information that will help the recipient understand what you are requesting." : "Lisa teise osapoole jaoks linke, kuupäevi või muud teavet, mis aitab tal mõista, missugust faili sa temalt soovid.", "Close" : "Sulge", "_Send email and close_::_Send {count} emails and close_" : ["Saada e-kiri ja sulge","Saada {count} e-kirja ja sulge"], "Please select a folder, you cannot share the root directory." : "Palun vali kaust ülaltpool - sa ei saa jagada juurkausta.", + "File request created" : "Failipäring on loodud", + "_File request created and email sent_::_File request created and {count} emails sent_" : ["Failipäring on loodud ja e-kiri on saadetud","Failipäring on loodud ja {count} e-kirja on saadetud"], "Error creating the share: {errorMessage}" : "Viga jaosmeedia loomisel: {errorMessage}", "Error creating the share" : "Viga jaosmeedia loomisel", "Error sending emails: {errorMessage}" : "Viga e-kirjade saatmisel: {errorMessage}", @@ -118,6 +172,7 @@ "Close without sending emails" : "Sulge ilma e-kirju saatmata", "Continue" : "Jätka", "Error while toggling options" : "Viga valikute sisse/välja lülitamisel", + "Accept shares from other accounts and groups by default" : "Aktsepteeri vaikimisi muude kasutajakontode ja rühmade jagamisi automaatselt", "Choose a default folder for accepted shares" : "Vali vaikimisi kaust jaosmeedia vastuvõtmiseks", "Invalid path selected" : "Vigane asukoht on valitud", "Unknown error" : "Tundmatu viga", @@ -132,8 +187,12 @@ "remote group" : "Kauggrupp", "guest" : "külaline", "by {initiator}" : "kasutajalt {initiator}", + "Shared with the group {user} by {owner}" : "„{owner}“ jagas seda sinuga ja „{user}“ grupiga", + "Shared with the conversation {user} by {owner}" : "„{owner}“ jagas seda vestluses „{user}“ grupiga või kasutajaga", + "Shared with {user} by {owner}" : "„{owner}“ jagas seda „{user}“ kasutajaga", "Open Sharing Details" : "Ava jaosmeedia üksikasjad", "Added by {initiator}" : "Selle lisas {initiator}", + "Via “{folder}”" : "„{folder}“ kausta kaudu", "Unshare" : "Lõpeta jagamine", "Cannot copy, please copy the link manually" : "Ei saa kopeerida, palun kopeeri link käsitsi", "Copy internal link to clipboard" : "Kopeeri sisemine link lõikelauale", @@ -141,10 +200,20 @@ "Only works for people with access to this file" : "Toimib vaid kasutajate puhul, kellel on ligipääs sellele failile", "Link copied" : "Link kopeeritud", "Internal link" : "Sisemine link", + "{shareWith} by {initiator}" : "{shareWith} kasutajalt {initiator}", + "Shared via link by {initiator}" : "„{initiator}“ jagas seda lingiga", + "File request ({label})" : "Failipäring ({label})", + "Mail share ({label})" : "Jagamine e-kirjaga ({label})", "Share link ({label})" : "Jagamise link ({label})", + "Mail share" : "E-posti jagamine", "Share link ({index})" : "Jagamise link ({index})", "Create public link" : "Loo avalik link", + "Actions for \"{title}\"" : "„{title}“ tegevused", + "Copy public link of \"{title}\" to clipboard" : "Kopeeri „{title}“ avalik link lõikelauale", + "Error, please enter proper password and/or expiration date" : "Viga, palun sisesta korrektne salasõna ja/või aegumise kuupäev", + "Link share created" : "Lingi jagamine on loodud", "Error while creating the share" : "Viga jaosmeedia loomisel", + "Please enter the following required information before creating the share" : "Enne jaosmeedia loomist palun sisesta järgmine vajalik teave", "Password protection (enforced)" : "Paroolikaitse (jõustatud)", "Password protection" : "Password protection", "Enter a password" : "Enter a password", @@ -157,17 +226,23 @@ "Generate QR code" : "Loo QR-kood", "Add another link" : "Lisa veel üks link", "Create a new share link" : "Loo uus jagamislink", + "Quick share options, the current selected is \"{selectedOption}\"" : "Kiirjagamise valikud, hetkel on valitud „{selectedOption}“", "View only" : "Ainult vaatamine", "Can edit" : "Võib redigeerida", + "Custom permissions" : "Kohandatud õigused", "Resharing is not allowed" : "Edasijagamine pole lubatud", "Name or email …" : "Nimi või e-posti aadress…", "Name, email, or Federated Cloud ID …" : "Nimi, e-posti aadress või liitpilve kasutajatunnus…", - "Searching …" : "Otsin ...", + "Searching …" : "Otsin...", + "No elements found." : "Elemente ei leidu.", + "Search globally" : "Otsi kõikjalt", "Guest" : "Külaline", "Group" : "Grupp", "Email" : "Epost", "Team" : "Tiim", "Talk conversation" : "Talk suhtlus", + "Deck board" : "Kanbani tahvel", + "ScienceMesh" : "ScienceMesh", "on {server}" : " {server}", "Enter external recipients" : "Lisa välised saajad", "Search for internal recipients" : "Otsi rakendusesiseseid saajaid", @@ -179,7 +254,9 @@ "View terms of service" : "Vaata kasutustingimusi", "Terms of service" : "Kasutustingimused", "Upload files to {folder}" : "Laadi failid üles kausta {folder}", + "Submit name" : "Salvesta nimi", "{ownerDisplayName} shared a folder with you." : "{ownerDisplayName} jagas sinuga kausta.", + "To upload files, you need to provide your name first." : "Faili üleslaadimiseks pead esmalt oma nime sisestama.", "Name" : "Nimi", "Enter your name" : "Sisesta oma nimi", "Share with {userName}" : "Jaga kasutajaga {userName}", @@ -193,7 +270,7 @@ "Save share" : "Salvesta jaosmeedia", "Read" : "Lugemine", "Create" : "Lisa", - "Edit" : "Redigeeri", + "Edit" : "Muuda", "Share" : "Jaga", "Delete" : "Kustuta", "Password field cannot be empty" : "Salasõna väli ei saa olla tühi", @@ -210,6 +287,7 @@ "Set password" : "Määra salasõna", "Password expires {passwordExpirationTime}" : "Salasõna aegub {passwordExpirationTime}", "Password expired" : "Salasõna on aegunud", + "Video verification" : "Verifitseerimine videoga", "Expiration date (enforced)" : "Aegumise kuupäev (jõustatud)", "Set expiration date" : "Määra aegumise kuupäev", "Hide download" : "Peida allalaaditu", @@ -218,25 +296,38 @@ "Enter a note for the share recipient" : "Lisa märkus jaosmeedia saajale", "Show files in grid view" : "Näita faile ruudustikuvaates", "Delete share" : "Kustuta jagamine", + "Others with access" : "Teised, kellel on ligipääs", + "No other accounts with access found" : "Teisi ligipääsuga kasutajakontosid ei leidu", + "Toggle list of others with access to this directory" : "Näita teisi, kellele on ligipääs sellele kaustale või peida nad", + "Toggle list of others with access to this file" : "Näita teisi, kellele on ligipääs sellele failile või peida nad", + "Unable to fetch inherited shares" : "Päritud jaosmeedia laadimine ei õnnestu", "Link shares" : "Jaoslingid", "Shares" : "Jagamisi", + "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Kasuta seda jagamismeetodit jagamisel oma organisatsiooni kasutajatega ja tiimidega. Kui kasutajal juba on jaosmeediale ligipääs, kuid ei suuad seda leida, siis lihtsuse mõttes saada talle süsteemisisene jagamislink.", + "Share with accounts, teams, federated cloud IDs" : "Jaga kasutajatega, tiimidega ja liitpilves osalejatega", + "Share with accounts and teams" : "Jaga kasutajate ja tiimidega", + "Email, federated cloud ID" : "E-posti aadress, liitpilve kasutajatunnus", + "Unable to load the shares list" : "Jaosmeedia loendi laadimine ei õnnestu", "Expires {relativetime}" : "Aegub {relativetime}", "this share just expired." : "see jagamine aegus äsja", "Shared with you by {owner}" : "Jagatud sinuga {owner} poolt", "Internal shares" : "Sisemised jaoskaustad", "Internal shares explanation" : "Sisemiste jaoskaustade selgitus", - "Share with accounts and teams" : "Jaga kasutajate ja tiimidega", "External shares" : "Välised jaoskaustad", "External shares explanation" : "Väliste jaoskaustade selgitus", - "Email, federated cloud id" : "E-posti aadress, liitpilve kasutajatunnus", "Additional shares" : "Täiendavad jaoskaustad", "Additional shares explanation" : "Täiendavate jaoskaustade selgitus", + "Link to a file" : "Link failile", + "_Accept share_::_Accept shares_" : ["Võta jaosmeedia vastu","Võta jaosmeedia vastu"], "Open in Files" : "Ava failirakenduses", + "_Reject share_::_Reject shares_" : ["Keeldu jaosmeediast","Keeldu jaosmeediast"], + "_Restore share_::_Restore shares_" : ["Taasta jaosmeedia","Taasta jaosmeedia"], "Shared" : "Jagatud", "Shared by {ownerDisplayName}" : "Jagaja: {ownerDisplayName}", "Shared multiple times with different people" : "Jagatud mitu korda eri kasutajate poolt", "Show sharing options" : "Näita jagamise valikuid", "Shared with others" : "Teistega jagatud", + "Create file request" : "Koosta failipäring", "Upload files to {foldername}" : "Laadi failid üles kausta {foldername}", "Public file share" : "Avalikud jaosfailid", "Publicly shared file." : "Avalikult jagatud fail.", @@ -246,19 +337,36 @@ "Publicly shared files." : "Avalikult jagatud failid.", "No files" : "Faile pole", "Files and folders shared with you will show up here" : "Sinuga jagatud failid ja kaustad on siin nähtavad", + "Overview of shared files." : "Jagatud failide ülevaade.", "No shares" : "Jagamisi pole", + "Files and folders you shared or have been shared with you will show up here" : "Sinu poolt jagatud ning sinuga jagatud failid ja kaustad saavad olema nähtavad siin", "Shared with you" : "Sinuga jagatud", + "List of files that are shared with you." : "Sinuga jagatud failide loend.", "Nothing shared with you yet" : "Sinuga pole veel midagi jagatud", + "Files and folders others shared with you will show up here" : "Sinuga jagatud failid ja kaustad saavad olema nähtavad siin", + "List of files that you shared with others." : "Sinu poolt teisega jagatud failide loend.", "Nothing shared yet" : "Midagi pole veel jagatud", + "Files and folders you shared will show up here" : "Sinu poolt jagatud failid ja kaustad saavad olema nähtavad siin", "Shared by link" : "Jagatud lingiga", + "List of files that are shared by link." : "Lingiga jagatud failide loend.", "No shared links" : "Jagatud linke pole", + "Files and folders you shared by link will show up here" : "Sinu poolt lingiga jagatud failid ja kaustad saavad olema nähtavad siin", "File requests" : "Failipäringud", "List of file requests." : "Failipäringute loend.", "No file requests" : "Failipäringuid ei leidu", + "File requests you have created will show up here" : "Sinu loodud failipäringus saavad olema nähtavad siin.", "Deleted shares" : "Kustutatud jagamised", + "List of shares you left." : "Jaosmeedia loend, kust sa oled lahkunud.", "No deleted shares" : "Kustutatud jagamisi pole", + "Shares you have left will show up here" : "Jaosmeedia loend, kust sa oled lahkunud, saab olema nähtav siin", "Pending shares" : "Ootel jagamised", + "List of unapproved shares." : "Vastuvõtmata jaosmeedia loend.", "No pending shares" : "Ootel jagamisi pole", + "Shares you have received but not approved will show up here" : "Jaosmeedia, mille oled saanud, kuid pole nõustunud, saab olema nähtav siin", + "Error updating the share: {errorMessage}" : "Viga jaosmeedia uuendamisel: {errorMessage}", + "Error updating the share" : "Viga jaosmeedia uuendamisel", + "File \"{path}\" has been unshared" : "„{path}“ faili jagamine on lõpetatud", + "Folder \"{path}\" has been unshared" : "„{path}“ kausta jagamine on lõpetatud", "Could not update share" : "Jaosmeedia andmete uuendamine ei õnnestunud", "Share saved" : "Jaosmeedia andmed on salvestatud", "Share expiry date saved" : "Jaosmeedia aegumise kuupäev on salvestatud", @@ -269,7 +377,12 @@ "Share permissions saved" : "Jaosmeedia õigused on salvestatud", "Shared by" : "Jagas", "Shared with" : "Jagatud", + "Password created successfully" : "Salasõna loomine õnnestus", + "Error generating password from password policy" : "Viga salasõnareeglitele vastava salasõna loomisel", "Shared with you and the group {group} by {owner}" : "Jagatud sinu ja grupiga {group} {owner} poolt", + "Shared with you and {circle} by {owner}" : "„{owner}“ jagas seda sinuga ja „{circle}“ tiimiga", + "Shared with you and the conversation {conversation} by {owner}" : "„{owner}“ jagas seda sinuga ja vestlusega „{conversation}“", + "Shared with you in a conversation by {owner}" : "„{owner}“ jagas seda sinuga vestluses", "Share note" : "Jaga märget", "Show list view" : "Näita loendivaadet", "Show grid view" : "Näita ruudustikuvaadet", @@ -277,7 +390,9 @@ "%s shared a folder with you." : "%s jagas sinuga kausta.", "Note" : "Märge", "Select or drop files" : "Vali või lohista failid", + "Uploading files" : "Failid on üleslaadimisel", "Uploaded files:" : "Üleslaaditud failid:", + "By uploading files, you agree to the %1$sterms of service%2$s." : "Faile üleslaadides nõustud sa „%2$s“ teenuse „%1$s“ kasutustingimustega.", "Share not found" : "Jagamist ei leidu", "Back to %s" : "Tagasi siia: %s", "Add to your Nextcloud" : "Lisa oma Nextcloudi", @@ -292,12 +407,15 @@ "Failed to add the public link to your Nextcloud" : "Avaliku lingi lisamine sinu Nextcloudi ebaõnnestus", "Files" : "Failid", "Download all files" : "Laadi kõik failid alla", + "Search for share recipients" : "Otsi jaosmeedia saajaid", "No recommendations. Start typing." : "Soovitusi pole. Alusta trükkimist.", "Password field can't be empty" : "Salasõna väli ei saa olla tühi", "Allow download" : "Luba allalaadimine", "Share expire date saved" : "Jaosmeedia aegumise kuupäev on salvestatud", "You are not allowed to edit link shares that you don't own" : "Sa ei saa muuta lingi jagamist, mis pole sinu oma", "_1 email address already added_::_{count} email addresses already added_" : ["1 e-posti aadress on juba lisatud","{count} e-posti aadressi on juba lisatud"], - "_1 email address added_::_{count} email addresses added_" : ["1 e-posti aadress on lisatud","{count} e-posti aadressi on lisatud"] + "_1 email address added_::_{count} email addresses added_" : ["1 e-posti aadress on lisatud","{count} e-posti aadressi on lisatud"], + "Share with accounts, teams, federated cloud id" : "Jaga kasutajatega, tiimidega ja liitpilves osalejatega", + "Email, federated cloud id" : "E-posti aadress, liitpilve kasutajatunnus" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/fa.js b/apps/files_sharing/l10n/fa.js index e5a49278326..07989259c35 100644 --- a/apps/files_sharing/l10n/fa.js +++ b/apps/files_sharing/l10n/fa.js @@ -157,24 +157,28 @@ OC.L10N.register( "Open in Files" : "در فایل باز کنید", "_Reject share_::_Reject shares_" : ["Reject share","Reject shares"], "_Restore share_::_Restore shares_" : ["Restore share","Restore shares"], - "Shared" : "به اشتراک گزاشته شده ", + "Shared" : "به اشتراک گذاشته شده ", "Shared with others" : "موارد به اشتراک گذاشته شده با دیگران", + "Public file share" : "اشتراک عمومی پرونده", + "Publicly shared file." : "پرونده بصورت عمومی به اشتراک گذاشته شده است", "No file" : "بدون پرونده", "Public share" : "سهم عمومی", - "Overview of shared files." : "Overview of shared files.", + "Publicly shared files." : "پرونده ها بصورت عمومی به اشتراک گذاشته شده اند", + "Overview of shared files." : "نمای کلی پرونده های به اشتراک گذاشته شده", "No shares" : "اشتراک گذاری وجود ندارد", "Files and folders you shared or have been shared with you will show up here" : "Files and folders you shared or have been shared with you will show up here", "Shared with you" : "موارد به اشتراک گذاشته شده با شما", - "List of files that are shared with you." : "List of files that are shared with you.", + "List of files that are shared with you." : "لیست پرونده هایی که با شما به اشتراک گذاشته شده است.", "Nothing shared with you yet" : "هیچ موردی با شما به اشتراک گذاشته نشده است", "Files and folders others shared with you will show up here" : "Files and folders others shared with you will show up here", - "List of files that you shared with others." : "List of files that you shared with others.", + "List of files that you shared with others." : "لیست پرونده هایی که شما با دیگران به اشتراک گذاشته اید.", "Nothing shared yet" : "هیچ موردی تاکنون به اشتراک گذاشته نشده است", "Files and folders you shared will show up here" : "Files and folders you shared will show up here", "Shared by link" : "اشتراک گذاشته شده از طریق لینک", "List of files that are shared by link." : "List of files that are shared by link.", "No shared links" : "هیچ لینک اشتراکگذاری وجود ندارد", "Files and folders you shared by link will show up here" : "Files and folders you shared by link will show up here", + "File requests" : "درخواست پرونده", "Deleted shares" : "اشتراک گذاری های حذف شده", "List of shares you left." : "List of shares you left.", "No deleted shares" : "اشتراک گذاری های حذف نشده", @@ -197,7 +201,7 @@ OC.L10N.register( "Upload files to %s" : "بارگیری پرونده ها به%s", "Note" : "یادداشت", "Select or drop files" : "پرونده ها را انتخاب یا رها کنید", - "Uploading files" : "Uploading files", + "Uploading files" : "پرونده های در حال بارگذاری", "Uploaded files:" : "پرونده های بارگذاری شده:", "By uploading files, you agree to the %1$sterms of service%2$s." : "%2$sبا بارگذاری پرونده ها ، شما با %1$sشرایط خدمات موافقت می کنید", "Share not found" : "اشتراک گذاری یافت نشد", diff --git a/apps/files_sharing/l10n/fa.json b/apps/files_sharing/l10n/fa.json index 345cac57f8b..417bcc39e94 100644 --- a/apps/files_sharing/l10n/fa.json +++ b/apps/files_sharing/l10n/fa.json @@ -155,24 +155,28 @@ "Open in Files" : "در فایل باز کنید", "_Reject share_::_Reject shares_" : ["Reject share","Reject shares"], "_Restore share_::_Restore shares_" : ["Restore share","Restore shares"], - "Shared" : "به اشتراک گزاشته شده ", + "Shared" : "به اشتراک گذاشته شده ", "Shared with others" : "موارد به اشتراک گذاشته شده با دیگران", + "Public file share" : "اشتراک عمومی پرونده", + "Publicly shared file." : "پرونده بصورت عمومی به اشتراک گذاشته شده است", "No file" : "بدون پرونده", "Public share" : "سهم عمومی", - "Overview of shared files." : "Overview of shared files.", + "Publicly shared files." : "پرونده ها بصورت عمومی به اشتراک گذاشته شده اند", + "Overview of shared files." : "نمای کلی پرونده های به اشتراک گذاشته شده", "No shares" : "اشتراک گذاری وجود ندارد", "Files and folders you shared or have been shared with you will show up here" : "Files and folders you shared or have been shared with you will show up here", "Shared with you" : "موارد به اشتراک گذاشته شده با شما", - "List of files that are shared with you." : "List of files that are shared with you.", + "List of files that are shared with you." : "لیست پرونده هایی که با شما به اشتراک گذاشته شده است.", "Nothing shared with you yet" : "هیچ موردی با شما به اشتراک گذاشته نشده است", "Files and folders others shared with you will show up here" : "Files and folders others shared with you will show up here", - "List of files that you shared with others." : "List of files that you shared with others.", + "List of files that you shared with others." : "لیست پرونده هایی که شما با دیگران به اشتراک گذاشته اید.", "Nothing shared yet" : "هیچ موردی تاکنون به اشتراک گذاشته نشده است", "Files and folders you shared will show up here" : "Files and folders you shared will show up here", "Shared by link" : "اشتراک گذاشته شده از طریق لینک", "List of files that are shared by link." : "List of files that are shared by link.", "No shared links" : "هیچ لینک اشتراکگذاری وجود ندارد", "Files and folders you shared by link will show up here" : "Files and folders you shared by link will show up here", + "File requests" : "درخواست پرونده", "Deleted shares" : "اشتراک گذاری های حذف شده", "List of shares you left." : "List of shares you left.", "No deleted shares" : "اشتراک گذاری های حذف نشده", @@ -195,7 +199,7 @@ "Upload files to %s" : "بارگیری پرونده ها به%s", "Note" : "یادداشت", "Select or drop files" : "پرونده ها را انتخاب یا رها کنید", - "Uploading files" : "Uploading files", + "Uploading files" : "پرونده های در حال بارگذاری", "Uploaded files:" : "پرونده های بارگذاری شده:", "By uploading files, you agree to the %1$sterms of service%2$s." : "%2$sبا بارگذاری پرونده ها ، شما با %1$sشرایط خدمات موافقت می کنید", "Share not found" : "اشتراک گذاری یافت نشد", diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js index c50560d6b45..3f64ecb6e64 100644 --- a/apps/files_sharing/l10n/fr.js +++ b/apps/files_sharing/l10n/fr.js @@ -311,16 +311,15 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Utilisez cette méthode pour partager des fichiers avec des personnes ou des équipes au sein de votre organisation. Si le destinataire a déjà accès au partage, mais ne parvient pas à le localiser, vous pouvez lui envoyer le lien interne pour faciliter l'accès.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Cette méthode permet de partager des fichiers avec des personnes ou des organisations extérieures à votre organisation. Les fichiers et les dossiers peuvent être partagés via des liens de partage publics et des adresses e-mail. Vous pouvez également partager avec d'autres comptes Nextcloud hébergés sur différentes instances en utilisant leur ID de cloud fédéré.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Partages qui ne font pas partie des partages internes ou externes. Il peut s'agir de partages provenant d'applications ou d'autres sources.", + "Share with accounts and teams" : "Partager avec des comptes et des équipes", "Unable to load the shares list" : "Impossible de charger la liste des partages", "Expires {relativetime}" : "Expire {relativetime}", "this share just expired." : "ce partage vient d'expirer", "Shared with you by {owner}" : "Partagé avec vous par {owner}", "Internal shares" : "Partages internes", "Internal shares explanation" : "Explication sur les partages internes", - "Share with accounts and teams" : "Partager avec des comptes et des équipes", "External shares" : "Partages externes", "External shares explanation" : "Explication sur les partages externes", - "Email, federated cloud id" : "E-mail, ID de cloud fédéré", "Additional shares" : "Partages supplémentaires", "Additional shares explanation" : "Explication sur les partages supplémentaires", "Link to a file" : "Relier à un fichier", @@ -420,6 +419,7 @@ OC.L10N.register( "Share expire date saved" : "Le partage expirât à la date enregistrée", "You are not allowed to edit link shares that you don't own" : "Vous n'êtes pas autorisé à modifier les liens de partage dont vous n'êtes pas propriétaire", "_1 email address already added_::_{count} email addresses already added_" : ["1 adresse mail déjà ajoutée"," {count}adresses email déjà ajoutées","{count} adresses e-mail déjà ajoutées"], - "_1 email address added_::_{count} email addresses added_" : [" 1 adresse mail ajoutée","{count} adresses mail ajoutées","{count} adresses mail ajoutées"] + "_1 email address added_::_{count} email addresses added_" : [" 1 adresse mail ajoutée","{count} adresses mail ajoutées","{count} adresses mail ajoutées"], + "Email, federated cloud id" : "E-mail, ID de cloud fédéré" }, "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json index b1e36bc9d60..412370041ff 100644 --- a/apps/files_sharing/l10n/fr.json +++ b/apps/files_sharing/l10n/fr.json @@ -309,16 +309,15 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Utilisez cette méthode pour partager des fichiers avec des personnes ou des équipes au sein de votre organisation. Si le destinataire a déjà accès au partage, mais ne parvient pas à le localiser, vous pouvez lui envoyer le lien interne pour faciliter l'accès.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Cette méthode permet de partager des fichiers avec des personnes ou des organisations extérieures à votre organisation. Les fichiers et les dossiers peuvent être partagés via des liens de partage publics et des adresses e-mail. Vous pouvez également partager avec d'autres comptes Nextcloud hébergés sur différentes instances en utilisant leur ID de cloud fédéré.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Partages qui ne font pas partie des partages internes ou externes. Il peut s'agir de partages provenant d'applications ou d'autres sources.", + "Share with accounts and teams" : "Partager avec des comptes et des équipes", "Unable to load the shares list" : "Impossible de charger la liste des partages", "Expires {relativetime}" : "Expire {relativetime}", "this share just expired." : "ce partage vient d'expirer", "Shared with you by {owner}" : "Partagé avec vous par {owner}", "Internal shares" : "Partages internes", "Internal shares explanation" : "Explication sur les partages internes", - "Share with accounts and teams" : "Partager avec des comptes et des équipes", "External shares" : "Partages externes", "External shares explanation" : "Explication sur les partages externes", - "Email, federated cloud id" : "E-mail, ID de cloud fédéré", "Additional shares" : "Partages supplémentaires", "Additional shares explanation" : "Explication sur les partages supplémentaires", "Link to a file" : "Relier à un fichier", @@ -418,6 +417,7 @@ "Share expire date saved" : "Le partage expirât à la date enregistrée", "You are not allowed to edit link shares that you don't own" : "Vous n'êtes pas autorisé à modifier les liens de partage dont vous n'êtes pas propriétaire", "_1 email address already added_::_{count} email addresses already added_" : ["1 adresse mail déjà ajoutée"," {count}adresses email déjà ajoutées","{count} adresses e-mail déjà ajoutées"], - "_1 email address added_::_{count} email addresses added_" : [" 1 adresse mail ajoutée","{count} adresses mail ajoutées","{count} adresses mail ajoutées"] + "_1 email address added_::_{count} email addresses added_" : [" 1 adresse mail ajoutée","{count} adresses mail ajoutées","{count} adresses mail ajoutées"], + "Email, federated cloud id" : "E-mail, ID de cloud fédéré" },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/ga.js b/apps/files_sharing/l10n/ga.js index 0178d730a6d..0d41d4d1235 100644 --- a/apps/files_sharing/l10n/ga.js +++ b/apps/files_sharing/l10n/ga.js @@ -313,16 +313,15 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Bain úsáid as an modh seo chun comhaid a roinnt le daoine aonair nó le foirne laistigh de d'eagraíocht. Má tá rochtain ag an bhfaighteoir ar an sciar cheana féin ach nach féidir leis í a aimsiú, is féidir leat an nasc scaire inmheánach a sheoladh chucu le go mbeidh rochtain éasca air.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Bain úsáid as an modh seo chun comhaid a roinnt le daoine aonair nó le heagraíochtaí lasmuigh de d'eagraíocht. Is féidir comhaid agus fillteáin a roinnt trí naisc scaireanna poiblí agus seoltaí ríomhphoist. Is féidir leat a roinnt freisin le cuntais Nextcloud eile arna óstáil ar chásanna éagsúla ag baint úsáide as a n-ID néil cónasctha.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Scaireanna nach cuid de na scaireanna inmheánacha nó seachtracha iad. Is féidir gur scaireanna iad seo ó aipeanna nó ó fhoinsí eile.", + "Share with accounts and teams" : "Roinn le cuntais agus foirne", "Unable to load the shares list" : "Ní féidir an liosta scaireanna a lódáil", "Expires {relativetime}" : "In éag {relativetime}", "this share just expired." : "tá an sciar seo díreach imithe in éag.", "Shared with you by {owner}" : "Roinnte ag {owner} leat", "Internal shares" : "Scaireanna inmheánacha", "Internal shares explanation" : "Míniú ar scaireanna inmheánacha", - "Share with accounts and teams" : "Roinn le cuntais agus foirne", "External shares" : "Scaireanna seachtracha", "External shares explanation" : "Míniú ar scaireanna seachtracha", - "Email, federated cloud id" : "Ríomhphost, aitheantas scamall cónaidhme", "Additional shares" : "Scaireanna breise", "Additional shares explanation" : "Míniú ar scaireanna breise", "Link to a file" : "Nasc chuig comhad", @@ -422,6 +421,7 @@ OC.L10N.register( "Share expire date saved" : "Comhroinn dáta éaga sábháilte", "You are not allowed to edit link shares that you don't own" : "Níl cead agat scaireanna naisc nach leatsa a chur in eagar", "_1 email address already added_::_{count} email addresses already added_" : ["1 seoladh ríomhphoist curtha leis cheana féin","{count} seoladh ríomhphoist curtha leis cheana","{count} seoladh ríomhphoist curtha leis cheana","{count} seoladh ríomhphoist curtha leis cheana","{count} seoladh ríomhphoist curtha leis cheana"], - "_1 email address added_::_{count} email addresses added_" : ["Cuireadh 1 seoladh ríomhphoist leis","{count} seoladh ríomhphoist curtha leis","{count} seoladh ríomhphoist curtha leis","{count} seoladh ríomhphoist curtha leis","{count} seoladh ríomhphoist curtha leis"] + "_1 email address added_::_{count} email addresses added_" : ["Cuireadh 1 seoladh ríomhphoist leis","{count} seoladh ríomhphoist curtha leis","{count} seoladh ríomhphoist curtha leis","{count} seoladh ríomhphoist curtha leis","{count} seoladh ríomhphoist curtha leis"], + "Email, federated cloud id" : "Ríomhphost, aitheantas scamall cónaidhme" }, "nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);"); diff --git a/apps/files_sharing/l10n/ga.json b/apps/files_sharing/l10n/ga.json index b3810edc4be..418aa49ccc3 100644 --- a/apps/files_sharing/l10n/ga.json +++ b/apps/files_sharing/l10n/ga.json @@ -311,16 +311,15 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Bain úsáid as an modh seo chun comhaid a roinnt le daoine aonair nó le foirne laistigh de d'eagraíocht. Má tá rochtain ag an bhfaighteoir ar an sciar cheana féin ach nach féidir leis í a aimsiú, is féidir leat an nasc scaire inmheánach a sheoladh chucu le go mbeidh rochtain éasca air.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Bain úsáid as an modh seo chun comhaid a roinnt le daoine aonair nó le heagraíochtaí lasmuigh de d'eagraíocht. Is féidir comhaid agus fillteáin a roinnt trí naisc scaireanna poiblí agus seoltaí ríomhphoist. Is féidir leat a roinnt freisin le cuntais Nextcloud eile arna óstáil ar chásanna éagsúla ag baint úsáide as a n-ID néil cónasctha.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Scaireanna nach cuid de na scaireanna inmheánacha nó seachtracha iad. Is féidir gur scaireanna iad seo ó aipeanna nó ó fhoinsí eile.", + "Share with accounts and teams" : "Roinn le cuntais agus foirne", "Unable to load the shares list" : "Ní féidir an liosta scaireanna a lódáil", "Expires {relativetime}" : "In éag {relativetime}", "this share just expired." : "tá an sciar seo díreach imithe in éag.", "Shared with you by {owner}" : "Roinnte ag {owner} leat", "Internal shares" : "Scaireanna inmheánacha", "Internal shares explanation" : "Míniú ar scaireanna inmheánacha", - "Share with accounts and teams" : "Roinn le cuntais agus foirne", "External shares" : "Scaireanna seachtracha", "External shares explanation" : "Míniú ar scaireanna seachtracha", - "Email, federated cloud id" : "Ríomhphost, aitheantas scamall cónaidhme", "Additional shares" : "Scaireanna breise", "Additional shares explanation" : "Míniú ar scaireanna breise", "Link to a file" : "Nasc chuig comhad", @@ -420,6 +419,7 @@ "Share expire date saved" : "Comhroinn dáta éaga sábháilte", "You are not allowed to edit link shares that you don't own" : "Níl cead agat scaireanna naisc nach leatsa a chur in eagar", "_1 email address already added_::_{count} email addresses already added_" : ["1 seoladh ríomhphoist curtha leis cheana féin","{count} seoladh ríomhphoist curtha leis cheana","{count} seoladh ríomhphoist curtha leis cheana","{count} seoladh ríomhphoist curtha leis cheana","{count} seoladh ríomhphoist curtha leis cheana"], - "_1 email address added_::_{count} email addresses added_" : ["Cuireadh 1 seoladh ríomhphoist leis","{count} seoladh ríomhphoist curtha leis","{count} seoladh ríomhphoist curtha leis","{count} seoladh ríomhphoist curtha leis","{count} seoladh ríomhphoist curtha leis"] + "_1 email address added_::_{count} email addresses added_" : ["Cuireadh 1 seoladh ríomhphoist leis","{count} seoladh ríomhphoist curtha leis","{count} seoladh ríomhphoist curtha leis","{count} seoladh ríomhphoist curtha leis","{count} seoladh ríomhphoist curtha leis"], + "Email, federated cloud id" : "Ríomhphost, aitheantas scamall cónaidhme" },"pluralForm" :"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/gl.js b/apps/files_sharing/l10n/gl.js index 2e20156781c..e4e22208e85 100644 --- a/apps/files_sharing/l10n/gl.js +++ b/apps/files_sharing/l10n/gl.js @@ -311,16 +311,15 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Empregue este método para compartir ficheiros con persoas ou equipos dentro da súa organización. Se o destinatario xa ten acceso á compartición mais non pode localizalo, pode enviarlles a ligazón de compartición interna para un acceso doado.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Empregue este método para compartir ficheiros con persoas ou organizacións alleas á súa organización. Os ficheiros e cartafoles pódense compartir mediante ligazóns públicas e enderezos de correo-e. Tamén pode compartir con outras contas de Nextcloud aloxadas en diferentes instancias usando o seu ID de nube federado.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Comparticións que non formen parte das comparticións internas ou externas. Pode tratarse de comparticións desde aplicacións ou outras orixes.", + "Share with accounts and teams" : "Compartir con contas e equipos", "Unable to load the shares list" : "Non é posíbel cargar a lista de comparticións", "Expires {relativetime}" : "Caducidades {relativetime}", "this share just expired." : "vén de caducar esta compartición", "Shared with you by {owner}" : "Compartido con Vde. por {owner}", "Internal shares" : "Comparticións internas", "Internal shares explanation" : "Explicación das comparticións internas", - "Share with accounts and teams" : "Compartir con contas e equipos", "External shares" : "Comparticións externas", "External shares explanation" : "Explicación das comparticións externas", - "Email, federated cloud id" : "Correo-e, ID da nube federada", "Additional shares" : "Comparticións adicionais", "Additional shares explanation" : "Explicación das comparticións adicionais", "Link to a file" : "Ligazón a un ficheiro", @@ -420,6 +419,7 @@ OC.L10N.register( "Share expire date saved" : "Gardouse a data de caducidade da compartición", "You are not allowed to edit link shares that you don't own" : "Vde. non ten permiso para editar as ligazóns compartidas das que non é o propietario", "_1 email address already added_::_{count} email addresses already added_" : ["Xa foi engadido 1 enderezo de correo","Xa foron engadidos {count} enderezos de correo"], - "_1 email address added_::_{count} email addresses added_" : ["Foi engadido 1 enderezo de correo","Foron engadidos {count} enderezos de correo"] + "_1 email address added_::_{count} email addresses added_" : ["Foi engadido 1 enderezo de correo","Foron engadidos {count} enderezos de correo"], + "Email, federated cloud id" : "Correo-e, ID da nube federada" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/gl.json b/apps/files_sharing/l10n/gl.json index 54b670b06a0..a160b911d21 100644 --- a/apps/files_sharing/l10n/gl.json +++ b/apps/files_sharing/l10n/gl.json @@ -309,16 +309,15 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Empregue este método para compartir ficheiros con persoas ou equipos dentro da súa organización. Se o destinatario xa ten acceso á compartición mais non pode localizalo, pode enviarlles a ligazón de compartición interna para un acceso doado.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Empregue este método para compartir ficheiros con persoas ou organizacións alleas á súa organización. Os ficheiros e cartafoles pódense compartir mediante ligazóns públicas e enderezos de correo-e. Tamén pode compartir con outras contas de Nextcloud aloxadas en diferentes instancias usando o seu ID de nube federado.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Comparticións que non formen parte das comparticións internas ou externas. Pode tratarse de comparticións desde aplicacións ou outras orixes.", + "Share with accounts and teams" : "Compartir con contas e equipos", "Unable to load the shares list" : "Non é posíbel cargar a lista de comparticións", "Expires {relativetime}" : "Caducidades {relativetime}", "this share just expired." : "vén de caducar esta compartición", "Shared with you by {owner}" : "Compartido con Vde. por {owner}", "Internal shares" : "Comparticións internas", "Internal shares explanation" : "Explicación das comparticións internas", - "Share with accounts and teams" : "Compartir con contas e equipos", "External shares" : "Comparticións externas", "External shares explanation" : "Explicación das comparticións externas", - "Email, federated cloud id" : "Correo-e, ID da nube federada", "Additional shares" : "Comparticións adicionais", "Additional shares explanation" : "Explicación das comparticións adicionais", "Link to a file" : "Ligazón a un ficheiro", @@ -418,6 +417,7 @@ "Share expire date saved" : "Gardouse a data de caducidade da compartición", "You are not allowed to edit link shares that you don't own" : "Vde. non ten permiso para editar as ligazóns compartidas das que non é o propietario", "_1 email address already added_::_{count} email addresses already added_" : ["Xa foi engadido 1 enderezo de correo","Xa foron engadidos {count} enderezos de correo"], - "_1 email address added_::_{count} email addresses added_" : ["Foi engadido 1 enderezo de correo","Foron engadidos {count} enderezos de correo"] + "_1 email address added_::_{count} email addresses added_" : ["Foi engadido 1 enderezo de correo","Foron engadidos {count} enderezos de correo"], + "Email, federated cloud id" : "Correo-e, ID da nube federada" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/is.js b/apps/files_sharing/l10n/is.js index cf7965eb69c..be0b3053f38 100644 --- a/apps/files_sharing/l10n/is.js +++ b/apps/files_sharing/l10n/is.js @@ -286,16 +286,15 @@ OC.L10N.register( "Unable to fetch inherited shares" : "Mistókst að sækja erfðar sameignir", "Link shares" : "Sameignartenglar", "Shares" : "Sameignir", + "Share with accounts and teams" : "Deila með notendaaðgöngum og teymum", "Unable to load the shares list" : "Mistókst aði hlaða inn lista yfir sameignir", "Expires {relativetime}" : "Rennur út {relativetime}", "this share just expired." : "Þessi sameign var að renna út.", "Shared with you by {owner}" : "Deilt með þér af {owner}", "Internal shares" : "Innri sameignir", "Internal shares explanation" : "Útskýring á innri sameignum", - "Share with accounts and teams" : "Deila með notendaaðgöngum og teymum", "External shares" : "Utanaðkomandi sameignir", "External shares explanation" : "Útskýring á utanaðkomandi sameignum", - "Email, federated cloud id" : "Tölvupóstfang, skýjasambandsauðkenni (Federated Cloud ID)", "Additional shares" : "Viðbótarsameignir", "Additional shares explanation" : "Útskýring á viðbótarsameignum", "Link to a file" : "Tengill í skrá", @@ -393,6 +392,7 @@ OC.L10N.register( "Share expire date saved" : "Lokagildistími sameignar vistaður", "You are not allowed to edit link shares that you don't own" : "Þú hefur ekki heimild til að breyta tenglum á sameignir sem þú átt ekki.", "_1 email address already added_::_{count} email addresses already added_" : ["1 tölvupóstfangi þegar bætt við","{count} tölvupóstföngum þegar bætt við"], - "_1 email address added_::_{count} email addresses added_" : ["1 tölvupóstfangi bætt við","{count} tölvupóstföngum bætt við"] + "_1 email address added_::_{count} email addresses added_" : ["1 tölvupóstfangi bætt við","{count} tölvupóstföngum bætt við"], + "Email, federated cloud id" : "Tölvupóstfang, skýjasambandsauðkenni (Federated Cloud ID)" }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/files_sharing/l10n/is.json b/apps/files_sharing/l10n/is.json index cfdddcc228c..02dcf39b0f0 100644 --- a/apps/files_sharing/l10n/is.json +++ b/apps/files_sharing/l10n/is.json @@ -284,16 +284,15 @@ "Unable to fetch inherited shares" : "Mistókst að sækja erfðar sameignir", "Link shares" : "Sameignartenglar", "Shares" : "Sameignir", + "Share with accounts and teams" : "Deila með notendaaðgöngum og teymum", "Unable to load the shares list" : "Mistókst aði hlaða inn lista yfir sameignir", "Expires {relativetime}" : "Rennur út {relativetime}", "this share just expired." : "Þessi sameign var að renna út.", "Shared with you by {owner}" : "Deilt með þér af {owner}", "Internal shares" : "Innri sameignir", "Internal shares explanation" : "Útskýring á innri sameignum", - "Share with accounts and teams" : "Deila með notendaaðgöngum og teymum", "External shares" : "Utanaðkomandi sameignir", "External shares explanation" : "Útskýring á utanaðkomandi sameignum", - "Email, federated cloud id" : "Tölvupóstfang, skýjasambandsauðkenni (Federated Cloud ID)", "Additional shares" : "Viðbótarsameignir", "Additional shares explanation" : "Útskýring á viðbótarsameignum", "Link to a file" : "Tengill í skrá", @@ -391,6 +390,7 @@ "Share expire date saved" : "Lokagildistími sameignar vistaður", "You are not allowed to edit link shares that you don't own" : "Þú hefur ekki heimild til að breyta tenglum á sameignir sem þú átt ekki.", "_1 email address already added_::_{count} email addresses already added_" : ["1 tölvupóstfangi þegar bætt við","{count} tölvupóstföngum þegar bætt við"], - "_1 email address added_::_{count} email addresses added_" : ["1 tölvupóstfangi bætt við","{count} tölvupóstföngum bætt við"] + "_1 email address added_::_{count} email addresses added_" : ["1 tölvupóstfangi bætt við","{count} tölvupóstföngum bætt við"], + "Email, federated cloud id" : "Tölvupóstfang, skýjasambandsauðkenni (Federated Cloud ID)" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js index ba41fd120a2..2b01de664fa 100644 --- a/apps/files_sharing/l10n/it.js +++ b/apps/files_sharing/l10n/it.js @@ -313,16 +313,15 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Utilizza questo metodo per condividere file con singoli o team all'interno della tua organizzazione. Se il destinatario ha già accesso alla condivisione ma non riesce a individuarla, puoi inviargli il link di condivisione interno per un facile accesso.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Utilizza questo metodo per condividere file con individui o organizzazioni esterne alla tua organizzazione. File e cartelle possono essere condivisi tramite link di condivisione pubblici e indirizzi e-mail. Puoi anche condividere con altri account Nextcloud ospitati su istanze diverse utilizzando il loro ID cloud federato.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Condivisioni che non fanno parte delle condivisioni interne o esterne. Possono essere condivisioni da app o altre fonti.", + "Share with accounts and teams" : "Condividi con account e team", "Unable to load the shares list" : "Impossibile caricare l'elenco delle condivisioni", "Expires {relativetime}" : "Scade il {relativetime}", "this share just expired." : "questa condivisione è appena scaduta.", "Shared with you by {owner}" : "Condiviso con te da {owner}", "Internal shares" : "Condivisioni interne", "Internal shares explanation" : "Spiegazione delle condivisioni interne", - "Share with accounts and teams" : "Condividi con account e team", "External shares" : "Condivisioni esterne", "External shares explanation" : "Spiegazione delle condivisioni esterne", - "Email, federated cloud id" : "E-mail, ID cloud federato", "Additional shares" : "Azioni aggiuntive", "Additional shares explanation" : "Spiegazione delle azioni aggiuntive", "Link to a file" : "Collega a un file", @@ -422,6 +421,7 @@ OC.L10N.register( "Share expire date saved" : "Data di scadenza della condivisione salvata", "You are not allowed to edit link shares that you don't own" : "Non ti è consentito modificare le condivisioni di collegamenti che non ti appartengono", "_1 email address already added_::_{count} email addresses already added_" : ["1 indirizzo di posta già aggiunto","{count} indirizzi di posta già aggiunti","{count} indirizzi di posta già aggiunti"], - "_1 email address added_::_{count} email addresses added_" : ["1 indirizzo di posta aggiunto","{count} indirizzi di posta aggiunti","{count} indirizzi di posta aggiunti"] + "_1 email address added_::_{count} email addresses added_" : ["1 indirizzo di posta aggiunto","{count} indirizzi di posta aggiunti","{count} indirizzi di posta aggiunti"], + "Email, federated cloud id" : "E-mail, ID cloud federato" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json index 5f190a1b6a7..79d7717597b 100644 --- a/apps/files_sharing/l10n/it.json +++ b/apps/files_sharing/l10n/it.json @@ -311,16 +311,15 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Utilizza questo metodo per condividere file con singoli o team all'interno della tua organizzazione. Se il destinatario ha già accesso alla condivisione ma non riesce a individuarla, puoi inviargli il link di condivisione interno per un facile accesso.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Utilizza questo metodo per condividere file con individui o organizzazioni esterne alla tua organizzazione. File e cartelle possono essere condivisi tramite link di condivisione pubblici e indirizzi e-mail. Puoi anche condividere con altri account Nextcloud ospitati su istanze diverse utilizzando il loro ID cloud federato.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Condivisioni che non fanno parte delle condivisioni interne o esterne. Possono essere condivisioni da app o altre fonti.", + "Share with accounts and teams" : "Condividi con account e team", "Unable to load the shares list" : "Impossibile caricare l'elenco delle condivisioni", "Expires {relativetime}" : "Scade il {relativetime}", "this share just expired." : "questa condivisione è appena scaduta.", "Shared with you by {owner}" : "Condiviso con te da {owner}", "Internal shares" : "Condivisioni interne", "Internal shares explanation" : "Spiegazione delle condivisioni interne", - "Share with accounts and teams" : "Condividi con account e team", "External shares" : "Condivisioni esterne", "External shares explanation" : "Spiegazione delle condivisioni esterne", - "Email, federated cloud id" : "E-mail, ID cloud federato", "Additional shares" : "Azioni aggiuntive", "Additional shares explanation" : "Spiegazione delle azioni aggiuntive", "Link to a file" : "Collega a un file", @@ -420,6 +419,7 @@ "Share expire date saved" : "Data di scadenza della condivisione salvata", "You are not allowed to edit link shares that you don't own" : "Non ti è consentito modificare le condivisioni di collegamenti che non ti appartengono", "_1 email address already added_::_{count} email addresses already added_" : ["1 indirizzo di posta già aggiunto","{count} indirizzi di posta già aggiunti","{count} indirizzi di posta già aggiunti"], - "_1 email address added_::_{count} email addresses added_" : ["1 indirizzo di posta aggiunto","{count} indirizzi di posta aggiunti","{count} indirizzi di posta aggiunti"] + "_1 email address added_::_{count} email addresses added_" : ["1 indirizzo di posta aggiunto","{count} indirizzi di posta aggiunti","{count} indirizzi di posta aggiunti"], + "Email, federated cloud id" : "E-mail, ID cloud federato" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/ja.js b/apps/files_sharing/l10n/ja.js index 6b4a65e73cc..062614d2fe3 100644 --- a/apps/files_sharing/l10n/ja.js +++ b/apps/files_sharing/l10n/ja.js @@ -313,16 +313,15 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "組織内の個人またはチームとファイルを共有するには、この方法を使用します。受信者がすでに共有にアクセスできるが、その場所を見つけられない場合は、簡単にアクセスできるように内部共有リンクを送信できます。", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "組織外の個人や組織とファイルを共有するには、この方法を使用します。ファイルやフォルダは、パブリック共有リンクやメールアドレスで共有できます。また、連携クラウドIDを使用して、異なるインスタンスにホストされている他のNextcloudアカウントと共有することもできます。", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "内部または外部共有に含まれない共有。これはアプリや他のソースからの共有になります。", + "Share with accounts and teams" : "アカウントとチームで共有", "Unable to load the shares list" : "共有リストを読み込めません", "Expires {relativetime}" : "有効期限 {relativetime}", "this share just expired." : "この共有は期限切れになりました。", "Shared with you by {owner}" : "{owner} と共有中", "Internal shares" : "内部共有", "Internal shares explanation" : "内部共有の説明", - "Share with accounts and teams" : "アカウントとチームで共有", "External shares" : "外部共有", "External shares explanation" : "外部共有の説明", - "Email, federated cloud id" : "電子メール、連携クラウドID", "Additional shares" : "追加の共有", "Additional shares explanation" : "追加の共有の説明", "Link to a file" : "ファイルへリンク", @@ -422,6 +421,7 @@ OC.L10N.register( "Share expire date saved" : "共有の有効期限が保存されました", "You are not allowed to edit link shares that you don't own" : "あなたが所有していない共有リンクを編集することは許可されていません", "_1 email address already added_::_{count} email addresses already added_" : ["{count} メールアドレスはすでに追加されています"], - "_1 email address added_::_{count} email addresses added_" : ["{count} メールアドレスが追加されました"] + "_1 email address added_::_{count} email addresses added_" : ["{count} メールアドレスが追加されました"], + "Email, federated cloud id" : "電子メール、連携クラウドID" }, "nplurals=1; plural=0;"); diff --git a/apps/files_sharing/l10n/ja.json b/apps/files_sharing/l10n/ja.json index 774facc0fbf..c2657abce02 100644 --- a/apps/files_sharing/l10n/ja.json +++ b/apps/files_sharing/l10n/ja.json @@ -311,16 +311,15 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "組織内の個人またはチームとファイルを共有するには、この方法を使用します。受信者がすでに共有にアクセスできるが、その場所を見つけられない場合は、簡単にアクセスできるように内部共有リンクを送信できます。", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "組織外の個人や組織とファイルを共有するには、この方法を使用します。ファイルやフォルダは、パブリック共有リンクやメールアドレスで共有できます。また、連携クラウドIDを使用して、異なるインスタンスにホストされている他のNextcloudアカウントと共有することもできます。", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "内部または外部共有に含まれない共有。これはアプリや他のソースからの共有になります。", + "Share with accounts and teams" : "アカウントとチームで共有", "Unable to load the shares list" : "共有リストを読み込めません", "Expires {relativetime}" : "有効期限 {relativetime}", "this share just expired." : "この共有は期限切れになりました。", "Shared with you by {owner}" : "{owner} と共有中", "Internal shares" : "内部共有", "Internal shares explanation" : "内部共有の説明", - "Share with accounts and teams" : "アカウントとチームで共有", "External shares" : "外部共有", "External shares explanation" : "外部共有の説明", - "Email, federated cloud id" : "電子メール、連携クラウドID", "Additional shares" : "追加の共有", "Additional shares explanation" : "追加の共有の説明", "Link to a file" : "ファイルへリンク", @@ -420,6 +419,7 @@ "Share expire date saved" : "共有の有効期限が保存されました", "You are not allowed to edit link shares that you don't own" : "あなたが所有していない共有リンクを編集することは許可されていません", "_1 email address already added_::_{count} email addresses already added_" : ["{count} メールアドレスはすでに追加されています"], - "_1 email address added_::_{count} email addresses added_" : ["{count} メールアドレスが追加されました"] + "_1 email address added_::_{count} email addresses added_" : ["{count} メールアドレスが追加されました"], + "Email, federated cloud id" : "電子メール、連携クラウドID" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/ko.js b/apps/files_sharing/l10n/ko.js index 20f273121fc..87b568cf22f 100644 --- a/apps/files_sharing/l10n/ko.js +++ b/apps/files_sharing/l10n/ko.js @@ -313,16 +313,15 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "이 방법을 사용하여 조직 내 개인 또는 팀과 파일을 공유하세요. 수신자가 이미 공유 폴더에 접근할 수 있지만 위치를 찾을 수 없는 경우, 쉽게 접근할 수 있도록 내부 공유 링크를 보낼 수 있습니다.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "이 방법을 사용하면 조직 외부의 조직이나 개인과 파일을 공유할 수 있습니다. 파일과 폴더는 공개 공유 링크와 이메일 주소를 통해 공유할 수 있습니다. 또한, 다른 인스턴스에 소속된 다른 Nextcloud 계정과도 연합 클라우드 ID를 사용하여 공유할 수 있습니다.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "내부 또는 외부 공유에 포함되지 않은 공유입니다. 앱이나 다른 소스에서 공유된 내용이 여기에 해당할 수 있습니다.", + "Share with accounts and teams" : "계정 및 팀과 공유", "Unable to load the shares list" : "공유 목록을 불러올 수 없음", "Expires {relativetime}" : "{relativetime}에 만료", "this share just expired." : "이 공유는 방금 만료되었습니다.", "Shared with you by {owner}" : "{owner}님이 당신에게 공유함", "Internal shares" : "내부 공유", "Internal shares explanation" : "내부 공유 설명", - "Share with accounts and teams" : "계정 및 팀과 공유", "External shares" : "외부 공유", "External shares explanation" : "외부 공유 설명", - "Email, federated cloud id" : "이메일, 연합 클라우드 ID", "Additional shares" : "부가적 공유", "Additional shares explanation" : "부가적 공유 설명", "Link to a file" : "파일로 향한 링크", @@ -421,6 +420,7 @@ OC.L10N.register( "Share expire date saved" : "공유 만료일 저장됨", "You are not allowed to edit link shares that you don't own" : "당신이 것이 아닌 링크 공유를 편집할 권한이 없습니다.", "_1 email address already added_::_{count} email addresses already added_" : ["{count}개 이메일 주소가 이미 추가됨"], - "_1 email address added_::_{count} email addresses added_" : ["{count}개 이메일 주소 추가함"] + "_1 email address added_::_{count} email addresses added_" : ["{count}개 이메일 주소 추가함"], + "Email, federated cloud id" : "이메일, 연합 클라우드 ID" }, "nplurals=1; plural=0;"); diff --git a/apps/files_sharing/l10n/ko.json b/apps/files_sharing/l10n/ko.json index ae50282cff2..9d1e8f09b2b 100644 --- a/apps/files_sharing/l10n/ko.json +++ b/apps/files_sharing/l10n/ko.json @@ -311,16 +311,15 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "이 방법을 사용하여 조직 내 개인 또는 팀과 파일을 공유하세요. 수신자가 이미 공유 폴더에 접근할 수 있지만 위치를 찾을 수 없는 경우, 쉽게 접근할 수 있도록 내부 공유 링크를 보낼 수 있습니다.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "이 방법을 사용하면 조직 외부의 조직이나 개인과 파일을 공유할 수 있습니다. 파일과 폴더는 공개 공유 링크와 이메일 주소를 통해 공유할 수 있습니다. 또한, 다른 인스턴스에 소속된 다른 Nextcloud 계정과도 연합 클라우드 ID를 사용하여 공유할 수 있습니다.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "내부 또는 외부 공유에 포함되지 않은 공유입니다. 앱이나 다른 소스에서 공유된 내용이 여기에 해당할 수 있습니다.", + "Share with accounts and teams" : "계정 및 팀과 공유", "Unable to load the shares list" : "공유 목록을 불러올 수 없음", "Expires {relativetime}" : "{relativetime}에 만료", "this share just expired." : "이 공유는 방금 만료되었습니다.", "Shared with you by {owner}" : "{owner}님이 당신에게 공유함", "Internal shares" : "내부 공유", "Internal shares explanation" : "내부 공유 설명", - "Share with accounts and teams" : "계정 및 팀과 공유", "External shares" : "외부 공유", "External shares explanation" : "외부 공유 설명", - "Email, federated cloud id" : "이메일, 연합 클라우드 ID", "Additional shares" : "부가적 공유", "Additional shares explanation" : "부가적 공유 설명", "Link to a file" : "파일로 향한 링크", @@ -419,6 +418,7 @@ "Share expire date saved" : "공유 만료일 저장됨", "You are not allowed to edit link shares that you don't own" : "당신이 것이 아닌 링크 공유를 편집할 권한이 없습니다.", "_1 email address already added_::_{count} email addresses already added_" : ["{count}개 이메일 주소가 이미 추가됨"], - "_1 email address added_::_{count} email addresses added_" : ["{count}개 이메일 주소 추가함"] + "_1 email address added_::_{count} email addresses added_" : ["{count}개 이메일 주소 추가함"], + "Email, federated cloud id" : "이메일, 연합 클라우드 ID" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/mk.js b/apps/files_sharing/l10n/mk.js index 303ae1fbb25..0c5e7b6b39d 100644 --- a/apps/files_sharing/l10n/mk.js +++ b/apps/files_sharing/l10n/mk.js @@ -303,16 +303,15 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Користете го овој метод за споделување датотеки со поединци или тимови во вашата организација. Ако примачот веќе има пристап до споделувањето, но не може да го лоцира, можете да му ја испратите внатрешната врска за споделување за лесен пристап.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Користете го овој метод за споделување датотеки со поединци или организации надвор од вашата организација. Датотеките и папките може да се споделуваат преку јавни линкови и адреси на е-пошта. Можете исто така да споделувате со други сметки на Nextcloud хостирани на различни истанци користејќи го нивниот федеративен ID.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Споделувања кои не се дел од внатрешни или надворешни споделувања. Ова може да биде споделување од апликации или други извори.", + "Share with accounts and teams" : "Сподели со корисници и тимови", "Unable to load the shares list" : "Неможе да се вчита листата на споделувања", "Expires {relativetime}" : "Истекува {relativetime}", "this share just expired." : "ова споделување штотуку истече.", "Shared with you by {owner}" : "Споделено со Вас од {owner}", "Internal shares" : "Внатрешни споделувања", "Internal shares explanation" : "Објаснување за внатрешни споделувања", - "Share with accounts and teams" : "Сподели со корисници и тимови", "External shares" : "Надворешни споделувања", "External shares explanation" : "Објаснување за надворешни споделувања", - "Email, federated cloud id" : "Е-пошта, федерален ИД", "Additional shares" : "Дополнителни споделувања", "Additional shares explanation" : "Објаснување за додатни споделувања", "Link to a file" : "Линк до датотеката", @@ -408,6 +407,7 @@ OC.L10N.register( "Allow download" : "Дозволи преземање", "You are not allowed to edit link shares that you don't own" : "Не ви е дозволено да ги уредувате споделувањата кој не се ваши", "_1 email address already added_::_{count} email addresses already added_" : ["1 е-пошта адреса е веќе додадена","{count} е-пошта адреси се веќе додадени"], - "_1 email address added_::_{count} email addresses added_" : ["1 е-пошта адреса е додадена","{count} е-пошта адреси се додадени"] + "_1 email address added_::_{count} email addresses added_" : ["1 е-пошта адреса е додадена","{count} е-пошта адреси се додадени"], + "Email, federated cloud id" : "Е-пошта, федерален ИД" }, "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"); diff --git a/apps/files_sharing/l10n/mk.json b/apps/files_sharing/l10n/mk.json index 2e65dc61c7d..e96fdbbce84 100644 --- a/apps/files_sharing/l10n/mk.json +++ b/apps/files_sharing/l10n/mk.json @@ -301,16 +301,15 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Користете го овој метод за споделување датотеки со поединци или тимови во вашата организација. Ако примачот веќе има пристап до споделувањето, но не може да го лоцира, можете да му ја испратите внатрешната врска за споделување за лесен пристап.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Користете го овој метод за споделување датотеки со поединци или организации надвор од вашата организација. Датотеките и папките може да се споделуваат преку јавни линкови и адреси на е-пошта. Можете исто така да споделувате со други сметки на Nextcloud хостирани на различни истанци користејќи го нивниот федеративен ID.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Споделувања кои не се дел од внатрешни или надворешни споделувања. Ова може да биде споделување од апликации или други извори.", + "Share with accounts and teams" : "Сподели со корисници и тимови", "Unable to load the shares list" : "Неможе да се вчита листата на споделувања", "Expires {relativetime}" : "Истекува {relativetime}", "this share just expired." : "ова споделување штотуку истече.", "Shared with you by {owner}" : "Споделено со Вас од {owner}", "Internal shares" : "Внатрешни споделувања", "Internal shares explanation" : "Објаснување за внатрешни споделувања", - "Share with accounts and teams" : "Сподели со корисници и тимови", "External shares" : "Надворешни споделувања", "External shares explanation" : "Објаснување за надворешни споделувања", - "Email, federated cloud id" : "Е-пошта, федерален ИД", "Additional shares" : "Дополнителни споделувања", "Additional shares explanation" : "Објаснување за додатни споделувања", "Link to a file" : "Линк до датотеката", @@ -406,6 +405,7 @@ "Allow download" : "Дозволи преземање", "You are not allowed to edit link shares that you don't own" : "Не ви е дозволено да ги уредувате споделувањата кој не се ваши", "_1 email address already added_::_{count} email addresses already added_" : ["1 е-пошта адреса е веќе додадена","{count} е-пошта адреси се веќе додадени"], - "_1 email address added_::_{count} email addresses added_" : ["1 е-пошта адреса е додадена","{count} е-пошта адреси се додадени"] + "_1 email address added_::_{count} email addresses added_" : ["1 е-пошта адреса е додадена","{count} е-пошта адреси се додадени"], + "Email, federated cloud id" : "Е-пошта, федерален ИД" },"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/pl.js b/apps/files_sharing/l10n/pl.js index 5781e3771b8..369d8eb5eab 100644 --- a/apps/files_sharing/l10n/pl.js +++ b/apps/files_sharing/l10n/pl.js @@ -313,16 +313,15 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Użyj tej metody, aby udostępniać pliki osobom lub zespołom w swojej organizacji. Jeśli odbiorca ma już dostęp do udostępnionego pliku, ale nie może go zlokalizować, możesz wysłać mu wewnętrzny link do udostępniania, aby ułatwić dostęp.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Użyj tej metody, aby udostępniać pliki osobom lub organizacjom spoza Twojej organizacji. Pliki i katalogi można udostępniać za pośrednictwem publicznych linków udostępniania i adresów e-mail. Możesz również udostępniać pliki innym kontom Nextcloud hostowanym na różnych instancjach, używając ich identyfikatora Chmury Federacyjnej.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Udostępnienia, które nie są częścią udostępnień wewnętrznych lub zewnętrznych. Mogą to być udostępnienia z aplikacji lub innych źródeł.", + "Share with accounts and teams" : "Udostępnij kontom i zespołom", "Unable to load the shares list" : "Nie można pobrać listy udostępnień", "Expires {relativetime}" : "Wygasa {relativetime}", "this share just expired." : "te udostępnienie właśnie wygasło.", "Shared with you by {owner}" : "Udostępnione Tobie przez {owner}", "Internal shares" : "Udostępnianie wewnętrzne", "Internal shares explanation" : "Objaśnienie udostępnień wewnętrznych", - "Share with accounts and teams" : "Udostępnij kontom i zespołom", "External shares" : "Udostępnienia zewnętrzne", "External shares explanation" : "Objaśnienie udostępnień zewnętrznych", - "Email, federated cloud id" : "E-mail, identyfikator Chmury Federacyjnej", "Additional shares" : "Dodatkowe udostępnienia", "Additional shares explanation" : "Objaśnienia dodatkowych udostępnień", "Link to a file" : "Link do pliku", @@ -422,6 +421,8 @@ OC.L10N.register( "Share expire date saved" : "Zapisano datę ważności udziału", "You are not allowed to edit link shares that you don't own" : "Nie możesz modyfikować udostępnionych odnośników, których nie jesteś właścicielem", "_1 email address already added_::_{count} email addresses already added_" : ["Dodano już 1 adres e-mail","Dodano już {count} adresy e-mail","Dodano już {count} adresów e-mail","Dodano już {count} adresów e-mail"], - "_1 email address added_::_{count} email addresses added_" : ["Dodano 1 adres e-mail","Dodano {count} adresy e-mail","Dodano {count} adresów e-mail","Dodano {count} adresów e-mail"] + "_1 email address added_::_{count} email addresses added_" : ["Dodano 1 adres e-mail","Dodano {count} adresy e-mail","Dodano {count} adresów e-mail","Dodano {count} adresów e-mail"], + "Share with accounts, teams, federated cloud id" : "Udostępnij kontom, zespołom, ID Chmury Federacyjnej", + "Email, federated cloud id" : "E-mail, ID Chmury Federacyjnej" }, "nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"); diff --git a/apps/files_sharing/l10n/pl.json b/apps/files_sharing/l10n/pl.json index a9997c93454..278d634474f 100644 --- a/apps/files_sharing/l10n/pl.json +++ b/apps/files_sharing/l10n/pl.json @@ -311,16 +311,15 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Użyj tej metody, aby udostępniać pliki osobom lub zespołom w swojej organizacji. Jeśli odbiorca ma już dostęp do udostępnionego pliku, ale nie może go zlokalizować, możesz wysłać mu wewnętrzny link do udostępniania, aby ułatwić dostęp.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Użyj tej metody, aby udostępniać pliki osobom lub organizacjom spoza Twojej organizacji. Pliki i katalogi można udostępniać za pośrednictwem publicznych linków udostępniania i adresów e-mail. Możesz również udostępniać pliki innym kontom Nextcloud hostowanym na różnych instancjach, używając ich identyfikatora Chmury Federacyjnej.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Udostępnienia, które nie są częścią udostępnień wewnętrznych lub zewnętrznych. Mogą to być udostępnienia z aplikacji lub innych źródeł.", + "Share with accounts and teams" : "Udostępnij kontom i zespołom", "Unable to load the shares list" : "Nie można pobrać listy udostępnień", "Expires {relativetime}" : "Wygasa {relativetime}", "this share just expired." : "te udostępnienie właśnie wygasło.", "Shared with you by {owner}" : "Udostępnione Tobie przez {owner}", "Internal shares" : "Udostępnianie wewnętrzne", "Internal shares explanation" : "Objaśnienie udostępnień wewnętrznych", - "Share with accounts and teams" : "Udostępnij kontom i zespołom", "External shares" : "Udostępnienia zewnętrzne", "External shares explanation" : "Objaśnienie udostępnień zewnętrznych", - "Email, federated cloud id" : "E-mail, identyfikator Chmury Federacyjnej", "Additional shares" : "Dodatkowe udostępnienia", "Additional shares explanation" : "Objaśnienia dodatkowych udostępnień", "Link to a file" : "Link do pliku", @@ -420,6 +419,8 @@ "Share expire date saved" : "Zapisano datę ważności udziału", "You are not allowed to edit link shares that you don't own" : "Nie możesz modyfikować udostępnionych odnośników, których nie jesteś właścicielem", "_1 email address already added_::_{count} email addresses already added_" : ["Dodano już 1 adres e-mail","Dodano już {count} adresy e-mail","Dodano już {count} adresów e-mail","Dodano już {count} adresów e-mail"], - "_1 email address added_::_{count} email addresses added_" : ["Dodano 1 adres e-mail","Dodano {count} adresy e-mail","Dodano {count} adresów e-mail","Dodano {count} adresów e-mail"] + "_1 email address added_::_{count} email addresses added_" : ["Dodano 1 adres e-mail","Dodano {count} adresy e-mail","Dodano {count} adresów e-mail","Dodano {count} adresów e-mail"], + "Share with accounts, teams, federated cloud id" : "Udostępnij kontom, zespołom, ID Chmury Federacyjnej", + "Email, federated cloud id" : "E-mail, ID Chmury Federacyjnej" },"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js index 0e9f6012dc3..fa2ed461add 100644 --- a/apps/files_sharing/l10n/pt_BR.js +++ b/apps/files_sharing/l10n/pt_BR.js @@ -158,7 +158,7 @@ OC.L10N.register( "Add a note" : "Adicionar uma nota", "Note for recipient" : "Nota para o destinatário", "Add a note to help people understand what you are requesting." : "Adicione uma nota para ajudar as pessoas a entenderem o que você está solicitando.", - "You can add links, date or any other information that will help the recipient understand what you are requesting." : "Você pode adicionar links, data ou qualquer outra informação que ajude o destinatário a entender o que você está solicitando.", + "You can add links, date or any other information that will help the recipient understand what you are requesting." : "Você pode adicionar links, datas ou qualquer outra informação que ajude o destinatário a entender o que você está solicitando.", "Close" : "Fechar", "_Send email and close_::_Send {count} emails and close_" : ["Envie e-mail e feche","Envie {count} e-mails e feche","Envie {count} e-mails e feche"], "Please select a folder, you cannot share the root directory." : "Selecione uma pasta, você não pode compartilhar o diretório raiz.", @@ -215,16 +215,16 @@ OC.L10N.register( "Share link ({index})" : "Compartilhar link ({index})", "Create public link" : "Criar link público", "Actions for \"{title}\"" : "Ações para \"{title}\"", - "Copy public link of \"{title}\" to clipboard" : "Copie o link público de \"{title}\" para a área de transferência", + "Copy public link of \"{title}\" to clipboard" : "Copiar link público de \"{title}\" para a área de transferência", "Error, please enter proper password and/or expiration date" : "Erro, digite a senha correta e/ou a data de validade", - "Link share created" : "Compartilhamento de link criado", + "Link share created" : "Compartilhamento por link criado", "Error while creating the share" : "Erro ao criar o compartilhamento", "Please enter the following required information before creating the share" : "Digite as seguintes informações necessárias antes de criar o compartilhamento", "Password protection (enforced)" : "Proteção por senha (imposta)", "Password protection" : "Proteger com senha", "Enter a password" : "Digite uma senha", - "Enable link expiration (enforced)" : "Habilitar expiração de link (imposta)", - "Enable link expiration" : "Habilitar expiração de link", + "Enable link expiration (enforced)" : "Ativar expiração de link (imposta)", + "Enable link expiration" : "Ativar expiração de link", "Enter expiration date (enforced)" : "Insira a data de expiração (imposta)", "Enter expiration date" : "Insira a data de validade", "Create share" : "Criar compartilhamento", @@ -238,7 +238,7 @@ OC.L10N.register( "Custom permissions" : "Permissões personalizadas", "Resharing is not allowed" : "Recompartilhamento não é permitido", "Name or email …" : "Nome ou e-mail...", - "Name, email, or Federated Cloud ID …" : "Nome, e-mail ou ID da nuvem federada...", + "Name, email, or Federated Cloud ID …" : "Nome, e-mail ou ID de Nuvem Federada …", "Searching …" : "Pesquisando...", "No elements found." : "Nenhum elemento encontrado.", "Search globally" : "Pesquisar globalmente", @@ -254,7 +254,7 @@ OC.L10N.register( "Search for internal recipients" : "Pesquisar por destinatários internos", "Note from" : "Nota de", "Note:" : "Nota:", - "File drop" : "Baixar Arquivo ", + "File drop" : "Depósito de arquivos", "Upload files to {foldername}." : "Subir arquivos para {foldername}.", "By uploading files, you agree to the terms of service." : "Ao enviar arquivos, você concorda com os termos de serviço.", "View terms of service" : "Ver os termos de serviço", @@ -265,11 +265,11 @@ OC.L10N.register( "To upload files, you need to provide your name first." : "Para fazer upload de arquivos, você precisa primeiro fornecer seu nome.", "Name" : "Nome", "Enter your name" : "Digite seu nome", - "Share with {userName}" : "Compartilhe com {userName}", + "Share with {userName}" : "Compartilhar com {userName}", "Share with email {email}" : "Compartilhar com e-mail {email}", "Share with group" : "Compartilhar com grupo", "Share in conversation" : "Compartilhar na conversa", - "Share with {user} on remote server {server}" : "Compartilhe com {user} no servidor remoto {server}", + "Share with {user} on remote server {server}" : "Compartilhar com {user} no servidor remoto {server}", "Share with remote group" : "Compartilhar com grupo remoto", "Share with guest" : "Compartilhar com convidado", "Update share" : "Atualizar compartilhamento", @@ -308,21 +308,22 @@ OC.L10N.register( "Toggle list of others with access to this directory" : "Alternar a lista de outras pessoas com acesso a este diretório", "Toggle list of others with access to this file" : "Alternar a lista de outras pessoas com acesso a este arquivo", "Unable to fetch inherited shares" : "Não foi possível buscar compartilhamentos herdados", - "Link shares" : "Compartilhamentos de links", + "Link shares" : "Compartilhamentos por link", "Shares" : "Compartilhamentos", "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Use este método para compartilhar arquivos com pessoas ou equipes dentro da sua organização. Se o destinatário já tiver acesso ao compartilhamento, mas não conseguir encontrá-lo, você pode enviar o link de compartilhamento interno para facilitar o acesso.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Use este método para compartilhar arquivos com indivíduos ou organizações fora da sua organização. Arquivos e pastas podem ser compartilhados por meio de links públicos de compartilhamento e endereços de e-mail. Você também pode compartilhar com outras contas Nextcloud hospedadas em instâncias diferentes usando o ID de nuvem federada delas.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Compartilhamentos que não fazem parte dos compartilhamentos internos ou externos. Podem ser compartilhamentos de aplicativos ou outras fontes.", + "Share with accounts, teams, federated cloud IDs" : "Compartilhar com contas, equipes, IDs de nuvem federada", + "Share with accounts and teams" : "Compartilhar com contas e equipes", + "Email, federated cloud ID" : "E-mail, ID de nuvem federada", "Unable to load the shares list" : "Não foi possível carregar a lista de compartilhamentos", "Expires {relativetime}" : "Expira {relativetime}", "this share just expired." : "esse compartilhamento acabou de expirar.", "Shared with you by {owner}" : "Compartilhado com você por {owner}", "Internal shares" : "Compartilhamentos internos", "Internal shares explanation" : "Explicação sobre compartilhamentos internos", - "Share with accounts and teams" : "Compartilhar com contas e equipes", "External shares" : "Compartilhamentos externos", "External shares explanation" : "Explicação sobre compartilhamentos externos", - "Email, federated cloud id" : "E-mail, ID de nuvem federada", "Additional shares" : "Compartilhamentos adicionais", "Additional shares explanation" : "Explicação sobre compartilhamentos adicionais", "Link to a file" : "Criar link para um arquivo", @@ -380,7 +381,7 @@ OC.L10N.register( "Share expiry date saved" : "Data de expiração do compartilhamento salva", "Share hide-download state saved" : "Estado ocultar-download do compartilhamento salvo", "Share label saved" : "Marcador de compartilhamento salvo", - "Share note for recipient saved" : "Observação para o destinatário do compartilhamento salva", + "Share note for recipient saved" : "Nota para o destinatário do compartilhamento salva", "Share password saved" : "Senha do compartilhamento salva", "Share permissions saved" : "Permissões do compartilhamento salvas", "Shared by" : "Compartilhado por", @@ -391,7 +392,7 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "Compartilhado com você e {circle} por {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Compartilhado com você e a conversa {conversation} por {owner}", "Shared with you in a conversation by {owner}" : "Compartilhado com você em uma conversa por {owner}", - "Share note" : "Anotação de compartilhamento", + "Share note" : "Compartilhar nota", "Show list view" : "Mostrar visualização em lista", "Show grid view" : "Mostrar visualização em grade", "Upload files to %s" : "Enviar arquivos para %s", @@ -422,6 +423,8 @@ OC.L10N.register( "Share expire date saved" : "Data de expiração do compartilhamento salva", "You are not allowed to edit link shares that you don't own" : "Você não tem permissão para editar compartilhamentos de links que não são de sua propriedade", "_1 email address already added_::_{count} email addresses already added_" : ["1 endereço de e-mail já adicionado","{count} endereços de e-mail já adicionados","{count} endereços de e-mail já adicionados"], - "_1 email address added_::_{count} email addresses added_" : ["1 endereço de e-mail adicionado","{count} endereços de e-mail adicionados","{count} endereços de e-mail adicionados"] + "_1 email address added_::_{count} email addresses added_" : ["1 endereço de e-mail adicionado","{count} endereços de e-mail adicionados","{count} endereços de e-mail adicionados"], + "Share with accounts, teams, federated cloud id" : "Compartilhar com contas, equipes, ID de nuvem federada", + "Email, federated cloud id" : "E-mail, ID de nuvem federada" }, "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json index fa597157945..36233e767db 100644 --- a/apps/files_sharing/l10n/pt_BR.json +++ b/apps/files_sharing/l10n/pt_BR.json @@ -156,7 +156,7 @@ "Add a note" : "Adicionar uma nota", "Note for recipient" : "Nota para o destinatário", "Add a note to help people understand what you are requesting." : "Adicione uma nota para ajudar as pessoas a entenderem o que você está solicitando.", - "You can add links, date or any other information that will help the recipient understand what you are requesting." : "Você pode adicionar links, data ou qualquer outra informação que ajude o destinatário a entender o que você está solicitando.", + "You can add links, date or any other information that will help the recipient understand what you are requesting." : "Você pode adicionar links, datas ou qualquer outra informação que ajude o destinatário a entender o que você está solicitando.", "Close" : "Fechar", "_Send email and close_::_Send {count} emails and close_" : ["Envie e-mail e feche","Envie {count} e-mails e feche","Envie {count} e-mails e feche"], "Please select a folder, you cannot share the root directory." : "Selecione uma pasta, você não pode compartilhar o diretório raiz.", @@ -213,16 +213,16 @@ "Share link ({index})" : "Compartilhar link ({index})", "Create public link" : "Criar link público", "Actions for \"{title}\"" : "Ações para \"{title}\"", - "Copy public link of \"{title}\" to clipboard" : "Copie o link público de \"{title}\" para a área de transferência", + "Copy public link of \"{title}\" to clipboard" : "Copiar link público de \"{title}\" para a área de transferência", "Error, please enter proper password and/or expiration date" : "Erro, digite a senha correta e/ou a data de validade", - "Link share created" : "Compartilhamento de link criado", + "Link share created" : "Compartilhamento por link criado", "Error while creating the share" : "Erro ao criar o compartilhamento", "Please enter the following required information before creating the share" : "Digite as seguintes informações necessárias antes de criar o compartilhamento", "Password protection (enforced)" : "Proteção por senha (imposta)", "Password protection" : "Proteger com senha", "Enter a password" : "Digite uma senha", - "Enable link expiration (enforced)" : "Habilitar expiração de link (imposta)", - "Enable link expiration" : "Habilitar expiração de link", + "Enable link expiration (enforced)" : "Ativar expiração de link (imposta)", + "Enable link expiration" : "Ativar expiração de link", "Enter expiration date (enforced)" : "Insira a data de expiração (imposta)", "Enter expiration date" : "Insira a data de validade", "Create share" : "Criar compartilhamento", @@ -236,7 +236,7 @@ "Custom permissions" : "Permissões personalizadas", "Resharing is not allowed" : "Recompartilhamento não é permitido", "Name or email …" : "Nome ou e-mail...", - "Name, email, or Federated Cloud ID …" : "Nome, e-mail ou ID da nuvem federada...", + "Name, email, or Federated Cloud ID …" : "Nome, e-mail ou ID de Nuvem Federada …", "Searching …" : "Pesquisando...", "No elements found." : "Nenhum elemento encontrado.", "Search globally" : "Pesquisar globalmente", @@ -252,7 +252,7 @@ "Search for internal recipients" : "Pesquisar por destinatários internos", "Note from" : "Nota de", "Note:" : "Nota:", - "File drop" : "Baixar Arquivo ", + "File drop" : "Depósito de arquivos", "Upload files to {foldername}." : "Subir arquivos para {foldername}.", "By uploading files, you agree to the terms of service." : "Ao enviar arquivos, você concorda com os termos de serviço.", "View terms of service" : "Ver os termos de serviço", @@ -263,11 +263,11 @@ "To upload files, you need to provide your name first." : "Para fazer upload de arquivos, você precisa primeiro fornecer seu nome.", "Name" : "Nome", "Enter your name" : "Digite seu nome", - "Share with {userName}" : "Compartilhe com {userName}", + "Share with {userName}" : "Compartilhar com {userName}", "Share with email {email}" : "Compartilhar com e-mail {email}", "Share with group" : "Compartilhar com grupo", "Share in conversation" : "Compartilhar na conversa", - "Share with {user} on remote server {server}" : "Compartilhe com {user} no servidor remoto {server}", + "Share with {user} on remote server {server}" : "Compartilhar com {user} no servidor remoto {server}", "Share with remote group" : "Compartilhar com grupo remoto", "Share with guest" : "Compartilhar com convidado", "Update share" : "Atualizar compartilhamento", @@ -306,21 +306,22 @@ "Toggle list of others with access to this directory" : "Alternar a lista de outras pessoas com acesso a este diretório", "Toggle list of others with access to this file" : "Alternar a lista de outras pessoas com acesso a este arquivo", "Unable to fetch inherited shares" : "Não foi possível buscar compartilhamentos herdados", - "Link shares" : "Compartilhamentos de links", + "Link shares" : "Compartilhamentos por link", "Shares" : "Compartilhamentos", "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Use este método para compartilhar arquivos com pessoas ou equipes dentro da sua organização. Se o destinatário já tiver acesso ao compartilhamento, mas não conseguir encontrá-lo, você pode enviar o link de compartilhamento interno para facilitar o acesso.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Use este método para compartilhar arquivos com indivíduos ou organizações fora da sua organização. Arquivos e pastas podem ser compartilhados por meio de links públicos de compartilhamento e endereços de e-mail. Você também pode compartilhar com outras contas Nextcloud hospedadas em instâncias diferentes usando o ID de nuvem federada delas.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Compartilhamentos que não fazem parte dos compartilhamentos internos ou externos. Podem ser compartilhamentos de aplicativos ou outras fontes.", + "Share with accounts, teams, federated cloud IDs" : "Compartilhar com contas, equipes, IDs de nuvem federada", + "Share with accounts and teams" : "Compartilhar com contas e equipes", + "Email, federated cloud ID" : "E-mail, ID de nuvem federada", "Unable to load the shares list" : "Não foi possível carregar a lista de compartilhamentos", "Expires {relativetime}" : "Expira {relativetime}", "this share just expired." : "esse compartilhamento acabou de expirar.", "Shared with you by {owner}" : "Compartilhado com você por {owner}", "Internal shares" : "Compartilhamentos internos", "Internal shares explanation" : "Explicação sobre compartilhamentos internos", - "Share with accounts and teams" : "Compartilhar com contas e equipes", "External shares" : "Compartilhamentos externos", "External shares explanation" : "Explicação sobre compartilhamentos externos", - "Email, federated cloud id" : "E-mail, ID de nuvem federada", "Additional shares" : "Compartilhamentos adicionais", "Additional shares explanation" : "Explicação sobre compartilhamentos adicionais", "Link to a file" : "Criar link para um arquivo", @@ -378,7 +379,7 @@ "Share expiry date saved" : "Data de expiração do compartilhamento salva", "Share hide-download state saved" : "Estado ocultar-download do compartilhamento salvo", "Share label saved" : "Marcador de compartilhamento salvo", - "Share note for recipient saved" : "Observação para o destinatário do compartilhamento salva", + "Share note for recipient saved" : "Nota para o destinatário do compartilhamento salva", "Share password saved" : "Senha do compartilhamento salva", "Share permissions saved" : "Permissões do compartilhamento salvas", "Shared by" : "Compartilhado por", @@ -389,7 +390,7 @@ "Shared with you and {circle} by {owner}" : "Compartilhado com você e {circle} por {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Compartilhado com você e a conversa {conversation} por {owner}", "Shared with you in a conversation by {owner}" : "Compartilhado com você em uma conversa por {owner}", - "Share note" : "Anotação de compartilhamento", + "Share note" : "Compartilhar nota", "Show list view" : "Mostrar visualização em lista", "Show grid view" : "Mostrar visualização em grade", "Upload files to %s" : "Enviar arquivos para %s", @@ -420,6 +421,8 @@ "Share expire date saved" : "Data de expiração do compartilhamento salva", "You are not allowed to edit link shares that you don't own" : "Você não tem permissão para editar compartilhamentos de links que não são de sua propriedade", "_1 email address already added_::_{count} email addresses already added_" : ["1 endereço de e-mail já adicionado","{count} endereços de e-mail já adicionados","{count} endereços de e-mail já adicionados"], - "_1 email address added_::_{count} email addresses added_" : ["1 endereço de e-mail adicionado","{count} endereços de e-mail adicionados","{count} endereços de e-mail adicionados"] + "_1 email address added_::_{count} email addresses added_" : ["1 endereço de e-mail adicionado","{count} endereços de e-mail adicionados","{count} endereços de e-mail adicionados"], + "Share with accounts, teams, federated cloud id" : "Compartilhar com contas, equipes, ID de nuvem federada", + "Email, federated cloud id" : "E-mail, ID de nuvem federada" },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js index ced677044f8..782c58d0673 100644 --- a/apps/files_sharing/l10n/ru.js +++ b/apps/files_sharing/l10n/ru.js @@ -305,7 +305,6 @@ OC.L10N.register( "Shared with you by {owner}" : "{owner} предоставил(а) Вам доступ", "Internal shares" : "Внутренние ссылки", "External shares" : "Внешние ссылки", - "Email, federated cloud id" : "Электронная почта, идентификатор федеративного облака", "Additional shares" : "Дополнительные ссылки", "Link to a file" : "Ссылка на файл", "_Accept share_::_Accept shares_" : ["Принять общий ресурс","Принять общие ресурсы","Принять общие ресурсы","Принять общие ресурсы"], @@ -400,6 +399,7 @@ OC.L10N.register( "No recommendations. Start typing." : "Рекомендации отсутствуют, начните вводить символы", "Allow download" : "Разрешить скачивать", "Share expire date saved" : "Дата истечения общего доступа установлена", - "You are not allowed to edit link shares that you don't own" : "Вам не разрешается редактировать ссылки, которыми вы не владеете" + "You are not allowed to edit link shares that you don't own" : "Вам не разрешается редактировать ссылки, которыми вы не владеете", + "Email, federated cloud id" : "Электронная почта, идентификатор федеративного облака" }, "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_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json index d073020b7a9..12de42f1966 100644 --- a/apps/files_sharing/l10n/ru.json +++ b/apps/files_sharing/l10n/ru.json @@ -303,7 +303,6 @@ "Shared with you by {owner}" : "{owner} предоставил(а) Вам доступ", "Internal shares" : "Внутренние ссылки", "External shares" : "Внешние ссылки", - "Email, federated cloud id" : "Электронная почта, идентификатор федеративного облака", "Additional shares" : "Дополнительные ссылки", "Link to a file" : "Ссылка на файл", "_Accept share_::_Accept shares_" : ["Принять общий ресурс","Принять общие ресурсы","Принять общие ресурсы","Принять общие ресурсы"], @@ -398,6 +397,7 @@ "No recommendations. Start typing." : "Рекомендации отсутствуют, начните вводить символы", "Allow download" : "Разрешить скачивать", "Share expire date saved" : "Дата истечения общего доступа установлена", - "You are not allowed to edit link shares that you don't own" : "Вам не разрешается редактировать ссылки, которыми вы не владеете" + "You are not allowed to edit link shares that you don't own" : "Вам не разрешается редактировать ссылки, которыми вы не владеете", + "Email, federated cloud id" : "Электронная почта, идентификатор федеративного облака" },"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_sharing/l10n/sc.js b/apps/files_sharing/l10n/sc.js index cacc9da26c5..9c8159b8f8c 100644 --- a/apps/files_sharing/l10n/sc.js +++ b/apps/files_sharing/l10n/sc.js @@ -99,8 +99,10 @@ OC.L10N.register( "Copy to clipboard" : "Còpia in is punta de billete", "Select" : "Seletziona", "Close" : "Serra", + "File request created" : "Rechesta de archìviu creada", "Error creating the share: {errorMessage}" : "Errore in sa creatzione de sa cumpartzidura: {errorMessage}", "Error creating the share" : "Errore in sa creatzione de sa cumpartzidura", + "Create a file request" : "Crea rechesta de archìviu", "Cancel" : "Annulla", "Invalid path selected" : "Percursu seletzionadu non bàlidu", "Unknown error" : "Errore disconnotu", @@ -189,6 +191,7 @@ OC.L10N.register( "Shared" : "Cumpartzidu", "Shared by {ownerDisplayName}" : "Cumpartzidu dae {ownerDisplayName}", "Shared with others" : "Cumpartzidu cun àtere", + "Create file request" : "Crea rechesta de archìviu", "No shares" : "Peruna cumpartzidura", "Shared with you" : "Cumpartzidu cun tegus", "Nothing shared with you yet" : "Ancora peruna cumpartzidura cun tegus", @@ -196,6 +199,10 @@ OC.L10N.register( "Shared by link" : "Cumpartzidu cun ligòngiu", "List of files that are shared by link." : "Lista de archìvios cumpartzidos cun ligòngiu.", "No shared links" : "Perunu ligòngiu cumpartzidu", + "File requests" : "Archìvios rechestos", + "List of file requests." : "Lista de archìvios rechestos.", + "No file requests" : "Perunu archìviu rechestu", + "File requests you have created will show up here" : "Is rechestas de archìviu chi crees ant a èssere mustradas inoghe", "Deleted shares" : "Cumpartziduras cantzelladas", "No deleted shares" : "Peruna cumpartzidura cantzellada", "Pending shares" : "Cumpartziduras in suspesu", diff --git a/apps/files_sharing/l10n/sc.json b/apps/files_sharing/l10n/sc.json index b830853148d..501522cb184 100644 --- a/apps/files_sharing/l10n/sc.json +++ b/apps/files_sharing/l10n/sc.json @@ -97,8 +97,10 @@ "Copy to clipboard" : "Còpia in is punta de billete", "Select" : "Seletziona", "Close" : "Serra", + "File request created" : "Rechesta de archìviu creada", "Error creating the share: {errorMessage}" : "Errore in sa creatzione de sa cumpartzidura: {errorMessage}", "Error creating the share" : "Errore in sa creatzione de sa cumpartzidura", + "Create a file request" : "Crea rechesta de archìviu", "Cancel" : "Annulla", "Invalid path selected" : "Percursu seletzionadu non bàlidu", "Unknown error" : "Errore disconnotu", @@ -187,6 +189,7 @@ "Shared" : "Cumpartzidu", "Shared by {ownerDisplayName}" : "Cumpartzidu dae {ownerDisplayName}", "Shared with others" : "Cumpartzidu cun àtere", + "Create file request" : "Crea rechesta de archìviu", "No shares" : "Peruna cumpartzidura", "Shared with you" : "Cumpartzidu cun tegus", "Nothing shared with you yet" : "Ancora peruna cumpartzidura cun tegus", @@ -194,6 +197,10 @@ "Shared by link" : "Cumpartzidu cun ligòngiu", "List of files that are shared by link." : "Lista de archìvios cumpartzidos cun ligòngiu.", "No shared links" : "Perunu ligòngiu cumpartzidu", + "File requests" : "Archìvios rechestos", + "List of file requests." : "Lista de archìvios rechestos.", + "No file requests" : "Perunu archìviu rechestu", + "File requests you have created will show up here" : "Is rechestas de archìviu chi crees ant a èssere mustradas inoghe", "Deleted shares" : "Cumpartziduras cantzelladas", "No deleted shares" : "Peruna cumpartzidura cantzellada", "Pending shares" : "Cumpartziduras in suspesu", diff --git a/apps/files_sharing/l10n/sk.js b/apps/files_sharing/l10n/sk.js index 33e4d1c3238..764171382db 100644 --- a/apps/files_sharing/l10n/sk.js +++ b/apps/files_sharing/l10n/sk.js @@ -313,16 +313,15 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Túto metódu použite na zdieľanie súborov s jednotlivcami alebo tímami v rámci vašej organizácie. Ak príjemca už má prístup k zdieľanej zložke, ale nemôže ju nájsť, môžete mu poslať interný odkaz na zdieľanie, aby k nemu mal jednoduchý prístup.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Túto metódu použite na zdieľanie súborov s jednotlivcami alebo organizáciami mimo vašej organizácie. Súbory a priečinky je možné zdieľať prostredníctvom verejných zdieľaných odkazov a e-mailových adries. Môžete tiež zdieľať s inými účtami Nextcloud hosťovanými v rôznych inštanciách pomocou ich federatívneho cloudového ID.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Akcie, ktoré nie sú súčasťou interných alebo externých akcií. Môžu to byť zdieľania z aplikácií alebo iných zdrojov.", + "Share with accounts and teams" : "Zdieľať s účtami a tímami", "Unable to load the shares list" : "Nedarí sa načítať zoznam zdieľaní", "Expires {relativetime}" : "Platnosť končí {relativetime}", "this share just expired." : "platnosť tohto zdieľania práve skončila.", "Shared with you by {owner}" : "Zdieľané s vami používateľom {owner}", "Internal shares" : "Interné zdieľania", "Internal shares explanation" : "Vysvetlenie interných zdieľaní", - "Share with accounts and teams" : "Zdieľať s účtami a tímami", "External shares" : "Externé zdieľania", "External shares explanation" : "Vysvetlenie externých zdieľaní", - "Email, federated cloud id" : "E-mail, id federovaného cloudu", "Additional shares" : "Ďalšie zdieľania", "Additional shares explanation" : "Vysvetlenie ďalších zdieľaní", "Link to a file" : "Odkaz na súbor", @@ -422,6 +421,7 @@ OC.L10N.register( "Share expire date saved" : "Dátum skončenia platnosti zdieľania bol uložený", "You are not allowed to edit link shares that you don't own" : "Nemáte povolenie upravovať zdieľania odkazov, ktoré nevlastníte", "_1 email address already added_::_{count} email addresses already added_" : ["1 e-mailová adriesa už bola pridaná","{count} e-mailové adriesy už boli pridané","{count} e-mailových adries už bolo pridaných","{count} e-mailových adries už bolo pridaných"], - "_1 email address added_::_{count} email addresses added_" : ["1 pridaná e-mailová adresa","{count} pridané e-mailové adriesy","{count} pridaných e-mailových adries","{count} pridaných e-mailových adries"] + "_1 email address added_::_{count} email addresses added_" : ["1 pridaná e-mailová adresa","{count} pridané e-mailové adriesy","{count} pridaných e-mailových adries","{count} pridaných e-mailových adries"], + "Email, federated cloud id" : "E-mail, id federovaného cloudu" }, "nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"); diff --git a/apps/files_sharing/l10n/sk.json b/apps/files_sharing/l10n/sk.json index df7ecb75e7a..506a19fff84 100644 --- a/apps/files_sharing/l10n/sk.json +++ b/apps/files_sharing/l10n/sk.json @@ -311,16 +311,15 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Túto metódu použite na zdieľanie súborov s jednotlivcami alebo tímami v rámci vašej organizácie. Ak príjemca už má prístup k zdieľanej zložke, ale nemôže ju nájsť, môžete mu poslať interný odkaz na zdieľanie, aby k nemu mal jednoduchý prístup.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Túto metódu použite na zdieľanie súborov s jednotlivcami alebo organizáciami mimo vašej organizácie. Súbory a priečinky je možné zdieľať prostredníctvom verejných zdieľaných odkazov a e-mailových adries. Môžete tiež zdieľať s inými účtami Nextcloud hosťovanými v rôznych inštanciách pomocou ich federatívneho cloudového ID.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Akcie, ktoré nie sú súčasťou interných alebo externých akcií. Môžu to byť zdieľania z aplikácií alebo iných zdrojov.", + "Share with accounts and teams" : "Zdieľať s účtami a tímami", "Unable to load the shares list" : "Nedarí sa načítať zoznam zdieľaní", "Expires {relativetime}" : "Platnosť končí {relativetime}", "this share just expired." : "platnosť tohto zdieľania práve skončila.", "Shared with you by {owner}" : "Zdieľané s vami používateľom {owner}", "Internal shares" : "Interné zdieľania", "Internal shares explanation" : "Vysvetlenie interných zdieľaní", - "Share with accounts and teams" : "Zdieľať s účtami a tímami", "External shares" : "Externé zdieľania", "External shares explanation" : "Vysvetlenie externých zdieľaní", - "Email, federated cloud id" : "E-mail, id federovaného cloudu", "Additional shares" : "Ďalšie zdieľania", "Additional shares explanation" : "Vysvetlenie ďalších zdieľaní", "Link to a file" : "Odkaz na súbor", @@ -420,6 +419,7 @@ "Share expire date saved" : "Dátum skončenia platnosti zdieľania bol uložený", "You are not allowed to edit link shares that you don't own" : "Nemáte povolenie upravovať zdieľania odkazov, ktoré nevlastníte", "_1 email address already added_::_{count} email addresses already added_" : ["1 e-mailová adriesa už bola pridaná","{count} e-mailové adriesy už boli pridané","{count} e-mailových adries už bolo pridaných","{count} e-mailových adries už bolo pridaných"], - "_1 email address added_::_{count} email addresses added_" : ["1 pridaná e-mailová adresa","{count} pridané e-mailové adriesy","{count} pridaných e-mailových adries","{count} pridaných e-mailových adries"] + "_1 email address added_::_{count} email addresses added_" : ["1 pridaná e-mailová adresa","{count} pridané e-mailové adriesy","{count} pridaných e-mailových adries","{count} pridaných e-mailových adries"], + "Email, federated cloud id" : "E-mail, id federovaného cloudu" },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/sr.js b/apps/files_sharing/l10n/sr.js index 3fed266334e..26f8840d067 100644 --- a/apps/files_sharing/l10n/sr.js +++ b/apps/files_sharing/l10n/sr.js @@ -313,16 +313,15 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Употребите ову методу да фајлове делите да појединцима или тимовима унутар своје организације. Ако прималац већ има приступ дељењу, али не може да га лоцира, можете му послати интерни линк дељења тако да може лако да му приступи.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Употребите ову методу да фајлове делите са појединцима или организацијама ван своје организације. Фајлови и фолдери могу да се деле путем јавних линкова дељења и и-мејл адресама. Такође можете да делите осталим Nextcloud налозима који се хостују на другим инстанцама користећи њихов ID здруженог облака.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Дељења која нису део интерних или спољних дељења. Ово могу бити дељења из апликација или осталих извора.", + "Share with accounts and teams" : "Дељење са налозима и тимовима", "Unable to load the shares list" : "Неуспело учитавање листе дељења", "Expires {relativetime}" : "Истиче {relativetime}", "this share just expired." : "ово дељење је управо истекло.", "Shared with you by {owner}" : "{owner} је поделио са Вама", "Internal shares" : "Интерна дељења", "Internal shares explanation" : "Објашњење интерних дељења", - "Share with accounts and teams" : "Дељење са налозима и тимовима", "External shares" : "Спољна дељења", "External shares explanation" : "Објашњење спољних дељења", - "Email, federated cloud id" : "И-мејл, ID здруженог облака", "Additional shares" : "Додатна дељења", "Additional shares explanation" : "Објашњење додатних дељења", "Link to a file" : "Веза ка фајлу", @@ -422,6 +421,8 @@ OC.L10N.register( "Share expire date saved" : "Сачуван је датум истека дељења", "You are not allowed to edit link shares that you don't own" : "Није вам дозвољено да уређујете дељења линком која нису ваше власништво", "_1 email address already added_::_{count} email addresses already added_" : ["1 и-мејл адреса је већ додата","{count} и-мејл адресе су већ додате","{count} и-мејл адреса је већ додато"], - "_1 email address added_::_{count} email addresses added_" : ["Додата је 1 и-мејл адреса","Додате су {count} и-мејл адресе","Додато је {count} и-мејл адреса"] + "_1 email address added_::_{count} email addresses added_" : ["Додата је 1 и-мејл адреса","Додате су {count} и-мејл адресе","Додато је {count} и-мејл адреса"], + "Share with accounts, teams, federated cloud id" : "Дели са налозима, тимовима, id здруженог облака", + "Email, federated cloud id" : "И-мејл, ID здруженог облака" }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/apps/files_sharing/l10n/sr.json b/apps/files_sharing/l10n/sr.json index c74220d4377..4d33aa6ab03 100644 --- a/apps/files_sharing/l10n/sr.json +++ b/apps/files_sharing/l10n/sr.json @@ -311,16 +311,15 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Употребите ову методу да фајлове делите да појединцима или тимовима унутар своје организације. Ако прималац већ има приступ дељењу, али не може да га лоцира, можете му послати интерни линк дељења тако да може лако да му приступи.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Употребите ову методу да фајлове делите са појединцима или организацијама ван своје организације. Фајлови и фолдери могу да се деле путем јавних линкова дељења и и-мејл адресама. Такође можете да делите осталим Nextcloud налозима који се хостују на другим инстанцама користећи њихов ID здруженог облака.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Дељења која нису део интерних или спољних дељења. Ово могу бити дељења из апликација или осталих извора.", + "Share with accounts and teams" : "Дељење са налозима и тимовима", "Unable to load the shares list" : "Неуспело учитавање листе дељења", "Expires {relativetime}" : "Истиче {relativetime}", "this share just expired." : "ово дељење је управо истекло.", "Shared with you by {owner}" : "{owner} је поделио са Вама", "Internal shares" : "Интерна дељења", "Internal shares explanation" : "Објашњење интерних дељења", - "Share with accounts and teams" : "Дељење са налозима и тимовима", "External shares" : "Спољна дељења", "External shares explanation" : "Објашњење спољних дељења", - "Email, federated cloud id" : "И-мејл, ID здруженог облака", "Additional shares" : "Додатна дељења", "Additional shares explanation" : "Објашњење додатних дељења", "Link to a file" : "Веза ка фајлу", @@ -420,6 +419,8 @@ "Share expire date saved" : "Сачуван је датум истека дељења", "You are not allowed to edit link shares that you don't own" : "Није вам дозвољено да уређујете дељења линком која нису ваше власништво", "_1 email address already added_::_{count} email addresses already added_" : ["1 и-мејл адреса је већ додата","{count} и-мејл адресе су већ додате","{count} и-мејл адреса је већ додато"], - "_1 email address added_::_{count} email addresses added_" : ["Додата је 1 и-мејл адреса","Додате су {count} и-мејл адресе","Додато је {count} и-мејл адреса"] + "_1 email address added_::_{count} email addresses added_" : ["Додата је 1 и-мејл адреса","Додате су {count} и-мејл адресе","Додато је {count} и-мејл адреса"], + "Share with accounts, teams, federated cloud id" : "Дели са налозима, тимовима, id здруженог облака", + "Email, federated cloud id" : "И-мејл, ID здруженог облака" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/sv.js b/apps/files_sharing/l10n/sv.js index d49eb79716f..d773545bfa5 100644 --- a/apps/files_sharing/l10n/sv.js +++ b/apps/files_sharing/l10n/sv.js @@ -313,16 +313,17 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Använd den här metoden för att dela filer med individer eller team inom din organisation. Om mottagaren redan har åtkomst till delningen men inte kan hitta den, kan du skicka den interna delningslänken för enkel åtkomst.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Använd den här metoden för att dela filer med individer eller organisationer utanför din organisation. Filer och mappar kan delas via publika delningslänkar och e-postadresser. Du kan också dela med andra Nextcloud-konton som finns på andra instanser genom deras federerade moln-ID.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Delningar som inte ingår i de interna eller externa delningarna. Detta kan vara delningar från appar eller andra källor.", + "Share with accounts, teams, federated cloud IDs" : "Dela med konton, team, federerade moln-ID:n", + "Share with accounts and teams" : "Dela med konton och team", + "Email, federated cloud ID" : "E-post, federerat moln-ID", "Unable to load the shares list" : "Kunde inte läsa in delningslistan", "Expires {relativetime}" : "Upphör {relativetime}", "this share just expired." : "denna delning har just gått ut.", "Shared with you by {owner}" : "Delad med dig av {owner}", "Internal shares" : "Interna delningar", "Internal shares explanation" : "Förklaring av interna delningar", - "Share with accounts and teams" : "Dela med konton och team", "External shares" : "Externa delningar", "External shares explanation" : "Förklaring av externa delningar", - "Email, federated cloud id" : "E-post, federerat moln-id", "Additional shares" : "Ytterligare delningar", "Additional shares explanation" : "Förklaring av ytterligare delningar", "Link to a file" : "Länka till en fil", @@ -422,6 +423,8 @@ OC.L10N.register( "Share expire date saved" : "Delningens utgångsdatum sparad", "You are not allowed to edit link shares that you don't own" : "Du får inte redigera länkdelningar som du inte äger", "_1 email address already added_::_{count} email addresses already added_" : ["1 e-postadress som redan har lagts till","{count} e-postadresser som redan har lagts till"], - "_1 email address added_::_{count} email addresses added_" : ["1 e-postadress har lagts till","{count} e-postadresser har lagts till"] + "_1 email address added_::_{count} email addresses added_" : ["1 e-postadress har lagts till","{count} e-postadresser har lagts till"], + "Share with accounts, teams, federated cloud id" : "Dela med konton, team, federerat moln-id", + "Email, federated cloud id" : "E-post, federerat moln-id" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/sv.json b/apps/files_sharing/l10n/sv.json index 3260d534275..c2063565baa 100644 --- a/apps/files_sharing/l10n/sv.json +++ b/apps/files_sharing/l10n/sv.json @@ -311,16 +311,17 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Använd den här metoden för att dela filer med individer eller team inom din organisation. Om mottagaren redan har åtkomst till delningen men inte kan hitta den, kan du skicka den interna delningslänken för enkel åtkomst.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Använd den här metoden för att dela filer med individer eller organisationer utanför din organisation. Filer och mappar kan delas via publika delningslänkar och e-postadresser. Du kan också dela med andra Nextcloud-konton som finns på andra instanser genom deras federerade moln-ID.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Delningar som inte ingår i de interna eller externa delningarna. Detta kan vara delningar från appar eller andra källor.", + "Share with accounts, teams, federated cloud IDs" : "Dela med konton, team, federerade moln-ID:n", + "Share with accounts and teams" : "Dela med konton och team", + "Email, federated cloud ID" : "E-post, federerat moln-ID", "Unable to load the shares list" : "Kunde inte läsa in delningslistan", "Expires {relativetime}" : "Upphör {relativetime}", "this share just expired." : "denna delning har just gått ut.", "Shared with you by {owner}" : "Delad med dig av {owner}", "Internal shares" : "Interna delningar", "Internal shares explanation" : "Förklaring av interna delningar", - "Share with accounts and teams" : "Dela med konton och team", "External shares" : "Externa delningar", "External shares explanation" : "Förklaring av externa delningar", - "Email, federated cloud id" : "E-post, federerat moln-id", "Additional shares" : "Ytterligare delningar", "Additional shares explanation" : "Förklaring av ytterligare delningar", "Link to a file" : "Länka till en fil", @@ -420,6 +421,8 @@ "Share expire date saved" : "Delningens utgångsdatum sparad", "You are not allowed to edit link shares that you don't own" : "Du får inte redigera länkdelningar som du inte äger", "_1 email address already added_::_{count} email addresses already added_" : ["1 e-postadress som redan har lagts till","{count} e-postadresser som redan har lagts till"], - "_1 email address added_::_{count} email addresses added_" : ["1 e-postadress har lagts till","{count} e-postadresser har lagts till"] + "_1 email address added_::_{count} email addresses added_" : ["1 e-postadress har lagts till","{count} e-postadresser har lagts till"], + "Share with accounts, teams, federated cloud id" : "Dela med konton, team, federerat moln-id", + "Email, federated cloud id" : "E-post, federerat moln-id" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/tr.js b/apps/files_sharing/l10n/tr.js index f1b539894f0..cd9580d7ae8 100644 --- a/apps/files_sharing/l10n/tr.js +++ b/apps/files_sharing/l10n/tr.js @@ -313,16 +313,15 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Bu yöntemi, dosyaları kuruluşunuzdaki kişilerle veya takımlarla paylaşmak için kullanın. Alıcının paylaşıma zaten erişimi varsa ancak bulamıyorlarsa, kolay erişmeleri için iç paylaşım bağlantısını gönderebilirsiniz.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Bu yöntemi, dosyaları kuruluşunuzun dışındaki kişilerle veya kuruluşlarla paylaşmak için kullanın. Dosyalar ve klasörler herkese açık paylaşım bağlantıları ve e-posta adresleri ile paylaşılabilir. Ayrıca, birleşik bulut kimliklerini kullanarak farklı kopyalarda barındırılan diğer Nextcloud hesaplarıyla da paylaşım yapabilirsiniz.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "İç veya dış paylaşımların parçası olmayan paylaşımlar. Bunlar uygulamalardan veya diğer kaynaklardan gelen paylaşımlar olabilir.", + "Share with accounts and teams" : "Hesaplar ve takımlarla paylaşın", "Unable to load the shares list" : "Paylaşımlar listesi yüklenemedi", "Expires {relativetime}" : "Geçerlilik süresi sonu {relativetime}", "this share just expired." : "bu paylaşımın geçerlilik süresi dolmuş.", "Shared with you by {owner}" : "{owner} tarafından sizinle paylaşılmış", "Internal shares" : "İç paylaşımlar", "Internal shares explanation" : "İç paylaşımlar açıklaması", - "Share with accounts and teams" : "Hesaplar ve takımlarla paylaşın", "External shares" : "Dış paylaşımlar", "External shares explanation" : "Dış paylaşımlar açıklaması", - "Email, federated cloud id" : "E-posta adresi, birleşik bulut kimliği", "Additional shares" : "Ek paylaşımlar", "Additional shares explanation" : "Ek paylaşımlar açıklaması", "Link to a file" : "Bir dosya bağlantısı", @@ -422,6 +421,7 @@ OC.L10N.register( "Share expire date saved" : "Paylaşım geçerlilik süresi kaydedildi", "You are not allowed to edit link shares that you don't own" : "Sahibi olmadığınız bağlantı paylaşımlarını düzenleme izniniz yok", "_1 email address already added_::_{count} email addresses already added_" : ["1 e-posta adresi zaten eklenmiş","{count} e-posta adresi zaten eklenmiş"], - "_1 email address added_::_{count} email addresses added_" : ["1 e-posta adresi eklendi","{count} e-posta adresi eklendi"] + "_1 email address added_::_{count} email addresses added_" : ["1 e-posta adresi eklendi","{count} e-posta adresi eklendi"], + "Email, federated cloud id" : "E-posta adresi, birleşik bulut kimliği" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/files_sharing/l10n/tr.json b/apps/files_sharing/l10n/tr.json index b6cc4a1a088..8864f55661b 100644 --- a/apps/files_sharing/l10n/tr.json +++ b/apps/files_sharing/l10n/tr.json @@ -311,16 +311,15 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Bu yöntemi, dosyaları kuruluşunuzdaki kişilerle veya takımlarla paylaşmak için kullanın. Alıcının paylaşıma zaten erişimi varsa ancak bulamıyorlarsa, kolay erişmeleri için iç paylaşım bağlantısını gönderebilirsiniz.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Bu yöntemi, dosyaları kuruluşunuzun dışındaki kişilerle veya kuruluşlarla paylaşmak için kullanın. Dosyalar ve klasörler herkese açık paylaşım bağlantıları ve e-posta adresleri ile paylaşılabilir. Ayrıca, birleşik bulut kimliklerini kullanarak farklı kopyalarda barındırılan diğer Nextcloud hesaplarıyla da paylaşım yapabilirsiniz.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "İç veya dış paylaşımların parçası olmayan paylaşımlar. Bunlar uygulamalardan veya diğer kaynaklardan gelen paylaşımlar olabilir.", + "Share with accounts and teams" : "Hesaplar ve takımlarla paylaşın", "Unable to load the shares list" : "Paylaşımlar listesi yüklenemedi", "Expires {relativetime}" : "Geçerlilik süresi sonu {relativetime}", "this share just expired." : "bu paylaşımın geçerlilik süresi dolmuş.", "Shared with you by {owner}" : "{owner} tarafından sizinle paylaşılmış", "Internal shares" : "İç paylaşımlar", "Internal shares explanation" : "İç paylaşımlar açıklaması", - "Share with accounts and teams" : "Hesaplar ve takımlarla paylaşın", "External shares" : "Dış paylaşımlar", "External shares explanation" : "Dış paylaşımlar açıklaması", - "Email, federated cloud id" : "E-posta adresi, birleşik bulut kimliği", "Additional shares" : "Ek paylaşımlar", "Additional shares explanation" : "Ek paylaşımlar açıklaması", "Link to a file" : "Bir dosya bağlantısı", @@ -420,6 +419,7 @@ "Share expire date saved" : "Paylaşım geçerlilik süresi kaydedildi", "You are not allowed to edit link shares that you don't own" : "Sahibi olmadığınız bağlantı paylaşımlarını düzenleme izniniz yok", "_1 email address already added_::_{count} email addresses already added_" : ["1 e-posta adresi zaten eklenmiş","{count} e-posta adresi zaten eklenmiş"], - "_1 email address added_::_{count} email addresses added_" : ["1 e-posta adresi eklendi","{count} e-posta adresi eklendi"] + "_1 email address added_::_{count} email addresses added_" : ["1 e-posta adresi eklendi","{count} e-posta adresi eklendi"], + "Email, federated cloud id" : "E-posta adresi, birleşik bulut kimliği" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/uk.js b/apps/files_sharing/l10n/uk.js index a87d5169bfc..d8ee9fd3298 100644 --- a/apps/files_sharing/l10n/uk.js +++ b/apps/files_sharing/l10n/uk.js @@ -312,16 +312,15 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Використовуйте цей спосіб надання файлів у спільний доступ окремим користувачам або командам. Якщо отримувач вже має доступ до спільного ресурсу, але не може його знайти, ви можете допомогти йому/їй - надіслати посилання на внутрішній ресурс.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Використовуйте цей спосіб надання файлів у спільний доступ окремим користувачам або організаціям за межами вашої організації. Файли та каталоги можна надати у спільний доступ користувачам інших примірників хмар Nextcloud з використанням ідентифікатора об'єднаних хмар.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Спільні ресурси, що не є ані внутрішніми, ані зовнішніми спільними ресурсами, наприклад, спільні ресурси, створені застосунками чи іншими ресурсами.", + "Share with accounts and teams" : "Поділитися з користувачами або командами", "Unable to load the shares list" : "Не вдалося завантажити список спільних ресурсів", "Expires {relativetime}" : "Термін дії закінчується {relativetime}", "this share just expired." : "термін дії спільного доступу вичерпано.", "Shared with you by {owner}" : "{owner} поділив(-ла-)ся з вами", "Internal shares" : "Внутрішні спільні ресурси", "Internal shares explanation" : "Опис внутрішніх спільних ресурсів", - "Share with accounts and teams" : "Поділитися з користувачами або командами", "External shares" : "Зовнішні спільні ресурси", "External shares explanation" : "Опис зовнішніх спільних ресурсів", - "Email, federated cloud id" : "Ел.пошта, ідентифікатор об'єднаної хмари", "Additional shares" : "Додаткові спільні ресурси", "Additional shares explanation" : "Опис додаткових спільних ресурсів", "Link to a file" : "Посилання на файл", @@ -421,6 +420,7 @@ OC.L10N.register( "Share expire date saved" : "Збережено термін доступности спільного ресурсу", "You are not allowed to edit link shares that you don't own" : "У вас відсутні права на редагування спільних ресурсів, якими з вами поділилися через посилання, власником яких ви не є", "_1 email address already added_::_{count} email addresses already added_" : ["Вже додано 1 адресу ел. пошти","Вже додано {count} адреси ел. пошти","Вже додано {count} адрес ел. пошти","Вже додано {count} адрес ел. пошти"], - "_1 email address added_::_{count} email addresses added_" : ["Додано 1 адресу ел. пошти","Додано {count} адреси ел. пошти","Додано {count} адрес ел. пошти","Додано {count} адрес ел. пошти"] + "_1 email address added_::_{count} email addresses added_" : ["Додано 1 адресу ел. пошти","Додано {count} адреси ел. пошти","Додано {count} адрес ел. пошти","Додано {count} адрес ел. пошти"], + "Email, federated cloud id" : "Ел.пошта, ідентифікатор об'єднаної хмари" }, "nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"); diff --git a/apps/files_sharing/l10n/uk.json b/apps/files_sharing/l10n/uk.json index 2f199857bc3..e58b7a78779 100644 --- a/apps/files_sharing/l10n/uk.json +++ b/apps/files_sharing/l10n/uk.json @@ -310,16 +310,15 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Використовуйте цей спосіб надання файлів у спільний доступ окремим користувачам або командам. Якщо отримувач вже має доступ до спільного ресурсу, але не може його знайти, ви можете допомогти йому/їй - надіслати посилання на внутрішній ресурс.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Використовуйте цей спосіб надання файлів у спільний доступ окремим користувачам або організаціям за межами вашої організації. Файли та каталоги можна надати у спільний доступ користувачам інших примірників хмар Nextcloud з використанням ідентифікатора об'єднаних хмар.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Спільні ресурси, що не є ані внутрішніми, ані зовнішніми спільними ресурсами, наприклад, спільні ресурси, створені застосунками чи іншими ресурсами.", + "Share with accounts and teams" : "Поділитися з користувачами або командами", "Unable to load the shares list" : "Не вдалося завантажити список спільних ресурсів", "Expires {relativetime}" : "Термін дії закінчується {relativetime}", "this share just expired." : "термін дії спільного доступу вичерпано.", "Shared with you by {owner}" : "{owner} поділив(-ла-)ся з вами", "Internal shares" : "Внутрішні спільні ресурси", "Internal shares explanation" : "Опис внутрішніх спільних ресурсів", - "Share with accounts and teams" : "Поділитися з користувачами або командами", "External shares" : "Зовнішні спільні ресурси", "External shares explanation" : "Опис зовнішніх спільних ресурсів", - "Email, federated cloud id" : "Ел.пошта, ідентифікатор об'єднаної хмари", "Additional shares" : "Додаткові спільні ресурси", "Additional shares explanation" : "Опис додаткових спільних ресурсів", "Link to a file" : "Посилання на файл", @@ -419,6 +418,7 @@ "Share expire date saved" : "Збережено термін доступности спільного ресурсу", "You are not allowed to edit link shares that you don't own" : "У вас відсутні права на редагування спільних ресурсів, якими з вами поділилися через посилання, власником яких ви не є", "_1 email address already added_::_{count} email addresses already added_" : ["Вже додано 1 адресу ел. пошти","Вже додано {count} адреси ел. пошти","Вже додано {count} адрес ел. пошти","Вже додано {count} адрес ел. пошти"], - "_1 email address added_::_{count} email addresses added_" : ["Додано 1 адресу ел. пошти","Додано {count} адреси ел. пошти","Додано {count} адрес ел. пошти","Додано {count} адрес ел. пошти"] + "_1 email address added_::_{count} email addresses added_" : ["Додано 1 адресу ел. пошти","Додано {count} адреси ел. пошти","Додано {count} адрес ел. пошти","Додано {count} адрес ел. пошти"], + "Email, federated cloud id" : "Ел.пошта, ідентифікатор об'єднаної хмари" },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (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_sharing/l10n/zh_CN.js b/apps/files_sharing/l10n/zh_CN.js index 10fa087e766..6599ff51426 100644 --- a/apps/files_sharing/l10n/zh_CN.js +++ b/apps/files_sharing/l10n/zh_CN.js @@ -313,16 +313,17 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "使用此方法与组织内的个人或团队共享文件。如果接收者已经可以访问共享,但找不到它,您可以向他们发送内部共享链接以便于访问。", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "使用此方法与组织外部的个人或组织共享文件。文件和文件夹可以通过公开共享链接和电子邮件地址共享。您还可以使用其联合云 ID 共享给托管在不同实例上的其他 Nextcloud 账号。", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "不属于内部或外部共享的共享,这可以是来自应用或其他来源的共享。", + "Share with accounts, teams, federated cloud IDs" : "与账号、团队、联合云 ID 共享", + "Share with accounts and teams" : "与账号和团队共享", + "Email, federated cloud ID" : "电子邮件、联合云 ID", "Unable to load the shares list" : "无法加载共享列表", "Expires {relativetime}" : "过期 {relativetime}", "this share just expired." : "此共享已过期。", "Shared with you by {owner}" : "{owner} 与您共享", "Internal shares" : "内部共享", "Internal shares explanation" : "内部共享说明", - "Share with accounts and teams" : "与账号和团队共享", "External shares" : "外部共享", "External shares explanation" : "外部共享说明", - "Email, federated cloud id" : "电子邮件、联合云 ID", "Additional shares" : "额外共享", "Additional shares explanation" : "额外共享说明", "Link to a file" : "链接到文件", @@ -422,6 +423,8 @@ OC.L10N.register( "Share expire date saved" : "共享过期日期已保存", "You are not allowed to edit link shares that you don't own" : "不允许编辑不属于您的链接共享", "_1 email address already added_::_{count} email addresses already added_" : ["{count}个电子邮箱地址已添加"], - "_1 email address added_::_{count} email addresses added_" : ["{count}电子邮箱地址已添加"] + "_1 email address added_::_{count} email addresses added_" : ["{count}电子邮箱地址已添加"], + "Share with accounts, teams, federated cloud id" : "与账号、团队、联合云 ID 共享", + "Email, federated cloud id" : "电子邮件、联合云 ID" }, "nplurals=1; plural=0;"); diff --git a/apps/files_sharing/l10n/zh_CN.json b/apps/files_sharing/l10n/zh_CN.json index 26b40505ac0..56b38f5a650 100644 --- a/apps/files_sharing/l10n/zh_CN.json +++ b/apps/files_sharing/l10n/zh_CN.json @@ -311,16 +311,17 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "使用此方法与组织内的个人或团队共享文件。如果接收者已经可以访问共享,但找不到它,您可以向他们发送内部共享链接以便于访问。", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "使用此方法与组织外部的个人或组织共享文件。文件和文件夹可以通过公开共享链接和电子邮件地址共享。您还可以使用其联合云 ID 共享给托管在不同实例上的其他 Nextcloud 账号。", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "不属于内部或外部共享的共享,这可以是来自应用或其他来源的共享。", + "Share with accounts, teams, federated cloud IDs" : "与账号、团队、联合云 ID 共享", + "Share with accounts and teams" : "与账号和团队共享", + "Email, federated cloud ID" : "电子邮件、联合云 ID", "Unable to load the shares list" : "无法加载共享列表", "Expires {relativetime}" : "过期 {relativetime}", "this share just expired." : "此共享已过期。", "Shared with you by {owner}" : "{owner} 与您共享", "Internal shares" : "内部共享", "Internal shares explanation" : "内部共享说明", - "Share with accounts and teams" : "与账号和团队共享", "External shares" : "外部共享", "External shares explanation" : "外部共享说明", - "Email, federated cloud id" : "电子邮件、联合云 ID", "Additional shares" : "额外共享", "Additional shares explanation" : "额外共享说明", "Link to a file" : "链接到文件", @@ -420,6 +421,8 @@ "Share expire date saved" : "共享过期日期已保存", "You are not allowed to edit link shares that you don't own" : "不允许编辑不属于您的链接共享", "_1 email address already added_::_{count} email addresses already added_" : ["{count}个电子邮箱地址已添加"], - "_1 email address added_::_{count} email addresses added_" : ["{count}电子邮箱地址已添加"] + "_1 email address added_::_{count} email addresses added_" : ["{count}电子邮箱地址已添加"], + "Share with accounts, teams, federated cloud id" : "与账号、团队、联合云 ID 共享", + "Email, federated cloud id" : "电子邮件、联合云 ID" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/zh_HK.js b/apps/files_sharing/l10n/zh_HK.js index e66a30b09bd..97acfee6560 100644 --- a/apps/files_sharing/l10n/zh_HK.js +++ b/apps/files_sharing/l10n/zh_HK.js @@ -313,16 +313,17 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "使用此方法與組織內的個人或團隊分享檔案。如果收件者已經可以存取分享但找不到,您可以將內部分享連結傳送給他們,以方便存取。", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "使用此方法與組織外的個人或組織分享檔案。檔案與資料夾可以透過公開的分享連結與電子郵件地址來分享。您也可以使用其他 Nextcloud 帳號的聯邦雲端 ID,將檔案分享給託管在不同站台上的其他 Nextcloud 帳號。", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "不屬於內部或外部分享的分享。這可能是來自應用程式或其他來源的分享。", + "Share with accounts, teams, federated cloud IDs" : "與帳戶、團隊、聯邦雲端 ID 分享", + "Share with accounts and teams" : "與帳號及團隊分享", + "Email, federated cloud ID" : "電郵地址、聯邦雲端 ID", "Unable to load the shares list" : "無法載入分享清單", "Expires {relativetime}" : "有效期至 {relativetime}", "this share just expired." : "此分享剛過期。", "Shared with you by {owner}" : "{owner} 已經和您分享", "Internal shares" : "內部分享", "Internal shares explanation" : "內部分享說明", - "Share with accounts and teams" : "與帳號及團隊分享", "External shares" : "外部分享", "External shares explanation" : "外部分享說明", - "Email, federated cloud id" : "電郵地址、聯邦雲端 ID", "Additional shares" : "額外分享", "Additional shares explanation" : "額外分享說明", "Link to a file" : "連結到一個檔案", @@ -422,6 +423,8 @@ OC.L10N.register( "Share expire date saved" : "已儲存分享過期日期", "You are not allowed to edit link shares that you don't own" : "您無權編輯不屬於您的鏈接共享", "_1 email address already added_::_{count} email addresses already added_" : ["已添加 {count} 個電郵地址"], - "_1 email address added_::_{count} email addresses added_" : ["添加了{count}個電郵地址"] + "_1 email address added_::_{count} email addresses added_" : ["添加了{count}個電郵地址"], + "Share with accounts, teams, federated cloud id" : "與帳戶、團隊、聯邦雲端ID 分享", + "Email, federated cloud id" : "電郵地址、聯邦雲端 ID" }, "nplurals=1; plural=0;"); diff --git a/apps/files_sharing/l10n/zh_HK.json b/apps/files_sharing/l10n/zh_HK.json index 5ecda76da0d..f3ff5ddd6eb 100644 --- a/apps/files_sharing/l10n/zh_HK.json +++ b/apps/files_sharing/l10n/zh_HK.json @@ -311,16 +311,17 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "使用此方法與組織內的個人或團隊分享檔案。如果收件者已經可以存取分享但找不到,您可以將內部分享連結傳送給他們,以方便存取。", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "使用此方法與組織外的個人或組織分享檔案。檔案與資料夾可以透過公開的分享連結與電子郵件地址來分享。您也可以使用其他 Nextcloud 帳號的聯邦雲端 ID,將檔案分享給託管在不同站台上的其他 Nextcloud 帳號。", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "不屬於內部或外部分享的分享。這可能是來自應用程式或其他來源的分享。", + "Share with accounts, teams, federated cloud IDs" : "與帳戶、團隊、聯邦雲端 ID 分享", + "Share with accounts and teams" : "與帳號及團隊分享", + "Email, federated cloud ID" : "電郵地址、聯邦雲端 ID", "Unable to load the shares list" : "無法載入分享清單", "Expires {relativetime}" : "有效期至 {relativetime}", "this share just expired." : "此分享剛過期。", "Shared with you by {owner}" : "{owner} 已經和您分享", "Internal shares" : "內部分享", "Internal shares explanation" : "內部分享說明", - "Share with accounts and teams" : "與帳號及團隊分享", "External shares" : "外部分享", "External shares explanation" : "外部分享說明", - "Email, federated cloud id" : "電郵地址、聯邦雲端 ID", "Additional shares" : "額外分享", "Additional shares explanation" : "額外分享說明", "Link to a file" : "連結到一個檔案", @@ -420,6 +421,8 @@ "Share expire date saved" : "已儲存分享過期日期", "You are not allowed to edit link shares that you don't own" : "您無權編輯不屬於您的鏈接共享", "_1 email address already added_::_{count} email addresses already added_" : ["已添加 {count} 個電郵地址"], - "_1 email address added_::_{count} email addresses added_" : ["添加了{count}個電郵地址"] + "_1 email address added_::_{count} email addresses added_" : ["添加了{count}個電郵地址"], + "Share with accounts, teams, federated cloud id" : "與帳戶、團隊、聯邦雲端ID 分享", + "Email, federated cloud id" : "電郵地址、聯邦雲端 ID" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/zh_TW.js b/apps/files_sharing/l10n/zh_TW.js index 87ee702d58e..ee30804ebac 100644 --- a/apps/files_sharing/l10n/zh_TW.js +++ b/apps/files_sharing/l10n/zh_TW.js @@ -313,16 +313,15 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "使用此方法與組織內的個人或團隊分享檔案。如果收件者已經可以存取分享但找不到,您可以將內部分享連結傳送給他們,以方便存取。", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "使用此方法與組織外的個人或組織分享檔案。檔案與資料夾可以透過公開的分享連結與電子郵件地址來分享。您也可以使用其他 Nextcloud 帳號的聯邦雲端 ID,將檔案分享給託管在不同站台上的其他 Nextcloud 帳號。", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "不屬於內部或外部分享的分享。這可能是來自應用程式或其他來源的分享。", + "Share with accounts and teams" : "與帳號及團隊分享", "Unable to load the shares list" : "無法載入分享列表", "Expires {relativetime}" : "過期於 {relativetime}", "this share just expired." : "此分享剛過期。", "Shared with you by {owner}" : "{owner} 已與您分享", "Internal shares" : "內部分享", "Internal shares explanation" : "內部分享說明", - "Share with accounts and teams" : "與帳號及團隊分享", "External shares" : "外部分享", "External shares explanation" : "外部分享說明", - "Email, federated cloud id" : "電子郵件、聯邦雲端 ID", "Additional shares" : "額外分享", "Additional shares explanation" : "額外分享說明", "Link to a file" : "檔案連結", @@ -422,6 +421,8 @@ OC.L10N.register( "Share expire date saved" : "已儲存分享過期日期", "You are not allowed to edit link shares that you don't own" : "您無權編輯不屬於您的連結分享", "_1 email address already added_::_{count} email addresses already added_" : ["已新增 {count} 個電子郵件地址"], - "_1 email address added_::_{count} email addresses added_" : ["已新增 {count} 個電子郵件地址"] + "_1 email address added_::_{count} email addresses added_" : ["已新增 {count} 個電子郵件地址"], + "Share with accounts, teams, federated cloud id" : "與帳號、團隊、聯邦雲端ID 分享", + "Email, federated cloud id" : "電子郵件、聯邦雲端 ID" }, "nplurals=1; plural=0;"); diff --git a/apps/files_sharing/l10n/zh_TW.json b/apps/files_sharing/l10n/zh_TW.json index acbf27f4c22..adb6e4c73a1 100644 --- a/apps/files_sharing/l10n/zh_TW.json +++ b/apps/files_sharing/l10n/zh_TW.json @@ -311,16 +311,15 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "使用此方法與組織內的個人或團隊分享檔案。如果收件者已經可以存取分享但找不到,您可以將內部分享連結傳送給他們,以方便存取。", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "使用此方法與組織外的個人或組織分享檔案。檔案與資料夾可以透過公開的分享連結與電子郵件地址來分享。您也可以使用其他 Nextcloud 帳號的聯邦雲端 ID,將檔案分享給託管在不同站台上的其他 Nextcloud 帳號。", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "不屬於內部或外部分享的分享。這可能是來自應用程式或其他來源的分享。", + "Share with accounts and teams" : "與帳號及團隊分享", "Unable to load the shares list" : "無法載入分享列表", "Expires {relativetime}" : "過期於 {relativetime}", "this share just expired." : "此分享剛過期。", "Shared with you by {owner}" : "{owner} 已與您分享", "Internal shares" : "內部分享", "Internal shares explanation" : "內部分享說明", - "Share with accounts and teams" : "與帳號及團隊分享", "External shares" : "外部分享", "External shares explanation" : "外部分享說明", - "Email, federated cloud id" : "電子郵件、聯邦雲端 ID", "Additional shares" : "額外分享", "Additional shares explanation" : "額外分享說明", "Link to a file" : "檔案連結", @@ -420,6 +419,8 @@ "Share expire date saved" : "已儲存分享過期日期", "You are not allowed to edit link shares that you don't own" : "您無權編輯不屬於您的連結分享", "_1 email address already added_::_{count} email addresses already added_" : ["已新增 {count} 個電子郵件地址"], - "_1 email address added_::_{count} email addresses added_" : ["已新增 {count} 個電子郵件地址"] + "_1 email address added_::_{count} email addresses added_" : ["已新增 {count} 個電子郵件地址"], + "Share with accounts, teams, federated cloud id" : "與帳號、團隊、聯邦雲端ID 分享", + "Email, federated cloud id" : "電子郵件、聯邦雲端 ID" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_sharing/lib/AppInfo/Application.php b/apps/files_sharing/lib/AppInfo/Application.php index 4c47d3fc2c0..8ddb3afaf33 100644 --- a/apps/files_sharing/lib/AppInfo/Application.php +++ b/apps/files_sharing/lib/AppInfo/Application.php @@ -1,4 +1,5 @@ <?php + /** * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors * SPDX-FileCopyrightText: 2016 ownCloud, Inc. @@ -12,6 +13,7 @@ use OC\User\DisplayNameCache; use OCA\Files\Event\LoadAdditionalScriptsEvent; use OCA\Files\Event\LoadSidebar; use OCA\Files_Sharing\Capabilities; +use OCA\Files_Sharing\Config\ConfigLexicon; use OCA\Files_Sharing\External\Manager; use OCA\Files_Sharing\External\MountProvider as ExternalMountProvider; use OCA\Files_Sharing\Helper; @@ -106,6 +108,8 @@ class Application extends App implements IBootstrap { // File request auth $context->registerEventListener(BeforeTemplateRenderedEvent::class, LoadPublicFileRequestAuthListener::class); + + $context->registerConfigLexicon(ConfigLexicon::class); } public function boot(IBootContext $context): void { diff --git a/apps/files_sharing/lib/Config/ConfigLexicon.php b/apps/files_sharing/lib/Config/ConfigLexicon.php new file mode 100644 index 00000000000..a463b4e7ef2 --- /dev/null +++ b/apps/files_sharing/lib/Config/ConfigLexicon.php @@ -0,0 +1,39 @@ +<?php + +declare(strict_types=1); +/** + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\Files_Sharing\Config; + +use NCU\Config\Lexicon\ConfigLexiconEntry; +use NCU\Config\Lexicon\ConfigLexiconStrictness; +use NCU\Config\Lexicon\IConfigLexicon; +use NCU\Config\ValueType; + +/** + * Config Lexicon for files_sharing. + * + * Please Add & Manage your Config Keys in that file and keep the Lexicon up to date! + * + * {@see IConfigLexicon} + */ +class ConfigLexicon implements IConfigLexicon { + public const SHOW_FEDERATED_AS_INTERNAL = 'show_federated_shares_as_internal'; + + public function getStrictness(): ConfigLexiconStrictness { + return ConfigLexiconStrictness::IGNORE; + } + + public function getAppConfigs(): array { + return [ + new ConfigLexiconEntry(self::SHOW_FEDERATED_AS_INTERNAL, ValueType::BOOL, false, 'shows federated shares as internal shares', true), + ]; + } + + public function getUserConfigs(): array { + return []; + } +} diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php index 81ead3c4978..446db0b8fcc 100644 --- a/apps/files_sharing/lib/Controller/ShareAPIController.php +++ b/apps/files_sharing/lib/Controller/ShareAPIController.php @@ -2118,6 +2118,8 @@ class ShareAPIController extends OCSController { $hideDownload = $hideDownload && $originalShare->getHideDownload(); // allow download if already allowed by previous share or when the current share allows downloading $canDownload = $canDownload || $inheritedAttributes === null || $inheritedAttributes->getAttribute('permissions', 'download') !== false; + } elseif ($node->getStorage()->instanceOfStorage(Storage::class)) { + $canDownload = true; // in case of federation storage, we can expect the download to be activated by default } } diff --git a/apps/files_sharing/lib/Listener/LoadSidebarListener.php b/apps/files_sharing/lib/Listener/LoadSidebarListener.php index b00e937d675..9f0eee9159a 100644 --- a/apps/files_sharing/lib/Listener/LoadSidebarListener.php +++ b/apps/files_sharing/lib/Listener/LoadSidebarListener.php @@ -11,9 +11,12 @@ namespace OCA\Files_Sharing\Listener; use OCA\Files\Event\LoadSidebar; use OCA\Files_Sharing\AppInfo\Application; +use OCA\Files_Sharing\Config\ConfigLexicon; use OCP\AppFramework\Services\IInitialState; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; +use OCP\IAppConfig; +use OCP\Server; use OCP\Share\IManager; use OCP\Util; @@ -33,6 +36,8 @@ class LoadSidebarListener implements IEventListener { return; } + $appConfig = Server::get(IAppConfig::class); + $this->initialState->provideInitialState('showFederatedSharesAsInternal', $appConfig->getValueBool('files_sharing', ConfigLexicon::SHOW_FEDERATED_AS_INTERNAL)); Util::addScript(Application::APP_ID, 'files_sharing_tab', 'files'); } } diff --git a/apps/files_sharing/lib/MountProvider.php b/apps/files_sharing/lib/MountProvider.php index ea99023676b..91c392de6eb 100644 --- a/apps/files_sharing/lib/MountProvider.php +++ b/apps/files_sharing/lib/MountProvider.php @@ -60,7 +60,8 @@ class MountProvider implements IMountProvider { $superShares = $this->buildSuperShares($shares, $user); - $mounts = $this->mountManager->getAll(); + $otherMounts = $this->mountManager->getAll(); + $mounts = []; $view = new View('/' . $user->getUID() . '/files'); $ownerViews = []; $sharingDisabledForUser = $this->shareManager->sharingDisabledForUser($user->getUID()); @@ -90,7 +91,7 @@ class MountProvider implements IMountProvider { $shareId = (int)$parentShare->getId(); $mount = new SharedMount( '\OCA\Files_Sharing\SharedStorage', - $mounts, + array_merge($mounts, $otherMounts), [ 'user' => $user->getUID(), // parent share @@ -105,7 +106,7 @@ class MountProvider implements IMountProvider { $foldersExistCache, $this->eventDispatcher, $user, - ($shareId <= $maxValidatedShare) + ($shareId <= $maxValidatedShare), ); $newMaxValidatedShare = max($shareId, $newMaxValidatedShare); diff --git a/apps/files_sharing/lib/SharedStorage.php b/apps/files_sharing/lib/SharedStorage.php index dfd4854de1f..1014b0d37d9 100644 --- a/apps/files_sharing/lib/SharedStorage.php +++ b/apps/files_sharing/lib/SharedStorage.php @@ -555,4 +555,9 @@ class SharedStorage extends Jail implements LegacyISharedStorage, ISharedStorage $this->init(); return parent::getUnjailedPath($path); } + + public function getDirectDownload(string $path): array|false { + // disable direct download for shares + return []; + } } diff --git a/apps/files_sharing/src/components/SharingInput.vue b/apps/files_sharing/src/components/SharingInput.vue index 49a39915e5e..b886ba95a17 100644 --- a/apps/files_sharing/src/components/SharingInput.vue +++ b/apps/files_sharing/src/components/SharingInput.vue @@ -194,11 +194,11 @@ export default { let shareType = [] - if (this.isExternal) { - shareType.push(ShareType.Remote) - shareType.push(ShareType.RemoteGroup) + const remoteTypes = [ShareType.Remote, ShareType.RemoteGroup] + + if (this.isExternal && !this.config.showFederatedSharesAsInternal) { + shareType.push(...remoteTypes) } else { - // Merge shareType array shareType = shareType.concat([ ShareType.User, ShareType.Group, @@ -209,6 +209,9 @@ export default { ShareType.ScienceMesh, ]) + if (this.config.showFederatedSharesAsInternal) { + shareType.push(...remoteTypes) + } } if (getCapabilities().files_sharing.public.enabled === true && this.isExternal) { diff --git a/apps/files_sharing/src/services/ConfigService.ts b/apps/files_sharing/src/services/ConfigService.ts index 09fdca13598..2114e2d1bae 100644 --- a/apps/files_sharing/src/services/ConfigService.ts +++ b/apps/files_sharing/src/services/ConfigService.ts @@ -3,6 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ import { getCapabilities } from '@nextcloud/capabilities' +import { loadState } from '@nextcloud/initial-state' type PasswordPolicyCapabilities = { enforceNonCommonPassword: boolean @@ -306,4 +307,12 @@ export default class Config { return this._capabilities?.files_sharing?.public?.custom_tokens } + /** + * Show federated shares as internal shares + * @return {boolean} + */ + get showFederatedSharesAsInternal(): boolean { + return loadState('files_sharing', 'showFederatedSharesAsInternal', false) + } + } diff --git a/apps/files_sharing/src/views/SharingTab.vue b/apps/files_sharing/src/views/SharingTab.vue index e9e068a7c1d..e50c3292055 100644 --- a/apps/files_sharing/src/views/SharingTab.vue +++ b/apps/files_sharing/src/views/SharingTab.vue @@ -50,7 +50,7 @@ :link-shares="linkShares" :reshare="reshare" :shares="shares" - :placeholder="t('files_sharing', 'Share with accounts and teams')" + :placeholder="internalShareInputPlaceholder" @open-sharing-details="toggleShareDetailsView" /> <!-- other shares list --> @@ -90,7 +90,7 @@ :file-info="fileInfo" :link-shares="linkShares" :is-external="true" - :placeholder="t('files_sharing', 'Email, federated cloud id')" + :placeholder="externalShareInputPlaceholder" :reshare="reshare" :shares="shares" @open-sharing-details="toggleShareDetailsView" /> @@ -249,6 +249,18 @@ export default { return !!(this.fileInfo.permissions & OC.PERMISSION_SHARE) || !!(this.reshare && this.reshare.hasSharePermission && this.config.isResharingAllowed) }, + + internalShareInputPlaceholder() { + return this.config.showFederatedSharesAsInternal + ? t('files_sharing', 'Share with accounts, teams, federated cloud IDs') + : t('files_sharing', 'Share with accounts and teams') + }, + + externalShareInputPlaceholder() { + return this.config.showFederatedSharesAsInternal + ? t('files_sharing', 'Email') + : t('files_sharing', 'Email, federated cloud ID') + }, }, methods: { @@ -369,7 +381,11 @@ export default { if ([ShareType.Link, ShareType.Email].includes(share.type)) { this.linkShares.push(share) } else if ([ShareType.Remote, ShareType.RemoteGroup].includes(share.type)) { - this.externalShares.push(share) + if (this.config.showFederatedSharesAsInternal) { + this.shares.push(share) + } else { + this.externalShares.push(share) + } } else { this.shares.push(share) } @@ -439,7 +455,11 @@ export default { if (share.type === ShareType.Email) { this.linkShares.unshift(share) } else if ([ShareType.Remote, ShareType.RemoteGroup].includes(share.type)) { - this.externalShares.unshift(share) + if (this.config.showFederatedSharesAsInternal) { + this.shares.unshift(share) + } else { + this.externalShares.unshift(share) + } } else { this.shares.unshift(share) } diff --git a/apps/settings/l10n/de.js b/apps/settings/l10n/de.js index 6460690502f..37a1ff21e33 100644 --- a/apps/settings/l10n/de.js +++ b/apps/settings/l10n/de.js @@ -45,7 +45,7 @@ OC.L10N.register( "You granted filesystem access to app password \"{token}\"" : "Du hast den Dateisystemzugriff für das App-Passwort \"{token}\" erlaubt", "You revoked filesystem access from app password \"{token}\"" : "Du hast den Dateisystemzugriff für das App-Passwort \"{token}\" widerrufen", "Security" : "Sicherheit", - "You successfully logged in using two-factor authentication (%1$s)" : "Du hast dich erfolgreich mittels Zwei-Faktor-Authentifizierung angemeldet (%1$s)", + "You successfully logged in using two-factor authentication (%1$s)" : "Du hast dich mittels Zwei-Faktor-Authentifizierung angemeldet (%1$s)", "A login attempt using two-factor authentication failed (%1$s)" : "Ein Anmeldeversuch mittels Zwei-Faktor-Authentifizierung schlug fehl (%1$s)", "Remote wipe was started on %1$s" : "Fernlöschung wurde am %1$s gestartet", "Remote wipe has finished on %1$s" : "Fernlöschung wurde am %1$s abgeschlossen", @@ -157,7 +157,7 @@ OC.L10N.register( "Last background job execution ran %s." : "Letzte Hintergrund-Jobausführung lief %s.", "Data directory protected" : "Datenverzeichnis geschützt", "Your data directory and files are probably accessible from the internet. The .htaccess file is not working. It is strongly recommended that you configure your web server so that the data directory is no longer accessible, or move the data directory outside the web server document root." : "Dein Datenverzeichnis und deine Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, deinen Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass du es aus dem Document-Root-Verzeichnis des Webservers herausverschiebst.", - "Could not check that the data directory is protected. Please check manually that your server does not allow access to the data directory." : "Konnte nicht überprüfen, ob das Datenverzeichnis geschützt ist. Bitte überprüfe manuell, ob dein Server keinen Zugriff auf das Datenverzeichnis erlaubt.", + "Could not check that the data directory is protected. Please check manually that your server does not allow access to the data directory." : "Es konnte nicht überprüft werden, ob das Datenverzeichnis geschützt ist. Bitte überprüfe manuell, ob dein Server keinen Zugriff auf das Datenverzeichnis erlaubt.", "Database missing columns" : "In der Datenbank fehlen Spalten", "Missing optional column \"%s\" in table \"%s\"." : "Fehlende optionale Spalte \"%s\" in der Tabelle \"%s\".", "The database is missing some optional columns. Due to the fact that adding columns on big tables could take some time they were not added automatically when they can be optional. By running \"occ db:add-missing-columns\" those missing columns could be added manually while the instance keeps running. Once the columns are added some features might improve responsiveness or usability." : "In der Datenbank fehlen einige optionale Spalten. Da das Hinzufügen von Spalten bei großen Tabellen einige Zeit dauern kann, wurden sie nicht automatisch hinzugefügt, wenn sie optional sein können. Durch Ausführen von \"occ db:add-missing-columns\" können diese fehlenden Spalten manuell hinzugefügt werden, während die Instanz weiter läuft. Sobald die Spalten hinzugefügt sind, könnten einige Funktionen die Reaktionsfähigkeit oder die Benutzerfreundlichkeit verbessern.", @@ -177,7 +177,7 @@ OC.L10N.register( "Your installation has no default phone region set. This is required to validate phone numbers in the profile settings without a country code. To allow numbers without a country code, please add \"default_phone_region\" with the respective ISO 3166-1 code of the region to your config file." : "Für diese Installation ist keine Standard-Telefonregion festgelegt. Dies ist erforderlich, um Telefonnummern in den Profileinstellungen ohne Ländercode überprüfen zu können. Um Nummern ohne Ländervorwahl zuzulassen, bitte \"default_phone_region\" mit dem entsprechenden ISO 3166-1-Code der Region der Konfigurationsdatei hinzufügen.", "Email test" : "E-Mail-Test", "Mail delivery is disabled by instance config \"%s\"." : "Die E-Mail-Zustellung ist aufgrund der Instanzkonfiguration \"%s\" deaktiviert.", - "Email test was successfully sent" : "Die Test-E-Mail wurde erfolgreich versandt", + "Email test was successfully sent" : "Die Test-E-Mail wurde versandt", "You have not set or verified your email server configuration, yet. Please head over to the \"Basic settings\" in order to set them. Afterwards, use the \"Send email\" button below the form to verify your settings." : "Die E-Mail-Serverkonfiguration wurde noch nicht festgelegt oder überprüft. Bitte zu den Grundeinstellungen gehen, um die Einstellungen vorzunehmen. Anschließend die Schaltfläche \"E-Mail senden\" unterhalb des Formulars verwenden, um die Einstellungen zu überprüfen.", "Transactional File Locking" : "Transaktionale Dateisperre", "Transactional File Locking is disabled. This is not a a supported configuraton. It may lead to difficult to isolate problems including file corruption. Please remove the `'filelocking.enabled' => false` configuration entry from your `config.php` to avoid these problems." : "Die transaktionale Dateisperre ist deaktiviert. Dies ist keine unterstützte Konfiguration und kann zu schwer zu einzugrenzenden Problemen führen, einschließlich der Beschädigung von Dateien. Bitte entferne den Konfigurationseintrag `'filelocking.enabled' => false` aus deiner `config.php`, um solche Probleme zu vermeiden.", diff --git a/apps/settings/l10n/de.json b/apps/settings/l10n/de.json index bb76e29c208..2b43ac861a5 100644 --- a/apps/settings/l10n/de.json +++ b/apps/settings/l10n/de.json @@ -43,7 +43,7 @@ "You granted filesystem access to app password \"{token}\"" : "Du hast den Dateisystemzugriff für das App-Passwort \"{token}\" erlaubt", "You revoked filesystem access from app password \"{token}\"" : "Du hast den Dateisystemzugriff für das App-Passwort \"{token}\" widerrufen", "Security" : "Sicherheit", - "You successfully logged in using two-factor authentication (%1$s)" : "Du hast dich erfolgreich mittels Zwei-Faktor-Authentifizierung angemeldet (%1$s)", + "You successfully logged in using two-factor authentication (%1$s)" : "Du hast dich mittels Zwei-Faktor-Authentifizierung angemeldet (%1$s)", "A login attempt using two-factor authentication failed (%1$s)" : "Ein Anmeldeversuch mittels Zwei-Faktor-Authentifizierung schlug fehl (%1$s)", "Remote wipe was started on %1$s" : "Fernlöschung wurde am %1$s gestartet", "Remote wipe has finished on %1$s" : "Fernlöschung wurde am %1$s abgeschlossen", @@ -155,7 +155,7 @@ "Last background job execution ran %s." : "Letzte Hintergrund-Jobausführung lief %s.", "Data directory protected" : "Datenverzeichnis geschützt", "Your data directory and files are probably accessible from the internet. The .htaccess file is not working. It is strongly recommended that you configure your web server so that the data directory is no longer accessible, or move the data directory outside the web server document root." : "Dein Datenverzeichnis und deine Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, deinen Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass du es aus dem Document-Root-Verzeichnis des Webservers herausverschiebst.", - "Could not check that the data directory is protected. Please check manually that your server does not allow access to the data directory." : "Konnte nicht überprüfen, ob das Datenverzeichnis geschützt ist. Bitte überprüfe manuell, ob dein Server keinen Zugriff auf das Datenverzeichnis erlaubt.", + "Could not check that the data directory is protected. Please check manually that your server does not allow access to the data directory." : "Es konnte nicht überprüft werden, ob das Datenverzeichnis geschützt ist. Bitte überprüfe manuell, ob dein Server keinen Zugriff auf das Datenverzeichnis erlaubt.", "Database missing columns" : "In der Datenbank fehlen Spalten", "Missing optional column \"%s\" in table \"%s\"." : "Fehlende optionale Spalte \"%s\" in der Tabelle \"%s\".", "The database is missing some optional columns. Due to the fact that adding columns on big tables could take some time they were not added automatically when they can be optional. By running \"occ db:add-missing-columns\" those missing columns could be added manually while the instance keeps running. Once the columns are added some features might improve responsiveness or usability." : "In der Datenbank fehlen einige optionale Spalten. Da das Hinzufügen von Spalten bei großen Tabellen einige Zeit dauern kann, wurden sie nicht automatisch hinzugefügt, wenn sie optional sein können. Durch Ausführen von \"occ db:add-missing-columns\" können diese fehlenden Spalten manuell hinzugefügt werden, während die Instanz weiter läuft. Sobald die Spalten hinzugefügt sind, könnten einige Funktionen die Reaktionsfähigkeit oder die Benutzerfreundlichkeit verbessern.", @@ -175,7 +175,7 @@ "Your installation has no default phone region set. This is required to validate phone numbers in the profile settings without a country code. To allow numbers without a country code, please add \"default_phone_region\" with the respective ISO 3166-1 code of the region to your config file." : "Für diese Installation ist keine Standard-Telefonregion festgelegt. Dies ist erforderlich, um Telefonnummern in den Profileinstellungen ohne Ländercode überprüfen zu können. Um Nummern ohne Ländervorwahl zuzulassen, bitte \"default_phone_region\" mit dem entsprechenden ISO 3166-1-Code der Region der Konfigurationsdatei hinzufügen.", "Email test" : "E-Mail-Test", "Mail delivery is disabled by instance config \"%s\"." : "Die E-Mail-Zustellung ist aufgrund der Instanzkonfiguration \"%s\" deaktiviert.", - "Email test was successfully sent" : "Die Test-E-Mail wurde erfolgreich versandt", + "Email test was successfully sent" : "Die Test-E-Mail wurde versandt", "You have not set or verified your email server configuration, yet. Please head over to the \"Basic settings\" in order to set them. Afterwards, use the \"Send email\" button below the form to verify your settings." : "Die E-Mail-Serverkonfiguration wurde noch nicht festgelegt oder überprüft. Bitte zu den Grundeinstellungen gehen, um die Einstellungen vorzunehmen. Anschließend die Schaltfläche \"E-Mail senden\" unterhalb des Formulars verwenden, um die Einstellungen zu überprüfen.", "Transactional File Locking" : "Transaktionale Dateisperre", "Transactional File Locking is disabled. This is not a a supported configuraton. It may lead to difficult to isolate problems including file corruption. Please remove the `'filelocking.enabled' => false` configuration entry from your `config.php` to avoid these problems." : "Die transaktionale Dateisperre ist deaktiviert. Dies ist keine unterstützte Konfiguration und kann zu schwer zu einzugrenzenden Problemen führen, einschließlich der Beschädigung von Dateien. Bitte entferne den Konfigurationseintrag `'filelocking.enabled' => false` aus deiner `config.php`, um solche Probleme zu vermeiden.", diff --git a/apps/settings/l10n/de_DE.js b/apps/settings/l10n/de_DE.js index 35698a0a7fd..49c20c8e722 100644 --- a/apps/settings/l10n/de_DE.js +++ b/apps/settings/l10n/de_DE.js @@ -157,7 +157,7 @@ OC.L10N.register( "Last background job execution ran %s." : "Letzte Hintergrund-Jobausführung lief %s.", "Data directory protected" : "Datenverzeichnis geschützt", "Your data directory and files are probably accessible from the internet. The .htaccess file is not working. It is strongly recommended that you configure your web server so that the data directory is no longer accessible, or move the data directory outside the web server document root." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Ihren Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Sie es aus dem Document-Root-Verzeichnis des Webservers herausverschieben.", - "Could not check that the data directory is protected. Please check manually that your server does not allow access to the data directory." : "Konnte nicht überprüfen, ob das Datenverzeichnis geschützt ist. Bitte überprüfen Sie manuell, ob Ihr Server keinen Zugriff auf das Datenverzeichnis erlaubt.", + "Could not check that the data directory is protected. Please check manually that your server does not allow access to the data directory." : "Es konnte nicht überprüft werden, ob das Datenverzeichnis geschützt ist. Bitte überprüfen Sie manuell, ob Ihr Server keinen Zugriff auf das Datenverzeichnis erlaubt.", "Database missing columns" : "In der Datenbank fehlen Spalten", "Missing optional column \"%s\" in table \"%s\"." : "Fehlende optionale Spalte \"%s\" in der Tabelle \"%s\".", "The database is missing some optional columns. Due to the fact that adding columns on big tables could take some time they were not added automatically when they can be optional. By running \"occ db:add-missing-columns\" those missing columns could be added manually while the instance keeps running. Once the columns are added some features might improve responsiveness or usability." : "In der Datenbank fehlen einige optionale Spalten. Da das Hinzufügen von Spalten bei großen Tabellen einige Zeit dauern kann, wurden sie nicht automatisch hinzugefügt, wenn sie optional sein können. Durch Ausführen von \"occ db:add-missing-columns\" können diese fehlenden Spalten manuell hinzugefügt werden, während die Instanz weiter läuft. Sobald die Spalten hinzugefügt sind, könnten einige Funktionen die Reaktionsfähigkeit oder die Bedienfreundlichkeit verbessern.", @@ -177,7 +177,7 @@ OC.L10N.register( "Your installation has no default phone region set. This is required to validate phone numbers in the profile settings without a country code. To allow numbers without a country code, please add \"default_phone_region\" with the respective ISO 3166-1 code of the region to your config file." : "Für Ihre Installation ist keine Standard-Telefonregion festgelegt. Dies ist erforderlich, um Telefonnummern in den Profileinstellungen ohne Ländervorwahl zu überprüfen. Um Nummern ohne Ländervorwahl zuzulassen, fügen Sie bitte \"default_phone_region\" mit dem entsprechenden ISO 3166-1-Code der Region zu Ihrer Konfigurationsdatei hinzu.", "Email test" : "E-Mail-Test", "Mail delivery is disabled by instance config \"%s\"." : "Die E-Mail-Zustellung ist aufgrund der Instanzkonfiguration \"%s\" deaktiviert.", - "Email test was successfully sent" : "Die Test-E-Mail wurde erfolgreich versandt", + "Email test was successfully sent" : "Die Test-E-Mail wurde versandt", "You have not set or verified your email server configuration, yet. Please head over to the \"Basic settings\" in order to set them. Afterwards, use the \"Send email\" button below the form to verify your settings." : "Sie haben Ihre E-Mail-Serverkonfiguration noch nicht festgelegt oder überprüft. Gehen Sie bitte zu den \"Grundeinstellungen\", um diese festzulegen. Benutzen Sie anschließend den Button \"E-Mail senden\" unterhalb des Formulars, um Ihre Einstellungen zu überprüfen.", "Transactional File Locking" : "Transaktionale Dateisperre", "Transactional File Locking is disabled. This is not a a supported configuraton. It may lead to difficult to isolate problems including file corruption. Please remove the `'filelocking.enabled' => false` configuration entry from your `config.php` to avoid these problems." : "Die transaktionale Dateisperre ist deaktiviert. Dies ist keine unterstützte Konfiguration und kann zu schwer zu einzugrenzenden Problemen führen, einschließlich der Beschädigung von Dateien. Bitte entfernen Sie den Konfigurationseintrag `'filelocking.enabled' => false` aus Ihrer `config.php`, um solche Probleme zu vermeiden.", @@ -726,7 +726,7 @@ OC.L10N.register( "Delete {userid}'s account" : "Konto von {userid} löschen", "Display name was successfully changed" : "Der Anzeigename wurde geändert", "Password can't be empty" : "Passwort darf nicht leer sein", - "Password was successfully changed" : "Das Passwort wurde erfolgreich geändert", + "Password was successfully changed" : "Das Passwort wurde geändert", "Email can't be empty" : "E-Mail darf nicht leer sein", "Email was successfully changed" : "E-Mail-Adresse wurde geändert", "Welcome mail sent!" : "Willkommens-E-Mail gesendet!", diff --git a/apps/settings/l10n/de_DE.json b/apps/settings/l10n/de_DE.json index 423964970c0..85ed8fe4a63 100644 --- a/apps/settings/l10n/de_DE.json +++ b/apps/settings/l10n/de_DE.json @@ -155,7 +155,7 @@ "Last background job execution ran %s." : "Letzte Hintergrund-Jobausführung lief %s.", "Data directory protected" : "Datenverzeichnis geschützt", "Your data directory and files are probably accessible from the internet. The .htaccess file is not working. It is strongly recommended that you configure your web server so that the data directory is no longer accessible, or move the data directory outside the web server document root." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Ihren Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Sie es aus dem Document-Root-Verzeichnis des Webservers herausverschieben.", - "Could not check that the data directory is protected. Please check manually that your server does not allow access to the data directory." : "Konnte nicht überprüfen, ob das Datenverzeichnis geschützt ist. Bitte überprüfen Sie manuell, ob Ihr Server keinen Zugriff auf das Datenverzeichnis erlaubt.", + "Could not check that the data directory is protected. Please check manually that your server does not allow access to the data directory." : "Es konnte nicht überprüft werden, ob das Datenverzeichnis geschützt ist. Bitte überprüfen Sie manuell, ob Ihr Server keinen Zugriff auf das Datenverzeichnis erlaubt.", "Database missing columns" : "In der Datenbank fehlen Spalten", "Missing optional column \"%s\" in table \"%s\"." : "Fehlende optionale Spalte \"%s\" in der Tabelle \"%s\".", "The database is missing some optional columns. Due to the fact that adding columns on big tables could take some time they were not added automatically when they can be optional. By running \"occ db:add-missing-columns\" those missing columns could be added manually while the instance keeps running. Once the columns are added some features might improve responsiveness or usability." : "In der Datenbank fehlen einige optionale Spalten. Da das Hinzufügen von Spalten bei großen Tabellen einige Zeit dauern kann, wurden sie nicht automatisch hinzugefügt, wenn sie optional sein können. Durch Ausführen von \"occ db:add-missing-columns\" können diese fehlenden Spalten manuell hinzugefügt werden, während die Instanz weiter läuft. Sobald die Spalten hinzugefügt sind, könnten einige Funktionen die Reaktionsfähigkeit oder die Bedienfreundlichkeit verbessern.", @@ -175,7 +175,7 @@ "Your installation has no default phone region set. This is required to validate phone numbers in the profile settings without a country code. To allow numbers without a country code, please add \"default_phone_region\" with the respective ISO 3166-1 code of the region to your config file." : "Für Ihre Installation ist keine Standard-Telefonregion festgelegt. Dies ist erforderlich, um Telefonnummern in den Profileinstellungen ohne Ländervorwahl zu überprüfen. Um Nummern ohne Ländervorwahl zuzulassen, fügen Sie bitte \"default_phone_region\" mit dem entsprechenden ISO 3166-1-Code der Region zu Ihrer Konfigurationsdatei hinzu.", "Email test" : "E-Mail-Test", "Mail delivery is disabled by instance config \"%s\"." : "Die E-Mail-Zustellung ist aufgrund der Instanzkonfiguration \"%s\" deaktiviert.", - "Email test was successfully sent" : "Die Test-E-Mail wurde erfolgreich versandt", + "Email test was successfully sent" : "Die Test-E-Mail wurde versandt", "You have not set or verified your email server configuration, yet. Please head over to the \"Basic settings\" in order to set them. Afterwards, use the \"Send email\" button below the form to verify your settings." : "Sie haben Ihre E-Mail-Serverkonfiguration noch nicht festgelegt oder überprüft. Gehen Sie bitte zu den \"Grundeinstellungen\", um diese festzulegen. Benutzen Sie anschließend den Button \"E-Mail senden\" unterhalb des Formulars, um Ihre Einstellungen zu überprüfen.", "Transactional File Locking" : "Transaktionale Dateisperre", "Transactional File Locking is disabled. This is not a a supported configuraton. It may lead to difficult to isolate problems including file corruption. Please remove the `'filelocking.enabled' => false` configuration entry from your `config.php` to avoid these problems." : "Die transaktionale Dateisperre ist deaktiviert. Dies ist keine unterstützte Konfiguration und kann zu schwer zu einzugrenzenden Problemen führen, einschließlich der Beschädigung von Dateien. Bitte entfernen Sie den Konfigurationseintrag `'filelocking.enabled' => false` aus Ihrer `config.php`, um solche Probleme zu vermeiden.", @@ -724,7 +724,7 @@ "Delete {userid}'s account" : "Konto von {userid} löschen", "Display name was successfully changed" : "Der Anzeigename wurde geändert", "Password can't be empty" : "Passwort darf nicht leer sein", - "Password was successfully changed" : "Das Passwort wurde erfolgreich geändert", + "Password was successfully changed" : "Das Passwort wurde geändert", "Email can't be empty" : "E-Mail darf nicht leer sein", "Email was successfully changed" : "E-Mail-Adresse wurde geändert", "Welcome mail sent!" : "Willkommens-E-Mail gesendet!", diff --git a/apps/settings/l10n/et_EE.js b/apps/settings/l10n/et_EE.js index a2dce7d235e..35fc7a5d4e3 100644 --- a/apps/settings/l10n/et_EE.js +++ b/apps/settings/l10n/et_EE.js @@ -154,6 +154,7 @@ OC.L10N.register( "PHP memory limit" : "PHP mälukasutuse ülempiir", "for Argon2 for password hashing" : "Argon2-põhise salasõna räsimise jaoks", "required for SFTP storage and recommended for WebAuthn performance" : "nõutav SFTP andmeruumi jaoks ja soovitatav WebAuthn jõudluse jaoks", + "Correctly configured" : "Korrektselt seadistatud", "PHP version" : "PHP versioon", "You are currently running PHP %1$s. PHP %2$s is deprecated since Nextcloud %3$s. Nextcloud %4$s may require at least PHP %5$s. Please upgrade to one of the officially supported PHP versions provided by the PHP Group as soon as possible." : "Sa kasutad hetkel PHP versiooni %1$s. PHP %2$s on aga alates Nexctcloudi versioonist %3$s kasutuselt eemaldatud. Nexctcloud %4$s eeldab, et PHP versioon on vähemalt %5$s. Palun uuenda oma server PHP Groupi poolt väljaantud ametliku PHP versioonini niipea, kui võimalik.", "You are currently running PHP %s." : "Sul on hetkel kasutusel PHP versioon %s.", @@ -161,6 +162,7 @@ OC.L10N.register( "Valid enterprise license" : "Suurfirmade litsents", "Free push service" : "Tasuta tõuketeenus", "This is the unsupported community build of Nextcloud. Given the size of this instance, performance, reliability and scalability cannot be guaranteed. Push notifications are limited to avoid overloading our free service. Learn more about the benefits of Nextcloud Enterprise at {link}." : "See on mittetoetatud Nextcloudi variant kogukonnale. Arvestades selle serveri parameetreid, pole jõudlus, töökindlus ja skaleeritavus garanteeritud. Meie tasuta teenuse ülekoormuse vältimiseks on tõuketeavituste arv piiratud. Nextcloud Enterprise versiooni eelistest loe siin: {link}.", + "Secure" : "Turvaline", "Database version" : "Andmebaasi versioon", "MariaDB version 10.3 detected, this version is end-of-life and only supported as part of Ubuntu 20.04. MariaDB >=%1$s and <=%2$s is suggested for best performance, stability and functionality with this version of Nextcloud." : "Tuvastasin MariaDB versiooni 10.3 ning tema kasutusperiood on lõppenud ja tugi on olemas vaid Ubuntu 20.04 puhul. Parima jõudluse, stabiilsuse ja funktsionaalsuse mõttes soovitame selle Nextcloudi versiooni jaoks MariaDB versioone >=%1$s and <= %2$s.", "MariaDB version \"%1$s\" detected. MariaDB >=%2$s and <=%3$s is suggested for best performance, stability and functionality with this version of Nextcloud." : "Tuvastasin MariaDB versiooni „%1$s“. Parima jõudluse, stabiilsuse ja funktsionaalsuse mõttes soovitame selle Nextcloudi versiooni jaoks MariaDB versioone >=%2$s and <= %3$s.", @@ -175,6 +177,7 @@ OC.L10N.register( "Task:" : "Ülesanded:", "Enable" : "Lülita sisse", "Machine translation" : "Masintõlge", + "Image generation" : "Pildiloome", "None" : "Pole", "Allow apps to use the Share API" : "Luba rakendustel kasutada Share API-t", "Allow resharing" : "Luba edasijagamine", diff --git a/apps/settings/l10n/et_EE.json b/apps/settings/l10n/et_EE.json index 72c5450d2cf..a29cfa38243 100644 --- a/apps/settings/l10n/et_EE.json +++ b/apps/settings/l10n/et_EE.json @@ -152,6 +152,7 @@ "PHP memory limit" : "PHP mälukasutuse ülempiir", "for Argon2 for password hashing" : "Argon2-põhise salasõna räsimise jaoks", "required for SFTP storage and recommended for WebAuthn performance" : "nõutav SFTP andmeruumi jaoks ja soovitatav WebAuthn jõudluse jaoks", + "Correctly configured" : "Korrektselt seadistatud", "PHP version" : "PHP versioon", "You are currently running PHP %1$s. PHP %2$s is deprecated since Nextcloud %3$s. Nextcloud %4$s may require at least PHP %5$s. Please upgrade to one of the officially supported PHP versions provided by the PHP Group as soon as possible." : "Sa kasutad hetkel PHP versiooni %1$s. PHP %2$s on aga alates Nexctcloudi versioonist %3$s kasutuselt eemaldatud. Nexctcloud %4$s eeldab, et PHP versioon on vähemalt %5$s. Palun uuenda oma server PHP Groupi poolt väljaantud ametliku PHP versioonini niipea, kui võimalik.", "You are currently running PHP %s." : "Sul on hetkel kasutusel PHP versioon %s.", @@ -159,6 +160,7 @@ "Valid enterprise license" : "Suurfirmade litsents", "Free push service" : "Tasuta tõuketeenus", "This is the unsupported community build of Nextcloud. Given the size of this instance, performance, reliability and scalability cannot be guaranteed. Push notifications are limited to avoid overloading our free service. Learn more about the benefits of Nextcloud Enterprise at {link}." : "See on mittetoetatud Nextcloudi variant kogukonnale. Arvestades selle serveri parameetreid, pole jõudlus, töökindlus ja skaleeritavus garanteeritud. Meie tasuta teenuse ülekoormuse vältimiseks on tõuketeavituste arv piiratud. Nextcloud Enterprise versiooni eelistest loe siin: {link}.", + "Secure" : "Turvaline", "Database version" : "Andmebaasi versioon", "MariaDB version 10.3 detected, this version is end-of-life and only supported as part of Ubuntu 20.04. MariaDB >=%1$s and <=%2$s is suggested for best performance, stability and functionality with this version of Nextcloud." : "Tuvastasin MariaDB versiooni 10.3 ning tema kasutusperiood on lõppenud ja tugi on olemas vaid Ubuntu 20.04 puhul. Parima jõudluse, stabiilsuse ja funktsionaalsuse mõttes soovitame selle Nextcloudi versiooni jaoks MariaDB versioone >=%1$s and <= %2$s.", "MariaDB version \"%1$s\" detected. MariaDB >=%2$s and <=%3$s is suggested for best performance, stability and functionality with this version of Nextcloud." : "Tuvastasin MariaDB versiooni „%1$s“. Parima jõudluse, stabiilsuse ja funktsionaalsuse mõttes soovitame selle Nextcloudi versiooni jaoks MariaDB versioone >=%2$s and <= %3$s.", @@ -173,6 +175,7 @@ "Task:" : "Ülesanded:", "Enable" : "Lülita sisse", "Machine translation" : "Masintõlge", + "Image generation" : "Pildiloome", "None" : "Pole", "Allow apps to use the Share API" : "Luba rakendustel kasutada Share API-t", "Allow resharing" : "Luba edasijagamine", diff --git a/apps/settings/l10n/lv.js b/apps/settings/l10n/lv.js index a3181eb53ef..6c42b12b9fb 100644 --- a/apps/settings/l10n/lv.js +++ b/apps/settings/l10n/lv.js @@ -18,7 +18,7 @@ OC.L10N.register( "You changed your password" : "Tu nomainīji savu paroli", "You renamed app password \"{token}\" to \"{newToken}\"" : "Tu pārdēvēji lietotnes paroli \"{token}\" par \"{newToken}\"", "Security" : "Drošība", - "You successfully logged in using two-factor authentication (%1$s)" : "Veiksmīga pieteikšanās ar divpakāpju autentifikāciju (%1$s)", + "You successfully logged in using two-factor authentication (%1$s)" : "Sekmīga pieteikšanās ar divpakāpju autentificēšanos (%1$s)", "A login attempt using two-factor authentication failed (%1$s)" : "Pieteikšanās mēģinājums ar divpakāpju autentifikāciju neizdevās (%1$s)", "Settings" : "Iestatījumi", "Could not update app." : "Lietotni nevarēja atjaunināt.", @@ -99,7 +99,7 @@ OC.L10N.register( "Developer documentation" : "Izstrādātāja dokumentācija", "Details" : "Detaļas", "All" : "Visi", - "No results" : "Nav rezultātu", + "No results" : "Nav iznākuma", "Update to {version}" : "Atjaunināt uz {version}", "Latest updated" : "Pēdējoreiz atjaunināta", "Categories" : "Kategorijas", @@ -174,6 +174,7 @@ OC.L10N.register( "Storage location" : "Krātuves atrašanās vieta", "Last login" : "Pēdējā pieteikšanās", "Account actions" : "Konta darbības", + "{size} used" : "Izmantoti {size}", "Delete account" : "Izdzēst kontu", "In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet." : "Pazaudētas ierīces vai apvienības pamešanas gadījumā šis var attālināti notīrīt Nextcloud datus visās ar {userid} saistītajās ierīcēs. Darbojas tikai tad, ja ierīces ir savienotas ar internetu.", "Add account to group" : "Pievienot kontu kopai", diff --git a/apps/settings/l10n/lv.json b/apps/settings/l10n/lv.json index c2ca7aeaf55..a51271f4842 100644 --- a/apps/settings/l10n/lv.json +++ b/apps/settings/l10n/lv.json @@ -16,7 +16,7 @@ "You changed your password" : "Tu nomainīji savu paroli", "You renamed app password \"{token}\" to \"{newToken}\"" : "Tu pārdēvēji lietotnes paroli \"{token}\" par \"{newToken}\"", "Security" : "Drošība", - "You successfully logged in using two-factor authentication (%1$s)" : "Veiksmīga pieteikšanās ar divpakāpju autentifikāciju (%1$s)", + "You successfully logged in using two-factor authentication (%1$s)" : "Sekmīga pieteikšanās ar divpakāpju autentificēšanos (%1$s)", "A login attempt using two-factor authentication failed (%1$s)" : "Pieteikšanās mēģinājums ar divpakāpju autentifikāciju neizdevās (%1$s)", "Settings" : "Iestatījumi", "Could not update app." : "Lietotni nevarēja atjaunināt.", @@ -97,7 +97,7 @@ "Developer documentation" : "Izstrādātāja dokumentācija", "Details" : "Detaļas", "All" : "Visi", - "No results" : "Nav rezultātu", + "No results" : "Nav iznākuma", "Update to {version}" : "Atjaunināt uz {version}", "Latest updated" : "Pēdējoreiz atjaunināta", "Categories" : "Kategorijas", @@ -172,6 +172,7 @@ "Storage location" : "Krātuves atrašanās vieta", "Last login" : "Pēdējā pieteikšanās", "Account actions" : "Konta darbības", + "{size} used" : "Izmantoti {size}", "Delete account" : "Izdzēst kontu", "In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet." : "Pazaudētas ierīces vai apvienības pamešanas gadījumā šis var attālināti notīrīt Nextcloud datus visās ar {userid} saistītajās ierīcēs. Darbojas tikai tad, ja ierīces ir savienotas ar internetu.", "Add account to group" : "Pievienot kontu kopai", diff --git a/apps/settings/l10n/pl.js b/apps/settings/l10n/pl.js index 4980c207733..cc79a9a04e7 100644 --- a/apps/settings/l10n/pl.js +++ b/apps/settings/l10n/pl.js @@ -601,6 +601,7 @@ OC.L10N.register( "Account deletion" : "Usunięcie konta", "Delete {userid}'s account" : "Usuń konto {userid}", "Display name was successfully changed" : "Nazwa wyświetlana została zmieniona", + "Password can't be empty" : "Hasło nie możne być puste", "Password was successfully changed" : "Hasło zostało zmienione", "Email was successfully changed" : "Adres e-mail został pomyślnie zmieniony", "Welcome mail sent!" : "Wysłano wiadomość powitalną!", diff --git a/apps/settings/l10n/pl.json b/apps/settings/l10n/pl.json index ae8760cdedf..ba3604362d2 100644 --- a/apps/settings/l10n/pl.json +++ b/apps/settings/l10n/pl.json @@ -599,6 +599,7 @@ "Account deletion" : "Usunięcie konta", "Delete {userid}'s account" : "Usuń konto {userid}", "Display name was successfully changed" : "Nazwa wyświetlana została zmieniona", + "Password can't be empty" : "Hasło nie możne być puste", "Password was successfully changed" : "Hasło zostało zmienione", "Email was successfully changed" : "Adres e-mail został pomyślnie zmieniony", "Welcome mail sent!" : "Wysłano wiadomość powitalną!", diff --git a/apps/settings/l10n/ru.js b/apps/settings/l10n/ru.js index 15da100a59f..f6a2ba501b8 100644 --- a/apps/settings/l10n/ru.js +++ b/apps/settings/l10n/ru.js @@ -104,6 +104,7 @@ OC.L10N.register( "Set your password" : "Задайте свой пароль", "Go to %s" : "Перейти к %s", "Install Client" : "Установить программу-клиент", + "Logged in account must be a sub admin" : "Зарегистрированная учетная запись должна быть субадминистратором", "Apps" : "Приложения", "Personal" : "Параметры пользователя", "Administration" : "Параметры сервера", @@ -163,6 +164,7 @@ OC.L10N.register( "Database missing indices" : "В базе данных отсутствуют некоторые индексы", "Missing indices:" : "Отсутствующие индексы:", "\"%s\" in table \"%s\"" : "«%s» в таблице «%s»", + "Detected some missing optional indices. Occasionally new indices are added (by Nextcloud or installed applications) to improve database performance. Adding indices can sometimes take awhile and temporarily hurt performance so this is not done automatically during upgrades. Once the indices are added, queries to those tables should be faster. Use the command `occ db:add-missing-indices` to add them." : "Обнаружены некоторые отсутствующие необязательные индексы. Иногда добавляются новые индексы (с помощью Nextcloud или установленных приложений) для повышения производительности базы данных. Иногда добавление индексов может занимать некоторое время и временно снижать производительность, поэтому это не выполняется автоматически во время обновлений. После добавления индексов запросы к этим таблицам должны выполняться быстрее. Используйте команду `occ db:add-missing-indices`, чтобы добавить их.", "Database missing primary keys" : "В базе данных отсутствуют первичные ключи", "Missing primary key on table \"%s\"." : "В таблице «%s» отсутствует первичный ключ.", "The database is missing some primary keys. Due to the fact that adding primary keys on big tables could take some time they were not added automatically. By running \"occ db:add-missing-primary-keys\" those missing primary keys could be added manually while the instance keeps running." : "В базе данных отсутствуют некоторые первичные ключи. Поскольку добавление первичных ключей в большие таблицы могло занять некоторое время, они не добавлялись автоматически. Запустив команду «occ db: add-missing-primary-keys», эти недостающие первичные ключи можно добавить вручную, пока экземпляр продолжает работать.", @@ -204,6 +206,8 @@ OC.L10N.register( "Disabled" : "Отключено", "The old server-side-encryption format is enabled. We recommend disabling this." : "Задействован устаревший режим шифрования файлов на стороне сервера. Рекомендуется отключить такое шифрование.", "Logging level" : "Уровень системного журнала", + "The %1$s configuration option must be a valid integer value." : "Параметр конфигурации %1$s должен быть допустимым целым значением.", + "The logging level is set to debug level. Use debug level only when you have a problem to diagnose, and then reset your log level to a less-verbose level as it outputs a lot of information, and can affect your server performance." : "Уровень ведения журнала установлен на уровень отладки. Используйте уровень отладки только в том случае, если необходимо диагностировать проблему, а затем сбросьте уровень ведения журнала до менее подробного, поскольку при этом выводится много информации и это может повлиять на производительность сервера.", "Logging level configured correctly." : "Уровень ведения системного журнала настроен правильно.", "Maintenance window start" : "Начало окна обслуживания", "Server has no maintenance window start time configured. This means resource intensive daily background jobs will also be executed during your main usage time. We recommend to set it to a time of low usage, so users are less impacted by the load caused from these heavy tasks." : "Не настроено время начала окна обслуживания. Это означает, что ресурсоемкие ежедневные фоновые задачи будут выполняться во время основного использования. Рекомендуется установить время в период низкой активности, чтобы снизить влияние выполнения ресурсоемких процедур на пользователей.", @@ -254,6 +258,7 @@ OC.L10N.register( "PHP modules" : "Модули PHP", "increases language translation performance and fixes sorting of non-ASCII characters" : "улучшает производительность при использовании переводов и исправляет сортировку не-ASCII символов", "for Argon2 for password hashing" : "для использования функции Argon2 для хэширования паролей", + "required for SFTP storage and recommended for WebAuthn performance" : "требуется для хранения данных по протоколу SFTP и рекомендуется для повышения производительности WebAuthn", "for picture rotation in server and metadata extraction in the Photos app" : "для поворота изображений и извлечения метаданных в приложении Фотографии", "This instance is missing some required PHP modules. It is required to install them: %s." : "На этом сервере отсутствуют некоторые рекомендуемые модули PHP. Рекомендуется установить: %s.", "This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them:\n%s" : "На этом сервере не установлены некоторые рекомендуемые модули PHP. Для улучшения производительности и совместимости рекомендуется установить следующие модули:\n%s", @@ -423,11 +428,14 @@ OC.L10N.register( "No apps found for your version" : "Приложений, совместимых с установленной версией Nextcloud, не найдено", "_%n app has an update available_::_%n apps have an update available_" : ["Возможно обновить %n приложение.","Возможно обновить %n приложения.","Возможно обновить %n приложений.","Возможно обновить %n приложения."], "_Update_::_Update all_" : ["Обновить","Обновить все","Обновить все","Обновить все"], + "Failed to load groups" : "Не удалось загрузить группы", "Failed to create group" : "Не удалось создать группу", "Creating group…" : "Создание группы…", "Create group" : "Создать группу", "Group name" : "Название группы", "Please enter a valid group name" : "Пожалуйста, введите допустимое название группы", + "Search groups…" : "Группы поиска…", + "List of groups. This list is not fully populated for performance reasons. The groups will be loaded as you navigate or search through the list." : "Список групп. Этот список не полностью заполнен из соображений производительности. Группы будут загружаться по мере навигации или поиска по списку.", "Loading groups…" : "Загрузка групп…", "Could not load app discover section" : "Не удалось загрузить раздел «Центр приложений»", "Could not render element" : "Не удалось подготовить объект к показу", @@ -568,6 +576,7 @@ OC.L10N.register( "Confirm enabling encryption" : "Подтвердите включение шифрования", "Please read carefully before activating server-side encryption:" : "Перед включением шифрования на стороне сервера, внимательно прочтите следующее:", "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "После включения шифрования, все файлы, отправленные с этого момента на сервер, будут сохраняться в зашифрованном виде. Отключить шифрование в дальнейшем возможно только в случае, если использованный модуль шифрования поддерживает такую функцию, а также при соблюдении всех дополнительных условий (например, настроен ключ восстановления).", + "By default a master key for the whole instance will be generated. Please check if that level of access is compliant with your needs." : "По умолчанию будет сгенерирован главный ключ для всего экземпляра. Проверьте, соответствует ли этот уровень доступа вашим потребностям.", "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Шифрование само по себе не гарантирует безопасность системы. В документации приведена дополнительная информация о работе приложения «Шифрование» и примеры его использования.", "Be aware that encryption always increases the file size." : "Шифрование всегда увеличивает размер файлов.", "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Регулярно создавайте резервные копии данных. При использовании шифрования сохраняйте не только данные, но и ключи.", @@ -668,6 +677,7 @@ OC.L10N.register( "Set line manager" : "Выбрать руководителя", "Account name will be autogenerated" : "Имя учётной записи будет создано автоматически", "Account name (required)" : "Имя учётной записи (обязательно)", + "Failed to search groups" : "Не удалось выполнить поиск групп", "New account" : "Новая учётная запись", "Display name" : "Отображаемое имя", "Either password or email is required" : "Также обязательны к заполнению пароль или эл.почта", @@ -707,12 +717,16 @@ OC.L10N.register( "Remote wipe of devices" : "Удаление данных с устройств", "Wipe {userid}'s devices" : "Удалить данные с устройств пользователя {userid}", "Wiped {userid}'s devices" : "Удалить данные с устройств пользователя {userid}", + "Failed to load groups with details" : "Не удалось загрузить группы с подробностями", + "Failed to load sub admin groups with details" : "Не удалось загрузить группы подчиненных администраторов с подробностями", "Failed to update line manager" : "Не удалось обновить линейного менеджера", "Fully delete {userid}'s account including all their personal files, app data, etc." : "Полностью удалить все данные пользователя {userid}, в том числе учётную запись, личные файлы и данные приложений.", "Account deletion" : "Удаление учётной записи", "Delete {userid}'s account" : "Удалить учётную запись пользователя {userid}", "Display name was successfully changed" : "Отображаемое имя было успешно изменено", + "Password can't be empty" : "Пароль не может быть пустым", "Password was successfully changed" : "Пароль был успешно изменен", + "Email can't be empty" : "Электронная почта не может быть пустой", "Email was successfully changed" : "Эл. почта была успешно изменена", "Welcome mail sent!" : "Приглашение отправлено!", "Loading account …" : "Загрузка сведений об учётной записи…", @@ -737,6 +751,7 @@ OC.L10N.register( "Sorting" : "Сортировка", "The system config enforces sorting the groups by name. This also disables showing the member count." : "Системная конфигурация обеспечивает сортировку групп по названию. Это также отключает отображение количества участников.", "Group list sorting" : "Сортировка списка групп", + "Sorting only applies to the currently loaded groups for performance reasons. Groups will be loaded as you navigate or search through the list." : "Сортировка применяется только к текущим загруженным группам по соображениям производительности. Группы будут загружаться по мере навигации или поиска по списку.", "By member count" : "По количеству участников", "By name" : "По имени", "Send email" : "Отправить сообщение", @@ -916,6 +931,7 @@ OC.L10N.register( "Active accounts" : "Активные учётные записи", "Follow us on Twitter" : "Следите за нашими новостями в Twitter", "To allow this check to run you have to make sure that your Web server can connect to itself. Therefore it must be able to resolve and connect to at least one of its `trusted_domains` or the `overwrite.cli.url`. This failure may be the result of a server-side DNS mismatch or outbound firewall rule." : "Чтобы разрешить эту проверку, вам нужно убедиться, что ваш веб-сервер может подключаться к себе. Поэтому он должен иметь возможность разрешать и подключаться по крайней мере к одному из своих `trusted_domains` или `overwrite.cli.url`. Эта ошибка может быть результатом несоответствия DNS на стороне сервера или исходящего правила брандмауэра.", - "PostgreSQL version \"%s\" detected. PostgreSQL >=12 and <=16 is suggested for best performance, stability and functionality with this version of Nextcloud." : "Обнаружена версия PostgreSQL \"%s\". Для лучшей производительности, стабильности и функциональности с этой версией Nextcloud рекомендуется использовать PostgreSQL >=12 и <=16." + "PostgreSQL version \"%s\" detected. PostgreSQL >=12 and <=16 is suggested for best performance, stability and functionality with this version of Nextcloud." : "Обнаружена версия PostgreSQL \"%s\". Для лучшей производительности, стабильности и функциональности с этой версией Nextcloud рекомендуется использовать PostgreSQL >=12 и <=16.", + "Failed to load subadmin groups with details" : "Не удалось загрузить группы субадминистраторов с подробностями" }, "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/settings/l10n/ru.json b/apps/settings/l10n/ru.json index aff4192148f..0fecb762e22 100644 --- a/apps/settings/l10n/ru.json +++ b/apps/settings/l10n/ru.json @@ -102,6 +102,7 @@ "Set your password" : "Задайте свой пароль", "Go to %s" : "Перейти к %s", "Install Client" : "Установить программу-клиент", + "Logged in account must be a sub admin" : "Зарегистрированная учетная запись должна быть субадминистратором", "Apps" : "Приложения", "Personal" : "Параметры пользователя", "Administration" : "Параметры сервера", @@ -161,6 +162,7 @@ "Database missing indices" : "В базе данных отсутствуют некоторые индексы", "Missing indices:" : "Отсутствующие индексы:", "\"%s\" in table \"%s\"" : "«%s» в таблице «%s»", + "Detected some missing optional indices. Occasionally new indices are added (by Nextcloud or installed applications) to improve database performance. Adding indices can sometimes take awhile and temporarily hurt performance so this is not done automatically during upgrades. Once the indices are added, queries to those tables should be faster. Use the command `occ db:add-missing-indices` to add them." : "Обнаружены некоторые отсутствующие необязательные индексы. Иногда добавляются новые индексы (с помощью Nextcloud или установленных приложений) для повышения производительности базы данных. Иногда добавление индексов может занимать некоторое время и временно снижать производительность, поэтому это не выполняется автоматически во время обновлений. После добавления индексов запросы к этим таблицам должны выполняться быстрее. Используйте команду `occ db:add-missing-indices`, чтобы добавить их.", "Database missing primary keys" : "В базе данных отсутствуют первичные ключи", "Missing primary key on table \"%s\"." : "В таблице «%s» отсутствует первичный ключ.", "The database is missing some primary keys. Due to the fact that adding primary keys on big tables could take some time they were not added automatically. By running \"occ db:add-missing-primary-keys\" those missing primary keys could be added manually while the instance keeps running." : "В базе данных отсутствуют некоторые первичные ключи. Поскольку добавление первичных ключей в большие таблицы могло занять некоторое время, они не добавлялись автоматически. Запустив команду «occ db: add-missing-primary-keys», эти недостающие первичные ключи можно добавить вручную, пока экземпляр продолжает работать.", @@ -202,6 +204,8 @@ "Disabled" : "Отключено", "The old server-side-encryption format is enabled. We recommend disabling this." : "Задействован устаревший режим шифрования файлов на стороне сервера. Рекомендуется отключить такое шифрование.", "Logging level" : "Уровень системного журнала", + "The %1$s configuration option must be a valid integer value." : "Параметр конфигурации %1$s должен быть допустимым целым значением.", + "The logging level is set to debug level. Use debug level only when you have a problem to diagnose, and then reset your log level to a less-verbose level as it outputs a lot of information, and can affect your server performance." : "Уровень ведения журнала установлен на уровень отладки. Используйте уровень отладки только в том случае, если необходимо диагностировать проблему, а затем сбросьте уровень ведения журнала до менее подробного, поскольку при этом выводится много информации и это может повлиять на производительность сервера.", "Logging level configured correctly." : "Уровень ведения системного журнала настроен правильно.", "Maintenance window start" : "Начало окна обслуживания", "Server has no maintenance window start time configured. This means resource intensive daily background jobs will also be executed during your main usage time. We recommend to set it to a time of low usage, so users are less impacted by the load caused from these heavy tasks." : "Не настроено время начала окна обслуживания. Это означает, что ресурсоемкие ежедневные фоновые задачи будут выполняться во время основного использования. Рекомендуется установить время в период низкой активности, чтобы снизить влияние выполнения ресурсоемких процедур на пользователей.", @@ -252,6 +256,7 @@ "PHP modules" : "Модули PHP", "increases language translation performance and fixes sorting of non-ASCII characters" : "улучшает производительность при использовании переводов и исправляет сортировку не-ASCII символов", "for Argon2 for password hashing" : "для использования функции Argon2 для хэширования паролей", + "required for SFTP storage and recommended for WebAuthn performance" : "требуется для хранения данных по протоколу SFTP и рекомендуется для повышения производительности WebAuthn", "for picture rotation in server and metadata extraction in the Photos app" : "для поворота изображений и извлечения метаданных в приложении Фотографии", "This instance is missing some required PHP modules. It is required to install them: %s." : "На этом сервере отсутствуют некоторые рекомендуемые модули PHP. Рекомендуется установить: %s.", "This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them:\n%s" : "На этом сервере не установлены некоторые рекомендуемые модули PHP. Для улучшения производительности и совместимости рекомендуется установить следующие модули:\n%s", @@ -421,11 +426,14 @@ "No apps found for your version" : "Приложений, совместимых с установленной версией Nextcloud, не найдено", "_%n app has an update available_::_%n apps have an update available_" : ["Возможно обновить %n приложение.","Возможно обновить %n приложения.","Возможно обновить %n приложений.","Возможно обновить %n приложения."], "_Update_::_Update all_" : ["Обновить","Обновить все","Обновить все","Обновить все"], + "Failed to load groups" : "Не удалось загрузить группы", "Failed to create group" : "Не удалось создать группу", "Creating group…" : "Создание группы…", "Create group" : "Создать группу", "Group name" : "Название группы", "Please enter a valid group name" : "Пожалуйста, введите допустимое название группы", + "Search groups…" : "Группы поиска…", + "List of groups. This list is not fully populated for performance reasons. The groups will be loaded as you navigate or search through the list." : "Список групп. Этот список не полностью заполнен из соображений производительности. Группы будут загружаться по мере навигации или поиска по списку.", "Loading groups…" : "Загрузка групп…", "Could not load app discover section" : "Не удалось загрузить раздел «Центр приложений»", "Could not render element" : "Не удалось подготовить объект к показу", @@ -566,6 +574,7 @@ "Confirm enabling encryption" : "Подтвердите включение шифрования", "Please read carefully before activating server-side encryption:" : "Перед включением шифрования на стороне сервера, внимательно прочтите следующее:", "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "После включения шифрования, все файлы, отправленные с этого момента на сервер, будут сохраняться в зашифрованном виде. Отключить шифрование в дальнейшем возможно только в случае, если использованный модуль шифрования поддерживает такую функцию, а также при соблюдении всех дополнительных условий (например, настроен ключ восстановления).", + "By default a master key for the whole instance will be generated. Please check if that level of access is compliant with your needs." : "По умолчанию будет сгенерирован главный ключ для всего экземпляра. Проверьте, соответствует ли этот уровень доступа вашим потребностям.", "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Шифрование само по себе не гарантирует безопасность системы. В документации приведена дополнительная информация о работе приложения «Шифрование» и примеры его использования.", "Be aware that encryption always increases the file size." : "Шифрование всегда увеличивает размер файлов.", "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Регулярно создавайте резервные копии данных. При использовании шифрования сохраняйте не только данные, но и ключи.", @@ -666,6 +675,7 @@ "Set line manager" : "Выбрать руководителя", "Account name will be autogenerated" : "Имя учётной записи будет создано автоматически", "Account name (required)" : "Имя учётной записи (обязательно)", + "Failed to search groups" : "Не удалось выполнить поиск групп", "New account" : "Новая учётная запись", "Display name" : "Отображаемое имя", "Either password or email is required" : "Также обязательны к заполнению пароль или эл.почта", @@ -705,12 +715,16 @@ "Remote wipe of devices" : "Удаление данных с устройств", "Wipe {userid}'s devices" : "Удалить данные с устройств пользователя {userid}", "Wiped {userid}'s devices" : "Удалить данные с устройств пользователя {userid}", + "Failed to load groups with details" : "Не удалось загрузить группы с подробностями", + "Failed to load sub admin groups with details" : "Не удалось загрузить группы подчиненных администраторов с подробностями", "Failed to update line manager" : "Не удалось обновить линейного менеджера", "Fully delete {userid}'s account including all their personal files, app data, etc." : "Полностью удалить все данные пользователя {userid}, в том числе учётную запись, личные файлы и данные приложений.", "Account deletion" : "Удаление учётной записи", "Delete {userid}'s account" : "Удалить учётную запись пользователя {userid}", "Display name was successfully changed" : "Отображаемое имя было успешно изменено", + "Password can't be empty" : "Пароль не может быть пустым", "Password was successfully changed" : "Пароль был успешно изменен", + "Email can't be empty" : "Электронная почта не может быть пустой", "Email was successfully changed" : "Эл. почта была успешно изменена", "Welcome mail sent!" : "Приглашение отправлено!", "Loading account …" : "Загрузка сведений об учётной записи…", @@ -735,6 +749,7 @@ "Sorting" : "Сортировка", "The system config enforces sorting the groups by name. This also disables showing the member count." : "Системная конфигурация обеспечивает сортировку групп по названию. Это также отключает отображение количества участников.", "Group list sorting" : "Сортировка списка групп", + "Sorting only applies to the currently loaded groups for performance reasons. Groups will be loaded as you navigate or search through the list." : "Сортировка применяется только к текущим загруженным группам по соображениям производительности. Группы будут загружаться по мере навигации или поиска по списку.", "By member count" : "По количеству участников", "By name" : "По имени", "Send email" : "Отправить сообщение", @@ -914,6 +929,7 @@ "Active accounts" : "Активные учётные записи", "Follow us on Twitter" : "Следите за нашими новостями в Twitter", "To allow this check to run you have to make sure that your Web server can connect to itself. Therefore it must be able to resolve and connect to at least one of its `trusted_domains` or the `overwrite.cli.url`. This failure may be the result of a server-side DNS mismatch or outbound firewall rule." : "Чтобы разрешить эту проверку, вам нужно убедиться, что ваш веб-сервер может подключаться к себе. Поэтому он должен иметь возможность разрешать и подключаться по крайней мере к одному из своих `trusted_domains` или `overwrite.cli.url`. Эта ошибка может быть результатом несоответствия DNS на стороне сервера или исходящего правила брандмауэра.", - "PostgreSQL version \"%s\" detected. PostgreSQL >=12 and <=16 is suggested for best performance, stability and functionality with this version of Nextcloud." : "Обнаружена версия PostgreSQL \"%s\". Для лучшей производительности, стабильности и функциональности с этой версией Nextcloud рекомендуется использовать PostgreSQL >=12 и <=16." + "PostgreSQL version \"%s\" detected. PostgreSQL >=12 and <=16 is suggested for best performance, stability and functionality with this version of Nextcloud." : "Обнаружена версия PostgreSQL \"%s\". Для лучшей производительности, стабильности и функциональности с этой версией Nextcloud рекомендуется использовать PostgreSQL >=12 и <=16.", + "Failed to load subadmin groups with details" : "Не удалось загрузить группы субадминистраторов с подробностями" },"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/settings/src/components/AppList.vue b/apps/settings/src/components/AppList.vue index cfc778fe409..3e40e08b257 100644 --- a/apps/settings/src/components/AppList.vue +++ b/apps/settings/src/components/AppList.vue @@ -200,9 +200,13 @@ export default { const apps = [...this.$store.getters.getAllApps, ...exApps] .filter(app => app.name.toLowerCase().search(this.search.toLowerCase()) !== -1) .sort(function(a, b) { - const sortStringA = '' + (a.active ? 0 : 1) + (a.update ? 0 : 1) + a.name - const sortStringB = '' + (b.active ? 0 : 1) + (b.update ? 0 : 1) + b.name - return OC.Util.naturalSortCompare(sortStringA, sortStringB) + const natSortDiff = OC.Util.naturalSortCompare(a, b) + if (natSortDiff === 0) { + const sortStringA = '' + (a.active ? 0 : 1) + (a.update ? 0 : 1) + const sortStringB = '' + (b.active ? 0 : 1) + (b.update ? 0 : 1) + return Number(sortStringA) - Number(sortStringB) + } + return natSortDiff }) if (this.category === 'installed') { diff --git a/apps/sharebymail/l10n/pl.js b/apps/sharebymail/l10n/pl.js index 413afbc8d7e..d3b4b1cc10e 100644 --- a/apps/sharebymail/l10n/pl.js +++ b/apps/sharebymail/l10n/pl.js @@ -3,8 +3,8 @@ OC.L10N.register( { "Shared with {email}" : "Udostępniono {email}", "Shared with {email} by {actor}" : "Udostępniono {email} przez {actor}", - "Unshared from {email}" : "Udostępnianie zatrzymane od {email}", - "Unshared from {email} by {actor}" : "Udostępnianie zatrzymane od {email} przez {actor}", + "Unshared from {email}" : "Udostępnienie zatrzymane dla {email}", + "Unshared from {email} by {actor}" : "Udostępnienie zatrzymane dla {email} przez {actor}", "Password for mail share sent to {email}" : "Hasło dostępu do pliku zostało wysłane na {email}", "Password for mail share sent to you" : "Hasło dostępu do pliku zostało do Ciebie wysłane", "You shared {file} with {email} by mail" : "Udostępniasz {file} dla {email}", diff --git a/apps/sharebymail/l10n/pl.json b/apps/sharebymail/l10n/pl.json index b360096132e..7e3719e9f8a 100644 --- a/apps/sharebymail/l10n/pl.json +++ b/apps/sharebymail/l10n/pl.json @@ -1,8 +1,8 @@ { "translations": { "Shared with {email}" : "Udostępniono {email}", "Shared with {email} by {actor}" : "Udostępniono {email} przez {actor}", - "Unshared from {email}" : "Udostępnianie zatrzymane od {email}", - "Unshared from {email} by {actor}" : "Udostępnianie zatrzymane od {email} przez {actor}", + "Unshared from {email}" : "Udostępnienie zatrzymane dla {email}", + "Unshared from {email} by {actor}" : "Udostępnienie zatrzymane dla {email} przez {actor}", "Password for mail share sent to {email}" : "Hasło dostępu do pliku zostało wysłane na {email}", "Password for mail share sent to you" : "Hasło dostępu do pliku zostało do Ciebie wysłane", "You shared {file} with {email} by mail" : "Udostępniasz {file} dla {email}", diff --git a/apps/sharebymail/lib/ShareByMailProvider.php b/apps/sharebymail/lib/ShareByMailProvider.php index e6e1cf509e9..194a402848e 100644 --- a/apps/sharebymail/lib/ShareByMailProvider.php +++ b/apps/sharebymail/lib/ShareByMailProvider.php @@ -1112,6 +1112,17 @@ class ShareByMailProvider extends DefaultShareProvider implements IShareProvider } public function getSharesInFolder($userId, Folder $node, $reshares, $shallow = true): array { + return $this->getSharesInFolderInternal($userId, $node, $reshares); + } + + public function getAllSharesInFolder(Folder $node): array { + return $this->getSharesInFolderInternal(null, $node, null); + } + + /** + * @return array<int, list<IShare>> + */ + private function getSharesInFolderInternal(?string $userId, Folder $node, ?bool $reshares): array { $qb = $this->dbConnection->getQueryBuilder(); $qb->select('*') ->from('share', 's') @@ -1120,18 +1131,20 @@ class ShareByMailProvider extends DefaultShareProvider implements IShareProvider $qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_EMAIL)) ); - /** - * Reshares for this user are shares where they are the owner. - */ - if ($reshares === false) { - $qb->andWhere($qb->expr()->eq('uid_initiator', $qb->createNamedParameter($userId))); - } else { - $qb->andWhere( - $qb->expr()->orX( - $qb->expr()->eq('uid_owner', $qb->createNamedParameter($userId)), - $qb->expr()->eq('uid_initiator', $qb->createNamedParameter($userId)) - ) - ); + if ($userId !== null) { + /** + * Reshares for this user are shares where they are the owner. + */ + if ($reshares !== true) { + $qb->andWhere($qb->expr()->eq('uid_initiator', $qb->createNamedParameter($userId))); + } else { + $qb->andWhere( + $qb->expr()->orX( + $qb->expr()->eq('uid_owner', $qb->createNamedParameter($userId)), + $qb->expr()->eq('uid_initiator', $qb->createNamedParameter($userId)) + ) + ); + } } $qb->innerJoin('s', 'filecache', 'f', $qb->expr()->eq('s.file_source', 'f.fileid')); diff --git a/apps/systemtags/l10n/et_EE.js b/apps/systemtags/l10n/et_EE.js index d8d288528d7..4830cf04ef0 100644 --- a/apps/systemtags/l10n/et_EE.js +++ b/apps/systemtags/l10n/et_EE.js @@ -103,7 +103,7 @@ OC.L10N.register( "Open in Files" : "Ava failirakenduses", "List of tags and their associated files and folders." : "Siltude ja nendega seotud failide ja kaustade loend.", "No tags found" : "Silte ei leidinud", - "Tags you have created will show up here." : "Sinu loodud sildid saavad olema nähtavad siin.", + "Tags you have created will show up here." : "Sinu loodud sildid saavad olema nähtavad siin.", "Failed to load tag" : "Sildi laadimine ei õnnestunud", "Failed to load last used tags" : "Viimatikasutatud siltide laadimine ei õnnestunud", "Missing \"Content-Location\" header" : "„Content-Location“ päisekirje on puudu", diff --git a/apps/systemtags/l10n/et_EE.json b/apps/systemtags/l10n/et_EE.json index bf15f8b79ed..35faa5538d7 100644 --- a/apps/systemtags/l10n/et_EE.json +++ b/apps/systemtags/l10n/et_EE.json @@ -101,7 +101,7 @@ "Open in Files" : "Ava failirakenduses", "List of tags and their associated files and folders." : "Siltude ja nendega seotud failide ja kaustade loend.", "No tags found" : "Silte ei leidinud", - "Tags you have created will show up here." : "Sinu loodud sildid saavad olema nähtavad siin.", + "Tags you have created will show up here." : "Sinu loodud sildid saavad olema nähtavad siin.", "Failed to load tag" : "Sildi laadimine ei õnnestunud", "Failed to load last used tags" : "Viimatikasutatud siltide laadimine ei õnnestunud", "Missing \"Content-Location\" header" : "„Content-Location“ päisekirje on puudu", diff --git a/apps/systemtags/l10n/lv.js b/apps/systemtags/l10n/lv.js index f59d6a826ab..437dd173c1a 100644 --- a/apps/systemtags/l10n/lv.js +++ b/apps/systemtags/l10n/lv.js @@ -15,8 +15,8 @@ OC.L10N.register( "You created system tag {systemtag}" : "Tu izveidoji sistēmas birku {systemtag}", "%1$s created system tag %2$s" : "%1$s izveidoja sistēmas birku %2$s", "{actor} created system tag {systemtag}" : "{actor} izveidoja sistēmas birku {systemtag}", - "You deleted system tag %1$s" : "Jūs izdzēsāt sistēmas birku %1$s", - "You deleted system tag {systemtag}" : "Jūs izdzēsāt sistēmas birku {systemtag}", + "You deleted system tag %1$s" : "Tu izdzēsi sistēmas birku %1$s", + "You deleted system tag {systemtag}" : "Tu izdzēsi sistēmas birku {systemtag}", "%1$s deleted system tag %2$s" : "%1$s izdzēsa sistēmas birku %2$s", "{actor} deleted system tag {systemtag}" : "{actor} izdzēsa sistēmas birku {systemtag}", "You updated system tag %2$s to %1$s" : "Tu atjaunināji sistēmas birku %2$s uz %1$s", diff --git a/apps/systemtags/l10n/lv.json b/apps/systemtags/l10n/lv.json index 882ce15c799..78723f0c006 100644 --- a/apps/systemtags/l10n/lv.json +++ b/apps/systemtags/l10n/lv.json @@ -13,8 +13,8 @@ "You created system tag {systemtag}" : "Tu izveidoji sistēmas birku {systemtag}", "%1$s created system tag %2$s" : "%1$s izveidoja sistēmas birku %2$s", "{actor} created system tag {systemtag}" : "{actor} izveidoja sistēmas birku {systemtag}", - "You deleted system tag %1$s" : "Jūs izdzēsāt sistēmas birku %1$s", - "You deleted system tag {systemtag}" : "Jūs izdzēsāt sistēmas birku {systemtag}", + "You deleted system tag %1$s" : "Tu izdzēsi sistēmas birku %1$s", + "You deleted system tag {systemtag}" : "Tu izdzēsi sistēmas birku {systemtag}", "%1$s deleted system tag %2$s" : "%1$s izdzēsa sistēmas birku %2$s", "{actor} deleted system tag {systemtag}" : "{actor} izdzēsa sistēmas birku {systemtag}", "You updated system tag %2$s to %1$s" : "Tu atjaunināji sistēmas birku %2$s uz %1$s", diff --git a/apps/user_ldap/l10n/de.js b/apps/user_ldap/l10n/de.js index 2744c7b7384..37546227625 100644 --- a/apps/user_ldap/l10n/de.js +++ b/apps/user_ldap/l10n/de.js @@ -37,7 +37,7 @@ OC.L10N.register( "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Es ist ein Fehler aufgetreten. Bitte überprüfe die Base DN sowie die Verbindungs- und Anmeldeeinstellungen.", "Do you really want to delete the current Server Configuration?" : "Soll die aktuelle Serverkonfiguration wirklich gelöscht werden?", "Confirm Deletion" : "Löschen bestätigen", - "Mappings cleared successfully!" : "Zuordnungen erfolgreich gelöscht!", + "Mappings cleared successfully!" : "Zuordnungen gelöscht!", "Error while clearing the mappings." : "Fehler beim Löschen der Zuordnungen.", "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymous Bind ist nicht erlaubt. Bitte eine Benutzer-DN und ein Passwort angeben.", "LDAP Operations error. Anonymous bind might not be allowed." : "Fehler in den LDAP-Operationen. Anonymes binden ist scheinbar nicht erlaubt.", diff --git a/apps/user_ldap/l10n/de.json b/apps/user_ldap/l10n/de.json index 5cf218b924a..801f94a3907 100644 --- a/apps/user_ldap/l10n/de.json +++ b/apps/user_ldap/l10n/de.json @@ -35,7 +35,7 @@ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Es ist ein Fehler aufgetreten. Bitte überprüfe die Base DN sowie die Verbindungs- und Anmeldeeinstellungen.", "Do you really want to delete the current Server Configuration?" : "Soll die aktuelle Serverkonfiguration wirklich gelöscht werden?", "Confirm Deletion" : "Löschen bestätigen", - "Mappings cleared successfully!" : "Zuordnungen erfolgreich gelöscht!", + "Mappings cleared successfully!" : "Zuordnungen gelöscht!", "Error while clearing the mappings." : "Fehler beim Löschen der Zuordnungen.", "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymous Bind ist nicht erlaubt. Bitte eine Benutzer-DN und ein Passwort angeben.", "LDAP Operations error. Anonymous bind might not be allowed." : "Fehler in den LDAP-Operationen. Anonymes binden ist scheinbar nicht erlaubt.", diff --git a/apps/user_ldap/l10n/de_DE.js b/apps/user_ldap/l10n/de_DE.js index 5cc130582c8..142a82913d8 100644 --- a/apps/user_ldap/l10n/de_DE.js +++ b/apps/user_ldap/l10n/de_DE.js @@ -37,7 +37,7 @@ OC.L10N.register( "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Es ist ein Fehler aufgetreten. Bitte überprüfen Sie die Base DN wie auch die Verbindungseinstellungen und Anmeldeinformationen.", "Do you really want to delete the current Server Configuration?" : "Möchten Sie die aktuelle Serverkonfiguration wirklich löschen?", "Confirm Deletion" : "Löschen bestätigen", - "Mappings cleared successfully!" : "Zuordnungen erfolgreich gelöscht!", + "Mappings cleared successfully!" : "Zuordnungen gelöscht!", "Error while clearing the mappings." : "Fehler beim Löschen der Zuordnungen.", "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymous Bind ist nicht erlaubt. Bitte geben Sie eine Benutzer-DN und ein Passwort angeben.", "LDAP Operations error. Anonymous bind might not be allowed." : "Fehler in den LDAP-Operationen. Anonymous Bind ist anscheinend nicht erlaubt.", diff --git a/apps/user_ldap/l10n/de_DE.json b/apps/user_ldap/l10n/de_DE.json index 288e84d4cde..c8bcf0d8640 100644 --- a/apps/user_ldap/l10n/de_DE.json +++ b/apps/user_ldap/l10n/de_DE.json @@ -35,7 +35,7 @@ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Es ist ein Fehler aufgetreten. Bitte überprüfen Sie die Base DN wie auch die Verbindungseinstellungen und Anmeldeinformationen.", "Do you really want to delete the current Server Configuration?" : "Möchten Sie die aktuelle Serverkonfiguration wirklich löschen?", "Confirm Deletion" : "Löschen bestätigen", - "Mappings cleared successfully!" : "Zuordnungen erfolgreich gelöscht!", + "Mappings cleared successfully!" : "Zuordnungen gelöscht!", "Error while clearing the mappings." : "Fehler beim Löschen der Zuordnungen.", "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonymous Bind ist nicht erlaubt. Bitte geben Sie eine Benutzer-DN und ein Passwort angeben.", "LDAP Operations error. Anonymous bind might not be allowed." : "Fehler in den LDAP-Operationen. Anonymous Bind ist anscheinend nicht erlaubt.", diff --git a/apps/user_status/l10n/pt_BR.js b/apps/user_status/l10n/pt_BR.js index cfc1d55a3b0..210a4e3c28b 100644 --- a/apps/user_status/l10n/pt_BR.js +++ b/apps/user_status/l10n/pt_BR.js @@ -24,7 +24,7 @@ OC.L10N.register( "There was an error clearing the status" : "Ocorreu um erro ao limpar o status", "There was an error reverting the status" : "Ocorreu um erro ao reverter o status", "Set status" : "Definir status", - "Online status" : "Status online", + "Online status" : "Status on-line", "Status message" : "Mensagem de status", "Set absence period" : "Definir período de ausência", "Set absence period and replacement" : "Definir período de ausência e substituição", @@ -34,16 +34,16 @@ OC.L10N.register( "Don't clear" : "Não limpe", "Today" : "Hoje", "This week" : "Esta semana", - "Online" : "Online", + "Online" : "On-line", "Away" : "Fora", "Do not disturb" : "Não perturbe", "Invisible" : "Invisível", - "Offline" : "Offline", + "Offline" : "Off-line", "There was an error saving the new status" : "Ocorreu um erro ao salvar o novo status", "30 minutes" : "30 minutos", "1 hour" : "1 hora", "4 hours" : "4 horas", "Mute all notifications" : "Silenciar todas as notificações", - "Appear offline" : "Aparecer offline" + "Appear offline" : "Aparecer off-line" }, "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_status/l10n/pt_BR.json b/apps/user_status/l10n/pt_BR.json index 06ad883dd68..0450fd6790b 100644 --- a/apps/user_status/l10n/pt_BR.json +++ b/apps/user_status/l10n/pt_BR.json @@ -22,7 +22,7 @@ "There was an error clearing the status" : "Ocorreu um erro ao limpar o status", "There was an error reverting the status" : "Ocorreu um erro ao reverter o status", "Set status" : "Definir status", - "Online status" : "Status online", + "Online status" : "Status on-line", "Status message" : "Mensagem de status", "Set absence period" : "Definir período de ausência", "Set absence period and replacement" : "Definir período de ausência e substituição", @@ -32,16 +32,16 @@ "Don't clear" : "Não limpe", "Today" : "Hoje", "This week" : "Esta semana", - "Online" : "Online", + "Online" : "On-line", "Away" : "Fora", "Do not disturb" : "Não perturbe", "Invisible" : "Invisível", - "Offline" : "Offline", + "Offline" : "Off-line", "There was an error saving the new status" : "Ocorreu um erro ao salvar o novo status", "30 minutes" : "30 minutos", "1 hour" : "1 hora", "4 hours" : "4 horas", "Mute all notifications" : "Silenciar todas as notificações", - "Appear offline" : "Aparecer offline" + "Appear offline" : "Aparecer off-line" },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/webhook_listeners/lib/BackgroundJobs/WebhookCall.php b/apps/webhook_listeners/lib/BackgroundJobs/WebhookCall.php index a2619e0db47..c8d06ca7047 100644 --- a/apps/webhook_listeners/lib/BackgroundJobs/WebhookCall.php +++ b/apps/webhook_listeners/lib/BackgroundJobs/WebhookCall.php @@ -74,7 +74,8 @@ class WebhookCall extends QueuedJob { } elseif (!$exApp['enabled']) { throw new RuntimeException('ExApp ' . $exAppId . ' is disabled.'); } - $response = $appApiFunctions->exAppRequest($exAppId, $webhookUri, $webhookListener->getUserId(), $webhookListener->getHttpMethod(), [], $options); + $userId = ($data['user'] ?? [])['uid'] ?? null; + $response = $appApiFunctions->exAppRequest($exAppId, $webhookUri, $userId, $webhookListener->getHttpMethod(), [], $options); if (is_array($response) && isset($response['error'])) { throw new RuntimeException(sprintf('Error during request to ExApp(%s): %s', $exAppId, $response['error'])); } diff --git a/apps/webhook_listeners/lib/Listener/WebhooksEventListener.php b/apps/webhook_listeners/lib/Listener/WebhooksEventListener.php index 6b40af1463e..6cd3af98368 100644 --- a/apps/webhook_listeners/lib/Listener/WebhooksEventListener.php +++ b/apps/webhook_listeners/lib/Listener/WebhooksEventListener.php @@ -41,6 +41,7 @@ class WebhooksEventListener implements IEventListener { // TODO add group membership to be able to filter on it $data = [ 'event' => $this->serializeEvent($event), + /* Do not remove 'user' from here, see BackgroundJobs/WebhookCall.php */ 'user' => (is_null($user) ? null : JsonSerializer::serializeUser($user)), 'time' => time(), ]; diff --git a/apps/workflowengine/src/components/Checks/RequestUserGroup.vue b/apps/workflowengine/src/components/Checks/RequestUserGroup.vue index 978732aed09..f9606b7ca26 100644 --- a/apps/workflowengine/src/components/Checks/RequestUserGroup.vue +++ b/apps/workflowengine/src/components/Checks/RequestUserGroup.vue @@ -25,6 +25,7 @@ import axios from '@nextcloud/axios' import NcSelect from '@nextcloud/vue/components/NcSelect' const groups = [] +const wantedGroups = [] const status = { isLoading: false, } @@ -49,6 +50,7 @@ export default { return { groups, status, + wantedGroups, newValue: '', } }, @@ -82,6 +84,13 @@ export default { searchAsync(searchQuery) { if (this.status.isLoading) { + if (searchQuery) { + // The first 20 groups are loaded up front (indicated by an + // empty searchQuery parameter), afterwards we may load + // groups that have not been fetched yet, but are used + // in existing rules. + this.enqueueWantedGroup(searchQuery) + } return } @@ -94,11 +103,15 @@ export default { }) }) this.status.isLoading = false + this.findGroupByQueue() }, (error) => { console.error('Error while loading group list', error.response) }) }, - updateInternalValue() { + async updateInternalValue() { + if (!this.newValue) { + await this.searchAsync(this.modelValue) + } this.newValue = this.modelValue }, addGroup(group) { @@ -107,10 +120,32 @@ export default { this.groups.push(group) } }, + hasGroup(group) { + const index = this.groups.findIndex((item) => item.id === group) + return index > -1 + }, update(value) { this.newValue = value.id this.$emit('update:model-value', this.newValue) }, + enqueueWantedGroup(expectedGroupId) { + const index = this.wantedGroups.findIndex((groupId) => groupId === expectedGroupId) + if (index === -1) { + this.wantedGroups.push(expectedGroupId) + } + }, + async findGroupByQueue() { + let nextQuery + do { + nextQuery = this.wantedGroups.shift() + if (this.hasGroup(nextQuery)) { + nextQuery = undefined + } + } while (!nextQuery && this.wantedGroups.length > 0) + if (nextQuery) { + await this.searchAsync(nextQuery) + } + }, }, } </script> |