diff options
Diffstat (limited to 'apps/dav')
24 files changed, 710 insertions, 240 deletions
diff --git a/apps/dav/appinfo/info.xml b/apps/dav/appinfo/info.xml index a4ce51fd89c..9021ba98a0f 100644 --- a/apps/dav/appinfo/info.xml +++ b/apps/dav/appinfo/info.xml @@ -65,6 +65,7 @@ <command>OCA\DAV\Command\DeleteSubscription</command> <command>OCA\DAV\Command\ExportCalendar</command> <command>OCA\DAV\Command\FixCalendarSyncCommand</command> + <command>OCA\DAV\Command\GetAbsenceCommand</command> <command>OCA\DAV\Command\ListAddressbooks</command> <command>OCA\DAV\Command\ListCalendarShares</command> <command>OCA\DAV\Command\ListCalendars</command> @@ -73,6 +74,7 @@ <command>OCA\DAV\Command\RemoveInvalidShares</command> <command>OCA\DAV\Command\RetentionCleanupCommand</command> <command>OCA\DAV\Command\SendEventReminders</command> + <command>OCA\DAV\Command\SetAbsenceCommand</command> <command>OCA\DAV\Command\SyncBirthdayCalendar</command> <command>OCA\DAV\Command\SyncSystemAddressBook</command> </commands> diff --git a/apps/dav/composer/composer/autoload_classmap.php b/apps/dav/composer/composer/autoload_classmap.php index 28dfeaed498..764f94ef665 100644 --- a/apps/dav/composer/composer/autoload_classmap.php +++ b/apps/dav/composer/composer/autoload_classmap.php @@ -60,6 +60,7 @@ return array( 'OCA\\DAV\\CalDAV\\CalendarProvider' => $baseDir . '/../lib/CalDAV/CalendarProvider.php', 'OCA\\DAV\\CalDAV\\CalendarRoot' => $baseDir . '/../lib/CalDAV/CalendarRoot.php', 'OCA\\DAV\\CalDAV\\DefaultCalendarValidator' => $baseDir . '/../lib/CalDAV/DefaultCalendarValidator.php', + 'OCA\\DAV\\CalDAV\\EmbeddedCalDavServer' => $baseDir . '/../lib/CalDAV/EmbeddedCalDavServer.php', 'OCA\\DAV\\CalDAV\\EventComparisonService' => $baseDir . '/../lib/CalDAV/EventComparisonService.php', 'OCA\\DAV\\CalDAV\\EventReader' => $baseDir . '/../lib/CalDAV/EventReader.php', 'OCA\\DAV\\CalDAV\\EventReaderRDate' => $baseDir . '/../lib/CalDAV/EventReaderRDate.php', @@ -164,6 +165,7 @@ return array( '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\\GetAbsenceCommand' => $baseDir . '/../lib/Command/GetAbsenceCommand.php', 'OCA\\DAV\\Command\\ListAddressbooks' => $baseDir . '/../lib/Command/ListAddressbooks.php', 'OCA\\DAV\\Command\\ListCalendarShares' => $baseDir . '/../lib/Command/ListCalendarShares.php', 'OCA\\DAV\\Command\\ListCalendars' => $baseDir . '/../lib/Command/ListCalendars.php', @@ -172,6 +174,7 @@ return array( 'OCA\\DAV\\Command\\RemoveInvalidShares' => $baseDir . '/../lib/Command/RemoveInvalidShares.php', 'OCA\\DAV\\Command\\RetentionCleanupCommand' => $baseDir . '/../lib/Command/RetentionCleanupCommand.php', 'OCA\\DAV\\Command\\SendEventReminders' => $baseDir . '/../lib/Command/SendEventReminders.php', + 'OCA\\DAV\\Command\\SetAbsenceCommand' => $baseDir . '/../lib/Command/SetAbsenceCommand.php', 'OCA\\DAV\\Command\\SyncBirthdayCalendar' => $baseDir . '/../lib/Command/SyncBirthdayCalendar.php', 'OCA\\DAV\\Command\\SyncSystemAddressBook' => $baseDir . '/../lib/Command/SyncSystemAddressBook.php', 'OCA\\DAV\\Comments\\CommentNode' => $baseDir . '/../lib/Comments/CommentNode.php', diff --git a/apps/dav/composer/composer/autoload_static.php b/apps/dav/composer/composer/autoload_static.php index 83661b73a30..f3d1eacfcd0 100644 --- a/apps/dav/composer/composer/autoload_static.php +++ b/apps/dav/composer/composer/autoload_static.php @@ -75,6 +75,7 @@ class ComposerStaticInitDAV 'OCA\\DAV\\CalDAV\\CalendarProvider' => __DIR__ . '/..' . '/../lib/CalDAV/CalendarProvider.php', 'OCA\\DAV\\CalDAV\\CalendarRoot' => __DIR__ . '/..' . '/../lib/CalDAV/CalendarRoot.php', 'OCA\\DAV\\CalDAV\\DefaultCalendarValidator' => __DIR__ . '/..' . '/../lib/CalDAV/DefaultCalendarValidator.php', + 'OCA\\DAV\\CalDAV\\EmbeddedCalDavServer' => __DIR__ . '/..' . '/../lib/CalDAV/EmbeddedCalDavServer.php', 'OCA\\DAV\\CalDAV\\EventComparisonService' => __DIR__ . '/..' . '/../lib/CalDAV/EventComparisonService.php', 'OCA\\DAV\\CalDAV\\EventReader' => __DIR__ . '/..' . '/../lib/CalDAV/EventReader.php', 'OCA\\DAV\\CalDAV\\EventReaderRDate' => __DIR__ . '/..' . '/../lib/CalDAV/EventReaderRDate.php', @@ -179,6 +180,7 @@ class ComposerStaticInitDAV '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\\GetAbsenceCommand' => __DIR__ . '/..' . '/../lib/Command/GetAbsenceCommand.php', 'OCA\\DAV\\Command\\ListAddressbooks' => __DIR__ . '/..' . '/../lib/Command/ListAddressbooks.php', 'OCA\\DAV\\Command\\ListCalendarShares' => __DIR__ . '/..' . '/../lib/Command/ListCalendarShares.php', 'OCA\\DAV\\Command\\ListCalendars' => __DIR__ . '/..' . '/../lib/Command/ListCalendars.php', @@ -187,6 +189,7 @@ class ComposerStaticInitDAV 'OCA\\DAV\\Command\\RemoveInvalidShares' => __DIR__ . '/..' . '/../lib/Command/RemoveInvalidShares.php', 'OCA\\DAV\\Command\\RetentionCleanupCommand' => __DIR__ . '/..' . '/../lib/Command/RetentionCleanupCommand.php', 'OCA\\DAV\\Command\\SendEventReminders' => __DIR__ . '/..' . '/../lib/Command/SendEventReminders.php', + 'OCA\\DAV\\Command\\SetAbsenceCommand' => __DIR__ . '/..' . '/../lib/Command/SetAbsenceCommand.php', 'OCA\\DAV\\Command\\SyncBirthdayCalendar' => __DIR__ . '/..' . '/../lib/Command/SyncBirthdayCalendar.php', 'OCA\\DAV\\Command\\SyncSystemAddressBook' => __DIR__ . '/..' . '/../lib/Command/SyncSystemAddressBook.php', 'OCA\\DAV\\Comments\\CommentNode' => __DIR__ . '/..' . '/../lib/Comments/CommentNode.php', diff --git a/apps/dav/l10n/da.js b/apps/dav/l10n/da.js index 782f0a3b21b..c99b8d10b6e 100644 --- a/apps/dav/l10n/da.js +++ b/apps/dav/l10n/da.js @@ -73,19 +73,19 @@ OC.L10N.register( "Where: %s" : "Hvor: %s", "%1$s via %2$s" : "%1$s via %2$s", "In the past on %1$s for the entire day" : "Tidligere den %1$s for hele dagen", - "_In a minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["Om et minut på%1$s for hele dagen","Om %n minutter den %1$s for hele dagen"], + "_In a minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["Om et minut på %1$s for hele dagen","Om %n minutter den %1$s for hele dagen"], "_In a hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["Om en time på %1$s for hele dagen","Om %n timer den %1$s for hele dagen"], - "_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["I en dag på% 1 $s for hele dagen","Om %n dage den %1$s for hele dagen"], - "_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["I en uge på% 1 $s for hele dagen","Om %n uger den %1$s for hele dagen"], - "_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["I en måned på% 1 $s for hele dagen","Om %n måneder den %1$s for hele dagen"], - "_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["I et år på% 1 $s for hele dagen","Om %n år den %1$s for hele dagen"], + "_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["I en dag på %1$s for hele dagen","Om %n dage den %1$s for hele dagen"], + "_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["I en uge på %1$s for hele dagen","Om %n uger den %1$s for hele dagen"], + "_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["I en måned på %1$s for hele dagen","Om %n måneder den %1$s for hele dagen"], + "_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["I et år på %1$s for hele dagen","Om %n år den %1$s for hele dagen"], "In the past on %1$s between %2$s - %3$s" : "Tidligere den %1$s mellem %2$s - %3$s", - "_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["I et minut på% 1 $s mellem% 2 $s -% 3 $s","Om %n minutter den %1$s mellem %2$s - %3$s"], - "_In a hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["I en time på% 1 $s mellem% 2 $s -% 3 $s","Om %n timer den %1$s mellem %2$s - %3$s"], - "_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["I en dag på% 1 $s mellem% 2 $s -% 3 $s","Om %n dage den %1$s mellem %2$s - %3$s"], - "_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["I en uge på% 1 $s mellem% 2 $s -% 3 $s","Om %n uger den %1$s mellem %2$s - %3$s"], - "_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["I en måned på% 1 $s mellem% 2 $s -% 3 $s","Om %n måneder den %1$s mellem %2$s - %3$s"], - "_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["I et år på% 1 $s mellem% 2 $s -% 3 $s","Om %n år den %1$s mellem %2$s - %3$s"], + "_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["I et minut på %1$s mellem% %2$s - %3$s","Om %n minutter den %1$s mellem %2$s - %3$s"], + "_In a hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["I en time på %1$s mellem %2$s - %3$s","Om %n timer den %1$s mellem %2$s - %3$s"], + "_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["I en dag på %1$s mellem %2$s - %3$s","Om %n dage den %1$s mellem %2$s - %3$s"], + "_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["I en uge på %1$s mellem %2$s - %3$s","Om %n uger den %1$s mellem %2$s - %3$s"], + "_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["I en måned på %1$s mellem %2$s - %3$s","Om %n måneder den %1$s mellem %2$s - %3$s"], + "_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["I et år på %1$s mellem %2$s - %3$s","Om %n år den %1$s mellem %2$s - %3$s"], "Could not generate when statement" : "Kunne ikke generere when sætning", "Every Day for the entire day" : "Hver dag hele dagen", "Every Day for the entire day until %1$s" : "Hver dag hele dagen indtil %1$s", @@ -123,26 +123,26 @@ OC.L10N.register( "On specific dates for the entire day until %1$s" : "På specifikke datoer for hele dagen indtil %1$s", "On specific dates between %1$s - %2$s until %3$s" : "På specifikke datoer mellem %1$s - %2$s indtil %3$s", "In the past on %1$s" : "Tidligere den %1$s", - "_In a minute on %1$s_::_In %n minutes on %1$s_" : ["I et minut på% 1 $s","Om %n minutter den %1$s"], - "_In a hour on %1$s_::_In %n hours on %1$s_" : ["I en time på% 1 $s","Om %n timer den %1$s"], - "_In a day on %1$s_::_In %n days on %1$s_" : ["I en dag på% 1 $s","Om %n dage den %1$s"], - "_In a week on %1$s_::_In %n weeks on %1$s_" : ["I en uge på% 1 $s","Om %n uger den %1$s"], - "_In a month on %1$s_::_In %n months on %1$s_" : ["I en måned på% 1 $s","Om %n måneder den %1$s"], - "_In a year on %1$s_::_In %n years on %1$s_" : ["I et år på% 1 $s","Om %n år den %1$s"], + "_In a minute on %1$s_::_In %n minutes on %1$s_" : ["I et minut på %1$s","Om %n minutter den %1$s"], + "_In a hour on %1$s_::_In %n hours on %1$s_" : ["I en time på %1$s","Om %n timer den %1$s"], + "_In a day on %1$s_::_In %n days on %1$s_" : ["I en dag på %1$s","Om %n dage den %1$s"], + "_In a week on %1$s_::_In %n weeks on %1$s_" : ["I en uge på %1$s","Om %n uger den %1$s"], + "_In a month on %1$s_::_In %n months on %1$s_" : ["I en måned på %1$s","Om %n måneder den %1$s"], + "_In a year on %1$s_::_In %n years on %1$s_" : ["I et år på %1$s","Om %n år den %1$s"], "In the past on %1$s then on %2$s" : "Tidligere på %1$s derefter den %2$s", - "_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["I et minut på% 1 $s så på% 2 $s","Om %n minutter den %1$s derefter den %2$s"], - "_In a hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["I en time på% 1 $s så på% 2 $s","Om %n timer den %1$s derefter den %2$s"], - "_In a day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["I en dag på% 1 $s så på% 2 $s","Om %n dage den %1$s derefter den %2$s"], - "_In a week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["I en uge på% 1 $s så på% 2 $s","Om %n uger den %1$s derefter den %2$s"], - "_In a month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["I en måned på% 1 $s så på% 2 $s","Om %n måneder den %1$s derefter den %2$s"], - "_In a year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["I et år på% 1 $s så på% 2 $s","Om %n år den %1$s derefter den %2$s"], + "_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["I et minut på %1$s så på %2$s","Om %n minutter den %1$s derefter den %2$s"], + "_In a hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["I en time på %1$s så på %2$s","Om %n timer den %1$s derefter den %2$s"], + "_In a day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["I en dag på %1$s så på %2$s","Om %n dage den %1$s derefter den %2$s"], + "_In a week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["I en uge på %1$s så på %2$s","Om %n uger den %1$s derefter den %2$s"], + "_In a month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["I en måned på %1$s så på %2$s","Om %n måneder den %1$s derefter den %2$s"], + "_In a year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["I et år på %1$s så på %2$s","Om %n år den %1$s derefter den %2$s"], "In the past on %1$s then on %2$s and %3$s" : "Tidligere den %1$s derefter den %2$s og %3$s", - "_In a minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["I et minut på% 1 $s så på% 2 $s og% 3 $s","Om %n minutter den %1$s derefter den %2$s og %3$s"], - "_In a hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["I en time på% 1 $s så på% 2 $s og% 3 $s","Om %n timer den %1$s derefter den %2$s og %3$s"], - "_In a day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["I en dag på% 1 $s så på% 2 $s og% 3 $s","Om %n dage den %1$s derefter den %2$s og %3$s"], - "_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["I en uge på% 1 $s så på% 2 $s og% 3 $s","Om %n uger den %1$s derefter den %2$s og %3$s"], - "_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["I en måned på% 1 $s så på% 2 $s og% 3 $s","Om %n måneder den %1$s derefter den %2$s og %3$s"], - "_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["I et år på% 1 $s så på% 2 $s og% 3 $s","Om %n år den %1$s derefter den %2$s og %3$s"], + "_In a minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["I et minut på %1$s så på %2$s og %3$s","Om %n minutter den %1$s derefter den %2$s og %3$s"], + "_In a hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["I en time på %1$s så på %2$s og %3$s","Om %n timer den %1$s derefter den %2$s og %3$s"], + "_In a day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["I en dag på %1$s så på %2$s og %3$s","Om %n dage den %1$s derefter den %2$s og %3$s"], + "_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["I en uge på %1$s så på %2$s og %3$s","Om %n uger den %1$s derefter den %2$s og %3$s"], + "_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["I en måned på %1$s så på %2$s og %3$s","Om %n måneder den %1$s derefter den %2$s og %3$s"], + "_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["I et år på %1$s så på %2$s og %3$s","Om %n år den %1$s derefter den %2$s og %3$s"], "Could not generate next recurrence statement" : "Kunne ikke generere næste gentagelseserklæring", "Cancelled: %1$s" : "Annullerede: %1$s", "\"%1$s\" has been canceled" : "\"%1$s\" er blevet annulleret", diff --git a/apps/dav/l10n/da.json b/apps/dav/l10n/da.json index 1007a84bb10..fa934db0daa 100644 --- a/apps/dav/l10n/da.json +++ b/apps/dav/l10n/da.json @@ -71,19 +71,19 @@ "Where: %s" : "Hvor: %s", "%1$s via %2$s" : "%1$s via %2$s", "In the past on %1$s for the entire day" : "Tidligere den %1$s for hele dagen", - "_In a minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["Om et minut på%1$s for hele dagen","Om %n minutter den %1$s for hele dagen"], + "_In a minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["Om et minut på %1$s for hele dagen","Om %n minutter den %1$s for hele dagen"], "_In a hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["Om en time på %1$s for hele dagen","Om %n timer den %1$s for hele dagen"], - "_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["I en dag på% 1 $s for hele dagen","Om %n dage den %1$s for hele dagen"], - "_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["I en uge på% 1 $s for hele dagen","Om %n uger den %1$s for hele dagen"], - "_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["I en måned på% 1 $s for hele dagen","Om %n måneder den %1$s for hele dagen"], - "_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["I et år på% 1 $s for hele dagen","Om %n år den %1$s for hele dagen"], + "_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["I en dag på %1$s for hele dagen","Om %n dage den %1$s for hele dagen"], + "_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["I en uge på %1$s for hele dagen","Om %n uger den %1$s for hele dagen"], + "_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["I en måned på %1$s for hele dagen","Om %n måneder den %1$s for hele dagen"], + "_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["I et år på %1$s for hele dagen","Om %n år den %1$s for hele dagen"], "In the past on %1$s between %2$s - %3$s" : "Tidligere den %1$s mellem %2$s - %3$s", - "_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["I et minut på% 1 $s mellem% 2 $s -% 3 $s","Om %n minutter den %1$s mellem %2$s - %3$s"], - "_In a hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["I en time på% 1 $s mellem% 2 $s -% 3 $s","Om %n timer den %1$s mellem %2$s - %3$s"], - "_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["I en dag på% 1 $s mellem% 2 $s -% 3 $s","Om %n dage den %1$s mellem %2$s - %3$s"], - "_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["I en uge på% 1 $s mellem% 2 $s -% 3 $s","Om %n uger den %1$s mellem %2$s - %3$s"], - "_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["I en måned på% 1 $s mellem% 2 $s -% 3 $s","Om %n måneder den %1$s mellem %2$s - %3$s"], - "_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["I et år på% 1 $s mellem% 2 $s -% 3 $s","Om %n år den %1$s mellem %2$s - %3$s"], + "_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["I et minut på %1$s mellem% %2$s - %3$s","Om %n minutter den %1$s mellem %2$s - %3$s"], + "_In a hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["I en time på %1$s mellem %2$s - %3$s","Om %n timer den %1$s mellem %2$s - %3$s"], + "_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["I en dag på %1$s mellem %2$s - %3$s","Om %n dage den %1$s mellem %2$s - %3$s"], + "_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["I en uge på %1$s mellem %2$s - %3$s","Om %n uger den %1$s mellem %2$s - %3$s"], + "_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["I en måned på %1$s mellem %2$s - %3$s","Om %n måneder den %1$s mellem %2$s - %3$s"], + "_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["I et år på %1$s mellem %2$s - %3$s","Om %n år den %1$s mellem %2$s - %3$s"], "Could not generate when statement" : "Kunne ikke generere when sætning", "Every Day for the entire day" : "Hver dag hele dagen", "Every Day for the entire day until %1$s" : "Hver dag hele dagen indtil %1$s", @@ -121,26 +121,26 @@ "On specific dates for the entire day until %1$s" : "På specifikke datoer for hele dagen indtil %1$s", "On specific dates between %1$s - %2$s until %3$s" : "På specifikke datoer mellem %1$s - %2$s indtil %3$s", "In the past on %1$s" : "Tidligere den %1$s", - "_In a minute on %1$s_::_In %n minutes on %1$s_" : ["I et minut på% 1 $s","Om %n minutter den %1$s"], - "_In a hour on %1$s_::_In %n hours on %1$s_" : ["I en time på% 1 $s","Om %n timer den %1$s"], - "_In a day on %1$s_::_In %n days on %1$s_" : ["I en dag på% 1 $s","Om %n dage den %1$s"], - "_In a week on %1$s_::_In %n weeks on %1$s_" : ["I en uge på% 1 $s","Om %n uger den %1$s"], - "_In a month on %1$s_::_In %n months on %1$s_" : ["I en måned på% 1 $s","Om %n måneder den %1$s"], - "_In a year on %1$s_::_In %n years on %1$s_" : ["I et år på% 1 $s","Om %n år den %1$s"], + "_In a minute on %1$s_::_In %n minutes on %1$s_" : ["I et minut på %1$s","Om %n minutter den %1$s"], + "_In a hour on %1$s_::_In %n hours on %1$s_" : ["I en time på %1$s","Om %n timer den %1$s"], + "_In a day on %1$s_::_In %n days on %1$s_" : ["I en dag på %1$s","Om %n dage den %1$s"], + "_In a week on %1$s_::_In %n weeks on %1$s_" : ["I en uge på %1$s","Om %n uger den %1$s"], + "_In a month on %1$s_::_In %n months on %1$s_" : ["I en måned på %1$s","Om %n måneder den %1$s"], + "_In a year on %1$s_::_In %n years on %1$s_" : ["I et år på %1$s","Om %n år den %1$s"], "In the past on %1$s then on %2$s" : "Tidligere på %1$s derefter den %2$s", - "_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["I et minut på% 1 $s så på% 2 $s","Om %n minutter den %1$s derefter den %2$s"], - "_In a hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["I en time på% 1 $s så på% 2 $s","Om %n timer den %1$s derefter den %2$s"], - "_In a day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["I en dag på% 1 $s så på% 2 $s","Om %n dage den %1$s derefter den %2$s"], - "_In a week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["I en uge på% 1 $s så på% 2 $s","Om %n uger den %1$s derefter den %2$s"], - "_In a month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["I en måned på% 1 $s så på% 2 $s","Om %n måneder den %1$s derefter den %2$s"], - "_In a year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["I et år på% 1 $s så på% 2 $s","Om %n år den %1$s derefter den %2$s"], + "_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["I et minut på %1$s så på %2$s","Om %n minutter den %1$s derefter den %2$s"], + "_In a hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["I en time på %1$s så på %2$s","Om %n timer den %1$s derefter den %2$s"], + "_In a day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["I en dag på %1$s så på %2$s","Om %n dage den %1$s derefter den %2$s"], + "_In a week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["I en uge på %1$s så på %2$s","Om %n uger den %1$s derefter den %2$s"], + "_In a month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["I en måned på %1$s så på %2$s","Om %n måneder den %1$s derefter den %2$s"], + "_In a year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["I et år på %1$s så på %2$s","Om %n år den %1$s derefter den %2$s"], "In the past on %1$s then on %2$s and %3$s" : "Tidligere den %1$s derefter den %2$s og %3$s", - "_In a minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["I et minut på% 1 $s så på% 2 $s og% 3 $s","Om %n minutter den %1$s derefter den %2$s og %3$s"], - "_In a hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["I en time på% 1 $s så på% 2 $s og% 3 $s","Om %n timer den %1$s derefter den %2$s og %3$s"], - "_In a day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["I en dag på% 1 $s så på% 2 $s og% 3 $s","Om %n dage den %1$s derefter den %2$s og %3$s"], - "_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["I en uge på% 1 $s så på% 2 $s og% 3 $s","Om %n uger den %1$s derefter den %2$s og %3$s"], - "_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["I en måned på% 1 $s så på% 2 $s og% 3 $s","Om %n måneder den %1$s derefter den %2$s og %3$s"], - "_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["I et år på% 1 $s så på% 2 $s og% 3 $s","Om %n år den %1$s derefter den %2$s og %3$s"], + "_In a minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["I et minut på %1$s så på %2$s og %3$s","Om %n minutter den %1$s derefter den %2$s og %3$s"], + "_In a hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["I en time på %1$s så på %2$s og %3$s","Om %n timer den %1$s derefter den %2$s og %3$s"], + "_In a day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["I en dag på %1$s så på %2$s og %3$s","Om %n dage den %1$s derefter den %2$s og %3$s"], + "_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["I en uge på %1$s så på %2$s og %3$s","Om %n uger den %1$s derefter den %2$s og %3$s"], + "_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["I en måned på %1$s så på %2$s og %3$s","Om %n måneder den %1$s derefter den %2$s og %3$s"], + "_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["I et år på %1$s så på %2$s og %3$s","Om %n år den %1$s derefter den %2$s og %3$s"], "Could not generate next recurrence statement" : "Kunne ikke generere næste gentagelseserklæring", "Cancelled: %1$s" : "Annullerede: %1$s", "\"%1$s\" has been canceled" : "\"%1$s\" er blevet annulleret", diff --git a/apps/dav/l10n/es.js b/apps/dav/l10n/es.js index 22365efe29b..610c2f03dc2 100644 --- a/apps/dav/l10n/es.js +++ b/apps/dav/l10n/es.js @@ -10,8 +10,8 @@ OC.L10N.register( "You deleted calendar {calendar}" : "Usted eliminó el calendario {calendar}", "{actor} updated calendar {calendar}" : "{actor} actualizó el calendario {calendar}", "You updated calendar {calendar}" : "Usted actualizó el calendario {calendar}", - "{actor} restored calendar {calendar}" : "{actor} ha restablecido el calendario {calendar}", - "You restored calendar {calendar}" : "Has restablecido el calendario {calendar}", + "{actor} restored calendar {calendar}" : "{actor} ha restaurado el calendario {calendar}", + "You restored calendar {calendar}" : "Ud. ha restaurado el calendario {calendar}", "You shared calendar {calendar} as public link" : "Has compartido el calendario {calendar} con un enlace público", "You removed public link for calendar {calendar}" : "Has eliminado el enlace público al calendario {calendar}", "{actor} shared calendar {calendar} with you" : "{actor} compartió el calendario {calendar} con usted", @@ -33,22 +33,22 @@ OC.L10N.register( "{actor} updated event {event} in calendar {calendar}" : "{actor} actualizó el evento {event} en el calendario {calendar}", "You updated event {event} in calendar {calendar}" : "Usted actualizó el evento {event} en el calendario {calendar}", "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} ha movido el evento {event} del calendario {sourceCalendar} al calendario {targetCalendar}", - "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Has movido el evento {event} del calendario {sourceCalendar} al calendario {targetCalendar}", - "{actor} restored event {event} of calendar {calendar}" : "{actor} ha restablecido el evento {event} del calendario {calendar}", - "You restored event {event} of calendar {calendar}" : "Has reestablecido el evento {event} del calendario {calendar}", + "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Ud. ha movido el evento {event} del calendario {sourceCalendar} al calendario {targetCalendar}", + "{actor} restored event {event} of calendar {calendar}" : "{actor} ha restaurado el evento {event} del calendario {calendar}", + "You restored event {event} of calendar {calendar}" : "Ud. ha restaurado el evento {event} del calendario {calendar}", "Busy" : "Ocupado", "{actor} created to-do {todo} in list {calendar}" : "{actor} ha creado la tarea {todo} en la lista {calendar}", - "You created to-do {todo} in list {calendar}" : "Has creado la tarea {todo} en la lista {calendar}", + "You created to-do {todo} in list {calendar}" : "Ud. ha creado la tarea {todo} en la lista {calendar}", "{actor} deleted to-do {todo} from list {calendar}" : "{actor} ha eliminado la tarea{todo} de la lista {calendar}", - "You deleted to-do {todo} from list {calendar}" : "Has eliminado la tarea {todo} de la lista {calendar}", + "You deleted to-do {todo} from list {calendar}" : "Ud. ha eliminado la tarea {todo} de la lista {calendar}", "{actor} updated to-do {todo} in list {calendar}" : "{actor} ha actualizado la tarea {todo} en la lista {calendar}", - "You updated to-do {todo} in list {calendar}" : "Has actualizado la tarea {todo} en la lista {calendar}", + "You updated to-do {todo} in list {calendar}" : "Ud. ha actualizado la tarea {todo} en la lista {calendar}", "{actor} solved to-do {todo} in list {calendar}" : "{actor} ha resuelto la tarea {todo} de la lista {calendar}", - "You solved to-do {todo} in list {calendar}" : "Has resuelto la tarea {todo} de la lista {calendar}", + "You solved to-do {todo} in list {calendar}" : "Ud. ha resuelto la tarea {todo} de la lista {calendar}", "{actor} reopened to-do {todo} in list {calendar}" : "{actor} ha reabierto la tarea {todo} en la lista {calendar}", - "You reopened to-do {todo} in list {calendar}" : "Has reabierto la tarea {todo} en la lista {calendar}", + "You reopened to-do {todo} in list {calendar}" : "Ud. ha reabierto la tarea {todo} en la lista {calendar}", "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} ha movido la tarea {todo} de la lista {sourceCalendar} a la lista{targetCalendar}", - "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Has movido la tarea {todo} de la lista {sourceCalendar} a la lista {targetCalendar}", + "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Ud. ha movido la tarea {todo} de la lista {sourceCalendar} a la lista {targetCalendar}", "Calendar, contacts and tasks" : "Calendario, contactos y tareas", "A <strong>calendar</strong> was modified" : "Un <strong>calendario</strong> fue modificado.", "A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> del calendario fue modificado.", @@ -72,7 +72,7 @@ OC.L10N.register( "Description: %s" : "Descripción: %s", "Where: %s" : "Lugar: %s", "%1$s via %2$s" : "%1$s vía %2$s", - "In the past on %1$s for the entire day" : "En el pasado el %1$sdurante todo el día", + "In the past on %1$s for the entire day" : "En el pasado el %1$s durante todo el día", "_In a minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["En un minuto el %1$s durante todo el día","En %n minutos el %1$s durante todo el día","En %n minutos el %1$s durante todo el día"], "_In a hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["En una hora el %1$s durante todo el día","En %n horas el %1$s durante todo el día","En %n horas el %1$s durante todo el día"], "_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["En un día el %1$s durante todo el día","En %n días el %1$s durante todo el día","En %n días el %1$s durante todo el día"], @@ -86,42 +86,42 @@ OC.L10N.register( "_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["En una semana el %1$s entre %2$s - %3$s","En %n semanas el %1$s entre %2$s - %3$s","En %n semanas el %1$s entre %2$s - %3$s"], "_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["En un mes el %1$s entre %2$s - %3$s","En %n meses el l%1$s entre %2$s - %3$s ","En %n meses el %1$s entre %2$s - %3$s"], "_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["En un año el %1$s entre %2$s - %3$s","En %n años el %1$s entre %2$s - %3$s","En %n años el %1$s entre %2$s - %3$s"], - "Could not generate when statement" : "No se ha podido general la declaración de cuándo", - "Every Day for the entire day" : "Todos los días durante todo el día", - "Every Day for the entire day until %1$s" : "Cada day todo el día hasta el %1$s", + "Could not generate when statement" : "No se pudo generar la declaración de cuándo", + "Every Day for the entire day" : "Todos los días, durante todo el día", + "Every Day for the entire day until %1$s" : "Cada día, todo el día hasta el %1$s", "Every Day between %1$s - %2$s" : "Todos los días entre %1$s - %2$s", "Every Day between %1$s - %2$s until %3$s" : "Todos los días entre %1$s - %2$s hasta %3$s", - "Every %1$d Days for the entire day" : "Cada %1$d días todo el día", - "Every %1$d Days for the entire day until %2$s" : "Cada %1$d días todo el día hasta el %2$s", - "Every %1$d Days between %2$s - %3$s" : "Cada %1$d días entre las %2$s y %3$s", - "Every %1$d Days between %2$s - %3$s until %4$s" : "Cada %1$d días entre las %2$s y %3$s hasta el %4$s", - "Could not generate event recurrence statement" : "No se ha podido generar la declaración de recurrencia", - "Every Week on %1$s for the entire day" : "Cada semana el %1$s todo el día", - "Every Week on %1$s for the entire day until %2$s" : "Cada %1$s días todo el día hasta el %2$s", + "Every %1$d Days for the entire day" : "Cada %1$d días, durante todo el día", + "Every %1$d Days for the entire day until %2$s" : "Cada %1$d días, durante todo el día, hasta el %2$s", + "Every %1$d Days between %2$s - %3$s" : "Cada %1$d días, entre las %2$s y %3$s", + "Every %1$d Days between %2$s - %3$s until %4$s" : "Cada %1$d días, entre las %2$s y %3$s hasta el %4$s", + "Could not generate event recurrence statement" : "No se ha podido generar la declaración de recurrencia del evento", + "Every Week on %1$s for the entire day" : "Cada semana el %1$s, durante todo el día", + "Every Week on %1$s for the entire day until %2$s" : "Cada %1$s días, durante todo el día, hasta el %2$s", "Every Week on %1$s between %2$s - %3$s" : "Cada semana el %1$s entre %2$s y %3$s", "Every Week on %1$s between %2$s - %3$s until %4$s" : "Cada semana el %1$s entre %2$s y %3$s hasta el %4$s", "Every %1$d Weeks on %2$s for the entire day" : "Cada %1$d semanas el %2$s todo el día", "Every %1$d Weeks on %2$s for the entire day until %3$s" : "Cada %1$d semanas el %2$s durante todo el día hasta %3$s", "Every %1$d Weeks on %2$s between %3$s - %4$s" : "Cada %1$d semanas el %2$s entre %3$s - %4$s", "Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Cada %1$d semanas el %2$s entre %3$s - %4$s hasta %5$s", - "Every Month on the %1$s for the entire day" : "Cada mes el día %1$s durante todo el día", + "Every Month on the %1$s for the entire day" : "Cada mes el día %1$s, durante todo el día", "Every Month on the %1$s for the entire day until %2$s" : "Cada mes el día %1$s durante todo el día hasta %2$s", "Every Month on the %1$s between %2$s - %3$s" : "Cada mes el día %1$s entre %2$s - %3$s", "Every Month on the %1$s between %2$s - %3$s until %4$s" : "Cada mes el día %1$s entre %2$s - %3$s hasta %4$s", - "Every %1$d Months on the %2$s for the entire day" : "Cada %1$d meses el día %2$s durante todo el día", - "Every %1$d Months on the %2$s for the entire day until %3$s" : "Cada %1$d meses el día %2$s durante todo el día hasta %3$s", + "Every %1$d Months on the %2$s for the entire day" : "Cada %1$d meses el día %2$s, durante todo el día", + "Every %1$d Months on the %2$s for the entire day until %3$s" : "Cada %1$d meses el día %2$s, durante todo el día hasta %3$s", "Every %1$d Months on the %2$s between %3$s - %4$s" : "Cada %1$d meses el día %2$s entre %3$s - %4$s", "Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Cada %1$d meses el día %2$s entre %3$s - %4$s hasta %5$s", - "Every Year in %1$s on the %2$s for the entire day" : "Cada año en %1$s el día %2$s durante todo el día", - "Every Year in %1$s on the %2$s for the entire day until %3$s" : "Cada año en %1$s el día %2$s durante todo el día hasta %3$s", + "Every Year in %1$s on the %2$s for the entire day" : "Cada año en %1$s el día %2$s, durante todo el día", + "Every Year in %1$s on the %2$s for the entire day until %3$s" : "Cada año en %1$s el día %2$s, durante todo el día, hasta %3$s", "Every Year in %1$s on the %2$s between %3$s - %4$s" : "Cada año en %1$s el día %2$s entre %3$s - %4$s.", "Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Cada año en %1$s el día %2$s entre %3$s - %4$s hasta %5$s", - "Every %1$d Years in %2$s on the %3$s for the entire day" : "Cada %1$d años en %2$s el día %3$s durante todo el día", - "Every %1$d Years in %2$s on the %3$s for the entire day until %4$s" : "Cada %1$d años en %2$s el día %3$s durante todo el día hasta %4$s", + "Every %1$d Years in %2$s on the %3$s for the entire day" : "Cada %1$d años en %2$s el día %3$s, durante todo el día", + "Every %1$d Years in %2$s on the %3$s for the entire day until %4$s" : "Cada %1$d años en %2$s el día %3$s, durante todo el día, hasta %4$s", "Every %1$d Years in %2$s on the %3$s between %4$s - %5$s" : "Cada %1$d años en %2$s el día %3$s entre %4$s - %5$s", "Every %1$d Years in %2$s on the %3$s between %4$s - %5$s until %6$s" : "Cada %1$d años en %2$s el día %3$s entre %4$s - %5$s hasta %6$s", - "On specific dates for the entire day until %1$s" : "En fechas concretas durante todo el día hasta %1$s", - "On specific dates between %1$s - %2$s until %3$s" : "En fechas concretas entre %1$s - %2$s hasta %3$s", + "On specific dates for the entire day until %1$s" : "En fechas específicas, durante todo el día, hasta %1$s", + "On specific dates between %1$s - %2$s until %3$s" : "En fechas específicas entre %1$s - %2$s hasta %3$s", "In the past on %1$s" : "En el pasado el %1$s", "_In a minute on %1$s_::_In %n minutes on %1$s_" : ["En un minuto el %1$s","En %n minutos el %1$s","En %n minutos el %1$s"], "_In a hour on %1$s_::_In %n hours on %1$s_" : ["En una hora el %1$s","En %n horas el %1$s","En %n horas el %1$s"], @@ -143,7 +143,7 @@ OC.L10N.register( "_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["En una semana el %1$s y luego el %2$s y %3$s","En %n semanas el %1$s y luego el %2$s y %3$s","En %n semanas el %1$s y luego el %2$s y %3$s"], "_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["En un mes el %1$s y luego el %2$s y %3$s","En %n meses el %1$s y luego el %2$s y %3$s","En %n meses el %1$s y luego el %2$s y %3$s"], "_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["En un año el %1$s y luego el %2$s y %3$s","En %n años el %1$s y luego el %2$s y %3$s","En %n años el %1$s y luego el %2$s y %3$s"], - "Could not generate next recurrence statement" : "No se ha podido generar la descripción de la siguiente repetición", + "Could not generate next recurrence statement" : "No se ha podido generar la declaración de la siguiente recurrencia", "Cancelled: %1$s" : "Cancelado: %1$s", "\"%1$s\" has been canceled" : "\"%1$s\" ha sido cancelada", "Re: %1$s" : "Re: %1$s", @@ -185,49 +185,51 @@ OC.L10N.register( "October" : "Octubre", "November" : "Noviembre", "December" : "Diciembre", - "First" : "Primera", + "First" : "Primero", "Second" : "Segundo", "Third" : "Tercero", "Fourth" : "Cuarto", - "Last" : "Última", + "Fifth" : "Quinto", + "Last" : "Último", "Second Last" : "Penúltima", "Third Last" : "Antepenúltima", - "Fourth Last" : "Cuarta última", + "Fourth Last" : "Ante antepenúltimo", + "Fifth Last" : "Quinto último", "Contacts" : "Contactos", "{actor} created address book {addressbook}" : "{actor} ha creado la libreta de direcciones {addressbook}", - "You created address book {addressbook}" : "Has creado la libreta de direcciones {addressbook}", + "You created address book {addressbook}" : "Ud. ha creado la libreta de direcciones {addressbook}", "{actor} deleted address book {addressbook}" : "{actor} ha eliminado la libreta de direcciones {addressbook}", - "You deleted address book {addressbook}" : "Has eliminado la libreta de direcciones {addressbook}", + "You deleted address book {addressbook}" : "Ud. ha eliminado la libreta de direcciones {addressbook}", "{actor} updated address book {addressbook}" : "{actor} ha actualizado la libreta de direcciones {addressbook}", - "You updated address book {addressbook}" : "Has actualizado la libreta de direcciones {addressbook}", + "You updated address book {addressbook}" : "Ud. ha actualizado la libreta de direcciones {addressbook}", "{actor} shared address book {addressbook} with you" : "{actor} ha compartido la libreta de direcciones {addressbook} contigo", - "You shared address book {addressbook} with {user}" : "Has compartido la libreta de direcciones {addressbook} con {user}", + "You shared address book {addressbook} with {user}" : "Ud. ha compartido la libreta de direcciones {addressbook} con {user}", "{actor} shared address book {addressbook} with {user}" : "{actor} ha compartido la libreta de direcciones {addressbook} con {user}", - "{actor} unshared address book {addressbook} from you" : "{actor} ha descompartido la libreta de direcciones {addressbook} contigo", - "You unshared address book {addressbook} from {user}" : "Has descompartido la libreta de direcciones {addressbook} con {user}", - "{actor} unshared address book {addressbook} from {user}" : "{actor} ha descompartido la libreta de direcciones {addressbook} con {user}", - "{actor} unshared address book {addressbook} from themselves" : "{actor} ha descompartido la libreta de direcciones {addressbook} con ellos mismos", - "You shared address book {addressbook} with group {group}" : "Has compartido la libreta de direcciones {addressbook} con el grupo {group}", + "{actor} unshared address book {addressbook} from you" : "{actor} ha dejado de compartir la libreta de direcciones {addressbook} con Ud.", + "You unshared address book {addressbook} from {user}" : "Ud. ha dejado de compartir la libreta de direcciones {addressbook} con {user}", + "{actor} unshared address book {addressbook} from {user}" : "{actor} ha dejado de compartir la libreta de direcciones {addressbook} con {user}", + "{actor} unshared address book {addressbook} from themselves" : "{actor} dejó de compartir su propia libreta de direcciones {addressbook}", + "You shared address book {addressbook} with group {group}" : "Ud. ha compartido la libreta de direcciones {addressbook} con el grupo {group}", "{actor} shared address book {addressbook} with group {group}" : "{actor} ha compartido la libreta de direcciones {addressbook} con el grupo {group}", - "You unshared address book {addressbook} from group {group}" : "Has descompartido la libreta de direcciones {addressbook} con el grupo {group}", - "{actor} unshared address book {addressbook} from group {group}" : "{actor} ha descompartido la libreta de direcciones {addressbook} con el grupo {group}", - "{actor} created contact {card} in address book {addressbook}" : "{actor} ha creado el contacto {card} en la libreta de direcciones {addressbook}", - "You created contact {card} in address book {addressbook}" : "Has creado un contacto {card} en la libreta de direcciones {addressbook}", + "You unshared address book {addressbook} from group {group}" : "Ud. ha dejado de compartir la libreta de direcciones {addressbook} con el grupo {group}", + "{actor} unshared address book {addressbook} from group {group}" : "{actor} ha dejado de compartir la libreta de direcciones {addressbook} con el grupo {group}", + "{actor} created contact {card} in address book {addressbook}" : "{actor} ha creado el contacto {card} en la libreta de direcciones {addressbook}", + "You created contact {card} in address book {addressbook}" : "Ud. ha creado un contacto {card} en la libreta de direcciones {addressbook}", "{actor} deleted contact {card} from address book {addressbook}" : "{actor} ha eliminado el contacto {card} de la libreta de direcciones {addressbook}", - "You deleted contact {card} from address book {addressbook}" : "Has eliminado el contacto {card} de la libreta de direcciones {addressbook}", + "You deleted contact {card} from address book {addressbook}" : "Ud. ha eliminado el contacto {card} de la libreta de direcciones {addressbook}", "{actor} updated contact {card} in address book {addressbook}" : "{actor} ha actualizado el contacto {card} en la libreta de direcciones {addressbook}", - "You updated contact {card} in address book {addressbook}" : "Has actualizado el contacto {card} en la libreta de direcciones {addressbook}", - "A <strong>contact</strong> or <strong>address book</strong> was modified" : "Se ha modificado un <strong>contacto</strong> o una <strong>libreta de direcciones</strong> ", + "You updated contact {card} in address book {addressbook}" : "Ud. ha actualizado el contacto {card} en la libreta de direcciones {addressbook}", + "A <strong>contact</strong> or <strong>address book</strong> was modified" : "Se ha modificado un <strong>contacto</strong> o una <strong>libreta de direcciones</strong>", "Accounts" : "Cuentas", - "System address book which holds all accounts" : "Libretas de direcciones del sistema que contienen todas las cuentas", + "System address book which holds all accounts" : "Libreta de direcciones del sistema que contiene todas las cuentas", "File is not updatable: %1$s" : "El archivo no se puede actualizar: %1$s", - "Failed to get storage for file" : "Error al obtener almacenamiento para el archivo", - "Could not write to final file, canceled by hook" : "No se pudo escribir en el archivo final, cancelado por el sistema.", + "Failed to get storage for file" : "Error al obtener datos de almacenamiento para el archivo", + "Could not write to final file, canceled by hook" : "No se pudo escribir en el archivo final, cancelado por el sistema", "Could not write file contents" : "No se han podido escribir los contenidos del archivo", "_%n byte_::_%n bytes_" : ["%n byte","%n bytes","%n bytes"], "Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Error al copiar el archivo al destino (copiado: %1$s, tamaño esperado: %2$s)", "Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "Se esperaba un tamaño de archivo de %1$s pero se leyó (desde el cliente Nextcloud) y se escribió (en el almacenamiento Nextcloud) %2$s. Podría ser un problema de red en el lado del envío o un problema de escritura en el almacenamiento en el lado del servidor.", - "Could not rename part file to final file, canceled by hook" : "No se pudo escribir en el archivo final, cancelado por el sistema.", + "Could not rename part file to final file, canceled by hook" : "No se pudo renombrar del archivo parcial como el archivo final, cancelado por el sistema.", "Could not rename part file to final file" : "No se ha podido renombrar el archivo parcial como el archivo final", "Failed to check file size: %1$s" : "Fallo al comprobar el tamaño del archivo: %1$s", "Could not open file: %1$s, file does seem to exist" : "No se pudo abrir el archivo: %1$s, parece que el archivo existe", @@ -248,29 +250,34 @@ OC.L10N.register( "Completed on %s" : "Completado el %s", "Due on %s by %s" : "Finaliza el %s por %s", "Due on %s" : "Finaliza el %s", + "Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "¡Bienvenido a Nextcloud Calendar!\n\nEste es un evento de ejemplo - ¡explore la flexibilidad de planear con Nextcloud Calendar editando cuantas veces quiera!\n\nCon Nextcloud Calendar, podrá:\n- Crear, editar, y administrar eventos fácilmente.\n- Crear múltiples calendarios y compartirlos con su equipo de trabajo, amigos, o su familia.\n- Verificar la disponibilidad y mostrar sus tiempos de ocupado a otros.\n- Se integra de manera transparente con otras apps y dispositivos via CalDAV.\n- Personalice su experiencia: Programe eventos recurrentes, ajuste las notificaciones, así como otros ajustes.", + "Example event - open me!" : "Evento de ejemplo - ¡ábralo!", + "System Address Book" : "Libreta de Direcciones del Sistema", + "The system address book contains contact information for all users in your instance." : "La libreta de direcciones del sistema contiene la información de contacto de todos los usuarios de su instancia.", + "Enable System Address Book" : "Habilitar la Libreta de Direcciones del Sistema", "DAV system address book" : "Libreta de direcciónes DAV del sistema", "No outstanding DAV system address book sync." : "No hay una sincronización pendiente en la libreta de direcciones DAV del sistema.", "The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "La sincronización DAV de la libreta de direcciones del sistema no se ha ejecutado ya que su instancia tiene más de 1000 usuarios o por que ha ocurrido un error. Por favor, ejecútela manualmente llamando al comando: \"occ dav:sync-system-addressbook\".", "WebDAV endpoint" : "Endpoint WebDAV", "Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "No se pudo verificar si su servidor web está adecuadamente configurado para permitir la sincronización de archivos a través de WebDAV. Por favor, verifique manualmente.", - "Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Tu servidor web todavía no está configurado correctamente para permitir la sincronización de archivos, porque la interfaz WebDAV parece estar rota.", + "Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Su servidor web todavía no está configurado correctamente para permitir la sincronización de archivos, porque la interfaz WebDAV parece estar rota.", "Your web server is properly set up to allow file synchronization over WebDAV." : "Su servidor web está adecuadamente configurado para permitir la sincronización de archivos a través de WebDAV.", - "Migrated calendar (%1$s)" : "Calendario migrado (%1$s)", + "Migrated calendar (%1$s)" : "Se migró el calendario (%1$s)", "Calendars including events, details and attendees" : "Calendarios que incluyen eventos, detalles y asistentes", "Contacts and groups" : "Contactos y grupos", "WebDAV" : "WebDAV", "Absence saved" : "Ausencia guardada", - "Failed to save your absence settings" : "Error al guardar tus ajustes de ausencia", + "Failed to save your absence settings" : "Error al guardar sus ajustes de ausencia", "Absence cleared" : "Ausencia limpiada", - "Failed to clear your absence settings" : "Error al borrar tus ajustes de ausencia", + "Failed to clear your absence settings" : "Error al borrar sus ajustes de ausencia", "First day" : "Primer día", "Last day (inclusive)" : "Último día (incluido)", "Out of office replacement (optional)" : "Sustituto durante vacaciones/ausencia (opcional)", "Name of the replacement" : "Nombre del sustituto", "No results." : "Sin resultados.", - "Start typing." : "Empieza a escribir.", + "Start typing." : "Empiece a escribir.", "Short absence status" : "Estado de ausencia corta", - "Long absence Message" : "Mensaje en ausencia larga", + "Long absence Message" : "Mensaje de ausencia larga", "Save" : "Guardar", "Disable absence" : "Deshabilitar ausencia", "Failed to load availability" : "No se ha podido cargar la disponibilidad", @@ -278,21 +285,36 @@ OC.L10N.register( "Failed to save availability" : "No se ha podido guardar la disponibilidad", "Time zone:" : "Zona horaria:", "to" : "para", - "Delete slot" : "Eliminar espacio", - "No working hours set" : "No se han establecido horas de funcionamiento", - "Add slot" : "Añadir espacio", + "Delete slot" : "Eliminar franja de tiempo", + "No working hours set" : "No se han establecido horas laborales", + "Add slot" : "Añadir franja horaria", "Weekdays" : "Días de semana", "Pick a start time for {dayName}" : "Elija una hora de inicio para {dayName}", "Pick a end time for {dayName}" : "Elija una hora fin para {dayName}", - "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Cambiar automáticamente el estado del usuario a \"No molestar\" cuando no esté disponible para silenciar todas las notificaciones.", + "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Cambiar automáticamente el estado del usuario a \"No molestar\" fuera de las horas de disponibilidad para silenciar todas las notificaciones.", "Cancel" : "Cancelar", "Import" : "Importar", "Error while saving settings" : "Error al guardar los ajustes", - "Reset to default" : "Reestablecer a predeterminado", + "Contact reset successfully" : "El contacto fue restablecido exitosamente", + "Error while resetting contact" : "Error al restablecer el contacto", + "Contact imported successfully" : "El contacto se importó exitosamente", + "Error while importing contact" : "Error al importar el contacto", + "Import contact" : "Importar contacto", + "Reset to default" : "Restablecer a predeterminado", + "Import contacts" : "Importar contactos", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importar un nuevo archivo .vcf eliminará el contacto predeterminado existente y lo reemplazará con el nuevo. ¿Desea continuar?", + "Failed to save example event creation setting" : "Fallo al guardar el ajuste de creación de evento de ejemplo", + "Failed to upload the example event" : "Fallo al cargar el evento de ejemplo", + "Custom example event was saved successfully" : "El evento de ejemplo personalizado se guardó exitosamente", + "Failed to delete the custom example event" : "Fallo al guardar el evento de ejemplo personalizado", + "Custom example event was deleted successfully" : "El evento de ejemplo personalizado se eliminó exitosamente", + "Import calendar event" : "Importar evento del calendario", + "Uploading a new event will overwrite the existing one." : "Cargar un evento nuevo sobrescribirá el existente. ", + "Upload event" : "Cargar evento", "Availability" : "Disponibilidad", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configura sus horas laborales, otras personas verán cuando está fuera de la oficina cuando agenden una reunión.", "Absence" : "Ausencia", - "Configure your next absence period." : "Configura el siguiente periodo en que estarás ausente", + "Configure your next absence period." : "Configure el siguiente periodo en que estará ausente", "Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instale también la {calendarappstoreopen}app de Calendario{linkclose} o {calendardocopen}conecte su escritorio y móvil para sincronizar ↗{linkclose}.", "Please make sure to properly set up {emailopen}the email server{linkclose}." : "Por favor, asegúrese de configurar correctamente {emailopen}el servidor web{linkclose}", "Calendar server" : "Servidor de calendario", @@ -305,6 +327,8 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Enviar recordatorio también a los usuarios con los que se comparte el calendario", "Reminders are always sent to organizers and attendees." : "Los recordatorios siempre se envían a los organizadores y asistentes.", "Enable notifications for events via push" : "Activar notificaciones push para eventos", + "Example content" : "Contenido de ejemplo", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "El contenido de ejemplo sirve para mostrar las características de Nextcloud. Se proporciona un contenido predeterminado con Nextcloud, y puede ser reemplazado por un contenido personalizado.", "There was an error updating your attendance status." : "Ha habido un error al actualizar tu estado de asistencia.", "Please contact the organizer directly." : "Por favor, contacta directamente con el organizador.", "Are you accepting the invitation?" : "¿Aceptas la invitación?", diff --git a/apps/dav/l10n/es.json b/apps/dav/l10n/es.json index bed92b5fd76..ba95b4a0296 100644 --- a/apps/dav/l10n/es.json +++ b/apps/dav/l10n/es.json @@ -8,8 +8,8 @@ "You deleted calendar {calendar}" : "Usted eliminó el calendario {calendar}", "{actor} updated calendar {calendar}" : "{actor} actualizó el calendario {calendar}", "You updated calendar {calendar}" : "Usted actualizó el calendario {calendar}", - "{actor} restored calendar {calendar}" : "{actor} ha restablecido el calendario {calendar}", - "You restored calendar {calendar}" : "Has restablecido el calendario {calendar}", + "{actor} restored calendar {calendar}" : "{actor} ha restaurado el calendario {calendar}", + "You restored calendar {calendar}" : "Ud. ha restaurado el calendario {calendar}", "You shared calendar {calendar} as public link" : "Has compartido el calendario {calendar} con un enlace público", "You removed public link for calendar {calendar}" : "Has eliminado el enlace público al calendario {calendar}", "{actor} shared calendar {calendar} with you" : "{actor} compartió el calendario {calendar} con usted", @@ -31,22 +31,22 @@ "{actor} updated event {event} in calendar {calendar}" : "{actor} actualizó el evento {event} en el calendario {calendar}", "You updated event {event} in calendar {calendar}" : "Usted actualizó el evento {event} en el calendario {calendar}", "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} ha movido el evento {event} del calendario {sourceCalendar} al calendario {targetCalendar}", - "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Has movido el evento {event} del calendario {sourceCalendar} al calendario {targetCalendar}", - "{actor} restored event {event} of calendar {calendar}" : "{actor} ha restablecido el evento {event} del calendario {calendar}", - "You restored event {event} of calendar {calendar}" : "Has reestablecido el evento {event} del calendario {calendar}", + "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Ud. ha movido el evento {event} del calendario {sourceCalendar} al calendario {targetCalendar}", + "{actor} restored event {event} of calendar {calendar}" : "{actor} ha restaurado el evento {event} del calendario {calendar}", + "You restored event {event} of calendar {calendar}" : "Ud. ha restaurado el evento {event} del calendario {calendar}", "Busy" : "Ocupado", "{actor} created to-do {todo} in list {calendar}" : "{actor} ha creado la tarea {todo} en la lista {calendar}", - "You created to-do {todo} in list {calendar}" : "Has creado la tarea {todo} en la lista {calendar}", + "You created to-do {todo} in list {calendar}" : "Ud. ha creado la tarea {todo} en la lista {calendar}", "{actor} deleted to-do {todo} from list {calendar}" : "{actor} ha eliminado la tarea{todo} de la lista {calendar}", - "You deleted to-do {todo} from list {calendar}" : "Has eliminado la tarea {todo} de la lista {calendar}", + "You deleted to-do {todo} from list {calendar}" : "Ud. ha eliminado la tarea {todo} de la lista {calendar}", "{actor} updated to-do {todo} in list {calendar}" : "{actor} ha actualizado la tarea {todo} en la lista {calendar}", - "You updated to-do {todo} in list {calendar}" : "Has actualizado la tarea {todo} en la lista {calendar}", + "You updated to-do {todo} in list {calendar}" : "Ud. ha actualizado la tarea {todo} en la lista {calendar}", "{actor} solved to-do {todo} in list {calendar}" : "{actor} ha resuelto la tarea {todo} de la lista {calendar}", - "You solved to-do {todo} in list {calendar}" : "Has resuelto la tarea {todo} de la lista {calendar}", + "You solved to-do {todo} in list {calendar}" : "Ud. ha resuelto la tarea {todo} de la lista {calendar}", "{actor} reopened to-do {todo} in list {calendar}" : "{actor} ha reabierto la tarea {todo} en la lista {calendar}", - "You reopened to-do {todo} in list {calendar}" : "Has reabierto la tarea {todo} en la lista {calendar}", + "You reopened to-do {todo} in list {calendar}" : "Ud. ha reabierto la tarea {todo} en la lista {calendar}", "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} ha movido la tarea {todo} de la lista {sourceCalendar} a la lista{targetCalendar}", - "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Has movido la tarea {todo} de la lista {sourceCalendar} a la lista {targetCalendar}", + "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Ud. ha movido la tarea {todo} de la lista {sourceCalendar} a la lista {targetCalendar}", "Calendar, contacts and tasks" : "Calendario, contactos y tareas", "A <strong>calendar</strong> was modified" : "Un <strong>calendario</strong> fue modificado.", "A calendar <strong>event</strong> was modified" : "Un <strong>evento</strong> del calendario fue modificado.", @@ -70,7 +70,7 @@ "Description: %s" : "Descripción: %s", "Where: %s" : "Lugar: %s", "%1$s via %2$s" : "%1$s vía %2$s", - "In the past on %1$s for the entire day" : "En el pasado el %1$sdurante todo el día", + "In the past on %1$s for the entire day" : "En el pasado el %1$s durante todo el día", "_In a minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["En un minuto el %1$s durante todo el día","En %n minutos el %1$s durante todo el día","En %n minutos el %1$s durante todo el día"], "_In a hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["En una hora el %1$s durante todo el día","En %n horas el %1$s durante todo el día","En %n horas el %1$s durante todo el día"], "_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["En un día el %1$s durante todo el día","En %n días el %1$s durante todo el día","En %n días el %1$s durante todo el día"], @@ -84,42 +84,42 @@ "_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["En una semana el %1$s entre %2$s - %3$s","En %n semanas el %1$s entre %2$s - %3$s","En %n semanas el %1$s entre %2$s - %3$s"], "_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["En un mes el %1$s entre %2$s - %3$s","En %n meses el l%1$s entre %2$s - %3$s ","En %n meses el %1$s entre %2$s - %3$s"], "_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["En un año el %1$s entre %2$s - %3$s","En %n años el %1$s entre %2$s - %3$s","En %n años el %1$s entre %2$s - %3$s"], - "Could not generate when statement" : "No se ha podido general la declaración de cuándo", - "Every Day for the entire day" : "Todos los días durante todo el día", - "Every Day for the entire day until %1$s" : "Cada day todo el día hasta el %1$s", + "Could not generate when statement" : "No se pudo generar la declaración de cuándo", + "Every Day for the entire day" : "Todos los días, durante todo el día", + "Every Day for the entire day until %1$s" : "Cada día, todo el día hasta el %1$s", "Every Day between %1$s - %2$s" : "Todos los días entre %1$s - %2$s", "Every Day between %1$s - %2$s until %3$s" : "Todos los días entre %1$s - %2$s hasta %3$s", - "Every %1$d Days for the entire day" : "Cada %1$d días todo el día", - "Every %1$d Days for the entire day until %2$s" : "Cada %1$d días todo el día hasta el %2$s", - "Every %1$d Days between %2$s - %3$s" : "Cada %1$d días entre las %2$s y %3$s", - "Every %1$d Days between %2$s - %3$s until %4$s" : "Cada %1$d días entre las %2$s y %3$s hasta el %4$s", - "Could not generate event recurrence statement" : "No se ha podido generar la declaración de recurrencia", - "Every Week on %1$s for the entire day" : "Cada semana el %1$s todo el día", - "Every Week on %1$s for the entire day until %2$s" : "Cada %1$s días todo el día hasta el %2$s", + "Every %1$d Days for the entire day" : "Cada %1$d días, durante todo el día", + "Every %1$d Days for the entire day until %2$s" : "Cada %1$d días, durante todo el día, hasta el %2$s", + "Every %1$d Days between %2$s - %3$s" : "Cada %1$d días, entre las %2$s y %3$s", + "Every %1$d Days between %2$s - %3$s until %4$s" : "Cada %1$d días, entre las %2$s y %3$s hasta el %4$s", + "Could not generate event recurrence statement" : "No se ha podido generar la declaración de recurrencia del evento", + "Every Week on %1$s for the entire day" : "Cada semana el %1$s, durante todo el día", + "Every Week on %1$s for the entire day until %2$s" : "Cada %1$s días, durante todo el día, hasta el %2$s", "Every Week on %1$s between %2$s - %3$s" : "Cada semana el %1$s entre %2$s y %3$s", "Every Week on %1$s between %2$s - %3$s until %4$s" : "Cada semana el %1$s entre %2$s y %3$s hasta el %4$s", "Every %1$d Weeks on %2$s for the entire day" : "Cada %1$d semanas el %2$s todo el día", "Every %1$d Weeks on %2$s for the entire day until %3$s" : "Cada %1$d semanas el %2$s durante todo el día hasta %3$s", "Every %1$d Weeks on %2$s between %3$s - %4$s" : "Cada %1$d semanas el %2$s entre %3$s - %4$s", "Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Cada %1$d semanas el %2$s entre %3$s - %4$s hasta %5$s", - "Every Month on the %1$s for the entire day" : "Cada mes el día %1$s durante todo el día", + "Every Month on the %1$s for the entire day" : "Cada mes el día %1$s, durante todo el día", "Every Month on the %1$s for the entire day until %2$s" : "Cada mes el día %1$s durante todo el día hasta %2$s", "Every Month on the %1$s between %2$s - %3$s" : "Cada mes el día %1$s entre %2$s - %3$s", "Every Month on the %1$s between %2$s - %3$s until %4$s" : "Cada mes el día %1$s entre %2$s - %3$s hasta %4$s", - "Every %1$d Months on the %2$s for the entire day" : "Cada %1$d meses el día %2$s durante todo el día", - "Every %1$d Months on the %2$s for the entire day until %3$s" : "Cada %1$d meses el día %2$s durante todo el día hasta %3$s", + "Every %1$d Months on the %2$s for the entire day" : "Cada %1$d meses el día %2$s, durante todo el día", + "Every %1$d Months on the %2$s for the entire day until %3$s" : "Cada %1$d meses el día %2$s, durante todo el día hasta %3$s", "Every %1$d Months on the %2$s between %3$s - %4$s" : "Cada %1$d meses el día %2$s entre %3$s - %4$s", "Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Cada %1$d meses el día %2$s entre %3$s - %4$s hasta %5$s", - "Every Year in %1$s on the %2$s for the entire day" : "Cada año en %1$s el día %2$s durante todo el día", - "Every Year in %1$s on the %2$s for the entire day until %3$s" : "Cada año en %1$s el día %2$s durante todo el día hasta %3$s", + "Every Year in %1$s on the %2$s for the entire day" : "Cada año en %1$s el día %2$s, durante todo el día", + "Every Year in %1$s on the %2$s for the entire day until %3$s" : "Cada año en %1$s el día %2$s, durante todo el día, hasta %3$s", "Every Year in %1$s on the %2$s between %3$s - %4$s" : "Cada año en %1$s el día %2$s entre %3$s - %4$s.", "Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Cada año en %1$s el día %2$s entre %3$s - %4$s hasta %5$s", - "Every %1$d Years in %2$s on the %3$s for the entire day" : "Cada %1$d años en %2$s el día %3$s durante todo el día", - "Every %1$d Years in %2$s on the %3$s for the entire day until %4$s" : "Cada %1$d años en %2$s el día %3$s durante todo el día hasta %4$s", + "Every %1$d Years in %2$s on the %3$s for the entire day" : "Cada %1$d años en %2$s el día %3$s, durante todo el día", + "Every %1$d Years in %2$s on the %3$s for the entire day until %4$s" : "Cada %1$d años en %2$s el día %3$s, durante todo el día, hasta %4$s", "Every %1$d Years in %2$s on the %3$s between %4$s - %5$s" : "Cada %1$d años en %2$s el día %3$s entre %4$s - %5$s", "Every %1$d Years in %2$s on the %3$s between %4$s - %5$s until %6$s" : "Cada %1$d años en %2$s el día %3$s entre %4$s - %5$s hasta %6$s", - "On specific dates for the entire day until %1$s" : "En fechas concretas durante todo el día hasta %1$s", - "On specific dates between %1$s - %2$s until %3$s" : "En fechas concretas entre %1$s - %2$s hasta %3$s", + "On specific dates for the entire day until %1$s" : "En fechas específicas, durante todo el día, hasta %1$s", + "On specific dates between %1$s - %2$s until %3$s" : "En fechas específicas entre %1$s - %2$s hasta %3$s", "In the past on %1$s" : "En el pasado el %1$s", "_In a minute on %1$s_::_In %n minutes on %1$s_" : ["En un minuto el %1$s","En %n minutos el %1$s","En %n minutos el %1$s"], "_In a hour on %1$s_::_In %n hours on %1$s_" : ["En una hora el %1$s","En %n horas el %1$s","En %n horas el %1$s"], @@ -141,7 +141,7 @@ "_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["En una semana el %1$s y luego el %2$s y %3$s","En %n semanas el %1$s y luego el %2$s y %3$s","En %n semanas el %1$s y luego el %2$s y %3$s"], "_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["En un mes el %1$s y luego el %2$s y %3$s","En %n meses el %1$s y luego el %2$s y %3$s","En %n meses el %1$s y luego el %2$s y %3$s"], "_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["En un año el %1$s y luego el %2$s y %3$s","En %n años el %1$s y luego el %2$s y %3$s","En %n años el %1$s y luego el %2$s y %3$s"], - "Could not generate next recurrence statement" : "No se ha podido generar la descripción de la siguiente repetición", + "Could not generate next recurrence statement" : "No se ha podido generar la declaración de la siguiente recurrencia", "Cancelled: %1$s" : "Cancelado: %1$s", "\"%1$s\" has been canceled" : "\"%1$s\" ha sido cancelada", "Re: %1$s" : "Re: %1$s", @@ -183,49 +183,51 @@ "October" : "Octubre", "November" : "Noviembre", "December" : "Diciembre", - "First" : "Primera", + "First" : "Primero", "Second" : "Segundo", "Third" : "Tercero", "Fourth" : "Cuarto", - "Last" : "Última", + "Fifth" : "Quinto", + "Last" : "Último", "Second Last" : "Penúltima", "Third Last" : "Antepenúltima", - "Fourth Last" : "Cuarta última", + "Fourth Last" : "Ante antepenúltimo", + "Fifth Last" : "Quinto último", "Contacts" : "Contactos", "{actor} created address book {addressbook}" : "{actor} ha creado la libreta de direcciones {addressbook}", - "You created address book {addressbook}" : "Has creado la libreta de direcciones {addressbook}", + "You created address book {addressbook}" : "Ud. ha creado la libreta de direcciones {addressbook}", "{actor} deleted address book {addressbook}" : "{actor} ha eliminado la libreta de direcciones {addressbook}", - "You deleted address book {addressbook}" : "Has eliminado la libreta de direcciones {addressbook}", + "You deleted address book {addressbook}" : "Ud. ha eliminado la libreta de direcciones {addressbook}", "{actor} updated address book {addressbook}" : "{actor} ha actualizado la libreta de direcciones {addressbook}", - "You updated address book {addressbook}" : "Has actualizado la libreta de direcciones {addressbook}", + "You updated address book {addressbook}" : "Ud. ha actualizado la libreta de direcciones {addressbook}", "{actor} shared address book {addressbook} with you" : "{actor} ha compartido la libreta de direcciones {addressbook} contigo", - "You shared address book {addressbook} with {user}" : "Has compartido la libreta de direcciones {addressbook} con {user}", + "You shared address book {addressbook} with {user}" : "Ud. ha compartido la libreta de direcciones {addressbook} con {user}", "{actor} shared address book {addressbook} with {user}" : "{actor} ha compartido la libreta de direcciones {addressbook} con {user}", - "{actor} unshared address book {addressbook} from you" : "{actor} ha descompartido la libreta de direcciones {addressbook} contigo", - "You unshared address book {addressbook} from {user}" : "Has descompartido la libreta de direcciones {addressbook} con {user}", - "{actor} unshared address book {addressbook} from {user}" : "{actor} ha descompartido la libreta de direcciones {addressbook} con {user}", - "{actor} unshared address book {addressbook} from themselves" : "{actor} ha descompartido la libreta de direcciones {addressbook} con ellos mismos", - "You shared address book {addressbook} with group {group}" : "Has compartido la libreta de direcciones {addressbook} con el grupo {group}", + "{actor} unshared address book {addressbook} from you" : "{actor} ha dejado de compartir la libreta de direcciones {addressbook} con Ud.", + "You unshared address book {addressbook} from {user}" : "Ud. ha dejado de compartir la libreta de direcciones {addressbook} con {user}", + "{actor} unshared address book {addressbook} from {user}" : "{actor} ha dejado de compartir la libreta de direcciones {addressbook} con {user}", + "{actor} unshared address book {addressbook} from themselves" : "{actor} dejó de compartir su propia libreta de direcciones {addressbook}", + "You shared address book {addressbook} with group {group}" : "Ud. ha compartido la libreta de direcciones {addressbook} con el grupo {group}", "{actor} shared address book {addressbook} with group {group}" : "{actor} ha compartido la libreta de direcciones {addressbook} con el grupo {group}", - "You unshared address book {addressbook} from group {group}" : "Has descompartido la libreta de direcciones {addressbook} con el grupo {group}", - "{actor} unshared address book {addressbook} from group {group}" : "{actor} ha descompartido la libreta de direcciones {addressbook} con el grupo {group}", - "{actor} created contact {card} in address book {addressbook}" : "{actor} ha creado el contacto {card} en la libreta de direcciones {addressbook}", - "You created contact {card} in address book {addressbook}" : "Has creado un contacto {card} en la libreta de direcciones {addressbook}", + "You unshared address book {addressbook} from group {group}" : "Ud. ha dejado de compartir la libreta de direcciones {addressbook} con el grupo {group}", + "{actor} unshared address book {addressbook} from group {group}" : "{actor} ha dejado de compartir la libreta de direcciones {addressbook} con el grupo {group}", + "{actor} created contact {card} in address book {addressbook}" : "{actor} ha creado el contacto {card} en la libreta de direcciones {addressbook}", + "You created contact {card} in address book {addressbook}" : "Ud. ha creado un contacto {card} en la libreta de direcciones {addressbook}", "{actor} deleted contact {card} from address book {addressbook}" : "{actor} ha eliminado el contacto {card} de la libreta de direcciones {addressbook}", - "You deleted contact {card} from address book {addressbook}" : "Has eliminado el contacto {card} de la libreta de direcciones {addressbook}", + "You deleted contact {card} from address book {addressbook}" : "Ud. ha eliminado el contacto {card} de la libreta de direcciones {addressbook}", "{actor} updated contact {card} in address book {addressbook}" : "{actor} ha actualizado el contacto {card} en la libreta de direcciones {addressbook}", - "You updated contact {card} in address book {addressbook}" : "Has actualizado el contacto {card} en la libreta de direcciones {addressbook}", - "A <strong>contact</strong> or <strong>address book</strong> was modified" : "Se ha modificado un <strong>contacto</strong> o una <strong>libreta de direcciones</strong> ", + "You updated contact {card} in address book {addressbook}" : "Ud. ha actualizado el contacto {card} en la libreta de direcciones {addressbook}", + "A <strong>contact</strong> or <strong>address book</strong> was modified" : "Se ha modificado un <strong>contacto</strong> o una <strong>libreta de direcciones</strong>", "Accounts" : "Cuentas", - "System address book which holds all accounts" : "Libretas de direcciones del sistema que contienen todas las cuentas", + "System address book which holds all accounts" : "Libreta de direcciones del sistema que contiene todas las cuentas", "File is not updatable: %1$s" : "El archivo no se puede actualizar: %1$s", - "Failed to get storage for file" : "Error al obtener almacenamiento para el archivo", - "Could not write to final file, canceled by hook" : "No se pudo escribir en el archivo final, cancelado por el sistema.", + "Failed to get storage for file" : "Error al obtener datos de almacenamiento para el archivo", + "Could not write to final file, canceled by hook" : "No se pudo escribir en el archivo final, cancelado por el sistema", "Could not write file contents" : "No se han podido escribir los contenidos del archivo", "_%n byte_::_%n bytes_" : ["%n byte","%n bytes","%n bytes"], "Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Error al copiar el archivo al destino (copiado: %1$s, tamaño esperado: %2$s)", "Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "Se esperaba un tamaño de archivo de %1$s pero se leyó (desde el cliente Nextcloud) y se escribió (en el almacenamiento Nextcloud) %2$s. Podría ser un problema de red en el lado del envío o un problema de escritura en el almacenamiento en el lado del servidor.", - "Could not rename part file to final file, canceled by hook" : "No se pudo escribir en el archivo final, cancelado por el sistema.", + "Could not rename part file to final file, canceled by hook" : "No se pudo renombrar del archivo parcial como el archivo final, cancelado por el sistema.", "Could not rename part file to final file" : "No se ha podido renombrar el archivo parcial como el archivo final", "Failed to check file size: %1$s" : "Fallo al comprobar el tamaño del archivo: %1$s", "Could not open file: %1$s, file does seem to exist" : "No se pudo abrir el archivo: %1$s, parece que el archivo existe", @@ -246,29 +248,34 @@ "Completed on %s" : "Completado el %s", "Due on %s by %s" : "Finaliza el %s por %s", "Due on %s" : "Finaliza el %s", + "Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "¡Bienvenido a Nextcloud Calendar!\n\nEste es un evento de ejemplo - ¡explore la flexibilidad de planear con Nextcloud Calendar editando cuantas veces quiera!\n\nCon Nextcloud Calendar, podrá:\n- Crear, editar, y administrar eventos fácilmente.\n- Crear múltiples calendarios y compartirlos con su equipo de trabajo, amigos, o su familia.\n- Verificar la disponibilidad y mostrar sus tiempos de ocupado a otros.\n- Se integra de manera transparente con otras apps y dispositivos via CalDAV.\n- Personalice su experiencia: Programe eventos recurrentes, ajuste las notificaciones, así como otros ajustes.", + "Example event - open me!" : "Evento de ejemplo - ¡ábralo!", + "System Address Book" : "Libreta de Direcciones del Sistema", + "The system address book contains contact information for all users in your instance." : "La libreta de direcciones del sistema contiene la información de contacto de todos los usuarios de su instancia.", + "Enable System Address Book" : "Habilitar la Libreta de Direcciones del Sistema", "DAV system address book" : "Libreta de direcciónes DAV del sistema", "No outstanding DAV system address book sync." : "No hay una sincronización pendiente en la libreta de direcciones DAV del sistema.", "The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "La sincronización DAV de la libreta de direcciones del sistema no se ha ejecutado ya que su instancia tiene más de 1000 usuarios o por que ha ocurrido un error. Por favor, ejecútela manualmente llamando al comando: \"occ dav:sync-system-addressbook\".", "WebDAV endpoint" : "Endpoint WebDAV", "Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "No se pudo verificar si su servidor web está adecuadamente configurado para permitir la sincronización de archivos a través de WebDAV. Por favor, verifique manualmente.", - "Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Tu servidor web todavía no está configurado correctamente para permitir la sincronización de archivos, porque la interfaz WebDAV parece estar rota.", + "Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Su servidor web todavía no está configurado correctamente para permitir la sincronización de archivos, porque la interfaz WebDAV parece estar rota.", "Your web server is properly set up to allow file synchronization over WebDAV." : "Su servidor web está adecuadamente configurado para permitir la sincronización de archivos a través de WebDAV.", - "Migrated calendar (%1$s)" : "Calendario migrado (%1$s)", + "Migrated calendar (%1$s)" : "Se migró el calendario (%1$s)", "Calendars including events, details and attendees" : "Calendarios que incluyen eventos, detalles y asistentes", "Contacts and groups" : "Contactos y grupos", "WebDAV" : "WebDAV", "Absence saved" : "Ausencia guardada", - "Failed to save your absence settings" : "Error al guardar tus ajustes de ausencia", + "Failed to save your absence settings" : "Error al guardar sus ajustes de ausencia", "Absence cleared" : "Ausencia limpiada", - "Failed to clear your absence settings" : "Error al borrar tus ajustes de ausencia", + "Failed to clear your absence settings" : "Error al borrar sus ajustes de ausencia", "First day" : "Primer día", "Last day (inclusive)" : "Último día (incluido)", "Out of office replacement (optional)" : "Sustituto durante vacaciones/ausencia (opcional)", "Name of the replacement" : "Nombre del sustituto", "No results." : "Sin resultados.", - "Start typing." : "Empieza a escribir.", + "Start typing." : "Empiece a escribir.", "Short absence status" : "Estado de ausencia corta", - "Long absence Message" : "Mensaje en ausencia larga", + "Long absence Message" : "Mensaje de ausencia larga", "Save" : "Guardar", "Disable absence" : "Deshabilitar ausencia", "Failed to load availability" : "No se ha podido cargar la disponibilidad", @@ -276,21 +283,36 @@ "Failed to save availability" : "No se ha podido guardar la disponibilidad", "Time zone:" : "Zona horaria:", "to" : "para", - "Delete slot" : "Eliminar espacio", - "No working hours set" : "No se han establecido horas de funcionamiento", - "Add slot" : "Añadir espacio", + "Delete slot" : "Eliminar franja de tiempo", + "No working hours set" : "No se han establecido horas laborales", + "Add slot" : "Añadir franja horaria", "Weekdays" : "Días de semana", "Pick a start time for {dayName}" : "Elija una hora de inicio para {dayName}", "Pick a end time for {dayName}" : "Elija una hora fin para {dayName}", - "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Cambiar automáticamente el estado del usuario a \"No molestar\" cuando no esté disponible para silenciar todas las notificaciones.", + "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Cambiar automáticamente el estado del usuario a \"No molestar\" fuera de las horas de disponibilidad para silenciar todas las notificaciones.", "Cancel" : "Cancelar", "Import" : "Importar", "Error while saving settings" : "Error al guardar los ajustes", - "Reset to default" : "Reestablecer a predeterminado", + "Contact reset successfully" : "El contacto fue restablecido exitosamente", + "Error while resetting contact" : "Error al restablecer el contacto", + "Contact imported successfully" : "El contacto se importó exitosamente", + "Error while importing contact" : "Error al importar el contacto", + "Import contact" : "Importar contacto", + "Reset to default" : "Restablecer a predeterminado", + "Import contacts" : "Importar contactos", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importar un nuevo archivo .vcf eliminará el contacto predeterminado existente y lo reemplazará con el nuevo. ¿Desea continuar?", + "Failed to save example event creation setting" : "Fallo al guardar el ajuste de creación de evento de ejemplo", + "Failed to upload the example event" : "Fallo al cargar el evento de ejemplo", + "Custom example event was saved successfully" : "El evento de ejemplo personalizado se guardó exitosamente", + "Failed to delete the custom example event" : "Fallo al guardar el evento de ejemplo personalizado", + "Custom example event was deleted successfully" : "El evento de ejemplo personalizado se eliminó exitosamente", + "Import calendar event" : "Importar evento del calendario", + "Uploading a new event will overwrite the existing one." : "Cargar un evento nuevo sobrescribirá el existente. ", + "Upload event" : "Cargar evento", "Availability" : "Disponibilidad", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configura sus horas laborales, otras personas verán cuando está fuera de la oficina cuando agenden una reunión.", "Absence" : "Ausencia", - "Configure your next absence period." : "Configura el siguiente periodo en que estarás ausente", + "Configure your next absence period." : "Configure el siguiente periodo en que estará ausente", "Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instale también la {calendarappstoreopen}app de Calendario{linkclose} o {calendardocopen}conecte su escritorio y móvil para sincronizar ↗{linkclose}.", "Please make sure to properly set up {emailopen}the email server{linkclose}." : "Por favor, asegúrese de configurar correctamente {emailopen}el servidor web{linkclose}", "Calendar server" : "Servidor de calendario", @@ -303,6 +325,8 @@ "Send reminder notifications to calendar sharees as well" : "Enviar recordatorio también a los usuarios con los que se comparte el calendario", "Reminders are always sent to organizers and attendees." : "Los recordatorios siempre se envían a los organizadores y asistentes.", "Enable notifications for events via push" : "Activar notificaciones push para eventos", + "Example content" : "Contenido de ejemplo", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "El contenido de ejemplo sirve para mostrar las características de Nextcloud. Se proporciona un contenido predeterminado con Nextcloud, y puede ser reemplazado por un contenido personalizado.", "There was an error updating your attendance status." : "Ha habido un error al actualizar tu estado de asistencia.", "Please contact the organizer directly." : "Por favor, contacta directamente con el organizador.", "Are you accepting the invitation?" : "¿Aceptas la invitación?", diff --git a/apps/dav/l10n/pl.js b/apps/dav/l10n/pl.js index 3edcbb7447f..3c9929cc943 100644 --- a/apps/dav/l10n/pl.js +++ b/apps/dav/l10n/pl.js @@ -78,6 +78,11 @@ OC.L10N.register( "_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["Za jeden dzień, dnia %1$s, przez cały dzień","Za %n dni, dnia %1$s, przez cały dzień","Za %n dni, dnia %1$s, przez cały dzień","Za %n dni, dnia %1$s, przez cały dzień"], "_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Za tydzień, dnia %1$s, przez cały dzień","Za %n tygodnie, dnia %1$s, przez cały dzień","Za %n tygodni, dnia %1$s, przez cały dzień","Za %n tygodni, dnia %1$s, przez cały dzień"], "_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["W ciągu miesiąca, dnia %1$s przez cały dzień","W ciągu %n miesięcy, dnia %1$s przez cały dzień","W ciągu %n miesięcy, dnia %1$s przez cały dzień","W ciągu %n miesięcy, dnia %1$s przez cały dzień"], + "_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Za rok dnia %1$s przez cały dzień","Za %n lata dnia %1$s przez cały dzień","Za %n lat dnia %1$s przez cały dzień","Za %n lat dnia %1$s przez cały dzień"], + "_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["Za dzień, dnia %1$s między %2$s - %3$s","Za %n dni dnia %1$s między %2$s - %3$s","Za %n dni dnia %1$s między %2$s - %3$s","Za %n dni dnia %1$s między %2$s - %3$s"], + "_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["Za tydzień dnia %1$s między %2$s - %3$s","Za %n tygodnie dnia %1$s między %2$s - %3$s","Za %n tygodni dnia %1$s między %2$s - %3$s","Za %n tygodni dnia %1$s między %2$s - %3$s"], + "_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["Za miesiąc dnia %1$s między %2$s - %3$s","Za %n miesięcy dnia %1$s między %2$s - %3$s","Za %n miesięcy dnia %1$s między %2$s - %3$s","Za %n miesięcy dnia %1$s między %2$s - %3$s"], + "_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["Za rok dnia %1$s między %2$s - %3$s","Za %n lata dnia %1$s między %2$s - %3$s","Za %n lat dnia %1$s między %2$s - %3$s","Za %n lat dnia %1$s między %2$s - %3$s"], "Could not generate when statement" : "Nie można wygenerować instrukcji when", "Every Day for the entire day" : "Codziennie przez cały dzień", "Every Day for the entire day until %1$s" : "Codziennie przez cały dzień do %1$s", @@ -88,15 +93,21 @@ OC.L10N.register( "Every %1$d Days between %2$s - %3$s until %4$s" : "Co %1$d dni, pomiędzy %2$s - %3$s aż do %4$s", "Could not generate event recurrence statement" : "Nie można wygenerować zestawienia powtórzeń zdarzenia", "Every Week on %1$s for the entire day" : "Każdego tygodnia w %1$s przez cały dzień", + "Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Każdego %1$d miesiąca dnia %2$s między %3$s - %4$s do %5$s", + "Every Year in %1$s on the %2$s for the entire day" : "Co rok w %1$s dnia %2$s przez cały dzień", + "Every Year in %1$s on the %2$s for the entire day until %3$s" : "Co rok w %1$s dnia %2$s przez cały dzień do %3$s", + "Every Year in %1$s on the %2$s between %3$s - %4$s" : "Co roku za %1$s dnia %2$s między %3$s - %4$s", + "Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Co roku za %1$s dnia %2$s między %3$s - %4$s do %5$s", + "Every %1$d Years in %2$s on the %3$s for the entire day" : "Co %1$d lat dnia %2$s o %3$s przez cały dzień", "In the past on %1$s" : "W przeszłości dnia %1$s", - "_In a minute on %1$s_::_In %n minutes on %1$s_" : ["Za minutę dnia %2$s","Za %1$n minuty dnia %2$s","Za %1$n minut dnia %2$s","Za %1$n minut dnia %2$s"], - "_In a hour on %1$s_::_In %n hours on %1$s_" : ["Za godzinę dnia %2$s","Za %1$n godziny dnia %2$s","Za %1$n godzin dnia %2$s","Za %1$n godzin dnia %2$s"], - "_In a day on %1$s_::_In %n days on %1$s_" : ["Za dzień, dnia %2$s","Za %1$n dni dnia %2$s","Za %1$n dni dnia %2$s","Za %1$n dni dnia %2$s"], - "_In a week on %1$s_::_In %n weeks on %1$s_" : ["Za tydzień dnia %2$s","Za %1$n tygodnie dnia %2$s","Za %1$n tygodni dnia %2$s","Za %1$n tygodni dnia %2$s"], - "_In a month on %1$s_::_In %n months on %1$s_" : ["Za miesiąc dnia %2$s","W ciągu %1$n miesięcy dnia %2$s","W ciągu %1$n miesięcy dnia %2$s","W ciągu %1$n miesięcy dnia %2$s"], - "_In a year on %1$s_::_In %n years on %1$s_" : ["Za rok dnia %2$s","Za %1$n lata dnia %2$s","Za %1$n lat dnia %2$s","Za %1$n lat dnia %2$s"], + "_In a minute on %1$s_::_In %n minutes on %1$s_" : ["Za minutę dnia %1$s","Za %n minut dnia %1$s","Za %n minut dnia %1$s","Za %n minut dnia %1$s"], + "_In a hour on %1$s_::_In %n hours on %1$s_" : ["Za godzinę dnia %1$s","Za %n godziny dnia %1$s","Za %n godzin dnia %1$s","Za %n godzin dnia %1$s"], + "_In a day on %1$s_::_In %n days on %1$s_" : ["Za dzień, dnia %1$s","Za %n dni dnia %1$s","Za %n dni dnia %1$s","Za %n dni dnia %1$s"], + "_In a week on %1$s_::_In %n weeks on %1$s_" : ["Za tydzień dnia %1$s","Za %n tygodnie dnia %1$s","Za %n tygodni dnia %1$s","Za %n tygodni dnia %1$s"], + "_In a month on %1$s_::_In %n months on %1$s_" : ["Za miesiąc dnia %1$s","W ciągu %n miesięcy dnia %1$s","W ciągu %n miesięcy dnia %1$s","W ciągu %n miesięcy dnia %1$s"], + "_In a year on %1$s_::_In %n years on %1$s_" : ["Za rok dnia %1$s","Za %n lat dnia %1$s","Za %n lat dnia %1$s","Za %n lat dnia %1$s"], "In the past on %1$s then on %2$s" : "W przeszłości dnia %1$s, a następnie %2$s", - "_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Za minutę dnia %2$s, a następnie %3$s","Za %1$n minuty dnia %2$s, a następnie %3$s","Za %1$n minut dnia %2$s, a następnie %3$s","Za %1$n minut dnia %2$s, a następnie %3$s"], + "_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Za minutę dnia %1$s, a następnie %2$s","Za %n minuty dnia %1$s, a następnie %2$s","Za %n minut dnia %1$s, a następnie %2$s","Za %n minut dnia %1$s, a następnie %2$s"], "Could not generate next recurrence statement" : "Nie można wygenerować następnej instrukcji powtarzania", "Cancelled: %1$s" : "Anulowane: %1$s", "\"%1$s\" has been canceled" : "\"%1$s\" zostało anulowane", diff --git a/apps/dav/l10n/pl.json b/apps/dav/l10n/pl.json index 8a35719cf92..4b2ffc40dc0 100644 --- a/apps/dav/l10n/pl.json +++ b/apps/dav/l10n/pl.json @@ -76,6 +76,11 @@ "_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["Za jeden dzień, dnia %1$s, przez cały dzień","Za %n dni, dnia %1$s, przez cały dzień","Za %n dni, dnia %1$s, przez cały dzień","Za %n dni, dnia %1$s, przez cały dzień"], "_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Za tydzień, dnia %1$s, przez cały dzień","Za %n tygodnie, dnia %1$s, przez cały dzień","Za %n tygodni, dnia %1$s, przez cały dzień","Za %n tygodni, dnia %1$s, przez cały dzień"], "_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["W ciągu miesiąca, dnia %1$s przez cały dzień","W ciągu %n miesięcy, dnia %1$s przez cały dzień","W ciągu %n miesięcy, dnia %1$s przez cały dzień","W ciągu %n miesięcy, dnia %1$s przez cały dzień"], + "_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Za rok dnia %1$s przez cały dzień","Za %n lata dnia %1$s przez cały dzień","Za %n lat dnia %1$s przez cały dzień","Za %n lat dnia %1$s przez cały dzień"], + "_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["Za dzień, dnia %1$s między %2$s - %3$s","Za %n dni dnia %1$s między %2$s - %3$s","Za %n dni dnia %1$s między %2$s - %3$s","Za %n dni dnia %1$s między %2$s - %3$s"], + "_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["Za tydzień dnia %1$s między %2$s - %3$s","Za %n tygodnie dnia %1$s między %2$s - %3$s","Za %n tygodni dnia %1$s między %2$s - %3$s","Za %n tygodni dnia %1$s między %2$s - %3$s"], + "_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["Za miesiąc dnia %1$s między %2$s - %3$s","Za %n miesięcy dnia %1$s między %2$s - %3$s","Za %n miesięcy dnia %1$s między %2$s - %3$s","Za %n miesięcy dnia %1$s między %2$s - %3$s"], + "_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["Za rok dnia %1$s między %2$s - %3$s","Za %n lata dnia %1$s między %2$s - %3$s","Za %n lat dnia %1$s między %2$s - %3$s","Za %n lat dnia %1$s między %2$s - %3$s"], "Could not generate when statement" : "Nie można wygenerować instrukcji when", "Every Day for the entire day" : "Codziennie przez cały dzień", "Every Day for the entire day until %1$s" : "Codziennie przez cały dzień do %1$s", @@ -86,15 +91,21 @@ "Every %1$d Days between %2$s - %3$s until %4$s" : "Co %1$d dni, pomiędzy %2$s - %3$s aż do %4$s", "Could not generate event recurrence statement" : "Nie można wygenerować zestawienia powtórzeń zdarzenia", "Every Week on %1$s for the entire day" : "Każdego tygodnia w %1$s przez cały dzień", + "Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Każdego %1$d miesiąca dnia %2$s między %3$s - %4$s do %5$s", + "Every Year in %1$s on the %2$s for the entire day" : "Co rok w %1$s dnia %2$s przez cały dzień", + "Every Year in %1$s on the %2$s for the entire day until %3$s" : "Co rok w %1$s dnia %2$s przez cały dzień do %3$s", + "Every Year in %1$s on the %2$s between %3$s - %4$s" : "Co roku za %1$s dnia %2$s między %3$s - %4$s", + "Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Co roku za %1$s dnia %2$s między %3$s - %4$s do %5$s", + "Every %1$d Years in %2$s on the %3$s for the entire day" : "Co %1$d lat dnia %2$s o %3$s przez cały dzień", "In the past on %1$s" : "W przeszłości dnia %1$s", - "_In a minute on %1$s_::_In %n minutes on %1$s_" : ["Za minutę dnia %2$s","Za %1$n minuty dnia %2$s","Za %1$n minut dnia %2$s","Za %1$n minut dnia %2$s"], - "_In a hour on %1$s_::_In %n hours on %1$s_" : ["Za godzinę dnia %2$s","Za %1$n godziny dnia %2$s","Za %1$n godzin dnia %2$s","Za %1$n godzin dnia %2$s"], - "_In a day on %1$s_::_In %n days on %1$s_" : ["Za dzień, dnia %2$s","Za %1$n dni dnia %2$s","Za %1$n dni dnia %2$s","Za %1$n dni dnia %2$s"], - "_In a week on %1$s_::_In %n weeks on %1$s_" : ["Za tydzień dnia %2$s","Za %1$n tygodnie dnia %2$s","Za %1$n tygodni dnia %2$s","Za %1$n tygodni dnia %2$s"], - "_In a month on %1$s_::_In %n months on %1$s_" : ["Za miesiąc dnia %2$s","W ciągu %1$n miesięcy dnia %2$s","W ciągu %1$n miesięcy dnia %2$s","W ciągu %1$n miesięcy dnia %2$s"], - "_In a year on %1$s_::_In %n years on %1$s_" : ["Za rok dnia %2$s","Za %1$n lata dnia %2$s","Za %1$n lat dnia %2$s","Za %1$n lat dnia %2$s"], + "_In a minute on %1$s_::_In %n minutes on %1$s_" : ["Za minutę dnia %1$s","Za %n minut dnia %1$s","Za %n minut dnia %1$s","Za %n minut dnia %1$s"], + "_In a hour on %1$s_::_In %n hours on %1$s_" : ["Za godzinę dnia %1$s","Za %n godziny dnia %1$s","Za %n godzin dnia %1$s","Za %n godzin dnia %1$s"], + "_In a day on %1$s_::_In %n days on %1$s_" : ["Za dzień, dnia %1$s","Za %n dni dnia %1$s","Za %n dni dnia %1$s","Za %n dni dnia %1$s"], + "_In a week on %1$s_::_In %n weeks on %1$s_" : ["Za tydzień dnia %1$s","Za %n tygodnie dnia %1$s","Za %n tygodni dnia %1$s","Za %n tygodni dnia %1$s"], + "_In a month on %1$s_::_In %n months on %1$s_" : ["Za miesiąc dnia %1$s","W ciągu %n miesięcy dnia %1$s","W ciągu %n miesięcy dnia %1$s","W ciągu %n miesięcy dnia %1$s"], + "_In a year on %1$s_::_In %n years on %1$s_" : ["Za rok dnia %1$s","Za %n lat dnia %1$s","Za %n lat dnia %1$s","Za %n lat dnia %1$s"], "In the past on %1$s then on %2$s" : "W przeszłości dnia %1$s, a następnie %2$s", - "_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Za minutę dnia %2$s, a następnie %3$s","Za %1$n minuty dnia %2$s, a następnie %3$s","Za %1$n minut dnia %2$s, a następnie %3$s","Za %1$n minut dnia %2$s, a następnie %3$s"], + "_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Za minutę dnia %1$s, a następnie %2$s","Za %n minuty dnia %1$s, a następnie %2$s","Za %n minut dnia %1$s, a następnie %2$s","Za %n minut dnia %1$s, a następnie %2$s"], "Could not generate next recurrence statement" : "Nie można wygenerować następnej instrukcji powtarzania", "Cancelled: %1$s" : "Anulowane: %1$s", "\"%1$s\" has been canceled" : "\"%1$s\" zostało anulowane", diff --git a/apps/dav/l10n/uk.js b/apps/dav/l10n/uk.js index c8beb750ce2..3cc1b76d603 100644 --- a/apps/dav/l10n/uk.js +++ b/apps/dav/l10n/uk.js @@ -73,6 +73,19 @@ OC.L10N.register( "Where: %s" : "Місце: %s", "%1$s via %2$s" : "%1$s через %2$s", "In the past on %1$s for the entire day" : "Раніше у %1$s протягом цілого дня", + "_In a minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["За хвилину на %1$s протягом усього дня","За %n хвилини на %1$s протягом усього дня","За %n хвилин на %1$s протягом усього дня","За %n хвилин на %1$s протягом усього дня"], + "_In a hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["За годину на %1$s протягом усього дня","За %n години на %1$s протягом усього дня","За %n годин на %1$s протягом усього дня","За %n годин на %1$s протягом усього дня"], + "_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["За день на %1$s протягом усього дня","За %n дня на %1$s протягом усього дня","За %n днів на %1$s протягом усього дня","За %n днів на %1$s протягом усього дня"], + "_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Через тиждень на %1$ за весь день","Через %n тижнів на %1$ на весь день","Через %n тижнів на %1$ на весь день","Через %n тижнів на %1$ на весь день"], + "_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["Через місяць на %1$ за весь день","За %n місяців на %1$ за весь день","За %n місяців на %1$ за весь день","За %n місяців на %1$ за весь день"], + "_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Через рік на %1$ за весь день","За %n років на %1$ за весь день","За %n років на %1$ за весь день","За %n років на %1$ за весь день"], + "In the past on %1$s between %2$s - %3$s" : "У минулому на %1$ між %2$ - %3$", + "_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["За хвилину на %1$s між %2$s - %3$s","За %n хвилин на %1$s між %2$s - %3$s","За %n хвилин на %1$s між %2$s - %3$s","За %n хвилин на %1$s між %2$s - %3$s"], + "_In a hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["За годину з %1$s між %2$s - %3$s","За %n годин на %1$s між %2$s - %3$s","За %n годин на %1$s між %2$s - %3$s","За %n годин на %1$s між %2$s - %3$s"], + "_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["За день на %1$s між %2$s - %3$s","За %n днів на %1$s між %2$s - %3$s","За %n днів на %1$s між %2$s - %3$s","За %n днів на %1$s між %2$s - %3$s"], + "_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["За тиждень на %1$ між %2$ - %3$","За %n тижнів на %1$s між %2$s - %3$s","За %n тижнів на %1$s між %2$s - %3$s","За %n тижнів на %1$s між %2$s - %3$s"], + "_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["За місяць на %1$ між %2$ - %3$","За %n місяців на %1$s між %2$s - %3$s","За %n місяців на %1$s між %2$s - %3$s","За %n місяців на %1$s між %2$s - %3$s"], + "_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["За рік на %1$s між %2$s - %3$s","У %n років на %1$s між %2$s - %3$s","У %n років на %1$s між %2$s - %3$s","У %n років на %1$s між %2$s - %3$s"], "Could not generate when statement" : "Не вдалося створити оператор \"коли\"", "Every Day for the entire day" : "Щодня впродовж усього дня", "Every Day for the entire day until %1$s" : "Щодня впродовж усього дня до %1$s", @@ -110,7 +123,26 @@ OC.L10N.register( "On specific dates for the entire day until %1$s" : "У визначені дати впродовж усього дня до %1$s", "On specific dates between %1$s - %2$s until %3$s" : "У визначені дати між %1$s - %2$s до %3$s", "In the past on %1$s" : "Раніше у %1$s", + "_In a minute on %1$s_::_In %n minutes on %1$s_" : ["За хвилину на %1$s","Через %n хвилин на %1$s","Через %n хвилин на %1$s","Через %n хвилин на %1$s"], + "_In a hour on %1$s_::_In %n hours on %1$s_" : ["Через годину на %1$s","Через %n годин на %1$s","Через %n годин на %1$s","Через %n годин на %1$s"], + "_In a day on %1$s_::_In %n days on %1$s_" : ["За день на %1$s","Через %n днів на %1$s","Через %n днів на %1$s","Через %n днів на %1$s"], + "_In a week on %1$s_::_In %n weeks on %1$s_" : ["Через тиждень на %1$s","Через %n тижнів на %1$s","Через %n тижнів на %1$s","Через %n тижнів на %1$s"], + "_In a month on %1$s_::_In %n months on %1$s_" : ["Через місяць на %1$s","За %n місяців на %1$s","За %n місяців на %1$s","За %n місяців на %1$s"], + "_In a year on %1$s_::_In %n years on %1$s_" : ["Через рік на %1$s","Через %n років на %1$s","Через %n років на %1$s","Через %n років на %1$s"], "In the past on %1$s then on %2$s" : "Раніше у %1$s, потім у %2$s", + "_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Через хвилину на %1$, потім на %2$","Через %n хвилин на %1$s, потім на %2$s","Через %n хвилин на %1$s, потім на %2$s","Через %n хвилин на %1$s, потім на %2$s"], + "_In a hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["Через годину на %1$s, потім на %2$s","Через %n годин на %1$s, потім на %2$s","Через %n годин на %1$s, потім на %2$s","Через %n годин на %1$s, потім на %2$s"], + "_In a day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["Через день на %1$, потім на %2$","Через %n днів на %1$s, потім на %2$s","Через %n днів на %1$s, потім на %2$s","Через %n днів на %1$s, потім на %2$s"], + "_In a week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["Через тиждень на %1$, потім на %2$","Через %n тижнів на %1$, потім на %2$","Через %n тижнів на %1$, потім на %2$","Через %n тижнів на %1$, потім на %2$"], + "_In a month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["Через місяць на %1$, потім на %2$","Через %n місяців на %1$, потім на %2$","Через %n місяців на %1$, потім на %2$","Через %n місяців на %1$, потім на %2$"], + "_In a year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["Через рік на %1$, потім на %2$","Через %n років на %1$, потім на %2$","Через %n років на %1$, потім на %2$","Через %n років на %1$, потім на %2$"], + "In the past on %1$s then on %2$s and %3$s" : "У минулому на %1$, потім на %2$ і %3$", + "_In a minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["За хвилину на %1$, потім на %2$ і %3$","Через %n хвилин на %1$s, потім на %2$s і %3$s","Через %n хвилин на %1$s, потім на %2$s і %3$s","Через %n хвилин на %1$s, потім на %2$s і %3$s"], + "_In a hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["Через годину на %1$, потім на %2$ і %3$","Через %n годин на %1$, потім на %2$ і %3$","Через %n годин на %1$, потім на %2$ і %3$","Через %n годин на %1$, потім на %2$ і %3$"], + "_In a day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["Через день на %1$, потім на %2$ і %3$","Через %n днів на %1$, потім на %2$ і %3$","Через %n днів на %1$, потім на %2$ і %3$","Через %n днів на %1$, потім на %2$ і %3$"], + "_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["Через тиждень на %1$, потім на %2$ і %3$","Через %n тижнів на %1$, потім на %2$ і %3$","Через %n тижнів на %1$, потім на %2$ і %3$","Через %n тижнів на %1$, потім на %2$ і %3$"], + "_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["Через місяць на %1$, потім на %2$ і %3$","Через %n місяців на %1$, потім на %2$ і %3$","Через %n місяців на %1$, потім на %2$ і %3$","Через %n місяців на %1$, потім на %2$ і %3$"], + "_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["Через рік на %1$, потім на %2$ і %3$","Через %n років на %1$, потім на %2$ і %3$","Через %n років на %1$, потім на %2$ і %3$","Через %n років на %1$, потім на %2$ і %3$"], "Could not generate next recurrence statement" : "Не вдалося створити оператор наступного повторення", "Cancelled: %1$s" : "Скасовано: %1$s", "\"%1$s\" has been canceled" : "\"%1$s\" скасовано", @@ -218,6 +250,8 @@ OC.L10N.register( "Completed on %s" : "Завершено %s", "Due on %s by %s" : "До %s з боку %s", "Due on %s" : "До %s", + "Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "Ласкаво просимо до календаря Nextcloud!\n\nЦе зразок події — ознайомтеся з гнучкістю планування за допомогою календаря Nextcloud, вносячи будь-які зміни, які вам заманеться!\n\nЗа допомогою календаря Nextcloud ви можете:\n- Легко створювати, редагувати та керувати подіями.\n- Створювати кілька календарів і ділитися ними з колегами, друзями або родиною.\n- Перевіряти доступність і показувати іншим, коли ви зайняті.\n- Безперешкодно інтегруватися з додатками та пристроями через CalDAV.\n- Налаштовувати свій досвід: планувати повторювані події, налаштовувати сповіщення та інші параметри.", + "Example event - open me!" : "Приклад події - відкрий мене!", "System Address Book" : "Системна адресна книга", "The system address book contains contact information for all users in your instance." : "Системна адресна книга містить контактну інформацію для всіх користувачів вашого примірника хмари.", "Enable System Address Book" : "Увімкнути системну адресну книгу", @@ -261,9 +295,22 @@ OC.L10N.register( "Cancel" : "Скасувати", "Import" : "Імпорт", "Error while saving settings" : "Помилка під час збереження налаштувань", + "Contact reset successfully" : "Контакт успішно скинуто", + "Error while resetting contact" : "Помилка під час скидання контакту", + "Contact imported successfully" : "Контакт імпортовано успішно", + "Error while importing contact" : "Помилка під час імпортування контакту", "Import contact" : "Імпортувати контакт", "Reset to default" : "Скинути до типового", "Import contacts" : "Імпортувати контакти", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Імпорт нового файлу .vcf призведе до видалення наявного контакту за замовчуванням і заміни його новим. Чи хочете ви продовжити?", + "Failed to save example event creation setting" : "Не вдалося зберегти приклад налаштування створення події", + "Failed to upload the example event" : "Не вдалося завантажити приклад події", + "Custom example event was saved successfully" : "Приклад користувацької події було успішно збережено", + "Failed to delete the custom example event" : "Не вдалося видалити приклад користувацького події", + "Custom example event was deleted successfully" : "Приклад користувацької події було успішно видалено", + "Import calendar event" : "Імпортувати подію календаря", + "Uploading a new event will overwrite the existing one." : "Завантаження нового заходу призведе до заміни наявного.", + "Upload event" : "Завантажити подію", "Availability" : "Доступність", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Будь ласка, налаштуйте ваші робочі години, щоб інші користувачі могли бачити, коли ви відсутні під час створення зустрічей.", "Absence" : "Відсутність", @@ -280,6 +327,8 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Також надсилайте нагадування користувачам вашого спільного календаря", "Reminders are always sent to organizers and attendees." : "Нагадування завжди надсилаються організаторам і учасникам.", "Enable notifications for events via push" : "Увімкнути push-сповіщення для подій", + "Example content" : "Приклад вмісту", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Приклад вмісту служить для демонстрації функцій Nextcloud. Стандартний вміст постачається разом із Nextcloud і може бути замінений на власний вміст.", "There was an error updating your attendance status." : "Виникла помилка при оновленні вашого статусу учасника.", "Please contact the organizer directly." : "Будь-ласка повідомте організатора.", "Are you accepting the invitation?" : "Чи приймаєте ви запрошення?", diff --git a/apps/dav/l10n/uk.json b/apps/dav/l10n/uk.json index 8ac5f933cf6..ae2f2b370ec 100644 --- a/apps/dav/l10n/uk.json +++ b/apps/dav/l10n/uk.json @@ -71,6 +71,19 @@ "Where: %s" : "Місце: %s", "%1$s via %2$s" : "%1$s через %2$s", "In the past on %1$s for the entire day" : "Раніше у %1$s протягом цілого дня", + "_In a minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["За хвилину на %1$s протягом усього дня","За %n хвилини на %1$s протягом усього дня","За %n хвилин на %1$s протягом усього дня","За %n хвилин на %1$s протягом усього дня"], + "_In a hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["За годину на %1$s протягом усього дня","За %n години на %1$s протягом усього дня","За %n годин на %1$s протягом усього дня","За %n годин на %1$s протягом усього дня"], + "_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["За день на %1$s протягом усього дня","За %n дня на %1$s протягом усього дня","За %n днів на %1$s протягом усього дня","За %n днів на %1$s протягом усього дня"], + "_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Через тиждень на %1$ за весь день","Через %n тижнів на %1$ на весь день","Через %n тижнів на %1$ на весь день","Через %n тижнів на %1$ на весь день"], + "_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["Через місяць на %1$ за весь день","За %n місяців на %1$ за весь день","За %n місяців на %1$ за весь день","За %n місяців на %1$ за весь день"], + "_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Через рік на %1$ за весь день","За %n років на %1$ за весь день","За %n років на %1$ за весь день","За %n років на %1$ за весь день"], + "In the past on %1$s between %2$s - %3$s" : "У минулому на %1$ між %2$ - %3$", + "_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["За хвилину на %1$s між %2$s - %3$s","За %n хвилин на %1$s між %2$s - %3$s","За %n хвилин на %1$s між %2$s - %3$s","За %n хвилин на %1$s між %2$s - %3$s"], + "_In a hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["За годину з %1$s між %2$s - %3$s","За %n годин на %1$s між %2$s - %3$s","За %n годин на %1$s між %2$s - %3$s","За %n годин на %1$s між %2$s - %3$s"], + "_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["За день на %1$s між %2$s - %3$s","За %n днів на %1$s між %2$s - %3$s","За %n днів на %1$s між %2$s - %3$s","За %n днів на %1$s між %2$s - %3$s"], + "_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["За тиждень на %1$ між %2$ - %3$","За %n тижнів на %1$s між %2$s - %3$s","За %n тижнів на %1$s між %2$s - %3$s","За %n тижнів на %1$s між %2$s - %3$s"], + "_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["За місяць на %1$ між %2$ - %3$","За %n місяців на %1$s між %2$s - %3$s","За %n місяців на %1$s між %2$s - %3$s","За %n місяців на %1$s між %2$s - %3$s"], + "_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["За рік на %1$s між %2$s - %3$s","У %n років на %1$s між %2$s - %3$s","У %n років на %1$s між %2$s - %3$s","У %n років на %1$s між %2$s - %3$s"], "Could not generate when statement" : "Не вдалося створити оператор \"коли\"", "Every Day for the entire day" : "Щодня впродовж усього дня", "Every Day for the entire day until %1$s" : "Щодня впродовж усього дня до %1$s", @@ -108,7 +121,26 @@ "On specific dates for the entire day until %1$s" : "У визначені дати впродовж усього дня до %1$s", "On specific dates between %1$s - %2$s until %3$s" : "У визначені дати між %1$s - %2$s до %3$s", "In the past on %1$s" : "Раніше у %1$s", + "_In a minute on %1$s_::_In %n minutes on %1$s_" : ["За хвилину на %1$s","Через %n хвилин на %1$s","Через %n хвилин на %1$s","Через %n хвилин на %1$s"], + "_In a hour on %1$s_::_In %n hours on %1$s_" : ["Через годину на %1$s","Через %n годин на %1$s","Через %n годин на %1$s","Через %n годин на %1$s"], + "_In a day on %1$s_::_In %n days on %1$s_" : ["За день на %1$s","Через %n днів на %1$s","Через %n днів на %1$s","Через %n днів на %1$s"], + "_In a week on %1$s_::_In %n weeks on %1$s_" : ["Через тиждень на %1$s","Через %n тижнів на %1$s","Через %n тижнів на %1$s","Через %n тижнів на %1$s"], + "_In a month on %1$s_::_In %n months on %1$s_" : ["Через місяць на %1$s","За %n місяців на %1$s","За %n місяців на %1$s","За %n місяців на %1$s"], + "_In a year on %1$s_::_In %n years on %1$s_" : ["Через рік на %1$s","Через %n років на %1$s","Через %n років на %1$s","Через %n років на %1$s"], "In the past on %1$s then on %2$s" : "Раніше у %1$s, потім у %2$s", + "_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Через хвилину на %1$, потім на %2$","Через %n хвилин на %1$s, потім на %2$s","Через %n хвилин на %1$s, потім на %2$s","Через %n хвилин на %1$s, потім на %2$s"], + "_In a hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["Через годину на %1$s, потім на %2$s","Через %n годин на %1$s, потім на %2$s","Через %n годин на %1$s, потім на %2$s","Через %n годин на %1$s, потім на %2$s"], + "_In a day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["Через день на %1$, потім на %2$","Через %n днів на %1$s, потім на %2$s","Через %n днів на %1$s, потім на %2$s","Через %n днів на %1$s, потім на %2$s"], + "_In a week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["Через тиждень на %1$, потім на %2$","Через %n тижнів на %1$, потім на %2$","Через %n тижнів на %1$, потім на %2$","Через %n тижнів на %1$, потім на %2$"], + "_In a month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["Через місяць на %1$, потім на %2$","Через %n місяців на %1$, потім на %2$","Через %n місяців на %1$, потім на %2$","Через %n місяців на %1$, потім на %2$"], + "_In a year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["Через рік на %1$, потім на %2$","Через %n років на %1$, потім на %2$","Через %n років на %1$, потім на %2$","Через %n років на %1$, потім на %2$"], + "In the past on %1$s then on %2$s and %3$s" : "У минулому на %1$, потім на %2$ і %3$", + "_In a minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["За хвилину на %1$, потім на %2$ і %3$","Через %n хвилин на %1$s, потім на %2$s і %3$s","Через %n хвилин на %1$s, потім на %2$s і %3$s","Через %n хвилин на %1$s, потім на %2$s і %3$s"], + "_In a hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["Через годину на %1$, потім на %2$ і %3$","Через %n годин на %1$, потім на %2$ і %3$","Через %n годин на %1$, потім на %2$ і %3$","Через %n годин на %1$, потім на %2$ і %3$"], + "_In a day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["Через день на %1$, потім на %2$ і %3$","Через %n днів на %1$, потім на %2$ і %3$","Через %n днів на %1$, потім на %2$ і %3$","Через %n днів на %1$, потім на %2$ і %3$"], + "_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["Через тиждень на %1$, потім на %2$ і %3$","Через %n тижнів на %1$, потім на %2$ і %3$","Через %n тижнів на %1$, потім на %2$ і %3$","Через %n тижнів на %1$, потім на %2$ і %3$"], + "_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["Через місяць на %1$, потім на %2$ і %3$","Через %n місяців на %1$, потім на %2$ і %3$","Через %n місяців на %1$, потім на %2$ і %3$","Через %n місяців на %1$, потім на %2$ і %3$"], + "_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["Через рік на %1$, потім на %2$ і %3$","Через %n років на %1$, потім на %2$ і %3$","Через %n років на %1$, потім на %2$ і %3$","Через %n років на %1$, потім на %2$ і %3$"], "Could not generate next recurrence statement" : "Не вдалося створити оператор наступного повторення", "Cancelled: %1$s" : "Скасовано: %1$s", "\"%1$s\" has been canceled" : "\"%1$s\" скасовано", @@ -216,6 +248,8 @@ "Completed on %s" : "Завершено %s", "Due on %s by %s" : "До %s з боку %s", "Due on %s" : "До %s", + "Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "Ласкаво просимо до календаря Nextcloud!\n\nЦе зразок події — ознайомтеся з гнучкістю планування за допомогою календаря Nextcloud, вносячи будь-які зміни, які вам заманеться!\n\nЗа допомогою календаря Nextcloud ви можете:\n- Легко створювати, редагувати та керувати подіями.\n- Створювати кілька календарів і ділитися ними з колегами, друзями або родиною.\n- Перевіряти доступність і показувати іншим, коли ви зайняті.\n- Безперешкодно інтегруватися з додатками та пристроями через CalDAV.\n- Налаштовувати свій досвід: планувати повторювані події, налаштовувати сповіщення та інші параметри.", + "Example event - open me!" : "Приклад події - відкрий мене!", "System Address Book" : "Системна адресна книга", "The system address book contains contact information for all users in your instance." : "Системна адресна книга містить контактну інформацію для всіх користувачів вашого примірника хмари.", "Enable System Address Book" : "Увімкнути системну адресну книгу", @@ -259,9 +293,22 @@ "Cancel" : "Скасувати", "Import" : "Імпорт", "Error while saving settings" : "Помилка під час збереження налаштувань", + "Contact reset successfully" : "Контакт успішно скинуто", + "Error while resetting contact" : "Помилка під час скидання контакту", + "Contact imported successfully" : "Контакт імпортовано успішно", + "Error while importing contact" : "Помилка під час імпортування контакту", "Import contact" : "Імпортувати контакт", "Reset to default" : "Скинути до типового", "Import contacts" : "Імпортувати контакти", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Імпорт нового файлу .vcf призведе до видалення наявного контакту за замовчуванням і заміни його новим. Чи хочете ви продовжити?", + "Failed to save example event creation setting" : "Не вдалося зберегти приклад налаштування створення події", + "Failed to upload the example event" : "Не вдалося завантажити приклад події", + "Custom example event was saved successfully" : "Приклад користувацької події було успішно збережено", + "Failed to delete the custom example event" : "Не вдалося видалити приклад користувацького події", + "Custom example event was deleted successfully" : "Приклад користувацької події було успішно видалено", + "Import calendar event" : "Імпортувати подію календаря", + "Uploading a new event will overwrite the existing one." : "Завантаження нового заходу призведе до заміни наявного.", + "Upload event" : "Завантажити подію", "Availability" : "Доступність", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Будь ласка, налаштуйте ваші робочі години, щоб інші користувачі могли бачити, коли ви відсутні під час створення зустрічей.", "Absence" : "Відсутність", @@ -278,6 +325,8 @@ "Send reminder notifications to calendar sharees as well" : "Також надсилайте нагадування користувачам вашого спільного календаря", "Reminders are always sent to organizers and attendees." : "Нагадування завжди надсилаються організаторам і учасникам.", "Enable notifications for events via push" : "Увімкнути push-сповіщення для подій", + "Example content" : "Приклад вмісту", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Приклад вмісту служить для демонстрації функцій Nextcloud. Стандартний вміст постачається разом із Nextcloud і може бути замінений на власний вміст.", "There was an error updating your attendance status." : "Виникла помилка при оновленні вашого статусу учасника.", "Please contact the organizer directly." : "Будь-ласка повідомте організатора.", "Are you accepting the invitation?" : "Чи приймаєте ви запрошення?", diff --git a/apps/dav/lib/CalDAV/CalendarImpl.php b/apps/dav/lib/CalDAV/CalendarImpl.php index b79bf7ea2d0..5f912da732e 100644 --- a/apps/dav/lib/CalDAV/CalendarImpl.php +++ b/apps/dav/lib/CalDAV/CalendarImpl.php @@ -156,19 +156,15 @@ class CalendarImpl implements ICreateFromString, IHandleImipMessage, ICalendarIs } /** - * Create a new calendar event for this calendar - * by way of an ICS string - * - * @param string $name the file name - needs to contain the .ics ending - * @param string $calendarData a string containing a valid VEVENT ics - * * @throws CalendarException */ - public function createFromString(string $name, string $calendarData): void { - $server = new InvitationResponseServer(false); - + private function createFromStringInServer( + string $name, + string $calendarData, + \OCA\DAV\Connector\Sabre\Server $server, + ): void { /** @var CustomPrincipalPlugin $plugin */ - $plugin = $server->getServer()->getPlugin('auth'); + $plugin = $server->getPlugin('auth'); // we're working around the previous implementation // that only allowed the public system principal to be used // so set the custom principal here @@ -184,14 +180,14 @@ class CalendarImpl implements ICreateFromString, IHandleImipMessage, ICalendarIs // Force calendar change URI /** @var Schedule\Plugin $schedulingPlugin */ - $schedulingPlugin = $server->getServer()->getPlugin('caldav-schedule'); + $schedulingPlugin = $server->getPlugin('caldav-schedule'); $schedulingPlugin->setPathOfCalendarObjectChange($fullCalendarFilename); $stream = fopen('php://memory', 'rb+'); fwrite($stream, $calendarData); rewind($stream); try { - $server->getServer()->createFile($fullCalendarFilename, $stream); + $server->createFile($fullCalendarFilename, $stream); } catch (Conflict $e) { throw new CalendarException('Could not create new calendar event: ' . $e->getMessage(), 0, $e); } finally { @@ -199,6 +195,16 @@ class CalendarImpl implements ICreateFromString, IHandleImipMessage, ICalendarIs } } + public function createFromString(string $name, string $calendarData): void { + $server = new EmbeddedCalDavServer(false); + $this->createFromStringInServer($name, $calendarData, $server->getServer()); + } + + public function createFromStringMinimal(string $name, string $calendarData): void { + $server = new InvitationResponseServer(false); + $this->createFromStringInServer($name, $calendarData, $server->getServer()); + } + /** * @throws CalendarException */ diff --git a/apps/dav/lib/CalDAV/EmbeddedCalDavServer.php b/apps/dav/lib/CalDAV/EmbeddedCalDavServer.php new file mode 100644 index 00000000000..21d8c06fa99 --- /dev/null +++ b/apps/dav/lib/CalDAV/EmbeddedCalDavServer.php @@ -0,0 +1,118 @@ +<?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; + +use OCA\DAV\AppInfo\PluginManager; +use OCA\DAV\CalDAV\Auth\CustomPrincipalPlugin; +use OCA\DAV\CalDAV\Auth\PublicPrincipalPlugin; +use OCA\DAV\CalDAV\Publishing\PublishPlugin; +use OCA\DAV\Connector\Sabre\AnonymousOptionsPlugin; +use OCA\DAV\Connector\Sabre\BlockLegacyClientPlugin; +use OCA\DAV\Connector\Sabre\CachingTree; +use OCA\DAV\Connector\Sabre\DavAclPlugin; +use OCA\DAV\Connector\Sabre\ExceptionLoggerPlugin; +use OCA\DAV\Connector\Sabre\LockPlugin; +use OCA\DAV\Connector\Sabre\MaintenancePlugin; +use OCA\DAV\Events\SabrePluginAuthInitEvent; +use OCA\DAV\RootCollection; +use OCA\Theming\ThemingDefaults; +use OCP\App\IAppManager; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\IAppConfig; +use OCP\IConfig; +use OCP\IURLGenerator; +use OCP\L10N\IFactory as IL10NFactory; +use OCP\Server; +use Psr\Log\LoggerInterface; + +class EmbeddedCalDavServer { + private readonly \OCA\DAV\Connector\Sabre\Server $server; + + public function __construct(bool $public = true) { + $baseUri = \OC::$WEBROOT . '/remote.php/dav/'; + $logger = Server::get(LoggerInterface::class); + $dispatcher = Server::get(IEventDispatcher::class); + $appConfig = Server::get(IAppConfig::class); + $l10nFactory = Server::get(IL10NFactory::class); + $l10n = $l10nFactory->get('dav'); + + $root = new RootCollection(); + $this->server = new \OCA\DAV\Connector\Sabre\Server(new CachingTree($root)); + + // Add maintenance plugin + $this->server->addPlugin(new MaintenancePlugin(Server::get(IConfig::class), $l10n)); + + // Set URL explicitly due to reverse-proxy situations + $this->server->httpRequest->setUrl($baseUri); + $this->server->setBaseUri($baseUri); + + $this->server->addPlugin(new BlockLegacyClientPlugin( + Server::get(IConfig::class), + Server::get(ThemingDefaults::class), + )); + $this->server->addPlugin(new AnonymousOptionsPlugin()); + + // allow custom principal uri option + if ($public) { + $this->server->addPlugin(new PublicPrincipalPlugin()); + } else { + $this->server->addPlugin(new CustomPrincipalPlugin()); + } + + // allow setup of additional auth backends + $event = new SabrePluginAuthInitEvent($this->server); + $dispatcher->dispatchTyped($event); + + $this->server->addPlugin(new ExceptionLoggerPlugin('webdav', $logger)); + $this->server->addPlugin(new LockPlugin()); + $this->server->addPlugin(new \Sabre\DAV\Sync\Plugin()); + + // acl + $acl = new DavAclPlugin(); + $acl->principalCollectionSet = [ + 'principals/users', 'principals/groups' + ]; + $this->server->addPlugin($acl); + + // calendar plugins + $this->server->addPlugin(new \OCA\DAV\CalDAV\Plugin()); + $this->server->addPlugin(new \Sabre\CalDAV\ICSExportPlugin()); + $this->server->addPlugin(new \OCA\DAV\CalDAV\Schedule\Plugin(Server::get(IConfig::class), Server::get(LoggerInterface::class), Server::get(DefaultCalendarValidator::class))); + $this->server->addPlugin(new \Sabre\CalDAV\Subscriptions\Plugin()); + $this->server->addPlugin(new \Sabre\CalDAV\Notifications\Plugin()); + //$this->server->addPlugin(new \OCA\DAV\DAV\Sharing\Plugin($authBackend, \OC::$server->getRequest())); + $this->server->addPlugin(new PublishPlugin( + Server::get(IConfig::class), + Server::get(IURLGenerator::class) + )); + if ($appConfig->getValueString('dav', 'sendInvitations', 'yes') === 'yes') { + $this->server->addPlugin(Server::get(\OCA\DAV\CalDAV\Schedule\IMipPlugin::class)); + } + + // wait with registering these until auth is handled and the filesystem is setup + $this->server->on('beforeMethod:*', function () use ($root): void { + // register plugins from apps + $pluginManager = new PluginManager( + \OC::$server, + Server::get(IAppManager::class) + ); + foreach ($pluginManager->getAppPlugins() as $appPlugin) { + $this->server->addPlugin($appPlugin); + } + foreach ($pluginManager->getAppCollections() as $appCollection) { + $root->addChild($appCollection); + } + }); + } + + public function getServer(): \OCA\DAV\Connector\Sabre\Server { + return $this->server; + } +} diff --git a/apps/dav/lib/CalDAV/EventReader.php b/apps/dav/lib/CalDAV/EventReader.php index b7dd2889956..ee2b8f33f9a 100644 --- a/apps/dav/lib/CalDAV/EventReader.php +++ b/apps/dav/lib/CalDAV/EventReader.php @@ -46,8 +46,8 @@ class EventReader { 7 => 'July', 8 => 'August', 9 => 'September', 10 => 'October', 11 => 'November', 12 => 'December' ]; protected array $relativePositionNamesMap = [ - 1 => 'First', 2 => 'Second', 3 => 'Third', 4 => 'Fourth', 5 => 'Fifty', - -1 => 'Last', -2 => 'Second Last', -3 => 'Third Last', -4 => 'Fourth Last', -5 => 'Fifty Last' + 1 => 'First', 2 => 'Second', 3 => 'Third', 4 => 'Fourth', 5 => 'Fifth', + -1 => 'Last', -2 => 'Second Last', -3 => 'Third Last', -4 => 'Fourth Last', -5 => 'Fifth Last' ]; /** diff --git a/apps/dav/lib/CalDAV/Status/StatusService.php b/apps/dav/lib/CalDAV/Status/StatusService.php index de19174de58..9ee0e9bf356 100644 --- a/apps/dav/lib/CalDAV/Status/StatusService.php +++ b/apps/dav/lib/CalDAV/Status/StatusService.php @@ -141,7 +141,7 @@ class StatusService { $this->logger->debug("Found $count applicable event(s), changing user status", ['user' => $userId]); $this->userStatusService->setUserStatus( $userId, - IUserStatus::AWAY, + IUserStatus::BUSY, IUserStatus::MESSAGE_CALENDAR_BUSY, true ); diff --git a/apps/dav/lib/CalDAV/UpcomingEventsService.php b/apps/dav/lib/CalDAV/UpcomingEventsService.php index 6614d937ff7..1a8aed5bd71 100644 --- a/apps/dav/lib/CalDAV/UpcomingEventsService.php +++ b/apps/dav/lib/CalDAV/UpcomingEventsService.php @@ -47,7 +47,7 @@ class UpcomingEventsService { $this->userManager->get($userId), ); - return array_map(function (array $event) use ($userId, $calendarAppEnabled) { + return array_filter(array_map(function (array $event) use ($userId, $calendarAppEnabled) { $calendarAppUrl = null; if ($calendarAppEnabled) { @@ -67,6 +67,10 @@ class UpcomingEventsService { $calendarAppUrl = $this->urlGenerator->linkToRouteAbsolute('calendar.view.indexdirect.edit', $arguments); } + if (isset($event['objects'][0]['STATUS']) && $event['objects'][0]['STATUS'][0] === 'CANCELLED') { + return false; + } + return new UpcomingEvent( $event['uri'], ($event['objects'][0]['RECURRENCE-ID'][0] ?? null)?->getTimeStamp(), @@ -76,7 +80,7 @@ class UpcomingEventsService { $event['objects'][0]['LOCATION'][0] ?? null, $calendarAppUrl, ); - }, $events); + }, $events)); } } diff --git a/apps/dav/lib/CardDAV/AddressBook.php b/apps/dav/lib/CardDAV/AddressBook.php index 67c0b7167fa..d2391880585 100644 --- a/apps/dav/lib/CardDAV/AddressBook.php +++ b/apps/dav/lib/CardDAV/AddressBook.php @@ -250,7 +250,12 @@ class AddressBook extends \Sabre\CardDAV\AddressBook implements IShareable, IMov } try { - return $this->carddavBackend->moveCard($sourceNode->getAddressbookId(), (int)$this->addressBookInfo['id'], $sourceNode->getUri(), $sourceNode->getOwner()); + return $this->carddavBackend->moveCard( + $sourceNode->getAddressbookId(), + $sourceNode->getUri(), + $this->getResourceId(), + $targetName, + ); } catch (Exception $e) { // Avoid injecting LoggerInterface everywhere Server::get(LoggerInterface::class)->error('Could not move calendar object: ' . $e->getMessage(), ['exception' => $e]); diff --git a/apps/dav/lib/CardDAV/CardDavBackend.php b/apps/dav/lib/CardDAV/CardDavBackend.php index d1631bb762c..06bd8d8ee2c 100644 --- a/apps/dav/lib/CardDAV/CardDavBackend.php +++ b/apps/dav/lib/CardDAV/CardDavBackend.php @@ -473,7 +473,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { */ public function getCards($addressbookId) { $query = $this->db->getQueryBuilder(); - $query->select(['id', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid']) + $query->select(['id', 'addressbookid', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid']) ->from($this->dbCardsTable) ->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressbookId))); @@ -510,7 +510,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { */ public function getCard($addressBookId, $cardUri) { $query = $this->db->getQueryBuilder(); - $query->select(['id', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid']) + $query->select(['id', 'addressbookid', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid']) ->from($this->dbCardsTable) ->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId))) ->andWhere($query->expr()->eq('uri', $query->createNamedParameter($cardUri))) @@ -553,7 +553,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { $cards = []; $query = $this->db->getQueryBuilder(); - $query->select(['id', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid']) + $query->select(['id', 'addressbookid', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid']) ->from($this->dbCardsTable) ->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId))) ->andWhere($query->expr()->in('uri', $query->createParameter('uri'))); @@ -715,32 +715,33 @@ class CardDavBackend implements BackendInterface, SyncSupport { /** * @throws Exception */ - public function moveCard(int $sourceAddressBookId, int $targetAddressBookId, string $cardUri, string $oldPrincipalUri): bool { - return $this->atomic(function () use ($sourceAddressBookId, $targetAddressBookId, $cardUri, $oldPrincipalUri) { - $card = $this->getCard($sourceAddressBookId, $cardUri); + public function moveCard(int $sourceAddressBookId, string $sourceObjectUri, int $targetAddressBookId, string $tragetObjectUri): bool { + return $this->atomic(function () use ($sourceAddressBookId, $sourceObjectUri, $targetAddressBookId, $tragetObjectUri) { + $card = $this->getCard($sourceAddressBookId, $sourceObjectUri); if (empty($card)) { return false; } + $sourceObjectId = (int)$card['id']; $query = $this->db->getQueryBuilder(); $query->update('cards') ->set('addressbookid', $query->createNamedParameter($targetAddressBookId, IQueryBuilder::PARAM_INT)) - ->where($query->expr()->eq('uri', $query->createNamedParameter($cardUri, IQueryBuilder::PARAM_STR), IQueryBuilder::PARAM_STR)) + ->set('uri', $query->createNamedParameter($tragetObjectUri, IQueryBuilder::PARAM_STR)) + ->where($query->expr()->eq('uri', $query->createNamedParameter($sourceObjectUri, IQueryBuilder::PARAM_STR), IQueryBuilder::PARAM_STR)) ->andWhere($query->expr()->eq('addressbookid', $query->createNamedParameter($sourceAddressBookId, IQueryBuilder::PARAM_INT), IQueryBuilder::PARAM_INT)) ->executeStatement(); - $this->purgeProperties($sourceAddressBookId, (int)$card['id']); - $this->updateProperties($sourceAddressBookId, $card['uri'], $card['carddata']); + $this->purgeProperties($sourceAddressBookId, $sourceObjectId); + $this->updateProperties($targetAddressBookId, $tragetObjectUri, $card['carddata']); - $this->addChange($sourceAddressBookId, $card['uri'], 3); - $this->addChange($targetAddressBookId, $card['uri'], 1); + $this->addChange($sourceAddressBookId, $sourceObjectUri, 3); + $this->addChange($targetAddressBookId, $tragetObjectUri, 1); - $card = $this->getCard($targetAddressBookId, $cardUri); + $card = $this->getCard($targetAddressBookId, $tragetObjectUri); // Card wasn't found - possibly because it was deleted in the meantime by a different client if (empty($card)) { return false; } - $targetAddressBookRow = $this->getAddressBookById($targetAddressBookId); // the address book this card is being moved to does not exist any longer if (empty($targetAddressBookRow)) { diff --git a/apps/dav/lib/Command/GetAbsenceCommand.php b/apps/dav/lib/Command/GetAbsenceCommand.php new file mode 100644 index 00000000000..50d8df4ab38 --- /dev/null +++ b/apps/dav/lib/Command/GetAbsenceCommand.php @@ -0,0 +1,62 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +namespace OCA\DAV\Command; + +use OCA\DAV\Service\AbsenceService; +use OCP\IUserManager; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class GetAbsenceCommand extends Command { + + public function __construct( + private IUserManager $userManager, + private AbsenceService $absenceService, + ) { + parent::__construct(); + } + + protected function configure(): void { + $this->setName('dav:absence:get'); + $this->addArgument( + 'user-id', + InputArgument::REQUIRED, + 'User ID of the affected account' + ); + } + + public function execute(InputInterface $input, OutputInterface $output): int { + $userId = $input->getArgument('user-id'); + + $user = $this->userManager->get($userId); + if ($user === null) { + $output->writeln('<error>User not found</error>'); + return 1; + } + + $absence = $this->absenceService->getAbsence($userId); + if ($absence === null) { + $output->writeln('<info>No absence set</info>'); + return 0; + } + + $output->writeln('<info>Start day:</info> ' . $absence->getFirstDay()); + $output->writeln('<info>End day:</info> ' . $absence->getLastDay()); + $output->writeln('<info>Short message:</info> ' . $absence->getStatus()); + $output->writeln('<info>Message:</info> ' . $absence->getMessage()); + $output->writeln('<info>Replacement user:</info> ' . ($absence->getReplacementUserId() ?? 'none')); + $output->writeln('<info>Replacement display name:</info> ' . ($absence->getReplacementUserDisplayName() ?? 'none')); + + return 0; + } + +} diff --git a/apps/dav/lib/Command/SetAbsenceCommand.php b/apps/dav/lib/Command/SetAbsenceCommand.php new file mode 100644 index 00000000000..bf91a163f95 --- /dev/null +++ b/apps/dav/lib/Command/SetAbsenceCommand.php @@ -0,0 +1,95 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +namespace OCA\DAV\Command; + +use OCA\DAV\Service\AbsenceService; +use OCP\IUserManager; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class SetAbsenceCommand extends Command { + + public function __construct( + private IUserManager $userManager, + private AbsenceService $absenceService, + ) { + parent::__construct(); + } + + protected function configure(): void { + $this->setName('dav:absence:set'); + $this->addArgument( + 'user-id', + InputArgument::REQUIRED, + 'User ID of the affected account' + ); + $this->addArgument( + 'first-day', + InputArgument::REQUIRED, + 'Inclusive start day formatted as YYYY-MM-DD' + ); + $this->addArgument( + 'last-day', + InputArgument::REQUIRED, + 'Inclusive end day formatted as YYYY-MM-DD' + ); + $this->addArgument( + 'short-message', + InputArgument::REQUIRED, + 'Short message' + ); + $this->addArgument( + 'message', + InputArgument::REQUIRED, + 'Message' + ); + $this->addArgument( + 'replacement-user-id', + InputArgument::OPTIONAL, + 'Replacement user id' + ); + } + + public function execute(InputInterface $input, OutputInterface $output): int { + $userId = $input->getArgument('user-id'); + + $user = $this->userManager->get($userId); + if ($user === null) { + $output->writeln('<error>User not found</error>'); + return 1; + } + + $replacementUserId = $input->getArgument('replacement-user-id'); + if ($replacementUserId === null) { + $replacementUser = null; + } else { + $replacementUser = $this->userManager->get($replacementUserId); + if ($replacementUser === null) { + $output->writeln('<error>Replacement user not found</error>'); + return 2; + } + } + + $this->absenceService->createOrUpdateAbsence( + $user, + $input->getArgument('first-day'), + $input->getArgument('last-day'), + $input->getArgument('short-message'), + $input->getArgument('message'), + $replacementUser?->getUID(), + $replacementUser?->getDisplayName(), + ); + + return 0; + } + +} diff --git a/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php b/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php index 9e625ce3184..b59d1373af5 100644 --- a/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php +++ b/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php @@ -156,7 +156,7 @@ class FilesReportPlugin extends ServerPlugin { // to user backends. I.e. the final result may return more results than requested. $resultNodes = $this->processFilterRulesForFileNodes($filterRules, $limit ?? null, $offset ?? null); } catch (TagNotFoundException $e) { - throw new PreconditionFailed('Cannot filter by non-existing tag', 0, $e); + throw new PreconditionFailed('Cannot filter by non-existing tag'); } $results = []; diff --git a/apps/dav/lib/Connector/Sabre/Principal.php b/apps/dav/lib/Connector/Sabre/Principal.php index b61cabedf5f..d6ea9fd887d 100644 --- a/apps/dav/lib/Connector/Sabre/Principal.php +++ b/apps/dav/lib/Connector/Sabre/Principal.php @@ -186,6 +186,9 @@ class Principal implements BackendInterface { if ($this->hasGroups || $needGroups) { $userGroups = $this->groupManager->getUserGroups($user); foreach ($userGroups as $userGroup) { + if ($userGroup->hideFromCollaboration()) { + continue; + } $groups[] = 'principals/groups/' . urlencode($userGroup->getGID()); } } diff --git a/apps/dav/lib/Connector/Sabre/ServerFactory.php b/apps/dav/lib/Connector/Sabre/ServerFactory.php index 214412e1744..3749b506d16 100644 --- a/apps/dav/lib/Connector/Sabre/ServerFactory.php +++ b/apps/dav/lib/Connector/Sabre/ServerFactory.php @@ -184,7 +184,7 @@ class ServerFactory { !$this->config->getSystemValue('debug', false) ) ); - $server->addPlugin(new QuotaPlugin($view, true)); + $server->addPlugin(new QuotaPlugin($view)); $server->addPlugin(new ChecksumUpdatePlugin()); // Allow view-only plugin for webdav requests diff --git a/apps/dav/tests/unit/CardDAV/AddressBookTest.php b/apps/dav/tests/unit/CardDAV/AddressBookTest.php index 85ccb016946..cf28b7b8a8e 100644 --- a/apps/dav/tests/unit/CardDAV/AddressBookTest.php +++ b/apps/dav/tests/unit/CardDAV/AddressBookTest.php @@ -34,7 +34,7 @@ class AddressBookTest extends TestCase { $card = new Card($backend, $addressBookInfo, ['id' => 5, 'carddata' => 'RANDOM VCF DATA', 'uri' => 'something', 'addressbookid' => 23]); $backend->expects($this->once())->method('moveCard') - ->with(23, 666, 'something', 'user1') + ->with(23, 'something', 666, 'new') ->willReturn(true); $addressBook->moveInto('new', 'old', $card); |