diff options
Diffstat (limited to 'apps')
145 files changed, 1382 insertions, 284 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/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/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..46f1b9aef9d 100644 --- a/apps/dav/lib/CalDAV/CalendarImpl.php +++ b/apps/dav/lib/CalDAV/CalendarImpl.php @@ -8,9 +8,14 @@ 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\ICalendarIsShared; +use OCP\Calendar\ICalendarIsWritable; use OCP\Calendar\ICreateFromString; use OCP\Calendar\IHandleImipMessage; use OCP\Constants; @@ -24,7 +29,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 { public function __construct( private Calendar $calendar, /** @var array<string, mixed> */ @@ -257,4 +262,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/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/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/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..f760c2f654d 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", diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json index 8715721ef1c..58d930e97a2 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", diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js index d5e44fa78cc..76d6be8bf80 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", diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json index 823c70fcb47..3fb15347da5 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", 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/pt_BR.js b/apps/files/l10n/pt_BR.js index 62a20efeddd..40c07434541 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", @@ -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..8bff756baeb 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", @@ -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/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/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_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/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/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_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/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/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/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/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_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..d9a43acd68d 100644 --- a/apps/files_sharing/l10n/ar.js +++ b/apps/files_sharing/l10n/ar.js @@ -313,16 +313,16 @@ 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" : "المشاركة مع حسابات وفِرَق", + "Email, federated cloud 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" : "بريد إلكتروني، مُعرِّف سحابة اتحاديّة", "Additional shares" : "مشاركات إضافية", "Additional shares explanation" : "شرح مشاركات إضافية", "Link to a file" : "رابط إلى ملف", diff --git a/apps/files_sharing/l10n/ar.json b/apps/files_sharing/l10n/ar.json index 35eebb01014..b195289fec3 100644 --- a/apps/files_sharing/l10n/ar.json +++ b/apps/files_sharing/l10n/ar.json @@ -311,16 +311,16 @@ "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" : "المشاركة مع حسابات وفِرَق", + "Email, federated cloud 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" : "بريد إلكتروني، مُعرِّف سحابة اتحاديّة", "Additional shares" : "مشاركات إضافية", "Additional shares explanation" : "شرح مشاركات إضافية", "Link to a file" : "رابط إلى ملف", diff --git a/apps/files_sharing/l10n/ca.js b/apps/files_sharing/l10n/ca.js index 174a1e96fa0..48bcbfc0d8a 100644 --- a/apps/files_sharing/l10n/ca.js +++ b/apps/files_sharing/l10n/ca.js @@ -313,16 +313,16 @@ 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", + "Email, federated cloud id" : "Correu, identificador del núvol federat", "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", diff --git a/apps/files_sharing/l10n/ca.json b/apps/files_sharing/l10n/ca.json index 47c46ebf19d..7a9ef7e6fae 100644 --- a/apps/files_sharing/l10n/ca.json +++ b/apps/files_sharing/l10n/ca.json @@ -311,16 +311,16 @@ "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", + "Email, federated cloud id" : "Correu, identificador del núvol federat", "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", diff --git a/apps/files_sharing/l10n/cs.js b/apps/files_sharing/l10n/cs.js index 81a56ccd0b6..da6f081189b 100644 --- a/apps/files_sharing/l10n/cs.js +++ b/apps/files_sharing/l10n/cs.js @@ -313,16 +313,16 @@ 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", + "Email, federated cloud id" : "E-mail, identif. federovaného cloudu", "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", diff --git a/apps/files_sharing/l10n/cs.json b/apps/files_sharing/l10n/cs.json index df979b969de..b85c88cf2f3 100644 --- a/apps/files_sharing/l10n/cs.json +++ b/apps/files_sharing/l10n/cs.json @@ -311,16 +311,16 @@ "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", + "Email, federated cloud id" : "E-mail, identif. federovaného cloudu", "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", diff --git a/apps/files_sharing/l10n/da.js b/apps/files_sharing/l10n/da.js index c2a539394b2..23fda217be7 100644 --- a/apps/files_sharing/l10n/da.js +++ b/apps/files_sharing/l10n/da.js @@ -313,16 +313,16 @@ 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", + "Email, federated cloud id" : "E-mail, sammenkoblings cloud id", "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", diff --git a/apps/files_sharing/l10n/da.json b/apps/files_sharing/l10n/da.json index 3a773a16f3e..3fcc47d9fd1 100644 --- a/apps/files_sharing/l10n/da.json +++ b/apps/files_sharing/l10n/da.json @@ -311,16 +311,16 @@ "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", + "Email, federated cloud id" : "E-mail, sammenkoblings cloud id", "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", diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js index 3a897c97c5c..24e8e768379 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 id" : "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", diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json index 4dc0f6a273b..3cdd4091130 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 id" : "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", diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js index dcf87c7df98..27bea91cd46 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 id" : "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", diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json index b918effcbd8..6099bf4ed21 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 id" : "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", diff --git a/apps/files_sharing/l10n/en_GB.js b/apps/files_sharing/l10n/en_GB.js index 8173311cd51..3c549cc870e 100644 --- a/apps/files_sharing/l10n/en_GB.js +++ b/apps/files_sharing/l10n/en_GB.js @@ -313,16 +313,16 @@ 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 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", diff --git a/apps/files_sharing/l10n/en_GB.json b/apps/files_sharing/l10n/en_GB.json index b2cab53805c..4950706baf1 100644 --- a/apps/files_sharing/l10n/en_GB.json +++ b/apps/files_sharing/l10n/en_GB.json @@ -311,16 +311,16 @@ "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 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", diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js index be4cd272423..d34bc63699b 100644 --- a/apps/files_sharing/l10n/es.js +++ b/apps/files_sharing/l10n/es.js @@ -313,16 +313,16 @@ 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", + "Email, federated cloud id" : "Email, ID de nube federada", "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", diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json index 6b4ded82049..229e84daeac 100644 --- a/apps/files_sharing/l10n/es.json +++ b/apps/files_sharing/l10n/es.json @@ -311,16 +311,16 @@ "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", + "Email, federated cloud id" : "Email, ID de nube federada", "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", diff --git a/apps/files_sharing/l10n/et_EE.js b/apps/files_sharing/l10n/et_EE.js index be6e39964a3..3636829a8ff 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,35 +42,55 @@ 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>", "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 %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", "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 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", + "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", @@ -78,6 +99,9 @@ OC.L10N.register( "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 +109,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 +168,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 +183,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 +196,16 @@ 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})", "Share link ({label})" : "Jagamise link ({label})", + "Mail share" : "E-posti jagamine", "Share link ({index})" : "Jagamise link ({index})", "Create public link" : "Loo avalik link", + "Error, please enter proper password and/or expiration date" : "Viga, palun sisesta korrektne salasõna ja/või aegumise kuupäev", "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 +218,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 +246,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 +262,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 +279,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 +288,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 id" : "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 +329,34 @@ 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", "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", @@ -272,6 +368,9 @@ OC.L10N.register( "Shared by" : "Jagas", "Shared with" : "Jagatud", "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 +378,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", diff --git a/apps/files_sharing/l10n/et_EE.json b/apps/files_sharing/l10n/et_EE.json index 8126f506958..cf803347569 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,35 +40,55 @@ "{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>", "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 %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", "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 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", + "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", @@ -76,6 +97,9 @@ "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 +107,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 +166,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 +181,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 +194,16 @@ "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})", "Share link ({label})" : "Jagamise link ({label})", + "Mail share" : "E-posti jagamine", "Share link ({index})" : "Jagamise link ({index})", "Create public link" : "Loo avalik link", + "Error, please enter proper password and/or expiration date" : "Viga, palun sisesta korrektne salasõna ja/või aegumise kuupäev", "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 +216,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 +244,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 +260,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 +277,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 +286,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 id" : "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 +327,34 @@ "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", "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", @@ -270,6 +366,9 @@ "Shared by" : "Jagas", "Shared with" : "Jagatud", "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 +376,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", diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js index c50560d6b45..e8835746d2c 100644 --- a/apps/files_sharing/l10n/fr.js +++ b/apps/files_sharing/l10n/fr.js @@ -311,16 +311,16 @@ 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", + "Email, federated cloud id" : "E-mail, ID de cloud fédéré", "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", diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json index b1e36bc9d60..44f6f94271b 100644 --- a/apps/files_sharing/l10n/fr.json +++ b/apps/files_sharing/l10n/fr.json @@ -309,16 +309,16 @@ "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", + "Email, federated cloud id" : "E-mail, ID de cloud fédéré", "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", diff --git a/apps/files_sharing/l10n/ga.js b/apps/files_sharing/l10n/ga.js index 0178d730a6d..b687ea331db 100644 --- a/apps/files_sharing/l10n/ga.js +++ b/apps/files_sharing/l10n/ga.js @@ -313,16 +313,16 @@ 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", + "Email, federated cloud id" : "Ríomhphost, aitheantas scamall cónaidhme", "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", diff --git a/apps/files_sharing/l10n/ga.json b/apps/files_sharing/l10n/ga.json index b3810edc4be..cfa03a91b16 100644 --- a/apps/files_sharing/l10n/ga.json +++ b/apps/files_sharing/l10n/ga.json @@ -311,16 +311,16 @@ "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", + "Email, federated cloud id" : "Ríomhphost, aitheantas scamall cónaidhme", "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", diff --git a/apps/files_sharing/l10n/gl.js b/apps/files_sharing/l10n/gl.js index 2e20156781c..3567d0a9225 100644 --- a/apps/files_sharing/l10n/gl.js +++ b/apps/files_sharing/l10n/gl.js @@ -311,16 +311,16 @@ 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", + "Email, federated cloud id" : "Correo-e, ID da nube federada", "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", diff --git a/apps/files_sharing/l10n/gl.json b/apps/files_sharing/l10n/gl.json index 54b670b06a0..484fdca6794 100644 --- a/apps/files_sharing/l10n/gl.json +++ b/apps/files_sharing/l10n/gl.json @@ -309,16 +309,16 @@ "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", + "Email, federated cloud id" : "Correo-e, ID da nube federada", "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", diff --git a/apps/files_sharing/l10n/is.js b/apps/files_sharing/l10n/is.js index cf7965eb69c..acbebc18bb7 100644 --- a/apps/files_sharing/l10n/is.js +++ b/apps/files_sharing/l10n/is.js @@ -286,16 +286,16 @@ 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", + "Email, federated cloud id" : "Tölvupóstfang, skýjasambandsauðkenni (Federated Cloud ID)", "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á", diff --git a/apps/files_sharing/l10n/is.json b/apps/files_sharing/l10n/is.json index cfdddcc228c..138233b5dad 100644 --- a/apps/files_sharing/l10n/is.json +++ b/apps/files_sharing/l10n/is.json @@ -284,16 +284,16 @@ "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", + "Email, federated cloud id" : "Tölvupóstfang, skýjasambandsauðkenni (Federated Cloud ID)", "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á", diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js index ba41fd120a2..19016980c97 100644 --- a/apps/files_sharing/l10n/it.js +++ b/apps/files_sharing/l10n/it.js @@ -313,16 +313,16 @@ 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", + "Email, federated cloud id" : "E-mail, ID cloud federato", "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", diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json index 5f190a1b6a7..63bcfab2def 100644 --- a/apps/files_sharing/l10n/it.json +++ b/apps/files_sharing/l10n/it.json @@ -311,16 +311,16 @@ "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", + "Email, federated cloud id" : "E-mail, ID cloud federato", "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", diff --git a/apps/files_sharing/l10n/ja.js b/apps/files_sharing/l10n/ja.js index 6b4a65e73cc..5e4fc2afe0c 100644 --- a/apps/files_sharing/l10n/ja.js +++ b/apps/files_sharing/l10n/ja.js @@ -313,16 +313,16 @@ 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" : "アカウントとチームで共有", + "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" : "ファイルへリンク", diff --git a/apps/files_sharing/l10n/ja.json b/apps/files_sharing/l10n/ja.json index 774facc0fbf..6ddf32c1a5d 100644 --- a/apps/files_sharing/l10n/ja.json +++ b/apps/files_sharing/l10n/ja.json @@ -311,16 +311,16 @@ "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" : "アカウントとチームで共有", + "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" : "ファイルへリンク", diff --git a/apps/files_sharing/l10n/ko.js b/apps/files_sharing/l10n/ko.js index 20f273121fc..374e9b5d36a 100644 --- a/apps/files_sharing/l10n/ko.js +++ b/apps/files_sharing/l10n/ko.js @@ -313,16 +313,16 @@ 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" : "계정 및 팀과 공유", + "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" : "파일로 향한 링크", diff --git a/apps/files_sharing/l10n/ko.json b/apps/files_sharing/l10n/ko.json index ae50282cff2..e719a9c8960 100644 --- a/apps/files_sharing/l10n/ko.json +++ b/apps/files_sharing/l10n/ko.json @@ -311,16 +311,16 @@ "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" : "계정 및 팀과 공유", + "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" : "파일로 향한 링크", diff --git a/apps/files_sharing/l10n/mk.js b/apps/files_sharing/l10n/mk.js index 303ae1fbb25..0d34acace9a 100644 --- a/apps/files_sharing/l10n/mk.js +++ b/apps/files_sharing/l10n/mk.js @@ -303,16 +303,16 @@ 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" : "Сподели со корисници и тимови", + "Email, federated cloud 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" : "Е-пошта, федерален ИД", "Additional shares" : "Дополнителни споделувања", "Additional shares explanation" : "Објаснување за додатни споделувања", "Link to a file" : "Линк до датотеката", diff --git a/apps/files_sharing/l10n/mk.json b/apps/files_sharing/l10n/mk.json index 2e65dc61c7d..b22d5c4a216 100644 --- a/apps/files_sharing/l10n/mk.json +++ b/apps/files_sharing/l10n/mk.json @@ -301,16 +301,16 @@ "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" : "Сподели со корисници и тимови", + "Email, federated cloud 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" : "Е-пошта, федерален ИД", "Additional shares" : "Дополнителни споделувања", "Additional shares explanation" : "Објаснување за додатни споделувања", "Link to a file" : "Линк до датотеката", diff --git a/apps/files_sharing/l10n/pl.js b/apps/files_sharing/l10n/pl.js index 5781e3771b8..06ac0506c6a 100644 --- a/apps/files_sharing/l10n/pl.js +++ b/apps/files_sharing/l10n/pl.js @@ -313,16 +313,16 @@ 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", + "Email, federated cloud id" : "E-mail, identyfikator Chmury Federacyjnej", "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", diff --git a/apps/files_sharing/l10n/pl.json b/apps/files_sharing/l10n/pl.json index a9997c93454..776f18bbf69 100644 --- a/apps/files_sharing/l10n/pl.json +++ b/apps/files_sharing/l10n/pl.json @@ -311,16 +311,16 @@ "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", + "Email, federated cloud id" : "E-mail, identyfikator Chmury Federacyjnej", "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", diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js index 0e9f6012dc3..5563407602d 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", @@ -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 id" : "Compartilhar com contas, equipes, ID 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", diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json index fa597157945..6963e695841 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", @@ -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 id" : "Compartilhar com contas, equipes, ID 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", diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js index ced677044f8..ddc6d678dc3 100644 --- a/apps/files_sharing/l10n/ru.js +++ b/apps/files_sharing/l10n/ru.js @@ -299,13 +299,13 @@ 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." : "Ссылки, которые не являются частью внутренних или внешних ссылок. Это могут быть ссылки из приложений или других источников.", + "Email, federated cloud id" : "Электронная почта, идентификатор федеративного облака", "Unable to load the shares list" : "Невозможно загрузить список общих ресурсов", "Expires {relativetime}" : "Истекает {relativetime}", "this share just expired." : "срок действия этого общего ресурса только что истёк.", "Shared with you by {owner}" : "{owner} предоставил(а) Вам доступ", "Internal shares" : "Внутренние ссылки", "External shares" : "Внешние ссылки", - "Email, federated cloud id" : "Электронная почта, идентификатор федеративного облака", "Additional shares" : "Дополнительные ссылки", "Link to a file" : "Ссылка на файл", "_Accept share_::_Accept shares_" : ["Принять общий ресурс","Принять общие ресурсы","Принять общие ресурсы","Принять общие ресурсы"], diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json index d073020b7a9..9f24ed0b720 100644 --- a/apps/files_sharing/l10n/ru.json +++ b/apps/files_sharing/l10n/ru.json @@ -297,13 +297,13 @@ "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." : "Ссылки, которые не являются частью внутренних или внешних ссылок. Это могут быть ссылки из приложений или других источников.", + "Email, federated cloud id" : "Электронная почта, идентификатор федеративного облака", "Unable to load the shares list" : "Невозможно загрузить список общих ресурсов", "Expires {relativetime}" : "Истекает {relativetime}", "this share just expired." : "срок действия этого общего ресурса только что истёк.", "Shared with you by {owner}" : "{owner} предоставил(а) Вам доступ", "Internal shares" : "Внутренние ссылки", "External shares" : "Внешние ссылки", - "Email, federated cloud id" : "Электронная почта, идентификатор федеративного облака", "Additional shares" : "Дополнительные ссылки", "Link to a file" : "Ссылка на файл", "_Accept share_::_Accept shares_" : ["Принять общий ресурс","Принять общие ресурсы","Принять общие ресурсы","Принять общие ресурсы"], diff --git a/apps/files_sharing/l10n/sk.js b/apps/files_sharing/l10n/sk.js index 33e4d1c3238..28e4a8d6f4c 100644 --- a/apps/files_sharing/l10n/sk.js +++ b/apps/files_sharing/l10n/sk.js @@ -313,16 +313,16 @@ 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", + "Email, federated cloud id" : "E-mail, id federovaného cloudu", "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", diff --git a/apps/files_sharing/l10n/sk.json b/apps/files_sharing/l10n/sk.json index df7ecb75e7a..413139c8296 100644 --- a/apps/files_sharing/l10n/sk.json +++ b/apps/files_sharing/l10n/sk.json @@ -311,16 +311,16 @@ "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", + "Email, federated cloud id" : "E-mail, id federovaného cloudu", "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", diff --git a/apps/files_sharing/l10n/sr.js b/apps/files_sharing/l10n/sr.js index 3fed266334e..c49b3b797cc 100644 --- a/apps/files_sharing/l10n/sr.js +++ b/apps/files_sharing/l10n/sr.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 здруженог облака.", "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 id" : "Дели са налозима, тимовима, 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" : "Веза ка фајлу", diff --git a/apps/files_sharing/l10n/sr.json b/apps/files_sharing/l10n/sr.json index c74220d4377..6c8d13d3248 100644 --- a/apps/files_sharing/l10n/sr.json +++ b/apps/files_sharing/l10n/sr.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 здруженог облака.", "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 id" : "Дели са налозима, тимовима, 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" : "Веза ка фајлу", diff --git a/apps/files_sharing/l10n/sv.js b/apps/files_sharing/l10n/sv.js index d49eb79716f..78d0893c19f 100644 --- a/apps/files_sharing/l10n/sv.js +++ b/apps/files_sharing/l10n/sv.js @@ -313,16 +313,16 @@ 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 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", diff --git a/apps/files_sharing/l10n/sv.json b/apps/files_sharing/l10n/sv.json index 3260d534275..14f2dbbad88 100644 --- a/apps/files_sharing/l10n/sv.json +++ b/apps/files_sharing/l10n/sv.json @@ -311,16 +311,16 @@ "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 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", diff --git a/apps/files_sharing/l10n/tr.js b/apps/files_sharing/l10n/tr.js index f1b539894f0..4e5bb62596e 100644 --- a/apps/files_sharing/l10n/tr.js +++ b/apps/files_sharing/l10n/tr.js @@ -313,16 +313,16 @@ 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", + "Email, federated cloud id" : "E-posta adresi, birleşik bulut kimliği", "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ı", diff --git a/apps/files_sharing/l10n/tr.json b/apps/files_sharing/l10n/tr.json index b6cc4a1a088..dab67cdbb36 100644 --- a/apps/files_sharing/l10n/tr.json +++ b/apps/files_sharing/l10n/tr.json @@ -311,16 +311,16 @@ "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", + "Email, federated cloud id" : "E-posta adresi, birleşik bulut kimliği", "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ı", diff --git a/apps/files_sharing/l10n/uk.js b/apps/files_sharing/l10n/uk.js index a87d5169bfc..ddf7055a5a3 100644 --- a/apps/files_sharing/l10n/uk.js +++ b/apps/files_sharing/l10n/uk.js @@ -312,16 +312,16 @@ 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" : "Поділитися з користувачами або командами", + "Email, federated cloud 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" : "Ел.пошта, ідентифікатор об'єднаної хмари", "Additional shares" : "Додаткові спільні ресурси", "Additional shares explanation" : "Опис додаткових спільних ресурсів", "Link to a file" : "Посилання на файл", diff --git a/apps/files_sharing/l10n/uk.json b/apps/files_sharing/l10n/uk.json index 2f199857bc3..e8cc3653e3b 100644 --- a/apps/files_sharing/l10n/uk.json +++ b/apps/files_sharing/l10n/uk.json @@ -310,16 +310,16 @@ "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" : "Поділитися з користувачами або командами", + "Email, federated cloud 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" : "Ел.пошта, ідентифікатор об'єднаної хмари", "Additional shares" : "Додаткові спільні ресурси", "Additional shares explanation" : "Опис додаткових спільних ресурсів", "Link to a file" : "Посилання на файл", diff --git a/apps/files_sharing/l10n/zh_CN.js b/apps/files_sharing/l10n/zh_CN.js index 10fa087e766..cebdbc5c89d 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 id" : "与账号、团队、联合云 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" : "链接到文件", diff --git a/apps/files_sharing/l10n/zh_CN.json b/apps/files_sharing/l10n/zh_CN.json index 26b40505ac0..1b1538c8b59 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 id" : "与账号、团队、联合云 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" : "链接到文件", diff --git a/apps/files_sharing/l10n/zh_HK.js b/apps/files_sharing/l10n/zh_HK.js index e66a30b09bd..c4c2cec750d 100644 --- a/apps/files_sharing/l10n/zh_HK.js +++ b/apps/files_sharing/l10n/zh_HK.js @@ -313,16 +313,16 @@ 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" : "與帳號及團隊分享", + "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" : "連結到一個檔案", diff --git a/apps/files_sharing/l10n/zh_HK.json b/apps/files_sharing/l10n/zh_HK.json index 5ecda76da0d..59539504553 100644 --- a/apps/files_sharing/l10n/zh_HK.json +++ b/apps/files_sharing/l10n/zh_HK.json @@ -311,16 +311,16 @@ "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" : "與帳號及團隊分享", + "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" : "連結到一個檔案", diff --git a/apps/files_sharing/l10n/zh_TW.js b/apps/files_sharing/l10n/zh_TW.js index 87ee702d58e..7638f105d88 100644 --- a/apps/files_sharing/l10n/zh_TW.js +++ b/apps/files_sharing/l10n/zh_TW.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 id" : "與帳號、團隊、聯邦雲端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" : "檔案連結", diff --git a/apps/files_sharing/l10n/zh_TW.json b/apps/files_sharing/l10n/zh_TW.json index acbf27f4c22..efe843664b8 100644 --- a/apps/files_sharing/l10n/zh_TW.json +++ b/apps/files_sharing/l10n/zh_TW.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 id" : "與帳號、團隊、聯邦雲端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" : "檔案連結", 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/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..1b5275bcf7e 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 id') + : 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/lv.js b/apps/settings/l10n/lv.js index a3181eb53ef..97e8714b076 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.", diff --git a/apps/settings/l10n/lv.json b/apps/settings/l10n/lv.json index c2ca7aeaf55..316388bfc1e 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.", 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/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_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 |