summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/dav/l10n/cs.js14
-rw-r--r--apps/dav/l10n/cs.json14
-rw-r--r--apps/dav/l10n/de.js18
-rw-r--r--apps/dav/l10n/de.json18
-rw-r--r--apps/dav/l10n/de_DE.js14
-rw-r--r--apps/dav/l10n/de_DE.json14
-rw-r--r--apps/dav/l10n/el.js10
-rw-r--r--apps/dav/l10n/el.json10
-rw-r--r--apps/dav/l10n/es.js13
-rw-r--r--apps/dav/l10n/es.json13
-rw-r--r--apps/dav/l10n/eu.js2
-rw-r--r--apps/dav/l10n/eu.json2
-rw-r--r--apps/dav/l10n/nl.js9
-rw-r--r--apps/dav/l10n/nl.json9
-rw-r--r--apps/dav/l10n/pl.js14
-rw-r--r--apps/dav/l10n/pl.json14
-rw-r--r--apps/dav/l10n/tr.js14
-rw-r--r--apps/dav/l10n/tr.json14
-rw-r--r--apps/dav/l10n/zh_TW.js14
-rw-r--r--apps/dav/l10n/zh_TW.json14
-rw-r--r--apps/dav/lib/CalDAV/CalDavBackend.php58
-rw-r--r--apps/dav/lib/CalDAV/Calendar.php62
-rw-r--r--apps/dav/lib/CardDAV/AddressBook.php24
-rw-r--r--apps/dav/lib/CardDAV/CardDavBackend.php59
-rw-r--r--apps/dav/lib/Command/MoveCalendar.php44
-rw-r--r--apps/dav/lib/Connector/Sabre/Directory.php4
-rw-r--r--apps/dav/lib/DAV/Sharing/Backend.php80
-rw-r--r--apps/dav/lib/DAV/Sharing/IShareable.php20
-rw-r--r--apps/dav/lib/Events/CalendarShareUpdatedEvent.php39
-rw-r--r--apps/dav/tests/unit/BackgroundJob/CleanupInvitationTokenJobTest.php6
-rw-r--r--apps/dav/tests/unit/Controller/InvitationResponseControllerTest.php6
-rw-r--r--apps/files/js/filelist.js2
-rw-r--r--apps/files/l10n/da.js5
-rw-r--r--apps/files/l10n/da.json5
-rw-r--r--apps/files/l10n/de_DE.js2
-rw-r--r--apps/files/l10n/de_DE.json2
-rw-r--r--apps/files/l10n/es.js1
-rw-r--r--apps/files/l10n/es.json1
-rw-r--r--apps/files_external/l10n/de.js2
-rw-r--r--apps/files_external/l10n/de.json2
-rw-r--r--apps/settings/l10n/de.js20
-rw-r--r--apps/settings/l10n/de.json20
-rw-r--r--apps/settings/l10n/el.js2
-rw-r--r--apps/settings/l10n/el.json2
-rw-r--r--apps/sharebymail/l10n/de.js2
-rw-r--r--apps/sharebymail/l10n/de.json2
-rw-r--r--apps/systemtags/l10n/de.js4
-rw-r--r--apps/systemtags/l10n/de.json4
-rw-r--r--apps/updatenotification/l10n/de.js4
-rw-r--r--apps/updatenotification/l10n/de.json4
-rw-r--r--apps/user_ldap/l10n/de.js4
-rw-r--r--apps/user_ldap/l10n/de.json4
-rw-r--r--apps/workflowengine/l10n/de.js2
-rw-r--r--apps/workflowengine/l10n/de.json2
54 files changed, 453 insertions, 291 deletions
diff --git a/apps/dav/l10n/cs.js b/apps/dav/l10n/cs.js
index 8b2035c5f30..94ec16a08a1 100644
--- a/apps/dav/l10n/cs.js
+++ b/apps/dav/l10n/cs.js
@@ -2,6 +2,7 @@ OC.L10N.register(
"dav",
{
"Calendar" : "Kalendář",
+ "To-dos" : "Zbývá udělat",
"Personal" : "Osobní",
"{actor} created calendar {calendar}" : "{actor} vytvořil(a) kalendář {calendar}",
"You created calendar {calendar}" : "Vytvořili jste kalendář {calendar}",
@@ -36,9 +37,22 @@ OC.L10N.register(
"{actor} restored event {event} of calendar {calendar}" : "{actor} obnovil(a) událost {event} kalendáře {calendar}",
"You restored event {event} of calendar {calendar}" : "Obnovili jste událost {event} kalendáře {calendar}",
"Busy" : "Zaneprázdněn(a)",
+ "{actor} created to-do {todo} in list {calendar}" : "{actor} vytvořil(a) úkol {todo} v seznamu {calendar}",
+ "You created to-do {todo} in list {calendar}" : "Vytvořili jste úkol {todo} v seznamu {calendar}",
+ "{actor} deleted to-do {todo} from list {calendar}" : "{actor} vymazal(a) úkol {todo} ze seznamu {calendar}",
+ "You deleted to-do {todo} from list {calendar}" : "Vymazali jste úkol {todo} ze seznamu {calendar}",
+ "{actor} updated to-do {todo} in list {calendar}" : "{actor} aktualizoval(a) úkol {todo} v seznamu {calendar}",
+ "You updated to-do {todo} in list {calendar}" : "Aktualizovali jste úkol {todo} v seznamu {calendar}",
+ "{actor} solved to-do {todo} in list {calendar}" : "{actor} vyřešil(a) úkol {todo} v seznamu {calendar}",
+ "You solved to-do {todo} in list {calendar}" : "Vyřešili jste úkol {todo} v seznamu {calendar}",
+ "{actor} reopened to-do {todo} in list {calendar}" : "{actor} znovu otevřel(a) úkol {todo} v seznamu {calendar}",
+ "You reopened to-do {todo} in list {calendar}" : "Znovuotevřeli jste úkol {todo} v seznamu {calendar}",
+ "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} přesunul(a) úkol {todo} ze seznamu {sourceCalendar} do seznamu {targetCalendar}",
+ "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Přesunuli jste úkol {todo} ze seznamu {sourceCalendar} do seznamu {targetCalendar}",
"Calendar, contacts and tasks" : "Kalendář, kontakty a úkoly",
"A <strong>calendar</strong> was modified" : "<strong>Kalendář</strong> byl změněn",
"A calendar <strong>event</strong> was modified" : "<strong>Událost</strong> v kalendáři byla změněna",
+ "A calendar <strong>to-do</strong> was modified" : "Kalendář <strong>úkoly</strong> byl upraven",
"Contact birthdays" : "Narozeniny kontaktů",
"Death of %s" : "Datum úmrtí %s",
"Calendar:" : "Kalendář:",
diff --git a/apps/dav/l10n/cs.json b/apps/dav/l10n/cs.json
index a782a40ec52..e711cae9d70 100644
--- a/apps/dav/l10n/cs.json
+++ b/apps/dav/l10n/cs.json
@@ -1,5 +1,6 @@
{ "translations": {
"Calendar" : "Kalendář",
+ "To-dos" : "Zbývá udělat",
"Personal" : "Osobní",
"{actor} created calendar {calendar}" : "{actor} vytvořil(a) kalendář {calendar}",
"You created calendar {calendar}" : "Vytvořili jste kalendář {calendar}",
@@ -34,9 +35,22 @@
"{actor} restored event {event} of calendar {calendar}" : "{actor} obnovil(a) událost {event} kalendáře {calendar}",
"You restored event {event} of calendar {calendar}" : "Obnovili jste událost {event} kalendáře {calendar}",
"Busy" : "Zaneprázdněn(a)",
+ "{actor} created to-do {todo} in list {calendar}" : "{actor} vytvořil(a) úkol {todo} v seznamu {calendar}",
+ "You created to-do {todo} in list {calendar}" : "Vytvořili jste úkol {todo} v seznamu {calendar}",
+ "{actor} deleted to-do {todo} from list {calendar}" : "{actor} vymazal(a) úkol {todo} ze seznamu {calendar}",
+ "You deleted to-do {todo} from list {calendar}" : "Vymazali jste úkol {todo} ze seznamu {calendar}",
+ "{actor} updated to-do {todo} in list {calendar}" : "{actor} aktualizoval(a) úkol {todo} v seznamu {calendar}",
+ "You updated to-do {todo} in list {calendar}" : "Aktualizovali jste úkol {todo} v seznamu {calendar}",
+ "{actor} solved to-do {todo} in list {calendar}" : "{actor} vyřešil(a) úkol {todo} v seznamu {calendar}",
+ "You solved to-do {todo} in list {calendar}" : "Vyřešili jste úkol {todo} v seznamu {calendar}",
+ "{actor} reopened to-do {todo} in list {calendar}" : "{actor} znovu otevřel(a) úkol {todo} v seznamu {calendar}",
+ "You reopened to-do {todo} in list {calendar}" : "Znovuotevřeli jste úkol {todo} v seznamu {calendar}",
+ "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} přesunul(a) úkol {todo} ze seznamu {sourceCalendar} do seznamu {targetCalendar}",
+ "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Přesunuli jste úkol {todo} ze seznamu {sourceCalendar} do seznamu {targetCalendar}",
"Calendar, contacts and tasks" : "Kalendář, kontakty a úkoly",
"A <strong>calendar</strong> was modified" : "<strong>Kalendář</strong> byl změněn",
"A calendar <strong>event</strong> was modified" : "<strong>Událost</strong> v kalendáři byla změněna",
+ "A calendar <strong>to-do</strong> was modified" : "Kalendář <strong>úkoly</strong> byl upraven",
"Contact birthdays" : "Narozeniny kontaktů",
"Death of %s" : "Datum úmrtí %s",
"Calendar:" : "Kalendář:",
diff --git a/apps/dav/l10n/de.js b/apps/dav/l10n/de.js
index 11fb5d539d6..7d11c712fcc 100644
--- a/apps/dav/l10n/de.js
+++ b/apps/dav/l10n/de.js
@@ -2,6 +2,7 @@ OC.L10N.register(
"dav",
{
"Calendar" : "Kalender",
+ "To-dos" : "Aufgaben",
"Personal" : "Persönlich",
"{actor} created calendar {calendar}" : "{actor} hat den Kalender {calendar} erstellt",
"You created calendar {calendar}" : "Du hast den Kalender {calendar} erstellt",
@@ -36,9 +37,22 @@ OC.L10N.register(
"{actor} restored event {event} of calendar {calendar}" : "{actor} hat das Adressbuch {addressbook} mit Dir geteilt",
"You restored event {event} of calendar {calendar}" : "Du hast den Termin {event} im Kalender {calendar} wiederhergestellt",
"Busy" : "Beschäftigt",
+ "{actor} created to-do {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erstellt",
+ "You created to-do {todo} in list {calendar}" : "Du hast eine Aufgabe {todo} in der Liste {calendar} erstellt",
+ "{actor} deleted to-do {todo} from list {calendar}" : "{actor} hat die Aufgabe {todo} aus der Liste {calendar} gelöscht",
+ "You deleted to-do {todo} from list {calendar}" : "Du hast die Aufgabe {todo} aus der Liste {calendar} gelöscht",
+ "{actor} updated to-do {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} aktualisiert",
+ "You updated to-do {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} aktualisiert",
+ "{actor} solved to-do {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erledigt",
+ "You solved to-do {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} erledigt",
+ "{actor} reopened to-do {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} wiedereröffnet",
+ "You reopened to-do {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} wiedereröffnet",
+ "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} hat die Aufgabe {todo} von der Liste {sourceCalendar} in die Liste {targetCalendar} verschoben",
+ "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Du hast die Aufgabe {todo} von der Liste {sourceCalendar} in die Liste {targetCalendar} verschoben",
"Calendar, contacts and tasks" : "Kalender, Kontakte und Aufgaben",
"A <strong>calendar</strong> was modified" : "Ein <strong>Kalender</strong> wurde bearbeitet",
"A calendar <strong>event</strong> was modified" : "Ein Kalender-<strong>Termin</strong> wurde bearbeitet",
+ "A calendar <strong>to-do</strong> was modified" : "Eine Kalender-<strong>Aufgabe</strong> wurde geändert",
"Contact birthdays" : "Geburtstage von Kontakten",
"Death of %s" : "Todestag von %s",
"Calendar:" : "Kalender:",
@@ -153,9 +167,9 @@ OC.L10N.register(
"Send invitations to attendees" : "Einladungen an die Teilnehmer versenden",
"Automatically generate a birthday calendar" : "Automatisch einen Kalender für Geburtstage erstellen",
"Birthday calendars will be generated by a background job." : "Kalender für Geburtstage werden von einem Hintergrund-Auftrag erstellt",
- "Hence they will not be available immediately after enabling but will show up after some time." : "Die Einträge werden nicht sofort angezeigt. Nach der Aktivierung wird es ein wenig dauern bis zur Anzeige.",
+ "Hence they will not be available immediately after enabling but will show up after some time." : "Die Einträge werden nicht sofort angezeigt. Nach der Aktivierung wird es bis zur Anzeige ein wenig dauern.",
"Send notifications for events" : "Sende Benachrichtigungen für Termine",
- "Notifications are sent via background jobs, so these must occur often enough." : "Benachrichtigungen werden von Hintergrundjobs versendet, so dass diese häufig genug ausgeführt werden müssen.",
+ "Notifications are sent via background jobs, so these must occur often enough." : "Benachrichtigungen werden von Hintergrundjobs versendet, so dass diese häufig genug ausgeführt werden.",
"Send reminder notifications to calendar sharees as well" : "Erinnerungsbenachrichtigungen auch an die freigegebenen Kalender senden",
"Reminders are always sent to organizers and attendees." : "Erinnerungen werden immer an Organisatoren und Teilnehmer gesendet.",
"Enable notifications for events via push" : "Benachrichtigungen für Termine per Push aktivieren",
diff --git a/apps/dav/l10n/de.json b/apps/dav/l10n/de.json
index aaba5489f88..8cdfb6ddc6f 100644
--- a/apps/dav/l10n/de.json
+++ b/apps/dav/l10n/de.json
@@ -1,5 +1,6 @@
{ "translations": {
"Calendar" : "Kalender",
+ "To-dos" : "Aufgaben",
"Personal" : "Persönlich",
"{actor} created calendar {calendar}" : "{actor} hat den Kalender {calendar} erstellt",
"You created calendar {calendar}" : "Du hast den Kalender {calendar} erstellt",
@@ -34,9 +35,22 @@
"{actor} restored event {event} of calendar {calendar}" : "{actor} hat das Adressbuch {addressbook} mit Dir geteilt",
"You restored event {event} of calendar {calendar}" : "Du hast den Termin {event} im Kalender {calendar} wiederhergestellt",
"Busy" : "Beschäftigt",
+ "{actor} created to-do {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erstellt",
+ "You created to-do {todo} in list {calendar}" : "Du hast eine Aufgabe {todo} in der Liste {calendar} erstellt",
+ "{actor} deleted to-do {todo} from list {calendar}" : "{actor} hat die Aufgabe {todo} aus der Liste {calendar} gelöscht",
+ "You deleted to-do {todo} from list {calendar}" : "Du hast die Aufgabe {todo} aus der Liste {calendar} gelöscht",
+ "{actor} updated to-do {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} aktualisiert",
+ "You updated to-do {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} aktualisiert",
+ "{actor} solved to-do {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erledigt",
+ "You solved to-do {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} erledigt",
+ "{actor} reopened to-do {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} wiedereröffnet",
+ "You reopened to-do {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} wiedereröffnet",
+ "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} hat die Aufgabe {todo} von der Liste {sourceCalendar} in die Liste {targetCalendar} verschoben",
+ "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Du hast die Aufgabe {todo} von der Liste {sourceCalendar} in die Liste {targetCalendar} verschoben",
"Calendar, contacts and tasks" : "Kalender, Kontakte und Aufgaben",
"A <strong>calendar</strong> was modified" : "Ein <strong>Kalender</strong> wurde bearbeitet",
"A calendar <strong>event</strong> was modified" : "Ein Kalender-<strong>Termin</strong> wurde bearbeitet",
+ "A calendar <strong>to-do</strong> was modified" : "Eine Kalender-<strong>Aufgabe</strong> wurde geändert",
"Contact birthdays" : "Geburtstage von Kontakten",
"Death of %s" : "Todestag von %s",
"Calendar:" : "Kalender:",
@@ -151,9 +165,9 @@
"Send invitations to attendees" : "Einladungen an die Teilnehmer versenden",
"Automatically generate a birthday calendar" : "Automatisch einen Kalender für Geburtstage erstellen",
"Birthday calendars will be generated by a background job." : "Kalender für Geburtstage werden von einem Hintergrund-Auftrag erstellt",
- "Hence they will not be available immediately after enabling but will show up after some time." : "Die Einträge werden nicht sofort angezeigt. Nach der Aktivierung wird es ein wenig dauern bis zur Anzeige.",
+ "Hence they will not be available immediately after enabling but will show up after some time." : "Die Einträge werden nicht sofort angezeigt. Nach der Aktivierung wird es bis zur Anzeige ein wenig dauern.",
"Send notifications for events" : "Sende Benachrichtigungen für Termine",
- "Notifications are sent via background jobs, so these must occur often enough." : "Benachrichtigungen werden von Hintergrundjobs versendet, so dass diese häufig genug ausgeführt werden müssen.",
+ "Notifications are sent via background jobs, so these must occur often enough." : "Benachrichtigungen werden von Hintergrundjobs versendet, so dass diese häufig genug ausgeführt werden.",
"Send reminder notifications to calendar sharees as well" : "Erinnerungsbenachrichtigungen auch an die freigegebenen Kalender senden",
"Reminders are always sent to organizers and attendees." : "Erinnerungen werden immer an Organisatoren und Teilnehmer gesendet.",
"Enable notifications for events via push" : "Benachrichtigungen für Termine per Push aktivieren",
diff --git a/apps/dav/l10n/de_DE.js b/apps/dav/l10n/de_DE.js
index 8b831e6f0d4..01d9a3bee6b 100644
--- a/apps/dav/l10n/de_DE.js
+++ b/apps/dav/l10n/de_DE.js
@@ -2,6 +2,7 @@ OC.L10N.register(
"dav",
{
"Calendar" : "Kalender",
+ "To-dos" : "Aufgaben",
"Personal" : "Persönlich",
"{actor} created calendar {calendar}" : "{actor} hat den Kalender {calendar} erstellt",
"You created calendar {calendar}" : "Sie haben den Kalender {calendar} erstellt",
@@ -36,9 +37,22 @@ OC.L10N.register(
"{actor} restored event {event} of calendar {calendar}" : "{actor} hat den Termin {event} im Kalender {calendar} wiederhergestellt",
"You restored event {event} of calendar {calendar}" : "Sie haben den Termin {event} im Kalender {calendar} wiederhergestellt",
"Busy" : "Beschäftigt",
+ "{actor} created to-do {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erstellt",
+ "You created to-do {todo} in list {calendar}" : "Sie haben eine Aufgabe {todo} in der Liste {calendar} erstellt",
+ "{actor} deleted to-do {todo} from list {calendar}" : "{actor} hat die Aufgabe {todo} aus der Liste {calendar} gelöscht",
+ "You deleted to-do {todo} from list {calendar}" : "Sie haben die Aufgabe {todo} aus der Liste {calendar} gelöscht",
+ "{actor} updated to-do {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} aktualisiert",
+ "You updated to-do {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} aktualisiert",
+ "{actor} solved to-do {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erledigt",
+ "You solved to-do {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} erledigt",
+ "{actor} reopened to-do {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} wiedereröffnet",
+ "You reopened to-do {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} wiedereröffnet",
+ "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} hat die Aufgabe {todo} von der Liste {sourceCalendar} in die Liste {targetCalendar} verschoben",
+ "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Sie haben die Aufgabe {todo} von der Liste {sourceCalendar} in die Liste {targetCalendar} verschoben",
"Calendar, contacts and tasks" : "Kalender, Kontakte und Aufgaben",
"A <strong>calendar</strong> was modified" : "Ein <strong>Kalender</strong> wurde bearbeitet",
"A calendar <strong>event</strong> was modified" : "Ein Kalender-<strong>Termin</strong> wurde bearbeitet",
+ "A calendar <strong>to-do</strong> was modified" : "Eine Kalender-<strong>Aufgabe</strong> wurde bearbeitet",
"Contact birthdays" : "Geburtstage von Kontakten",
"Death of %s" : "Todestag von %s",
"Calendar:" : "Kalender:",
diff --git a/apps/dav/l10n/de_DE.json b/apps/dav/l10n/de_DE.json
index 639f4428d48..77b5cdf374a 100644
--- a/apps/dav/l10n/de_DE.json
+++ b/apps/dav/l10n/de_DE.json
@@ -1,5 +1,6 @@
{ "translations": {
"Calendar" : "Kalender",
+ "To-dos" : "Aufgaben",
"Personal" : "Persönlich",
"{actor} created calendar {calendar}" : "{actor} hat den Kalender {calendar} erstellt",
"You created calendar {calendar}" : "Sie haben den Kalender {calendar} erstellt",
@@ -34,9 +35,22 @@
"{actor} restored event {event} of calendar {calendar}" : "{actor} hat den Termin {event} im Kalender {calendar} wiederhergestellt",
"You restored event {event} of calendar {calendar}" : "Sie haben den Termin {event} im Kalender {calendar} wiederhergestellt",
"Busy" : "Beschäftigt",
+ "{actor} created to-do {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erstellt",
+ "You created to-do {todo} in list {calendar}" : "Sie haben eine Aufgabe {todo} in der Liste {calendar} erstellt",
+ "{actor} deleted to-do {todo} from list {calendar}" : "{actor} hat die Aufgabe {todo} aus der Liste {calendar} gelöscht",
+ "You deleted to-do {todo} from list {calendar}" : "Sie haben die Aufgabe {todo} aus der Liste {calendar} gelöscht",
+ "{actor} updated to-do {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} aktualisiert",
+ "You updated to-do {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} aktualisiert",
+ "{actor} solved to-do {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erledigt",
+ "You solved to-do {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} erledigt",
+ "{actor} reopened to-do {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} wiedereröffnet",
+ "You reopened to-do {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} wiedereröffnet",
+ "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} hat die Aufgabe {todo} von der Liste {sourceCalendar} in die Liste {targetCalendar} verschoben",
+ "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Sie haben die Aufgabe {todo} von der Liste {sourceCalendar} in die Liste {targetCalendar} verschoben",
"Calendar, contacts and tasks" : "Kalender, Kontakte und Aufgaben",
"A <strong>calendar</strong> was modified" : "Ein <strong>Kalender</strong> wurde bearbeitet",
"A calendar <strong>event</strong> was modified" : "Ein Kalender-<strong>Termin</strong> wurde bearbeitet",
+ "A calendar <strong>to-do</strong> was modified" : "Eine Kalender-<strong>Aufgabe</strong> wurde bearbeitet",
"Contact birthdays" : "Geburtstage von Kontakten",
"Death of %s" : "Todestag von %s",
"Calendar:" : "Kalender:",
diff --git a/apps/dav/l10n/el.js b/apps/dav/l10n/el.js
index dc5084f506b..45ce51a502f 100644
--- a/apps/dav/l10n/el.js
+++ b/apps/dav/l10n/el.js
@@ -9,6 +9,7 @@ OC.L10N.register(
"You deleted calendar {calendar}" : "Διαγράψατε το ημερολόγιο {calendar}",
"{actor} updated calendar {calendar}" : "{actor} ενημέρωσε το ημερολόγιο {calendar}",
"You updated calendar {calendar}" : "Έχετε ενημερώσει το ημερολόγιο {calendar}",
+ "You restored calendar {calendar}" : "Επαναφέρατε το ημερολόγιο {calendar}",
"You shared calendar {calendar} as public link" : "Μοιραστήκατε το ημερολόγιο {calendar} με δημόσιο σύνδεσμο.",
"You removed public link for calendar {calendar}" : "Αφαιρέσατε τον δημόσιο σύνδεσμο για το ημερολόγιο {calendar}",
"{actor} shared calendar {calendar} with you" : "{actor} διαμοιράστηκε το ημερολόγιο {calendar} με εσάς",
@@ -64,6 +65,7 @@ OC.L10N.register(
"More options …" : "Περισσότερες επιλογές...",
"More options at %s" : "Περισσότερες επιλογές στο %s",
"Contacts" : "Επαφές",
+ "System is in maintenance mode." : "Το σύστημα βρίσκεται σε λειτουργία συντήρησης.",
"Upgrade needed" : "Απαιτείται αναβάθμιση",
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Το %s θα πρέπει να ρυθμιστεί για να χρησιμοποιεί HTTPS για την χρήση του CalDAV και του CardDAV με το iOS/macOS.",
"Configures a CalDAV account" : "Ρυθμίσεις λογαριασμού CalDAV",
@@ -75,9 +77,12 @@ OC.L10N.register(
"Contacts and groups" : "Επαφές και ομάδες",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Τερματικό WebDAV",
+ "Availability" : "Διαθεσιμότητα",
+ "If you configure your working hours, other users will see when you are out of office when they book a meeting." : "Εάν διαμορφώσετε τις ώρες εργασίας σας, οι άλλοι χρήστες θα βλέπουν πότε είστε εκτός γραφείου όταν κάνουν κράτηση για μια συνάντηση.",
"Time zone:" : "Ζώνη ώρας:",
"to" : "προς",
"Delete slot" : "Διαγραφή θέσης",
+ "No working hours set" : "Δεν έχει οριστεί ωράριο εργασίας",
"Monday" : "Δευτέρα",
"Tuesday" : "Τρίτη",
"Wednesday" : "Τετάρτη",
@@ -86,6 +91,8 @@ OC.L10N.register(
"Saturday" : "Σάββατο",
"Sunday" : "Κυριακή",
"Save" : "Αποθήκευση",
+ "Failed to load availability" : "Αποτυχία φόρτωσης της διαθεσιμότητας",
+ "Failed to save availability" : "Αποτυχία αποθήκευσης της διαθεσιμότητας",
"Calendar server" : "Διακομιστής ημερολογίου",
"Send invitations to attendees" : "Αποστολή προσκλήσεων στους συμμετέχοντες.",
"Automatically generate a birthday calendar" : "Δημιουργία ημερολογίου γενεθλίων αυτόματα",
@@ -93,6 +100,8 @@ OC.L10N.register(
"Hence they will not be available immediately after enabling but will show up after some time." : "Ως εκ τούτου, δεν θα είναι διαθέσιμα αμέσως μετά την ενεργοποίηση, αλλά θα εμφανιστούν μετά από λίγη ώρα.",
"Send notifications for events" : "Αποστολή ειδοποιήσεων για γεγονότα",
"Notifications are sent via background jobs, so these must occur often enough." : "Οι ειδοποιήσεις αποστέλλονται μέσω εργασιών παρασκηνίου, οπότε πρέπει να εμφανίζονται αρκετά συχνά.",
+ "Send reminder notifications to calendar sharees as well" : "Αποστολή ειδοποιήσεων υπενθύμισης και στους κοινούς χρήστες του ημερολογίου",
+ "Reminders are always sent to organizers and attendees." : "Οι υπενθυμίσεις αποστέλλονται πάντα στους διοργανωτές και στους συμμετέχοντες.",
"Enable notifications for events via push" : "Ενεργοποίηση ειδοποιήσεων μέσω push",
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Εγκαταστήστε επίσης την {calendarappstoreopen}Εφαρμογή ημερολογίου{linkclose}, ή {calendardocopen}συνδέστε τον υπολογιστή & το κινητό σας για συγχρονισμό ↗{linkclose}.",
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Παρακαλώ σιγουρευτείτε για την σωστή ρύθμιση {emailopen}του διακομιστή αλληλογραφίας{linkclose}.",
@@ -100,6 +109,7 @@ OC.L10N.register(
"Please contact the organizer directly." : "Παρακαλώ επικοινωνήστε απ' ευθείας με τον διοργανωτή.",
"Are you accepting the invitation?" : "Αποδέχεστε την πρόσκληση;",
"Tentative" : "Δοκιμαστικό",
+ "Number of guests" : "Πλήθος επισκεπτών",
"Comment" : "Σχόλιο",
"Your attendance was updated successfully." : "Η παρουσία σας ενημερώθηκε με επιτυχία.",
"Todos" : "Εργασίες προς εκτέλεση",
diff --git a/apps/dav/l10n/el.json b/apps/dav/l10n/el.json
index d76e8094d4f..019d0e757c9 100644
--- a/apps/dav/l10n/el.json
+++ b/apps/dav/l10n/el.json
@@ -7,6 +7,7 @@
"You deleted calendar {calendar}" : "Διαγράψατε το ημερολόγιο {calendar}",
"{actor} updated calendar {calendar}" : "{actor} ενημέρωσε το ημερολόγιο {calendar}",
"You updated calendar {calendar}" : "Έχετε ενημερώσει το ημερολόγιο {calendar}",
+ "You restored calendar {calendar}" : "Επαναφέρατε το ημερολόγιο {calendar}",
"You shared calendar {calendar} as public link" : "Μοιραστήκατε το ημερολόγιο {calendar} με δημόσιο σύνδεσμο.",
"You removed public link for calendar {calendar}" : "Αφαιρέσατε τον δημόσιο σύνδεσμο για το ημερολόγιο {calendar}",
"{actor} shared calendar {calendar} with you" : "{actor} διαμοιράστηκε το ημερολόγιο {calendar} με εσάς",
@@ -62,6 +63,7 @@
"More options …" : "Περισσότερες επιλογές...",
"More options at %s" : "Περισσότερες επιλογές στο %s",
"Contacts" : "Επαφές",
+ "System is in maintenance mode." : "Το σύστημα βρίσκεται σε λειτουργία συντήρησης.",
"Upgrade needed" : "Απαιτείται αναβάθμιση",
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Το %s θα πρέπει να ρυθμιστεί για να χρησιμοποιεί HTTPS για την χρήση του CalDAV και του CardDAV με το iOS/macOS.",
"Configures a CalDAV account" : "Ρυθμίσεις λογαριασμού CalDAV",
@@ -73,9 +75,12 @@
"Contacts and groups" : "Επαφές και ομάδες",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Τερματικό WebDAV",
+ "Availability" : "Διαθεσιμότητα",
+ "If you configure your working hours, other users will see when you are out of office when they book a meeting." : "Εάν διαμορφώσετε τις ώρες εργασίας σας, οι άλλοι χρήστες θα βλέπουν πότε είστε εκτός γραφείου όταν κάνουν κράτηση για μια συνάντηση.",
"Time zone:" : "Ζώνη ώρας:",
"to" : "προς",
"Delete slot" : "Διαγραφή θέσης",
+ "No working hours set" : "Δεν έχει οριστεί ωράριο εργασίας",
"Monday" : "Δευτέρα",
"Tuesday" : "Τρίτη",
"Wednesday" : "Τετάρτη",
@@ -84,6 +89,8 @@
"Saturday" : "Σάββατο",
"Sunday" : "Κυριακή",
"Save" : "Αποθήκευση",
+ "Failed to load availability" : "Αποτυχία φόρτωσης της διαθεσιμότητας",
+ "Failed to save availability" : "Αποτυχία αποθήκευσης της διαθεσιμότητας",
"Calendar server" : "Διακομιστής ημερολογίου",
"Send invitations to attendees" : "Αποστολή προσκλήσεων στους συμμετέχοντες.",
"Automatically generate a birthday calendar" : "Δημιουργία ημερολογίου γενεθλίων αυτόματα",
@@ -91,6 +98,8 @@
"Hence they will not be available immediately after enabling but will show up after some time." : "Ως εκ τούτου, δεν θα είναι διαθέσιμα αμέσως μετά την ενεργοποίηση, αλλά θα εμφανιστούν μετά από λίγη ώρα.",
"Send notifications for events" : "Αποστολή ειδοποιήσεων για γεγονότα",
"Notifications are sent via background jobs, so these must occur often enough." : "Οι ειδοποιήσεις αποστέλλονται μέσω εργασιών παρασκηνίου, οπότε πρέπει να εμφανίζονται αρκετά συχνά.",
+ "Send reminder notifications to calendar sharees as well" : "Αποστολή ειδοποιήσεων υπενθύμισης και στους κοινούς χρήστες του ημερολογίου",
+ "Reminders are always sent to organizers and attendees." : "Οι υπενθυμίσεις αποστέλλονται πάντα στους διοργανωτές και στους συμμετέχοντες.",
"Enable notifications for events via push" : "Ενεργοποίηση ειδοποιήσεων μέσω push",
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Εγκαταστήστε επίσης την {calendarappstoreopen}Εφαρμογή ημερολογίου{linkclose}, ή {calendardocopen}συνδέστε τον υπολογιστή & το κινητό σας για συγχρονισμό ↗{linkclose}.",
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Παρακαλώ σιγουρευτείτε για την σωστή ρύθμιση {emailopen}του διακομιστή αλληλογραφίας{linkclose}.",
@@ -98,6 +107,7 @@
"Please contact the organizer directly." : "Παρακαλώ επικοινωνήστε απ' ευθείας με τον διοργανωτή.",
"Are you accepting the invitation?" : "Αποδέχεστε την πρόσκληση;",
"Tentative" : "Δοκιμαστικό",
+ "Number of guests" : "Πλήθος επισκεπτών",
"Comment" : "Σχόλιο",
"Your attendance was updated successfully." : "Η παρουσία σας ενημερώθηκε με επιτυχία.",
"Todos" : "Εργασίες προς εκτέλεση",
diff --git a/apps/dav/l10n/es.js b/apps/dav/l10n/es.js
index dad59cef5eb..e0afdf2092b 100644
--- a/apps/dav/l10n/es.js
+++ b/apps/dav/l10n/es.js
@@ -2,6 +2,7 @@ OC.L10N.register(
"dav",
{
"Calendar" : "Calendario",
+ "To-dos" : "Tareas",
"Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
"You created calendar {calendar}" : "Usted creó el calendario {calendar}",
@@ -36,6 +37,18 @@ OC.L10N.register(
"{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}",
"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}",
+ "{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}",
+ "{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}",
+ "{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}",
+ "{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}",
+ "{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}",
"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.",
diff --git a/apps/dav/l10n/es.json b/apps/dav/l10n/es.json
index 4f7161fe3c5..64b74a5c17f 100644
--- a/apps/dav/l10n/es.json
+++ b/apps/dav/l10n/es.json
@@ -1,5 +1,6 @@
{ "translations": {
"Calendar" : "Calendario",
+ "To-dos" : "Tareas",
"Personal" : "Personal",
"{actor} created calendar {calendar}" : "{actor} creó el calendario {calendar}",
"You created calendar {calendar}" : "Usted creó el calendario {calendar}",
@@ -34,6 +35,18 @@
"{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}",
"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}",
+ "{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}",
+ "{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}",
+ "{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}",
+ "{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}",
+ "{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}",
"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.",
diff --git a/apps/dav/l10n/eu.js b/apps/dav/l10n/eu.js
index 63ad0bddcad..8f0868cc37f 100644
--- a/apps/dav/l10n/eu.js
+++ b/apps/dav/l10n/eu.js
@@ -2,6 +2,7 @@ OC.L10N.register(
"dav",
{
"Calendar" : "Egutegia",
+ "To-dos" : "Eginbeharrak",
"Personal" : "Pertsonala",
"{actor} created calendar {calendar}" : "{actor}-k sortutako egutegia: {calendar}",
"You created calendar {calendar}" : "{calendar} egutegia sortu duzu",
@@ -39,6 +40,7 @@ OC.L10N.register(
"Calendar, contacts and tasks" : "Egutegia, kontaktuak eta atazak",
"A <strong>calendar</strong> was modified" : "Egutegia aldatu da",
"A calendar <strong>event</strong> was modified" : "Egutegiaren <strong>gertaera</strong> bat aldatu da",
+ "A calendar <strong>to-do</strong> was modified" : "Egutegi baten <strong>eginbeharra</strong> aldatu da",
"Contact birthdays" : "Kontaktuen urtebetetzeak",
"Death of %s" : "%s(r)en heriotza",
"Calendar:" : "Egutegia:",
diff --git a/apps/dav/l10n/eu.json b/apps/dav/l10n/eu.json
index 336df305b1c..90faed77b8b 100644
--- a/apps/dav/l10n/eu.json
+++ b/apps/dav/l10n/eu.json
@@ -1,5 +1,6 @@
{ "translations": {
"Calendar" : "Egutegia",
+ "To-dos" : "Eginbeharrak",
"Personal" : "Pertsonala",
"{actor} created calendar {calendar}" : "{actor}-k sortutako egutegia: {calendar}",
"You created calendar {calendar}" : "{calendar} egutegia sortu duzu",
@@ -37,6 +38,7 @@
"Calendar, contacts and tasks" : "Egutegia, kontaktuak eta atazak",
"A <strong>calendar</strong> was modified" : "Egutegia aldatu da",
"A calendar <strong>event</strong> was modified" : "Egutegiaren <strong>gertaera</strong> bat aldatu da",
+ "A calendar <strong>to-do</strong> was modified" : "Egutegi baten <strong>eginbeharra</strong> aldatu da",
"Contact birthdays" : "Kontaktuen urtebetetzeak",
"Death of %s" : "%s(r)en heriotza",
"Calendar:" : "Egutegia:",
diff --git a/apps/dav/l10n/nl.js b/apps/dav/l10n/nl.js
index 1aef3e58c15..2d466feeb98 100644
--- a/apps/dav/l10n/nl.js
+++ b/apps/dav/l10n/nl.js
@@ -2,6 +2,7 @@ OC.L10N.register(
"dav",
{
"Calendar" : "Agenda",
+ "To-dos" : "Taken",
"Personal" : "Persoonlijk",
"{actor} created calendar {calendar}" : "{actor} creëerde agenda {calendar}",
"You created calendar {calendar}" : "Jij creëerde agenda {calendar}",
@@ -34,6 +35,14 @@ OC.L10N.register(
"{actor} restored event {event} of calendar {calendar}" : "{actor} herstelde afspraak {event} in agenda {calendar}",
"You restored event {event} of calendar {calendar}" : "Je herstelde afspraak {event} in agenda {calendar}",
"Busy" : "Bezig",
+ "{actor} created to-do {todo} in list {calendar}" : "{actor} voegde de taak {todo} to aan de lijst {calendar}",
+ "You created to-do {todo} in list {calendar}" : "Je voegde de taak {todo} toe aan de lijst {calendar}",
+ "{actor} deleted to-do {todo} from list {calendar}" : "{actor} verwijderde de taak {todo} van de lijst {calendar}",
+ "You deleted to-do {todo} from list {calendar}" : "Jij verwijderde de taak {todo} van de lijst {calendar}",
+ "{actor} updated to-do {todo} in list {calendar}" : "{actor} paste de taak {todo} in de lijst {calendar} aan",
+ "You updated to-do {todo} in list {calendar}" : "Jij paste de taak {todo} in de lijst {calendar} aan",
+ "{actor} solved to-do {todo} in list {calendar}" : "{actor} voltooide de taak {todo} in de lijst {calendar}",
+ "You solved to-do {todo} in list {calendar}" : "Jij voltooide de taak {todo} in de lijst {calendar}",
"Calendar, contacts and tasks" : "Agenda, contactpersonen en taken",
"A <strong>calendar</strong> was modified" : "Een <strong>agenda</strong> is aangepast",
"A calendar <strong>event</strong> was modified" : "Een agenda <strong>gebeurtenis</strong> is aangepast",
diff --git a/apps/dav/l10n/nl.json b/apps/dav/l10n/nl.json
index 2b78505a9c2..13b40b33bdc 100644
--- a/apps/dav/l10n/nl.json
+++ b/apps/dav/l10n/nl.json
@@ -1,5 +1,6 @@
{ "translations": {
"Calendar" : "Agenda",
+ "To-dos" : "Taken",
"Personal" : "Persoonlijk",
"{actor} created calendar {calendar}" : "{actor} creëerde agenda {calendar}",
"You created calendar {calendar}" : "Jij creëerde agenda {calendar}",
@@ -32,6 +33,14 @@
"{actor} restored event {event} of calendar {calendar}" : "{actor} herstelde afspraak {event} in agenda {calendar}",
"You restored event {event} of calendar {calendar}" : "Je herstelde afspraak {event} in agenda {calendar}",
"Busy" : "Bezig",
+ "{actor} created to-do {todo} in list {calendar}" : "{actor} voegde de taak {todo} to aan de lijst {calendar}",
+ "You created to-do {todo} in list {calendar}" : "Je voegde de taak {todo} toe aan de lijst {calendar}",
+ "{actor} deleted to-do {todo} from list {calendar}" : "{actor} verwijderde de taak {todo} van de lijst {calendar}",
+ "You deleted to-do {todo} from list {calendar}" : "Jij verwijderde de taak {todo} van de lijst {calendar}",
+ "{actor} updated to-do {todo} in list {calendar}" : "{actor} paste de taak {todo} in de lijst {calendar} aan",
+ "You updated to-do {todo} in list {calendar}" : "Jij paste de taak {todo} in de lijst {calendar} aan",
+ "{actor} solved to-do {todo} in list {calendar}" : "{actor} voltooide de taak {todo} in de lijst {calendar}",
+ "You solved to-do {todo} in list {calendar}" : "Jij voltooide de taak {todo} in de lijst {calendar}",
"Calendar, contacts and tasks" : "Agenda, contactpersonen en taken",
"A <strong>calendar</strong> was modified" : "Een <strong>agenda</strong> is aangepast",
"A calendar <strong>event</strong> was modified" : "Een agenda <strong>gebeurtenis</strong> is aangepast",
diff --git a/apps/dav/l10n/pl.js b/apps/dav/l10n/pl.js
index 65bf52496aa..e119ea59d7b 100644
--- a/apps/dav/l10n/pl.js
+++ b/apps/dav/l10n/pl.js
@@ -2,6 +2,7 @@ OC.L10N.register(
"dav",
{
"Calendar" : "Kalendarz",
+ "To-dos" : "Do zrobienia",
"Personal" : "Osobiste",
"{actor} created calendar {calendar}" : "{actor} utworzył kalendarz {calendar}",
"You created calendar {calendar}" : "Utworzyłeś kalendarz {calendar}",
@@ -36,9 +37,22 @@ OC.L10N.register(
"{actor} restored event {event} of calendar {calendar}" : "{actor} przywrócił wydarzenie {event} z kalendarza {calendar}",
"You restored event {event} of calendar {calendar}" : "Przywróciłeś wydarzenie {event} z kalendarza {calendar}",
"Busy" : "Czekaj",
+ "{actor} created to-do {todo} in list {calendar}" : "{actor} utworzył zadanie {todo} na liście {calendar}",
+ "You created to-do {todo} in list {calendar}" : "Utworzyłeś zadanie {todo} na liście {calendar}",
+ "{actor} deleted to-do {todo} from list {calendar}" : "{actor} usunął zadanie {todo} z listy {calendar}",
+ "You deleted to-do {todo} from list {calendar}" : "Usunąłeś zadanie {todo} z listy {calendar}",
+ "{actor} updated to-do {todo} in list {calendar}" : "{actor} zaktualizował zadanie {todo} na liście {calendar}",
+ "You updated to-do {todo} in list {calendar}" : "Zaktualizowałeś zadanie {todo} na liście {calendar}",
+ "{actor} solved to-do {todo} in list {calendar}" : "{actor} zakończył zadanie {todo} na liście {calendar}",
+ "You solved to-do {todo} in list {calendar}" : "Zakończyłeś zadanie {todo} na liście {calendar}",
+ "{actor} reopened to-do {todo} in list {calendar}" : "{actor} otworzył ponownie zadanie {todo} na liście {calendar}",
+ "You reopened to-do {todo} in list {calendar}" : "Otworzyłeś ponownie zadanie {todo} na liście {calendar}",
+ "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} przeniósł zadanie {todo} z listy {sourceCalendar} na listę {targetCalendar}",
+ "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Przeniosłeś zadanie {todo} z listy {sourceCalendar} na listę {targetCalendar}",
"Calendar, contacts and tasks" : "Kalendarz, kontakty i zadania",
"A <strong>calendar</strong> was modified" : "<strong>Kalendarz</strong> został zmodyfikowany",
"A calendar <strong>event</strong> was modified" : "<strong>Zdarzenie</strong> kalendarza zostało zmodyfikowane",
+ "A calendar <strong>to-do</strong> was modified" : "Kalendarz <strong>zadań</strong> został zmieniony",
"Contact birthdays" : "Urodziny kontaktu",
"Death of %s" : "Śmierć %s",
"Calendar:" : "Kalendarz:",
diff --git a/apps/dav/l10n/pl.json b/apps/dav/l10n/pl.json
index f2895b02e54..a739cbaaef4 100644
--- a/apps/dav/l10n/pl.json
+++ b/apps/dav/l10n/pl.json
@@ -1,5 +1,6 @@
{ "translations": {
"Calendar" : "Kalendarz",
+ "To-dos" : "Do zrobienia",
"Personal" : "Osobiste",
"{actor} created calendar {calendar}" : "{actor} utworzył kalendarz {calendar}",
"You created calendar {calendar}" : "Utworzyłeś kalendarz {calendar}",
@@ -34,9 +35,22 @@
"{actor} restored event {event} of calendar {calendar}" : "{actor} przywrócił wydarzenie {event} z kalendarza {calendar}",
"You restored event {event} of calendar {calendar}" : "Przywróciłeś wydarzenie {event} z kalendarza {calendar}",
"Busy" : "Czekaj",
+ "{actor} created to-do {todo} in list {calendar}" : "{actor} utworzył zadanie {todo} na liście {calendar}",
+ "You created to-do {todo} in list {calendar}" : "Utworzyłeś zadanie {todo} na liście {calendar}",
+ "{actor} deleted to-do {todo} from list {calendar}" : "{actor} usunął zadanie {todo} z listy {calendar}",
+ "You deleted to-do {todo} from list {calendar}" : "Usunąłeś zadanie {todo} z listy {calendar}",
+ "{actor} updated to-do {todo} in list {calendar}" : "{actor} zaktualizował zadanie {todo} na liście {calendar}",
+ "You updated to-do {todo} in list {calendar}" : "Zaktualizowałeś zadanie {todo} na liście {calendar}",
+ "{actor} solved to-do {todo} in list {calendar}" : "{actor} zakończył zadanie {todo} na liście {calendar}",
+ "You solved to-do {todo} in list {calendar}" : "Zakończyłeś zadanie {todo} na liście {calendar}",
+ "{actor} reopened to-do {todo} in list {calendar}" : "{actor} otworzył ponownie zadanie {todo} na liście {calendar}",
+ "You reopened to-do {todo} in list {calendar}" : "Otworzyłeś ponownie zadanie {todo} na liście {calendar}",
+ "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} przeniósł zadanie {todo} z listy {sourceCalendar} na listę {targetCalendar}",
+ "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Przeniosłeś zadanie {todo} z listy {sourceCalendar} na listę {targetCalendar}",
"Calendar, contacts and tasks" : "Kalendarz, kontakty i zadania",
"A <strong>calendar</strong> was modified" : "<strong>Kalendarz</strong> został zmodyfikowany",
"A calendar <strong>event</strong> was modified" : "<strong>Zdarzenie</strong> kalendarza zostało zmodyfikowane",
+ "A calendar <strong>to-do</strong> was modified" : "Kalendarz <strong>zadań</strong> został zmieniony",
"Contact birthdays" : "Urodziny kontaktu",
"Death of %s" : "Śmierć %s",
"Calendar:" : "Kalendarz:",
diff --git a/apps/dav/l10n/tr.js b/apps/dav/l10n/tr.js
index e68fd0a1c9f..c589928a5c3 100644
--- a/apps/dav/l10n/tr.js
+++ b/apps/dav/l10n/tr.js
@@ -2,6 +2,7 @@ OC.L10N.register(
"dav",
{
"Calendar" : "Takvim",
+ "To-dos" : "Yapılacak işler",
"Personal" : "Kişisel",
"{actor} created calendar {calendar}" : "{actor}, {calendar} takvimini ekledi",
"You created calendar {calendar}" : "{calendar} takvimini eklediniz",
@@ -36,9 +37,22 @@ OC.L10N.register(
"{actor} restored event {event} of calendar {calendar}" : "{actor}, {calendar} takvimindeki {event} etkinliğini geri yükledi",
"You restored event {event} of calendar {calendar}" : "{calendar} takvimindeki {event} etkinliğini geri yüklediniz",
"Busy" : "Meşgul",
+ "{actor} created to-do {todo} in list {calendar}" : "{actor}, {calendar} takvimi listesine {todo} yapılacak işini ekledi",
+ "You created to-do {todo} in list {calendar}" : "{calendar} takvimi listesine {todo} yapılacak işini eklediniz",
+ "{actor} deleted to-do {todo} from list {calendar}" : "{actor}, {calendar} takvimi listesinden {todo} yapılacak işini sildi",
+ "You deleted to-do {todo} from list {calendar}" : "{calendar} takvimi listesinden {todo} yapılacak işini sildiniz",
+ "{actor} updated to-do {todo} in list {calendar}" : "{actor}, {calendar} takvimi listesindeki {todo} yapılacak işini güncelledi",
+ "You updated to-do {todo} in list {calendar}" : "{calendar} takvimi listesindeki {todo} yapılacak işini güncellediniz",
+ "{actor} solved to-do {todo} in list {calendar}" : "{actor}, {calendar} takvimi listesindeki {todo} yapılacak işini tamamladı",
+ "You solved to-do {todo} in list {calendar}" : "{calendar} takvimi listesindeki {todo} yapılacak işini tamamladınız",
+ "{actor} reopened to-do {todo} in list {calendar}" : "{actor}, {calendar} takvimi listesindeki {todo} yapılacak işini yeniden başlattı",
+ "You reopened to-do {todo} in list {calendar}" : "{calendar} takvimi listesindeki {todo} yapılacak işini yeniden başlattınız",
+ "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor}, {todo} yapılacak işini {sourceCalendar} listesinden {targetCalendar} listesine taşıdı",
+ "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{todo} yapılacak işini {sourceCalendar} listesinden {targetCalendar} listesine taşıdınız",
"Calendar, contacts and tasks" : "Takvim, kişiler ve görevler",
"A <strong>calendar</strong> was modified" : "Bir <strong>takvim</strong> düzenlendi",
"A calendar <strong>event</strong> was modified" : "Bir takvim <strong>etkinliği</strong> düzenlendi",
+ "A calendar <strong>to-do</strong> was modified" : "Bir takvim <strong>yapılacak işi</strong> düzenlendi",
"Contact birthdays" : "Kişi doğum günleri",
"Death of %s" : "%s ölümü",
"Calendar:" : "Takvim:",
diff --git a/apps/dav/l10n/tr.json b/apps/dav/l10n/tr.json
index b470635f500..4319f616101 100644
--- a/apps/dav/l10n/tr.json
+++ b/apps/dav/l10n/tr.json
@@ -1,5 +1,6 @@
{ "translations": {
"Calendar" : "Takvim",
+ "To-dos" : "Yapılacak işler",
"Personal" : "Kişisel",
"{actor} created calendar {calendar}" : "{actor}, {calendar} takvimini ekledi",
"You created calendar {calendar}" : "{calendar} takvimini eklediniz",
@@ -34,9 +35,22 @@
"{actor} restored event {event} of calendar {calendar}" : "{actor}, {calendar} takvimindeki {event} etkinliğini geri yükledi",
"You restored event {event} of calendar {calendar}" : "{calendar} takvimindeki {event} etkinliğini geri yüklediniz",
"Busy" : "Meşgul",
+ "{actor} created to-do {todo} in list {calendar}" : "{actor}, {calendar} takvimi listesine {todo} yapılacak işini ekledi",
+ "You created to-do {todo} in list {calendar}" : "{calendar} takvimi listesine {todo} yapılacak işini eklediniz",
+ "{actor} deleted to-do {todo} from list {calendar}" : "{actor}, {calendar} takvimi listesinden {todo} yapılacak işini sildi",
+ "You deleted to-do {todo} from list {calendar}" : "{calendar} takvimi listesinden {todo} yapılacak işini sildiniz",
+ "{actor} updated to-do {todo} in list {calendar}" : "{actor}, {calendar} takvimi listesindeki {todo} yapılacak işini güncelledi",
+ "You updated to-do {todo} in list {calendar}" : "{calendar} takvimi listesindeki {todo} yapılacak işini güncellediniz",
+ "{actor} solved to-do {todo} in list {calendar}" : "{actor}, {calendar} takvimi listesindeki {todo} yapılacak işini tamamladı",
+ "You solved to-do {todo} in list {calendar}" : "{calendar} takvimi listesindeki {todo} yapılacak işini tamamladınız",
+ "{actor} reopened to-do {todo} in list {calendar}" : "{actor}, {calendar} takvimi listesindeki {todo} yapılacak işini yeniden başlattı",
+ "You reopened to-do {todo} in list {calendar}" : "{calendar} takvimi listesindeki {todo} yapılacak işini yeniden başlattınız",
+ "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor}, {todo} yapılacak işini {sourceCalendar} listesinden {targetCalendar} listesine taşıdı",
+ "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{todo} yapılacak işini {sourceCalendar} listesinden {targetCalendar} listesine taşıdınız",
"Calendar, contacts and tasks" : "Takvim, kişiler ve görevler",
"A <strong>calendar</strong> was modified" : "Bir <strong>takvim</strong> düzenlendi",
"A calendar <strong>event</strong> was modified" : "Bir takvim <strong>etkinliği</strong> düzenlendi",
+ "A calendar <strong>to-do</strong> was modified" : "Bir takvim <strong>yapılacak işi</strong> düzenlendi",
"Contact birthdays" : "Kişi doğum günleri",
"Death of %s" : "%s ölümü",
"Calendar:" : "Takvim:",
diff --git a/apps/dav/l10n/zh_TW.js b/apps/dav/l10n/zh_TW.js
index 9cdc23c09f2..8db0590f231 100644
--- a/apps/dav/l10n/zh_TW.js
+++ b/apps/dav/l10n/zh_TW.js
@@ -2,6 +2,7 @@ OC.L10N.register(
"dav",
{
"Calendar" : "日曆",
+ "To-dos" : "待辦事項",
"Personal" : "個人",
"{actor} created calendar {calendar}" : "{actor} 建立了日曆 {calendar}",
"You created calendar {calendar}" : "您建立了日曆 {calendar}",
@@ -36,9 +37,22 @@ OC.L10N.register(
"{actor} restored event {event} of calendar {calendar}" : "{actor} 復原了日曆 {calendar} 中的活動 {event}",
"You restored event {event} of calendar {calendar}" : "您復原了日曆 {calendar} 中的活動 {event}",
"Busy" : "忙碌",
+ "{actor} created to-do {todo} in list {calendar}" : "{actor} 在清單 {calendar} 中建立了待辦事項 {todo}",
+ "You created to-do {todo} in list {calendar}" : "您在清單 {calendar} 中建立了待辦事項 {todo}",
+ "{actor} deleted to-do {todo} from list {calendar}" : "{actor} 從清單 {calendar} 中刪除了待辦事項 {todo}",
+ "You deleted to-do {todo} from list {calendar}" : "您從清單 {calendar} 中刪除了待辦事項 {todo}",
+ "{actor} updated to-do {todo} in list {calendar}" : "{actor} 在清單 {calendar} 中更新了待辦事項 {todo}",
+ "You updated to-do {todo} in list {calendar}" : "您在清單 {calendar} 中更新了待辦事項 {todo}",
+ "{actor} solved to-do {todo} in list {calendar}" : "{actor} 在清單 {calendar} 中解決了待辦事項 {todo}",
+ "You solved to-do {todo} in list {calendar}" : "您在清單 {calendar} 中解決了待辦事項 {todo}",
+ "{actor} reopened to-do {todo} in list {calendar}" : "{actor} 在清單 {calendar} 中重新開啟了待辦事項 {todo}",
+ "You reopened to-do {todo} in list {calendar}" : "您在清單 {calendar} 中重新開啟了待辦事項 {todo}",
+ "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} 將待辦事項 {todo} 從清單 {sourceCalendar} 移動到清單 {targetCalendar}",
+ "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "您將待辦事項 {todo} 從清單 {sourceCalendar} 移動到清單 {targetCalendar}",
"Calendar, contacts and tasks" : "日曆、通訊錄與工作項目",
"A <strong>calendar</strong> was modified" : "一個<strong>日曆</strong>被更動",
"A calendar <strong>event</strong> was modified" : "一個日曆<strong>活動</strong>被更動",
+ "A calendar <strong>to-do</strong> was modified" : "已修改一個行事曆<strong>待辦事項</strong>",
"Contact birthdays" : "聯絡人生日",
"Death of %s" : "%s 逝世",
"Calendar:" : "日曆:",
diff --git a/apps/dav/l10n/zh_TW.json b/apps/dav/l10n/zh_TW.json
index 26f8911bfff..6cfa0996d76 100644
--- a/apps/dav/l10n/zh_TW.json
+++ b/apps/dav/l10n/zh_TW.json
@@ -1,5 +1,6 @@
{ "translations": {
"Calendar" : "日曆",
+ "To-dos" : "待辦事項",
"Personal" : "個人",
"{actor} created calendar {calendar}" : "{actor} 建立了日曆 {calendar}",
"You created calendar {calendar}" : "您建立了日曆 {calendar}",
@@ -34,9 +35,22 @@
"{actor} restored event {event} of calendar {calendar}" : "{actor} 復原了日曆 {calendar} 中的活動 {event}",
"You restored event {event} of calendar {calendar}" : "您復原了日曆 {calendar} 中的活動 {event}",
"Busy" : "忙碌",
+ "{actor} created to-do {todo} in list {calendar}" : "{actor} 在清單 {calendar} 中建立了待辦事項 {todo}",
+ "You created to-do {todo} in list {calendar}" : "您在清單 {calendar} 中建立了待辦事項 {todo}",
+ "{actor} deleted to-do {todo} from list {calendar}" : "{actor} 從清單 {calendar} 中刪除了待辦事項 {todo}",
+ "You deleted to-do {todo} from list {calendar}" : "您從清單 {calendar} 中刪除了待辦事項 {todo}",
+ "{actor} updated to-do {todo} in list {calendar}" : "{actor} 在清單 {calendar} 中更新了待辦事項 {todo}",
+ "You updated to-do {todo} in list {calendar}" : "您在清單 {calendar} 中更新了待辦事項 {todo}",
+ "{actor} solved to-do {todo} in list {calendar}" : "{actor} 在清單 {calendar} 中解決了待辦事項 {todo}",
+ "You solved to-do {todo} in list {calendar}" : "您在清單 {calendar} 中解決了待辦事項 {todo}",
+ "{actor} reopened to-do {todo} in list {calendar}" : "{actor} 在清單 {calendar} 中重新開啟了待辦事項 {todo}",
+ "You reopened to-do {todo} in list {calendar}" : "您在清單 {calendar} 中重新開啟了待辦事項 {todo}",
+ "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} 將待辦事項 {todo} 從清單 {sourceCalendar} 移動到清單 {targetCalendar}",
+ "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "您將待辦事項 {todo} 從清單 {sourceCalendar} 移動到清單 {targetCalendar}",
"Calendar, contacts and tasks" : "日曆、通訊錄與工作項目",
"A <strong>calendar</strong> was modified" : "一個<strong>日曆</strong>被更動",
"A calendar <strong>event</strong> was modified" : "一個日曆<strong>活動</strong>被更動",
+ "A calendar <strong>to-do</strong> was modified" : "已修改一個行事曆<strong>待辦事項</strong>",
"Contact birthdays" : "聯絡人生日",
"Death of %s" : "%s 逝世",
"Calendar:" : "日曆:",
diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php
index 3ab047d5183..7e13b3ba8fd 100644
--- a/apps/dav/lib/CalDAV/CalDavBackend.php
+++ b/apps/dav/lib/CalDAV/CalDavBackend.php
@@ -674,10 +674,9 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
}
/**
- * @param $calendarId
- * @return array|null
+ * @return array{id: int, uri: string, '{http://calendarserver.org/ns/}getctag': string, '{http://sabredav.org/ns}sync-token': int, '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set': SupportedCalendarComponentSet, '{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp': ScheduleCalendarTransp }|null
*/
- public function getCalendarById($calendarId) {
+ public function getCalendarById(int $calendarId): ?array {
$fields = array_column($this->propertyMap, 0);
$fields[] = 'id';
$fields[] = 'uri';
@@ -710,7 +709,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
'uri' => $row['uri'],
'principaluri' => $this->convertPrincipal($row['principaluri'], !$this->legacyEndpoint),
'{' . Plugin::NS_CALENDARSERVER . '}getctag' => 'http://sabre.io/ns/sync/' . ($row['synctoken']?$row['synctoken']:'0'),
- '{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
+ '{http://sabredav.org/ns}sync-token' => $row['synctoken'] ?? 0,
'{' . Plugin::NS_CALDAV . '}supported-calendar-component-set' => new SupportedCalendarComponentSet($components),
'{' . Plugin::NS_CALDAV . '}schedule-calendar-transp' => new ScheduleCalendarTransp($row['transparent']?'transparent':'opaque'),
];
@@ -866,7 +865,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$calendarData = $this->getCalendarById($calendarId);
$shares = $this->getShares($calendarId);
- $this->dispatcher->dispatchTyped(new CalendarUpdatedEvent((int)$calendarId, $calendarData, $shares, $mutations));
+ $this->dispatcher->dispatchTyped(new CalendarUpdatedEvent($calendarId, $calendarData, $shares, $mutations));
return true;
});
@@ -916,7 +915,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
// Only dispatch if we actually deleted anything
if ($calendarData) {
- $this->dispatcher->dispatchTyped(new CalendarDeletedEvent((int)$calendarId, $calendarData, $shares));
+ $this->dispatcher->dispatchTyped(new CalendarDeletedEvent($calendarId, $calendarData, $shares));
}
} else {
$qbMarkCalendarDeleted = $this->db->getQueryBuilder();
@@ -929,7 +928,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$shares = $this->getShares($calendarId);
if ($calendarData) {
$this->dispatcher->dispatchTyped(new CalendarMovedToTrashEvent(
- (int)$calendarId,
+ $calendarId,
$calendarData,
$shares
));
@@ -1265,15 +1264,17 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$this->addChange($calendarId, $objectUri, 1, $calendarType);
$objectRow = $this->getCalendarObject($calendarId, $objectUri, $calendarType);
+ assert($objectRow !== null);
+
if ($calendarType === self::CALENDAR_TYPE_CALENDAR) {
$calendarRow = $this->getCalendarById($calendarId);
$shares = $this->getShares($calendarId);
- $this->dispatcher->dispatchTyped(new CalendarObjectCreatedEvent((int)$calendarId, $calendarRow, $shares, $objectRow));
+ $this->dispatcher->dispatchTyped(new CalendarObjectCreatedEvent($calendarId, $calendarRow, $shares, $objectRow));
} else {
$subscriptionRow = $this->getSubscriptionById($calendarId);
- $this->dispatcher->dispatchTyped(new CachedCalendarObjectCreatedEvent((int)$calendarId, $subscriptionRow, [], $objectRow));
+ $this->dispatcher->dispatchTyped(new CachedCalendarObjectCreatedEvent($calendarId, $subscriptionRow, [], $objectRow));
}
return '"' . $extraData['etag'] . '"';
@@ -1325,11 +1326,11 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$calendarRow = $this->getCalendarById($calendarId);
$shares = $this->getShares($calendarId);
- $this->dispatcher->dispatchTyped(new CalendarObjectUpdatedEvent((int)$calendarId, $calendarRow, $shares, $objectRow));
+ $this->dispatcher->dispatchTyped(new CalendarObjectUpdatedEvent($calendarId, $calendarRow, $shares, $objectRow));
} else {
$subscriptionRow = $this->getSubscriptionById($calendarId);
- $this->dispatcher->dispatchTyped(new CachedCalendarObjectUpdatedEvent((int)$calendarId, $subscriptionRow, [], $objectRow));
+ $this->dispatcher->dispatchTyped(new CachedCalendarObjectUpdatedEvent($calendarId, $subscriptionRow, [], $objectRow));
}
}
@@ -1435,11 +1436,11 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$calendarRow = $this->getCalendarById($calendarId);
$shares = $this->getShares($calendarId);
- $this->dispatcher->dispatchTyped(new CalendarObjectDeletedEvent((int)$calendarId, $calendarRow, $shares, $data));
+ $this->dispatcher->dispatchTyped(new CalendarObjectDeletedEvent($calendarId, $calendarRow, $shares, $data));
} else {
$subscriptionRow = $this->getSubscriptionById($calendarId);
- $this->dispatcher->dispatchTyped(new CachedCalendarObjectDeletedEvent((int)$calendarId, $subscriptionRow, [], $data));
+ $this->dispatcher->dispatchTyped(new CachedCalendarObjectDeletedEvent($calendarId, $subscriptionRow, [], $data));
}
} else {
$pathInfo = pathinfo($data['uri']);
@@ -1479,7 +1480,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
if ($calendarData !== null) {
$this->dispatcher->dispatchTyped(
new CalendarObjectMovedToTrashEvent(
- (int)$calendarId,
+ $calendarId,
$calendarData,
$this->getShares($calendarId),
$data
@@ -2799,25 +2800,26 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
}
/**
- * @param IShareable $shareable
- * @param array $add
- * @param array $remove
+ * @param list<array{href: string, commonName: string, readOnly: bool}> $add
+ * @param list<string> $remove
*/
- public function updateShares($shareable, $add, $remove) {
+ public function updateShares(IShareable $shareable, array $add, array $remove): void {
$calendarId = $shareable->getResourceId();
$calendarRow = $this->getCalendarById($calendarId);
+ if ($calendarRow === null) {
+ throw new \RuntimeException('Trying to update shares for innexistant calendar: ' . $calendarId);
+ }
$oldShares = $this->getShares($calendarId);
$this->calendarSharingBackend->updateShares($shareable, $add, $remove);
- $this->dispatcher->dispatchTyped(new CalendarShareUpdatedEvent((int)$calendarId, $calendarRow, $oldShares, $add, $remove));
+ $this->dispatcher->dispatchTyped(new CalendarShareUpdatedEvent($calendarId, $calendarRow, $oldShares, $add, $remove));
}
/**
- * @param int $resourceId
- * @return array
+ * @return list<array{href: string, commonName: string, status: int, readOnly: bool, '{http://owncloud.org/ns}principal': string, '{http://owncloud.org/ns}group-share': bool}>
*/
- public function getShares($resourceId) {
+ public function getShares(int $resourceId): array {
return $this->calendarSharingBackend->getShares($resourceId);
}
@@ -2843,7 +2845,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
]);
$query->executeStatement();
- $this->dispatcher->dispatchTyped(new CalendarPublishedEvent((int)$calendarId, $calendarData, $publicUri));
+ $this->dispatcher->dispatchTyped(new CalendarPublishedEvent($calendarId, $calendarData, $publicUri));
return $publicUri;
}
$query->delete('dav_shares')
@@ -2851,7 +2853,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
->andWhere($query->expr()->eq('access', $query->createNamedParameter(self::ACCESS_PUBLIC)));
$query->executeStatement();
- $this->dispatcher->dispatchTyped(new CalendarUnpublishedEvent((int)$calendarId, $calendarData));
+ $this->dispatcher->dispatchTyped(new CalendarUnpublishedEvent($calendarId, $calendarData));
return null;
}
@@ -2874,15 +2876,13 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
/**
* @param int $resourceId
- * @param array $acl
- * @return array
+ * @param list<array{privilege: string, principal: string, protected: bool}> $acl
+ * @return list<array{privilege: string, principal: string, protected: bool}>
*/
- public function applyShareAcl($resourceId, $acl) {
+ public function applyShareAcl(int $resourceId, array $acl): array {
return $this->calendarSharingBackend->applyShareAcl($resourceId, $acl);
}
-
-
/**
* update properties table
*
diff --git a/apps/dav/lib/CalDAV/Calendar.php b/apps/dav/lib/CalDAV/Calendar.php
index 806e99d8a05..92ad3242d78 100644
--- a/apps/dav/lib/CalDAV/Calendar.php
+++ b/apps/dav/lib/CalDAV/Calendar.php
@@ -51,27 +51,11 @@ use Sabre\DAV\PropPatch;
* @property CalDavBackend $caldavBackend
*/
class Calendar extends \Sabre\CalDAV\Calendar implements IRestorable, IShareable, IMoveTarget {
+ private IConfig $config;
+ protected IL10N $l10n;
+ private bool $useTrashbin = true;
+ private LoggerInterface $logger;
- /** @var IConfig */
- private $config;
-
- /** @var IL10N */
- protected $l10n;
-
- /** @var bool */
- private $useTrashbin = true;
-
- /** @var LoggerInterface */
- private $logger;
-
- /**
- * Calendar constructor.
- *
- * @param BackendInterface $caldavBackend
- * @param $calendarInfo
- * @param IL10N $l10n
- * @param IConfig $config
- */
public function __construct(BackendInterface $caldavBackend, $calendarInfo, IL10N $l10n, IConfig $config, LoggerInterface $logger) {
// Convert deletion date to ISO8601 string
if (isset($calendarInfo[TrashbinPlugin::PROPERTY_DELETED_AT])) {
@@ -96,25 +80,10 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IRestorable, IShareable
}
/**
- * Updates the list of shares.
- *
- * The first array is a list of people that are to be added to the
- * resource.
- *
- * Every element in the add array has the following properties:
- * * href - A url. Usually a mailto: address
- * * commonName - Usually a first and last name, or false
- * * summary - A description of the share, can also be false
- * * readOnly - A boolean value
- *
- * Every element in the remove array is just the address string.
- *
- * @param array $add
- * @param array $remove
- * @return void
+ * {@inheritdoc}
* @throws Forbidden
*/
- public function updateShares(array $add, array $remove) {
+ public function updateShares(array $add, array $remove): void {
if ($this->isShared()) {
throw new Forbidden();
}
@@ -131,19 +100,16 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IRestorable, IShareable
* * readOnly - boolean
* * summary - Optional, a description for the share
*
- * @return array
+ * @return list<array{href: string, commonName: string, status: int, readOnly: bool, '{http://owncloud.org/ns}principal': string, '{http://owncloud.org/ns}group-share': bool}>
*/
- public function getShares() {
+ public function getShares(): array {
if ($this->isShared()) {
return [];
}
return $this->caldavBackend->getShares($this->getResourceId());
}
- /**
- * @return int
- */
- public function getResourceId() {
+ public function getResourceId(): int {
return $this->calendarInfo['id'];
}
@@ -155,7 +121,9 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IRestorable, IShareable
}
/**
- * @return array
+ * @param int $resourceId
+ * @param list<array{privilege: string, principal: string, protected: bool}> $acl
+ * @return list<array{privilege: string, principal: ?string, protected: bool}>
*/
public function getACL() {
$acl = [
@@ -246,16 +214,18 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IRestorable, IShareable
parent::getOwner(),
'principals/system/public'
];
- return array_filter($acl, function ($rule) use ($allowedPrincipals) {
+ /** @var list<array{privilege: string, principal: string, protected: bool}> $acl */
+ $acl = array_filter($acl, function (array $rule) use ($allowedPrincipals): bool {
return \in_array($rule['principal'], $allowedPrincipals, true);
});
+ return $acl;
}
public function getChildACL() {
return $this->getACL();
}
- public function getOwner() {
+ public function getOwner(): ?string {
if (isset($this->calendarInfo['{http://owncloud.org/ns}owner-principal'])) {
return $this->calendarInfo['{http://owncloud.org/ns}owner-principal'];
}
diff --git a/apps/dav/lib/CardDAV/AddressBook.php b/apps/dav/lib/CardDAV/AddressBook.php
index 9bd24bedbac..bca478feec1 100644
--- a/apps/dav/lib/CardDAV/AddressBook.php
+++ b/apps/dav/lib/CardDAV/AddressBook.php
@@ -67,17 +67,15 @@ class AddressBook extends \Sabre\CardDAV\AddressBook implements IShareable {
* Every element in the add array has the following properties:
* * href - A url. Usually a mailto: address
* * commonName - Usually a first and last name, or false
- * * summary - A description of the share, can also be false
* * readOnly - A boolean value
*
* Every element in the remove array is just the address string.
*
- * @param array $add
- * @param array $remove
- * @return void
+ * @param list<array{href: string, commonName: string, readOnly: bool}> $add
+ * @param list<string> $remove
* @throws Forbidden
*/
- public function updateShares(array $add, array $remove) {
+ public function updateShares(array $add, array $remove): void {
if ($this->isShared()) {
throw new Forbidden();
}
@@ -92,11 +90,10 @@ class AddressBook extends \Sabre\CardDAV\AddressBook implements IShareable {
* * commonName - Optional, for example a first + last name
* * status - See the Sabre\CalDAV\SharingPlugin::STATUS_ constants.
* * readOnly - boolean
- * * summary - Optional, a description for the share
*
- * @return array
+ * @return list<array{href: string, commonName: string, status: int, readOnly: bool, '{http://owncloud.org/ns}principal': string, '{http://owncloud.org/ns}group-share': bool}>
*/
- public function getShares() {
+ public function getShares(): array {
if ($this->isShared()) {
return [];
}
@@ -163,14 +160,11 @@ class AddressBook extends \Sabre\CardDAV\AddressBook implements IShareable {
return new Card($this->carddavBackend, $this->addressBookInfo, $obj);
}
- /**
- * @return int
- */
- public function getResourceId() {
+ public function getResourceId(): int {
return $this->addressBookInfo['id'];
}
- public function getOwner() {
+ public function getOwner(): ?string {
if (isset($this->addressBookInfo['{http://owncloud.org/ns}owner-principal'])) {
return $this->addressBookInfo['{http://owncloud.org/ns}owner-principal'];
}
@@ -207,7 +201,7 @@ class AddressBook extends \Sabre\CardDAV\AddressBook implements IShareable {
return $this->carddavBackend->collectCardProperties($this->getResourceId(), 'CATEGORIES');
}
- private function isShared() {
+ private function isShared(): bool {
if (!isset($this->addressBookInfo['{http://owncloud.org/ns}owner-principal'])) {
return false;
}
@@ -215,7 +209,7 @@ class AddressBook extends \Sabre\CardDAV\AddressBook implements IShareable {
return $this->addressBookInfo['{http://owncloud.org/ns}owner-principal'] !== $this->addressBookInfo['principaluri'];
}
- private function canWrite() {
+ private function canWrite(): bool {
if (isset($this->addressBookInfo['{http://owncloud.org/ns}read-only'])) {
return !$this->addressBookInfo['{http://owncloud.org/ns}read-only'];
}
diff --git a/apps/dav/lib/CardDAV/CardDavBackend.php b/apps/dav/lib/CardDAV/CardDavBackend.php
index 745ca7801b7..2c99e6084c1 100644
--- a/apps/dav/lib/CardDAV/CardDavBackend.php
+++ b/apps/dav/lib/CardDAV/CardDavBackend.php
@@ -371,12 +371,12 @@ class CardDavBackend implements BackendInterface, SyncSupport {
$query->set($key, $query->createNamedParameter($value));
}
$query->where($query->expr()->eq('id', $query->createNamedParameter($addressBookId)))
- ->execute();
+ ->executeStatement();
$this->addChange($addressBookId, "", 2);
$addressBookRow = $this->getAddressBookById((int)$addressBookId);
- $shares = $this->getShares($addressBookId);
+ $shares = $this->getShares((int)$addressBookId);
$this->dispatcher->dispatchTyped(new AddressBookUpdatedEvent((int)$addressBookId, $addressBookRow, $shares, $mutations));
return true;
@@ -446,30 +446,31 @@ class CardDavBackend implements BackendInterface, SyncSupport {
* @return void
*/
public function deleteAddressBook($addressBookId) {
+ $addressBookId = (int)$addressBookId;
$addressBookData = $this->getAddressBookById($addressBookId);
$shares = $this->getShares($addressBookId);
$query = $this->db->getQueryBuilder();
$query->delete($this->dbCardsTable)
->where($query->expr()->eq('addressbookid', $query->createParameter('addressbookid')))
- ->setParameter('addressbookid', $addressBookId)
- ->execute();
+ ->setParameter('addressbookid', $addressBookId, IQueryBuilder::PARAM_INT)
+ ->executeStatement();
$query->delete('addressbookchanges')
->where($query->expr()->eq('addressbookid', $query->createParameter('addressbookid')))
- ->setParameter('addressbookid', $addressBookId)
- ->execute();
+ ->setParameter('addressbookid', $addressBookId, IQueryBuilder::PARAM_INT)
+ ->executeStatement();
$query->delete('addressbooks')
->where($query->expr()->eq('id', $query->createParameter('id')))
- ->setParameter('id', $addressBookId)
- ->execute();
+ ->setParameter('id', $addressBookId, IQueryBuilder::PARAM_INT)
+ ->executeStatement();
$this->sharingBackend->deleteAllShares($addressBookId);
$query->delete($this->dbCardsPropertiesTable)
- ->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId)))
- ->execute();
+ ->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId, IQueryBuilder::PARAM_INT)))
+ ->executeStatement();
if ($addressBookData) {
$this->dispatcher->dispatchTyped(new AddressBookDeletedEvent($addressBookId, $addressBookData, $shares));
@@ -964,11 +965,10 @@ class CardDavBackend implements BackendInterface, SyncSupport {
}
/**
- * @param IShareable $shareable
- * @param string[] $add
- * @param string[] $remove
+ * @param list<array{href: string, commonName: string, readOnly: bool}> $add
+ * @param list<string> $remove
*/
- public function updateShares(IShareable $shareable, $add, $remove) {
+ public function updateShares(IShareable $shareable, array $add, array $remove): void {
$addressBookId = $shareable->getResourceId();
$addressBookData = $this->getAddressBookById($addressBookId);
$oldShares = $this->getShares($addressBookId);
@@ -1199,11 +1199,10 @@ class CardDavBackend implements BackendInterface, SyncSupport {
* * commonName - Optional, for example a first + last name
* * status - See the Sabre\CalDAV\SharingPlugin::STATUS_ constants.
* * readOnly - boolean
- * * summary - Optional, a description for the share
*
- * @return array
+ * @return list<array{href: string, commonName: string, status: int, readOnly: bool, '{http://owncloud.org/ns}principal': string, '{http://owncloud.org/ns}group-share': bool}>
*/
- public function getShares($addressBookId) {
+ public function getShares(int $addressBookId): array {
return $this->sharingBackend->getShares($addressBookId);
}
@@ -1283,13 +1282,9 @@ class CardDavBackend implements BackendInterface, SyncSupport {
}
/**
- * get ID from a given contact
- *
- * @param int $addressBookId
- * @param string $uri
- * @return int
+ * Get ID from a given contact
*/
- protected function getCardId($addressBookId, $uri) {
+ protected function getCardId(int $addressBookId, string $uri): int {
$query = $this->db->getQueryBuilder();
$query->select('id')->from($this->dbCardsTable)
->where($query->expr()->eq('uri', $query->createNamedParameter($uri)))
@@ -1309,15 +1304,15 @@ class CardDavBackend implements BackendInterface, SyncSupport {
/**
* For shared address books the sharee is set in the ACL of the address book
*
- * @param $addressBookId
- * @param $acl
- * @return array
+ * @param int $addressBookId
+ * @param list<array{privilege: string, principal: string, protected: bool}> $acl
+ * @return list<array{privilege: string, principal: string, protected: bool}>
*/
- public function applyShareAcl($addressBookId, $acl) {
+ public function applyShareAcl(int $addressBookId, array $acl): array {
return $this->sharingBackend->applyShareAcl($addressBookId, $acl);
}
- private function convertPrincipal($principalUri, $toV2) {
+ private function convertPrincipal(string $principalUri, bool $toV2): string {
if ($this->principalBackend->getPrincipalPrefix() === 'principals') {
[, $name] = \Sabre\Uri\split($principalUri);
if ($toV2 === true) {
@@ -1328,7 +1323,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
return $principalUri;
}
- private function addOwnerPrincipal(&$addressbookInfo) {
+ private function addOwnerPrincipal(array &$addressbookInfo): void {
$ownerPrincipalKey = '{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal';
$displaynameKey = '{' . \OCA\DAV\DAV\Sharing\Plugin::NS_NEXTCLOUD . '}owner-displayname';
if (isset($addressbookInfo[$ownerPrincipalKey])) {
@@ -1348,10 +1343,10 @@ class CardDavBackend implements BackendInterface, SyncSupport {
*
* @param string $cardData the vcard raw data
* @return string the uid
- * @throws BadRequest if no UID is available
+ * @throws BadRequest if no UID is available or vcard is empty
*/
- private function getUID($cardData) {
- if ($cardData != '') {
+ private function getUID(string $cardData): string {
+ if ($cardData !== '') {
$vCard = Reader::read($cardData);
if ($vCard->UID) {
$uid = $vCard->UID->getValue();
diff --git a/apps/dav/lib/Command/MoveCalendar.php b/apps/dav/lib/Command/MoveCalendar.php
index 320fe8aeac6..9272b20b10d 100644
--- a/apps/dav/lib/Command/MoveCalendar.php
+++ b/apps/dav/lib/Command/MoveCalendar.php
@@ -42,41 +42,17 @@ use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
class MoveCalendar extends Command {
-
- /** @var IUserManager */
- private $userManager;
-
- /** @var IGroupManager */
- private $groupManager;
-
- /** @var IShareManager */
- private $shareManager;
-
- /** @var IConfig $config */
- private $config;
-
- /** @var IL10N */
- private $l10n;
-
- /** @var SymfonyStyle */
- private $io;
-
- /** @var CalDavBackend */
- private $calDav;
-
- /** @var LoggerInterface */
- private $logger;
+ private IUserManager $userManager;
+ private IGroupManager $groupManager;
+ private IShareManager $shareManager;
+ private IConfig $config;
+ private IL10N $l10n;
+ private ?SymfonyStyle $io = null;
+ private CalDavBackend $calDav;
+ private LoggerInterface $logger;
public const URI_USERS = 'principals/users/';
- /**
- * @param IUserManager $userManager
- * @param IGroupManager $groupManager
- * @param IShareManager $shareManager
- * @param IConfig $config
- * @param IL10N $l10n
- * @param CalDavBackend $calDav
- */
public function __construct(
IUserManager $userManager,
IGroupManager $groupManager,
@@ -224,7 +200,7 @@ class MoveCalendar extends Command {
*/
if ($this->shareManager->shareWithGroupMembersOnly() === true && 'groups' === $prefix && !$this->groupManager->isInGroup($userDestination, $userOrGroup)) {
if ($force) {
- $this->calDav->updateShares(new Calendar($this->calDav, $calendar, $this->l10n, $this->config, $this->logger), [], ['href' => 'principal:principals/groups/' . $userOrGroup]);
+ $this->calDav->updateShares(new Calendar($this->calDav, $calendar, $this->l10n, $this->config, $this->logger), [], ['principal:principals/groups/' . $userOrGroup]);
} else {
throw new \InvalidArgumentException("User <$userDestination> is not part of the group <$userOrGroup> with whom the calendar <" . $calendar['uri'] . "> was shared. You may use -f to move the calendar while deleting this share.");
}
@@ -235,7 +211,7 @@ class MoveCalendar extends Command {
*/
if ($userOrGroup === $userDestination) {
if ($force) {
- $this->calDav->updateShares(new Calendar($this->calDav, $calendar, $this->l10n, $this->config, $this->logger), [], ['href' => 'principal:principals/users/' . $userOrGroup]);
+ $this->calDav->updateShares(new Calendar($this->calDav, $calendar, $this->l10n, $this->config, $this->logger), [], ['principal:principals/users/' . $userOrGroup]);
} else {
throw new \InvalidArgumentException("The calendar <" . $calendar['uri'] . "> is already shared to user <$userDestination>.You may use -f to move the calendar while deleting this share.");
}
diff --git a/apps/dav/lib/Connector/Sabre/Directory.php b/apps/dav/lib/Connector/Sabre/Directory.php
index 5280511d5be..b575a051b2a 100644
--- a/apps/dav/lib/Connector/Sabre/Directory.php
+++ b/apps/dav/lib/Connector/Sabre/Directory.php
@@ -66,7 +66,7 @@ class Directory extends \OCA\DAV\Connector\Sabre\Node implements \Sabre\DAV\ICol
/** Cached quota info */
private ?array $quotaInfo = null;
- private ?ObjectTree $tree = null;
+ private ?CachingTree $tree = null;
/** @var array<string, array<int, FileMetadata>> */
private array $metadata = [];
@@ -74,7 +74,7 @@ class Directory extends \OCA\DAV\Connector\Sabre\Node implements \Sabre\DAV\ICol
/**
* Sets up the node, expects a full path name
*/
- public function __construct(View $view, FileInfo $info, ?ObjectTree $tree = null, IShareManager $shareManager = null) {
+ public function __construct(View $view, FileInfo $info, ?CachingTree $tree = null, IShareManager $shareManager = null) {
parent::__construct($view, $info, $shareManager);
$this->tree = $tree;
}
diff --git a/apps/dav/lib/DAV/Sharing/Backend.php b/apps/dav/lib/DAV/Sharing/Backend.php
index 544a38cfbe6..92971992c20 100644
--- a/apps/dav/lib/DAV/Sharing/Backend.php
+++ b/apps/dav/lib/DAV/Sharing/Backend.php
@@ -32,32 +32,20 @@ use OCA\DAV\Connector\Sabre\Principal;
use OCP\IDBConnection;
use OCP\IGroupManager;
use OCP\IUserManager;
+use OCP\DB\QueryBuilder\IQueryBuilder;
class Backend {
-
- /** @var IDBConnection */
- private $db;
- /** @var IUserManager */
- private $userManager;
- /** @var IGroupManager */
- private $groupManager;
- /** @var Principal */
- private $principalBackend;
- /** @var string */
- private $resourceType;
+ private IDBConnection $db;
+ private IUserManager $userManager;
+ private IGroupManager $groupManager;
+ private Principal $principalBackend;
+ private string $resourceType;
public const ACCESS_OWNER = 1;
public const ACCESS_READ_WRITE = 2;
public const ACCESS_READ = 3;
- /**
- * @param IDBConnection $db
- * @param IUserManager $userManager
- * @param IGroupManager $groupManager
- * @param Principal $principalBackend
- * @param string $resourceType
- */
- public function __construct(IDBConnection $db, IUserManager $userManager, IGroupManager $groupManager, Principal $principalBackend, $resourceType) {
+ public function __construct(IDBConnection $db, IUserManager $userManager, IGroupManager $groupManager, Principal $principalBackend, string $resourceType) {
$this->db = $db;
$this->userManager = $userManager;
$this->groupManager = $groupManager;
@@ -66,11 +54,10 @@ class Backend {
}
/**
- * @param IShareable $shareable
- * @param string[] $add
- * @param string[] $remove
+ * @param list<array{href: string, commonName: string, readOnly: bool}> $add
+ * @param list<string> $remove
*/
- public function updateShares(IShareable $shareable, array $add, array $remove) {
+ public function updateShares(IShareable $shareable, array $add, array $remove): void {
foreach ($add as $element) {
$principal = $this->principalBackend->findByUri($element['href'], '');
if ($principal !== '') {
@@ -86,10 +73,9 @@ class Backend {
}
/**
- * @param IShareable $shareable
- * @param string $element
+ * @param array{href: string, commonName: string, readOnly: bool} $element
*/
- private function shareWith($shareable, $element) {
+ private function shareWith(IShareable $shareable, array $element): void {
$user = $element['href'];
$parts = explode(':', $user, 2);
if ($parts[0] !== 'principal') {
@@ -129,33 +115,26 @@ class Backend {
'access' => $query->createNamedParameter($access),
'resourceid' => $query->createNamedParameter($shareable->getResourceId())
]);
- $query->execute();
+ $query->executeStatement();
}
- /**
- * @param $resourceId
- */
- public function deleteAllShares($resourceId) {
+ public function deleteAllShares(int $resourceId): void {
$query = $this->db->getQueryBuilder();
$query->delete('dav_shares')
->where($query->expr()->eq('resourceid', $query->createNamedParameter($resourceId)))
->andWhere($query->expr()->eq('type', $query->createNamedParameter($this->resourceType)))
- ->execute();
+ ->executeStatement();
}
- public function deleteAllSharesByUser($principaluri) {
+ public function deleteAllSharesByUser(string $principaluri): void {
$query = $this->db->getQueryBuilder();
$query->delete('dav_shares')
->where($query->expr()->eq('principaluri', $query->createNamedParameter($principaluri)))
->andWhere($query->expr()->eq('type', $query->createNamedParameter($this->resourceType)))
- ->execute();
+ ->executeStatement();
}
- /**
- * @param IShareable $shareable
- * @param string $element
- */
- private function unshare($shareable, $element) {
+ private function unshare(IShareable $shareable, string $element): void {
$parts = explode(':', $element, 2);
if ($parts[0] !== 'principal') {
return;
@@ -172,7 +151,7 @@ class Backend {
->andWhere($query->expr()->eq('type', $query->createNamedParameter($this->resourceType)))
->andWhere($query->expr()->eq('principaluri', $query->createNamedParameter($parts[1])))
;
- $query->execute();
+ $query->executeStatement();
}
/**
@@ -183,29 +162,28 @@ class Backend {
* * commonName - Optional, for example a first + last name
* * status - See the Sabre\CalDAV\SharingPlugin::STATUS_ constants.
* * readOnly - boolean
- * * summary - Optional, a description for the share
*
* @param int $resourceId
- * @return array
+ * @return list<array{href: string, commonName: string, status: int, readOnly: bool, '{http://owncloud.org/ns}principal': string, '{http://owncloud.org/ns}group-share': bool}>
*/
- public function getShares($resourceId) {
+ public function getShares(int $resourceId): array {
$query = $this->db->getQueryBuilder();
$result = $query->select(['principaluri', 'access'])
->from('dav_shares')
- ->where($query->expr()->eq('resourceid', $query->createNamedParameter($resourceId)))
+ ->where($query->expr()->eq('resourceid', $query->createNamedParameter($resourceId, IQueryBuilder::PARAM_INT)))
->andWhere($query->expr()->eq('type', $query->createNamedParameter($this->resourceType)))
->groupBy(['principaluri', 'access'])
- ->execute();
+ ->executeQuery();
$shares = [];
while ($row = $result->fetch()) {
$p = $this->principalBackend->getPrincipalByPath($row['principaluri']);
$shares[] = [
- 'href' => "principal:{$row['principaluri']}",
- 'commonName' => isset($p['{DAV:}displayname']) ? $p['{DAV:}displayname'] : '',
+ 'href' => "principal:${row['principaluri']}",
+ 'commonName' => isset($p['{DAV:}displayname']) ? (string)$p['{DAV:}displayname'] : '',
'status' => 1,
'readOnly' => (int) $row['access'] === self::ACCESS_READ,
- '{http://owncloud.org/ns}principal' => $row['principaluri'],
+ '{http://owncloud.org/ns}principal' => (string)$row['principaluri'],
'{http://owncloud.org/ns}group-share' => is_null($p)
];
}
@@ -217,10 +195,10 @@ class Backend {
* For shared resources the sharee is set in the ACL of the resource
*
* @param int $resourceId
- * @param array $acl
- * @return array
+ * @param list<array{privilege: string, principal: string, protected: bool}> $acl
+ * @return list<array{privilege: string, principal: string, protected: bool}>
*/
- public function applyShareAcl($resourceId, $acl) {
+ public function applyShareAcl(int $resourceId, array $acl): array {
$shares = $this->getShares($resourceId);
foreach ($shares as $share) {
$acl[] = [
diff --git a/apps/dav/lib/DAV/Sharing/IShareable.php b/apps/dav/lib/DAV/Sharing/IShareable.php
index 3833e026696..759981af078 100644
--- a/apps/dav/lib/DAV/Sharing/IShareable.php
+++ b/apps/dav/lib/DAV/Sharing/IShareable.php
@@ -40,16 +40,14 @@ interface IShareable extends INode {
* Every element in the add array has the following properties:
* * href - A url. Usually a mailto: address
* * commonName - Usually a first and last name, or false
- * * summary - A description of the share, can also be false
* * readOnly - A boolean value
*
* Every element in the remove array is just the address string.
*
- * @param array $add
- * @param array $remove
- * @return void
+ * @param list<array{href: string, commonName: string, readOnly: bool}> $add
+ * @param list<string> $remove
*/
- public function updateShares(array $add, array $remove);
+ public function updateShares(array $add, array $remove): void;
/**
* Returns the list of people whom this resource is shared with.
@@ -59,19 +57,15 @@ interface IShareable extends INode {
* * commonName - Optional, for example a first + last name
* * status - See the Sabre\CalDAV\SharingPlugin::STATUS_ constants.
* * readOnly - boolean
- * * summary - Optional, a description for the share
*
- * @return array
+ * @return list<array{href: string, commonName: string, status: int, readOnly: bool, '{http://owncloud.org/ns}principal': string, '{http://owncloud.org/ns}group-share': bool}>
*/
- public function getShares();
+ public function getShares(): array;
- /**
- * @return int
- */
- public function getResourceId();
+ public function getResourceId(): int;
/**
- * @return string
+ * @return ?string
*/
public function getOwner();
}
diff --git a/apps/dav/lib/Events/CalendarShareUpdatedEvent.php b/apps/dav/lib/Events/CalendarShareUpdatedEvent.php
index a9011bc0273..d5a568d149b 100644
--- a/apps/dav/lib/Events/CalendarShareUpdatedEvent.php
+++ b/apps/dav/lib/Events/CalendarShareUpdatedEvent.php
@@ -26,6 +26,8 @@ declare(strict_types=1);
namespace OCA\DAV\Events;
use OCP\EventDispatcher\Event;
+use Sabre\CalDAV\Xml\Property\ScheduleCalendarTransp;
+use Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet;
/**
* Class CalendarShareUpdatedEvent
@@ -34,30 +36,28 @@ use OCP\EventDispatcher\Event;
* @since 20.0.0
*/
class CalendarShareUpdatedEvent extends Event {
+ private int $calendarId;
- /** @var int */
- private $calendarId;
+ /** @var array{id: int, uri: string, '{http://calendarserver.org/ns/}getctag': string, '{http://sabredav.org/ns}sync-token': int, '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set': SupportedCalendarComponentSet, '{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp': ScheduleCalendarTransp } */
+ private array $calendarData;
- /** @var array */
- private $calendarData;
+ /** @var list<array{href: string, commonName: string, status: int, readOnly: bool, '{http://owncloud.org/ns}principal': string, '{http://owncloud.org/ns}group-share': bool}> */
+ private array $oldShares;
- /** @var array */
- private $oldShares;
+ /** @var list<array{href: string, commonName: string, readOnly: bool}> */
+ private array $added;
- /** @var array */
- private $added;
-
- /** @var array */
- private $removed;
+ /** @var list<string> */
+ private array $removed;
/**
* CalendarShareUpdatedEvent constructor.
*
* @param int $calendarId
- * @param array $calendarData
- * @param array $oldShares
- * @param array $added
- * @param array $removed
+ * @param array{id: int, uri: string, '{http://calendarserver.org/ns/}getctag': string, '{http://sabredav.org/ns}sync-token': int, '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set': SupportedCalendarComponentSet, '{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp': ScheduleCalendarTransp } $calendarData
+ * @param list<array{href: string, commonName: string, status: int, readOnly: bool, '{http://owncloud.org/ns}principal': string, '{http://owncloud.org/ns}group-share': bool}> $oldShares
+ * @param list<array{href: string, commonName: string, readOnly: bool}> $added
+ * @param list<string> $removed
* @since 20.0.0
*/
public function __construct(int $calendarId,
@@ -74,7 +74,6 @@ class CalendarShareUpdatedEvent extends Event {
}
/**
- * @return int
* @since 20.0.0
*/
public function getCalendarId(): int {
@@ -82,7 +81,7 @@ class CalendarShareUpdatedEvent extends Event {
}
/**
- * @return array
+ * @return array{id: int, uri: string, '{http://calendarserver.org/ns/}getctag': string, '{http://sabredav.org/ns}sync-token': int, '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set': SupportedCalendarComponentSet, '{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp': ScheduleCalendarTransp }
* @since 20.0.0
*/
public function getCalendarData(): array {
@@ -90,7 +89,7 @@ class CalendarShareUpdatedEvent extends Event {
}
/**
- * @return array
+ * @return list<array{href: string, commonName: string, status: int, readOnly: bool, '{http://owncloud.org/ns}principal': string, '{http://owncloud.org/ns}group-share': bool}>
* @since 20.0.0
*/
public function getOldShares(): array {
@@ -98,7 +97,7 @@ class CalendarShareUpdatedEvent extends Event {
}
/**
- * @return array
+ * @return list<array{href: string, commonName: string, readOnly: bool}>
* @since 20.0.0
*/
public function getAdded(): array {
@@ -106,7 +105,7 @@ class CalendarShareUpdatedEvent extends Event {
}
/**
- * @return array
+ * @return list<string>
* @since 20.0.0
*/
public function getRemoved(): array {
diff --git a/apps/dav/tests/unit/BackgroundJob/CleanupInvitationTokenJobTest.php b/apps/dav/tests/unit/BackgroundJob/CleanupInvitationTokenJobTest.php
index 6233980edbb..8f1a2a1378f 100644
--- a/apps/dav/tests/unit/BackgroundJob/CleanupInvitationTokenJobTest.php
+++ b/apps/dav/tests/unit/BackgroundJob/CleanupInvitationTokenJobTest.php
@@ -32,6 +32,7 @@ namespace OCA\DAV\Tests\unit\BackgroundJob;
use OCA\DAV\BackgroundJob\CleanupInvitationTokenJob;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\DB\QueryBuilder\IQueryBuilder;
+use OCP\DB\QueryBuilder\IQueryFunction;
use OCP\IDBConnection;
use Test\TestCase;
@@ -77,10 +78,11 @@ class CleanupInvitationTokenJobTest extends TestCase {
[1337, \PDO::PARAM_STR, null, 'namedParameter1337']
]);
+ $function = $this->createMock(IQueryFunction::class);
$expr->expects($this->once())
->method('lt')
->with('expiration', 'namedParameter1337')
- ->willReturn('LT STATEMENT');
+ ->willReturn($function);
$this->dbConnection->expects($this->once())
->method('getQueryBuilder')
@@ -93,7 +95,7 @@ class CleanupInvitationTokenJobTest extends TestCase {
->willReturn($queryBuilder);
$queryBuilder->expects($this->at(3))
->method('where')
- ->with('LT STATEMENT')
+ ->with($function)
->willReturn($queryBuilder);
$queryBuilder->expects($this->at(4))
->method('execute')
diff --git a/apps/dav/tests/unit/Controller/InvitationResponseControllerTest.php b/apps/dav/tests/unit/Controller/InvitationResponseControllerTest.php
index cd3269d657c..576fde2d4af 100644
--- a/apps/dav/tests/unit/Controller/InvitationResponseControllerTest.php
+++ b/apps/dav/tests/unit/Controller/InvitationResponseControllerTest.php
@@ -37,6 +37,7 @@ use OCP\AppFramework\Utility\ITimeFactory;
use OCP\DB\IResult;
use OCP\DB\QueryBuilder\IExpressionBuilder;
use OCP\DB\QueryBuilder\IQueryBuilder;
+use OCP\DB\QueryBuilder\IQueryFunction;
use OCP\IDBConnection;
use OCP\IRequest;
use Sabre\VObject\ITip\Message;
@@ -477,10 +478,11 @@ EOF;
->with(\PDO::FETCH_ASSOC)
->willReturn($return);
+ $function = $this->createMock(IQueryFunction::class);
$expr->expects($this->once())
->method('eq')
->with('token', 'namedParameterToken')
- ->willReturn('EQ STATEMENT');
+ ->willReturn($function);
$this->dbConnection->expects($this->once())
->method('getQueryBuilder')
@@ -497,7 +499,7 @@ EOF;
->willReturn($queryBuilder);
$queryBuilder->expects($this->at(4))
->method('where')
- ->with('EQ STATEMENT')
+ ->with($function)
->willReturn($queryBuilder);
$queryBuilder->expects($this->at(5))
->method('execute')
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 510582ae998..714e66e53ed 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -1736,7 +1736,7 @@
extension = false;
}
var nameSpan=$('<span></span>').addClass('nametext');
- var innernameSpan = $('<span></span>').addClass('innernametext').text(basename);
+ var innernameSpan = $('<span></span>').addClass('innernametext').text(basename).prop('title', basename);
var conflictingItems = this.$fileList.find('tr[data-file="' + this._jqSelEscape(name) + '"]');
diff --git a/apps/files/l10n/da.js b/apps/files/l10n/da.js
index 0aa2d0a4eab..d07695e4d3c 100644
--- a/apps/files/l10n/da.js
+++ b/apps/files/l10n/da.js
@@ -21,6 +21,7 @@ OC.L10N.register(
"Target folder \"{dir}\" does not exist any more" : "Destinationsmappen \"{dir}\" findes ikke længere",
"Not enough free space" : "Ikke nok fri plads",
"An unknown error has occurred" : "En ukendt fejl er opstået",
+ "File could not be uploaded" : "Filen kunne ikke uploades",
"Uploading …" : "Uploader ...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} af {totalSize} ({bitrate})",
"Uploading that item is not supported" : "Upload af dette er ikke supporteret",
@@ -41,6 +42,8 @@ OC.L10N.register(
"Details" : "Detaljer",
"Please select tag(s) to add to the selection" : "Vælg venligst tag(s) for at tilføje til udvalget",
"Apply tag(s) to selection" : "Anvend tag(s) på markeringen",
+ "Select directory \"{dirName}\"" : "Vælg katalog \"{dirName}\"",
+ "Select file \"{fileName}\"" : "Vælg fil \"{fileName}\"",
"Pending" : "Afventer",
"Unable to determine date" : "Kan ikke fastslå datoen",
"This operation is forbidden" : "Denne operation er forbudt",
@@ -70,6 +73,7 @@ OC.L10N.register(
"_%n file_::_%n files_" : ["%n fil","%n filer"],
"{dirs} and {files}" : "{dirs} og {files}",
"_including %n hidden_::_including %n hidden_" : ["%n skujlte inkluderet","%n skujlte inkluderet"],
+ "You do not have permission to upload or create files here" : "Du har ikke tilladelse til at uploade eller oprette filer her",
"_Uploading %n file_::_Uploading %n files_" : ["Uploader %n fil","Uploader %n filer"],
"New" : "Ny",
"Select file range" : "Vælg filområde",
@@ -168,6 +172,7 @@ OC.L10N.register(
"Transfer {path} to {userid}" : "Overfør {path} til {userid}",
"Invalid path selected" : "Ugyldig filsti valgt",
"Ownership transfer request sent" : "Anmodning om ejerskabsoverdragelse sendt",
+ "Cannot transfer ownership of a file or folder you do not own" : "Kan ikke overføre ejerskab af en fil eller mappe, du ikke ejer",
"Tags" : "Mærker",
"Unable to change the favourite state of the file" : "Kan ikke ændre favorittilstanden for filen",
"Error while loading the file data" : "Fejl under indlæsning af fildata",
diff --git a/apps/files/l10n/da.json b/apps/files/l10n/da.json
index 8671562f2f9..d3177ba5057 100644
--- a/apps/files/l10n/da.json
+++ b/apps/files/l10n/da.json
@@ -19,6 +19,7 @@
"Target folder \"{dir}\" does not exist any more" : "Destinationsmappen \"{dir}\" findes ikke længere",
"Not enough free space" : "Ikke nok fri plads",
"An unknown error has occurred" : "En ukendt fejl er opstået",
+ "File could not be uploaded" : "Filen kunne ikke uploades",
"Uploading …" : "Uploader ...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} af {totalSize} ({bitrate})",
"Uploading that item is not supported" : "Upload af dette er ikke supporteret",
@@ -39,6 +40,8 @@
"Details" : "Detaljer",
"Please select tag(s) to add to the selection" : "Vælg venligst tag(s) for at tilføje til udvalget",
"Apply tag(s) to selection" : "Anvend tag(s) på markeringen",
+ "Select directory \"{dirName}\"" : "Vælg katalog \"{dirName}\"",
+ "Select file \"{fileName}\"" : "Vælg fil \"{fileName}\"",
"Pending" : "Afventer",
"Unable to determine date" : "Kan ikke fastslå datoen",
"This operation is forbidden" : "Denne operation er forbudt",
@@ -68,6 +71,7 @@
"_%n file_::_%n files_" : ["%n fil","%n filer"],
"{dirs} and {files}" : "{dirs} og {files}",
"_including %n hidden_::_including %n hidden_" : ["%n skujlte inkluderet","%n skujlte inkluderet"],
+ "You do not have permission to upload or create files here" : "Du har ikke tilladelse til at uploade eller oprette filer her",
"_Uploading %n file_::_Uploading %n files_" : ["Uploader %n fil","Uploader %n filer"],
"New" : "Ny",
"Select file range" : "Vælg filområde",
@@ -166,6 +170,7 @@
"Transfer {path} to {userid}" : "Overfør {path} til {userid}",
"Invalid path selected" : "Ugyldig filsti valgt",
"Ownership transfer request sent" : "Anmodning om ejerskabsoverdragelse sendt",
+ "Cannot transfer ownership of a file or folder you do not own" : "Kan ikke overføre ejerskab af en fil eller mappe, du ikke ejer",
"Tags" : "Mærker",
"Unable to change the favourite state of the file" : "Kan ikke ændre favorittilstanden for filen",
"Error while loading the file data" : "Fejl under indlæsning af fildata",
diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js
index 29889364a8d..b6e73aa44df 100644
--- a/apps/files/l10n/de_DE.js
+++ b/apps/files/l10n/de_DE.js
@@ -172,7 +172,7 @@ OC.L10N.register(
"Transfer {path} to {userid}" : "Übertrage {path} an {userid}",
"Invalid path selected" : "Ungültiger Pfad ausgewählt",
"Ownership transfer request sent" : "Anforderung für die Besitzübertragung versendet",
- "Cannot transfer ownership of a file or folder you do not own" : "Sie können den Besitz einer Datei oder eines Ordners, die Sie nicht besitzen, nicht übertragen",
+ "Cannot transfer ownership of a file or folder you do not own" : "Sie können den Besitz von Dateien oder Ordnern, die Sie nicht besitzen, nicht übertragen",
"Tags" : "Tags",
"Unable to change the favourite state of the file" : "Der favorisierte Status der Datei kann nicht geändert werden",
"Error while loading the file data" : "Fehler beim Laden der Datei-Daten",
diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json
index ce3778ec75a..b812b78f60f 100644
--- a/apps/files/l10n/de_DE.json
+++ b/apps/files/l10n/de_DE.json
@@ -170,7 +170,7 @@
"Transfer {path} to {userid}" : "Übertrage {path} an {userid}",
"Invalid path selected" : "Ungültiger Pfad ausgewählt",
"Ownership transfer request sent" : "Anforderung für die Besitzübertragung versendet",
- "Cannot transfer ownership of a file or folder you do not own" : "Sie können den Besitz einer Datei oder eines Ordners, die Sie nicht besitzen, nicht übertragen",
+ "Cannot transfer ownership of a file or folder you do not own" : "Sie können den Besitz von Dateien oder Ordnern, die Sie nicht besitzen, nicht übertragen",
"Tags" : "Tags",
"Unable to change the favourite state of the file" : "Der favorisierte Status der Datei kann nicht geändert werden",
"Error while loading the file data" : "Fehler beim Laden der Datei-Daten",
diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js
index ce618d092b3..da77b7682d0 100644
--- a/apps/files/l10n/es.js
+++ b/apps/files/l10n/es.js
@@ -21,6 +21,7 @@ OC.L10N.register(
"Target folder \"{dir}\" does not exist any more" : "La carpeta de destino \"{dir}\" ya no existe",
"Not enough free space" : "No hay espacio libre suficiente",
"An unknown error has occurred" : "Ha ocurrido un error desconocido",
+ "File could not be uploaded" : "No se ha podido subir el archivo",
"Uploading …" : "Subiendo …",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
"Uploading that item is not supported" : "Subir este archivo no es compatible",
diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json
index fa96a821fa2..a1b3e3eb1a2 100644
--- a/apps/files/l10n/es.json
+++ b/apps/files/l10n/es.json
@@ -19,6 +19,7 @@
"Target folder \"{dir}\" does not exist any more" : "La carpeta de destino \"{dir}\" ya no existe",
"Not enough free space" : "No hay espacio libre suficiente",
"An unknown error has occurred" : "Ha ocurrido un error desconocido",
+ "File could not be uploaded" : "No se ha podido subir el archivo",
"Uploading …" : "Subiendo …",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
"Uploading that item is not supported" : "Subir este archivo no es compatible",
diff --git a/apps/files_external/l10n/de.js b/apps/files_external/l10n/de.js
index 9b165a37b6a..8ca64972667 100644
--- a/apps/files_external/l10n/de.js
+++ b/apps/files_external/l10n/de.js
@@ -128,7 +128,7 @@ OC.L10N.register(
"Storage type" : "Speichertyp",
"Scope" : "Anwendungsbereich",
"Open documentation" : "Dokumentation öffnen",
- "External storage enables you to mount external storage services and devices as secondary Nextcloud storage devices. You may also allow users to mount their own external storage services." : "Externer Speicher erlaubt es, externe Speicherdienste und Geräte als Zweitspeicher-Geräte in Nextcloud einzubinden. Es kann Benutzern erlaubt werden eigene externe Speicherdienste einzubinden.",
+ "External storage enables you to mount external storage services and devices as secondary Nextcloud storage devices. You may also allow users to mount their own external storage services." : "Externer Speicher erlaubt es, externe Speicherdienste und Geräte als Zweitspeicher-Geräte in Nextcloud einzubinden. Es kann Benutzern erlaubt werden, eigene externe Speicherdienste einzubinden.",
"Folder name" : "Ordnername",
"Authentication" : "Authentifizierung",
"Configuration" : "Konfiguration",
diff --git a/apps/files_external/l10n/de.json b/apps/files_external/l10n/de.json
index ade6afad6be..c0254eb80de 100644
--- a/apps/files_external/l10n/de.json
+++ b/apps/files_external/l10n/de.json
@@ -126,7 +126,7 @@
"Storage type" : "Speichertyp",
"Scope" : "Anwendungsbereich",
"Open documentation" : "Dokumentation öffnen",
- "External storage enables you to mount external storage services and devices as secondary Nextcloud storage devices. You may also allow users to mount their own external storage services." : "Externer Speicher erlaubt es, externe Speicherdienste und Geräte als Zweitspeicher-Geräte in Nextcloud einzubinden. Es kann Benutzern erlaubt werden eigene externe Speicherdienste einzubinden.",
+ "External storage enables you to mount external storage services and devices as secondary Nextcloud storage devices. You may also allow users to mount their own external storage services." : "Externer Speicher erlaubt es, externe Speicherdienste und Geräte als Zweitspeicher-Geräte in Nextcloud einzubinden. Es kann Benutzern erlaubt werden, eigene externe Speicherdienste einzubinden.",
"Folder name" : "Ordnername",
"Authentication" : "Authentifizierung",
"Configuration" : "Konfiguration",
diff --git a/apps/settings/l10n/de.js b/apps/settings/l10n/de.js
index 092907afa08..85626c11e34 100644
--- a/apps/settings/l10n/de.js
+++ b/apps/settings/l10n/de.js
@@ -66,7 +66,7 @@ OC.L10N.register(
"Backend does not support password change, but the user's encryption key was updated." : "Das Backend unterstützt die Passwortänderung nicht, aber das Verschlüsselungspasswort des Benutzers wurde aktualisiert",
"installing and updating apps via the App Store or Federated Cloud Sharing" : "Installieren und Aktualisieren von Apps durch den App-Store oder durch Federated-Cloud-Sharing",
"Federated Cloud Sharing" : "Federated-Cloud-Sharing",
- "cURL is using an outdated %1$s version (%2$s). Please update your operating system or features such as %3$s will not work reliably." : "cURL verwendet eine veraltete %1$s Version (%2$s). Bitte aktualisiere Dein Betriebssystem, da ansonsten Funktionen, wie z.B. %3$s, nicht zuverlässig funktionieren.",
+ "cURL is using an outdated %1$s version (%2$s). Please update your operating system or features such as %3$s will not work reliably." : "cURL verwendet eine veraltete %1$s Version (%2$s). Bitte aktualisiere Dein Betriebssystem, da ansonsten Funktionen, wie z. B. %3$s, nicht zuverlässig funktionieren.",
"The PHP OPcache module is not loaded. For better performance it is recommended to load it into your PHP installation." : "Das PHP-OPcache-Modul ist nicht geladen. Für eine bessere Leistung empfiehlt es sich, das Modul in Ihre PHP-Installation zu laden.",
"OPcache is disabled. For better performance, it is recommended to apply <code>opcache.enable=1</code> to your PHP configuration." : "OPcache ist deaktiviert. Für eine bessere Leistung wird empfohlen, <code>opcache.enable=1</code> in Deiner PHP-Konfiguration anzuwenden.",
"OPcache is configured to remove code comments. With OPcache enabled, <code>opcache.save_comments=1</code> must be set for Nextcloud to function." : "OPcache ist so konfiguriert, dass Codekommentare entfernt werden. Wenn OPcache aktiviert ist, muss <code>opcache.save_comments=1</code> gesetzt werden, damit Nextcloud funktioniert.",
@@ -247,7 +247,7 @@ OC.L10N.register(
"Unable to update full name" : "Der vollständige Name konnte nicht aktualisiert werden",
"No full name set" : "Kein vollständiger Name festgelegt",
"Email options" : "E-Mail-Optionen",
- "Primary email for password reset and notifications" : "Primäre E-Mail-Adresse für Benachrichtigungen und Passwort-Zurücksetzen",
+ "Primary email for password reset and notifications" : "Primäre E-Mail-Adresse für Benachrichtigungen und zum Zurücksetzen des Passworts",
"Remove primary email" : "Primäre E-Mail-Adresse entfernen",
"Delete email" : "E-Mail löschen",
"Unset as primary email" : "Als primäre E-Mail-Adresse deaktivieren",
@@ -265,15 +265,15 @@ OC.L10N.register(
"Your headline" : "Deine Überschrift",
"Unable to update headline" : "Überschrift konnte nicht aktualisiert werden",
"Language" : "Sprache",
- "Help translate" : "Hilf bei der Übersetzung",
+ "Help translate" : "Hilf bei der Übersetzung mit",
"Unable to update language" : "Sprache konnte nicht aktualisiert werden",
"No language set" : "Keine Sprache eingestellt.",
"Your organisation" : "Deine Organisation",
"Unable to update organisation" : "Organisation konnte nicht aktualisiert werden",
- "Edit your Profile visibility" : "Bearbeite die Sichtbarkeit Deines Profils",
+ "Edit your Profile visibility" : "Sichtbarkeit des Profils anpassen",
"Enable Profile" : "Profil aktivieren",
"Unable to update profile enabled state" : "Der Status für aktiviertes Profil konnte nicht aktualisiert werden",
- "The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected." : "Die restriktivere Einstellung von Sichtbarkeit oder Bereich wird in Deinem\n Profil berücksichtigt. Wenn beispielsweise die Sichtbarkeit auf \"Für alle anzeigen\" und der Bereich auf \"Privat\" festgelegt ist, wird \"Privat\" respektiert.",
+ "The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected." : "Die restriktivere Einstellung von Sichtbarkeit oder Bereich wird in Deinem Profil berücksichtigt. Wenn beispielsweise die Sichtbarkeit auf \"Für jeden sichtbar\" und der Bereich auf \"Privat\" festgelegt ist, wird \"Privat\" respektiert.",
"{displayId}" : "{displayId}",
"Unable to update visibility of {displayId}" : "Sichtbarkeit von {displayId} kann nicht aktualisiert werden",
"Your role" : "Deine Funktion",
@@ -372,11 +372,11 @@ OC.L10N.register(
"Role" : "Funktion",
"Twitter" : "Twitter",
"Website" : "Webseite",
- "Profile visibility" : "Sichtbarkeit des Profils",
+ "Profile visibility" : "Sichtbarkeit Deines Profils",
"Not available as this property is required for core functionality including file sharing and calendar invitations" : "Nicht verfügbar, da diese Eigenschaft für Kernfunktionen wie Dateifreigabe und Kalendereinladungen erforderlich ist.",
"Not available as publishing user specific data to the lookup server is not allowed, contact your system administrator if you have any questions" : "Nicht verfügbar, da die Veröffentlichung benutzerspezifischer Daten auf dem Lookup-Server nicht zulässig ist. Wende Dich bei Fragen an Deinen Systemadministrator",
- "Show to everyone" : "Jedem anzeigen",
- "Show to logged in users only" : "Nur angemeldeten Benutzern anzeigen",
+ "Show to everyone" : "Für jeden sichtbar",
+ "Show to logged in users only" : "Nur für angemeldete Benutzer sichtbar",
"Hide" : "Ausblenden",
"Download and enable" : "Herunterladen und aktivieren",
"Enable untested app" : "Ungetestete App aktivieren",
@@ -395,7 +395,7 @@ OC.L10N.register(
"SSL/TLS" : "SSL/TLS",
"STARTTLS" : "STARTTLS",
"Open documentation" : "Dokumentation öffnen",
- "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Es ist wichtig diesen Server so zu konfigurieren, dass E-Mails versandt werden können, z.B. für den Passwort-Reset und Benachrichtigungen.",
+ "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Es ist wichtig, diesen Server so zu konfigurieren, dass E-Mails versandt werden können, z. B. zum Zurücksetzen des Passworts und für Benachrichtigungen.",
"Send mode" : "Sendemodus",
"Encryption" : "Verschlüsselung",
"Sendmail mode" : "Sendmail-Modus",
@@ -419,7 +419,7 @@ OC.L10N.register(
"Check the security of your Nextcloud over <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">our security scan ↗</a>." : "Überprüfe die Sicherheit Deiner Nextcloud über <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">unseren Sicherheitsscanner ↗</a>.",
"Version" : "Version",
"Server-side encryption" : "Serverseitige Verschlüsselung",
- "Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "Serverseitige Verschlüsselung ermöglicht es die auf diesen Server hochgeladenen Dateien zu verschlüsseln. Dies führt allerdings auch zu Nachteilen, wie z.B. einem Geschwindigkeitsverlust. Sie sollte deshalb nur eingeschaltet werden, wenn sie wirklich benötigt wird.",
+ "Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "Serverseitige Verschlüsselung ermöglicht es, die auf diesen Server hochgeladenen Dateien zu verschlüsseln. Dies führt allerdings auch zu Nachteilen, wie z. B. einem Geschwindigkeitsverlust. Sie sollte deshalb nur eingeschaltet werden, wenn sie wirklich benötigt wird.",
"Enable server-side encryption" : "Serverseitige Verschlüsselung aktivieren",
"Please read carefully before activating server-side encryption: " : "Bitte sorgfältig lesen, bevor die serverseitige Verschlüsselung aktiviert wird:",
"Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Wird die Verschlüsselung einmal aktiviert, so werden alle ab diesem Zeitpunkt hochgeladene Dateien verschlüsselt. Sie kann nur wieder deaktiviert werden, wenn das Verschlüsselungsmodul dies unterstützt und alle Voraussetzungen (wie das Setzen eines Wiederherstellungsschlüssels) im Vorhinein erfüllt wurden.",
diff --git a/apps/settings/l10n/de.json b/apps/settings/l10n/de.json
index e32cb5bc016..10f54fbb53a 100644
--- a/apps/settings/l10n/de.json
+++ b/apps/settings/l10n/de.json
@@ -64,7 +64,7 @@
"Backend does not support password change, but the user's encryption key was updated." : "Das Backend unterstützt die Passwortänderung nicht, aber das Verschlüsselungspasswort des Benutzers wurde aktualisiert",
"installing and updating apps via the App Store or Federated Cloud Sharing" : "Installieren und Aktualisieren von Apps durch den App-Store oder durch Federated-Cloud-Sharing",
"Federated Cloud Sharing" : "Federated-Cloud-Sharing",
- "cURL is using an outdated %1$s version (%2$s). Please update your operating system or features such as %3$s will not work reliably." : "cURL verwendet eine veraltete %1$s Version (%2$s). Bitte aktualisiere Dein Betriebssystem, da ansonsten Funktionen, wie z.B. %3$s, nicht zuverlässig funktionieren.",
+ "cURL is using an outdated %1$s version (%2$s). Please update your operating system or features such as %3$s will not work reliably." : "cURL verwendet eine veraltete %1$s Version (%2$s). Bitte aktualisiere Dein Betriebssystem, da ansonsten Funktionen, wie z. B. %3$s, nicht zuverlässig funktionieren.",
"The PHP OPcache module is not loaded. For better performance it is recommended to load it into your PHP installation." : "Das PHP-OPcache-Modul ist nicht geladen. Für eine bessere Leistung empfiehlt es sich, das Modul in Ihre PHP-Installation zu laden.",
"OPcache is disabled. For better performance, it is recommended to apply <code>opcache.enable=1</code> to your PHP configuration." : "OPcache ist deaktiviert. Für eine bessere Leistung wird empfohlen, <code>opcache.enable=1</code> in Deiner PHP-Konfiguration anzuwenden.",
"OPcache is configured to remove code comments. With OPcache enabled, <code>opcache.save_comments=1</code> must be set for Nextcloud to function." : "OPcache ist so konfiguriert, dass Codekommentare entfernt werden. Wenn OPcache aktiviert ist, muss <code>opcache.save_comments=1</code> gesetzt werden, damit Nextcloud funktioniert.",
@@ -245,7 +245,7 @@
"Unable to update full name" : "Der vollständige Name konnte nicht aktualisiert werden",
"No full name set" : "Kein vollständiger Name festgelegt",
"Email options" : "E-Mail-Optionen",
- "Primary email for password reset and notifications" : "Primäre E-Mail-Adresse für Benachrichtigungen und Passwort-Zurücksetzen",
+ "Primary email for password reset and notifications" : "Primäre E-Mail-Adresse für Benachrichtigungen und zum Zurücksetzen des Passworts",
"Remove primary email" : "Primäre E-Mail-Adresse entfernen",
"Delete email" : "E-Mail löschen",
"Unset as primary email" : "Als primäre E-Mail-Adresse deaktivieren",
@@ -263,15 +263,15 @@
"Your headline" : "Deine Überschrift",
"Unable to update headline" : "Überschrift konnte nicht aktualisiert werden",
"Language" : "Sprache",
- "Help translate" : "Hilf bei der Übersetzung",
+ "Help translate" : "Hilf bei der Übersetzung mit",
"Unable to update language" : "Sprache konnte nicht aktualisiert werden",
"No language set" : "Keine Sprache eingestellt.",
"Your organisation" : "Deine Organisation",
"Unable to update organisation" : "Organisation konnte nicht aktualisiert werden",
- "Edit your Profile visibility" : "Bearbeite die Sichtbarkeit Deines Profils",
+ "Edit your Profile visibility" : "Sichtbarkeit des Profils anpassen",
"Enable Profile" : "Profil aktivieren",
"Unable to update profile enabled state" : "Der Status für aktiviertes Profil konnte nicht aktualisiert werden",
- "The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected." : "Die restriktivere Einstellung von Sichtbarkeit oder Bereich wird in Deinem\n Profil berücksichtigt. Wenn beispielsweise die Sichtbarkeit auf \"Für alle anzeigen\" und der Bereich auf \"Privat\" festgelegt ist, wird \"Privat\" respektiert.",
+ "The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected." : "Die restriktivere Einstellung von Sichtbarkeit oder Bereich wird in Deinem Profil berücksichtigt. Wenn beispielsweise die Sichtbarkeit auf \"Für jeden sichtbar\" und der Bereich auf \"Privat\" festgelegt ist, wird \"Privat\" respektiert.",
"{displayId}" : "{displayId}",
"Unable to update visibility of {displayId}" : "Sichtbarkeit von {displayId} kann nicht aktualisiert werden",
"Your role" : "Deine Funktion",
@@ -370,11 +370,11 @@
"Role" : "Funktion",
"Twitter" : "Twitter",
"Website" : "Webseite",
- "Profile visibility" : "Sichtbarkeit des Profils",
+ "Profile visibility" : "Sichtbarkeit Deines Profils",
"Not available as this property is required for core functionality including file sharing and calendar invitations" : "Nicht verfügbar, da diese Eigenschaft für Kernfunktionen wie Dateifreigabe und Kalendereinladungen erforderlich ist.",
"Not available as publishing user specific data to the lookup server is not allowed, contact your system administrator if you have any questions" : "Nicht verfügbar, da die Veröffentlichung benutzerspezifischer Daten auf dem Lookup-Server nicht zulässig ist. Wende Dich bei Fragen an Deinen Systemadministrator",
- "Show to everyone" : "Jedem anzeigen",
- "Show to logged in users only" : "Nur angemeldeten Benutzern anzeigen",
+ "Show to everyone" : "Für jeden sichtbar",
+ "Show to logged in users only" : "Nur für angemeldete Benutzer sichtbar",
"Hide" : "Ausblenden",
"Download and enable" : "Herunterladen und aktivieren",
"Enable untested app" : "Ungetestete App aktivieren",
@@ -393,7 +393,7 @@
"SSL/TLS" : "SSL/TLS",
"STARTTLS" : "STARTTLS",
"Open documentation" : "Dokumentation öffnen",
- "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Es ist wichtig diesen Server so zu konfigurieren, dass E-Mails versandt werden können, z.B. für den Passwort-Reset und Benachrichtigungen.",
+ "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Es ist wichtig, diesen Server so zu konfigurieren, dass E-Mails versandt werden können, z. B. zum Zurücksetzen des Passworts und für Benachrichtigungen.",
"Send mode" : "Sendemodus",
"Encryption" : "Verschlüsselung",
"Sendmail mode" : "Sendmail-Modus",
@@ -417,7 +417,7 @@
"Check the security of your Nextcloud over <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">our security scan ↗</a>." : "Überprüfe die Sicherheit Deiner Nextcloud über <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">unseren Sicherheitsscanner ↗</a>.",
"Version" : "Version",
"Server-side encryption" : "Serverseitige Verschlüsselung",
- "Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "Serverseitige Verschlüsselung ermöglicht es die auf diesen Server hochgeladenen Dateien zu verschlüsseln. Dies führt allerdings auch zu Nachteilen, wie z.B. einem Geschwindigkeitsverlust. Sie sollte deshalb nur eingeschaltet werden, wenn sie wirklich benötigt wird.",
+ "Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "Serverseitige Verschlüsselung ermöglicht es, die auf diesen Server hochgeladenen Dateien zu verschlüsseln. Dies führt allerdings auch zu Nachteilen, wie z. B. einem Geschwindigkeitsverlust. Sie sollte deshalb nur eingeschaltet werden, wenn sie wirklich benötigt wird.",
"Enable server-side encryption" : "Serverseitige Verschlüsselung aktivieren",
"Please read carefully before activating server-side encryption: " : "Bitte sorgfältig lesen, bevor die serverseitige Verschlüsselung aktiviert wird:",
"Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Wird die Verschlüsselung einmal aktiviert, so werden alle ab diesem Zeitpunkt hochgeladene Dateien verschlüsselt. Sie kann nur wieder deaktiviert werden, wenn das Verschlüsselungsmodul dies unterstützt und alle Voraussetzungen (wie das Setzen eines Wiederherstellungsschlüssels) im Vorhinein erfüllt wurden.",
diff --git a/apps/settings/l10n/el.js b/apps/settings/l10n/el.js
index 1ee32a4ca86..7ad8f009232 100644
--- a/apps/settings/l10n/el.js
+++ b/apps/settings/l10n/el.js
@@ -125,7 +125,7 @@ OC.L10N.register(
"There are some user imported SSL certificates present, that are not used anymore with Nextcloud 21. They can be imported on the command line via \"occ security:certificates:import\" command. Their paths inside the data directory are shown below." : "Υπάρχουν ορισμένα πιστοποιητικά SSL εισαγόμενα από τον χρήστη, τα οποία δεν χρησιμοποιούνται πλέον με το Nextcloud 21. Μπορούν να εισαχθούν στη γραμμή εντολών μέσω της εντολής \"occ security: documents: import\". Οι διαδρομές τους στον κατάλογο δεδομένων εμφανίζονται παρακάτω.",
"The old server-side-encryption format is enabled. We recommend disabling this." : "Η παλιά διαμόρφωση κρυπτογράφησης από διακομιστή σε διακομιστή είναι ενεργοποιημένη. Σας προτείνουμε να την απενεργοποιήσετε.",
"Nextcloud settings" : "Ρυθμίσεις Nextcloud ",
- "Administration privileges" : "Προνόμια διαχείρισης",
+ "Administration privileges" : "Προνόμια διαχειριστή",
"Here you can decide which group can access certain sections of the administration settings." : "Εδώ ορίστε ποια ομάδα μπορεί να έχει πρόσβαση σε ορισμένες ενότητες των ρυθμίσεων διαχείρισης.",
"None" : "Τίποτα",
"Unable to modify setting" : "Δεν είναι δυνατή η τροποποίηση της ρύθμισης",
diff --git a/apps/settings/l10n/el.json b/apps/settings/l10n/el.json
index 0ed7985b99e..1d4a465e8b3 100644
--- a/apps/settings/l10n/el.json
+++ b/apps/settings/l10n/el.json
@@ -123,7 +123,7 @@
"There are some user imported SSL certificates present, that are not used anymore with Nextcloud 21. They can be imported on the command line via \"occ security:certificates:import\" command. Their paths inside the data directory are shown below." : "Υπάρχουν ορισμένα πιστοποιητικά SSL εισαγόμενα από τον χρήστη, τα οποία δεν χρησιμοποιούνται πλέον με το Nextcloud 21. Μπορούν να εισαχθούν στη γραμμή εντολών μέσω της εντολής \"occ security: documents: import\". Οι διαδρομές τους στον κατάλογο δεδομένων εμφανίζονται παρακάτω.",
"The old server-side-encryption format is enabled. We recommend disabling this." : "Η παλιά διαμόρφωση κρυπτογράφησης από διακομιστή σε διακομιστή είναι ενεργοποιημένη. Σας προτείνουμε να την απενεργοποιήσετε.",
"Nextcloud settings" : "Ρυθμίσεις Nextcloud ",
- "Administration privileges" : "Προνόμια διαχείρισης",
+ "Administration privileges" : "Προνόμια διαχειριστή",
"Here you can decide which group can access certain sections of the administration settings." : "Εδώ ορίστε ποια ομάδα μπορεί να έχει πρόσβαση σε ορισμένες ενότητες των ρυθμίσεων διαχείρισης.",
"None" : "Τίποτα",
"Unable to modify setting" : "Δεν είναι δυνατή η τροποποίηση της ρύθμισης",
diff --git a/apps/sharebymail/l10n/de.js b/apps/sharebymail/l10n/de.js
index 012cc40a5dc..b48281d0746 100644
--- a/apps/sharebymail/l10n/de.js
+++ b/apps/sharebymail/l10n/de.js
@@ -49,7 +49,7 @@ OC.L10N.register(
"Could not find share" : "Freigabe konnte nicht gefunden werden",
"Share provider which allows you to share files by mail" : "Anbieter zum Teilen. Ermöglicht das Teilen von Dateien per E-Mail",
"Allows users to share a personalized link to a file or folder by putting in an email address." : "Ermöglicht Benutzern eine personalisierte Verknüpfung zu einer Datei oder einem Ordner durch Eingabe einer E-Mail-Adresse zu teilen.",
- "Send password by mail" : "Passwort per Mail senden",
+ "Send password by mail" : "Passwort per E-Mail senden",
"Reply to initiator" : "Antwort an Initiator"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/sharebymail/l10n/de.json b/apps/sharebymail/l10n/de.json
index c1b89f54ffd..05c6cd12db5 100644
--- a/apps/sharebymail/l10n/de.json
+++ b/apps/sharebymail/l10n/de.json
@@ -47,7 +47,7 @@
"Could not find share" : "Freigabe konnte nicht gefunden werden",
"Share provider which allows you to share files by mail" : "Anbieter zum Teilen. Ermöglicht das Teilen von Dateien per E-Mail",
"Allows users to share a personalized link to a file or folder by putting in an email address." : "Ermöglicht Benutzern eine personalisierte Verknüpfung zu einer Datei oder einem Ordner durch Eingabe einer E-Mail-Adresse zu teilen.",
- "Send password by mail" : "Passwort per Mail senden",
+ "Send password by mail" : "Passwort per E-Mail senden",
"Reply to initiator" : "Antwort an Initiator"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/systemtags/l10n/de.js b/apps/systemtags/l10n/de.js
index 987c16db766..3e573195fbd 100644
--- a/apps/systemtags/l10n/de.js
+++ b/apps/systemtags/l10n/de.js
@@ -4,7 +4,7 @@ OC.L10N.register(
"Tag name is empty" : "Schlagwortbezeichnung ist leer",
"Update" : "Aktualisieren",
"Create" : "Erstellen",
- "Select tag …" : "Tag wählen…",
+ "Select tag …" : "Schlagwort wählen …",
"System tag %1$s added by the system" : "System-Tag %1$s vom System hinzugefügt",
"Added system tag {systemtag}" : "System-Tag {systemtag} hinzugefügt",
"Added system tag %1$s" : "System-Tag %1$s hinzugefügt",
@@ -43,6 +43,8 @@ OC.L10N.register(
"%s (invisible)" : "%s (unsichtbar)",
"<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert",
"Tags" : "Tags",
+ "All tagged %s …" : "Alle Schlagwörter %s hinzugefügt ....",
+ "tagged %s" : "Schlagwort %s hinzugefügt",
"Collaborative tags" : "Kollaborative Tags",
"Collaborative tagging functionality which shares tags among users." : "Kollaborative Tags Schlagwort-Funktionalität, welche Schlagworte unter den Benutzern teilt.",
"Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Gemeinschaftliche Schlagwort-Funktionalität, welche Schlagworte unter den Benutzern teilt. Sehr gut für Gruppen.\n(Wenn Du ein Anbieter mit einer Mehrkundeninstallation bist, so ist angeraten diese App zu deaktiveren, da die Schlagworte mit allen Kunden geteilt werden.)",
diff --git a/apps/systemtags/l10n/de.json b/apps/systemtags/l10n/de.json
index 2e861aafe94..f44234a6241 100644
--- a/apps/systemtags/l10n/de.json
+++ b/apps/systemtags/l10n/de.json
@@ -2,7 +2,7 @@
"Tag name is empty" : "Schlagwortbezeichnung ist leer",
"Update" : "Aktualisieren",
"Create" : "Erstellen",
- "Select tag …" : "Tag wählen…",
+ "Select tag …" : "Schlagwort wählen …",
"System tag %1$s added by the system" : "System-Tag %1$s vom System hinzugefügt",
"Added system tag {systemtag}" : "System-Tag {systemtag} hinzugefügt",
"Added system tag %1$s" : "System-Tag %1$s hinzugefügt",
@@ -41,6 +41,8 @@
"%s (invisible)" : "%s (unsichtbar)",
"<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert",
"Tags" : "Tags",
+ "All tagged %s …" : "Alle Schlagwörter %s hinzugefügt ....",
+ "tagged %s" : "Schlagwort %s hinzugefügt",
"Collaborative tags" : "Kollaborative Tags",
"Collaborative tagging functionality which shares tags among users." : "Kollaborative Tags Schlagwort-Funktionalität, welche Schlagworte unter den Benutzern teilt.",
"Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Gemeinschaftliche Schlagwort-Funktionalität, welche Schlagworte unter den Benutzern teilt. Sehr gut für Gruppen.\n(Wenn Du ein Anbieter mit einer Mehrkundeninstallation bist, so ist angeraten diese App zu deaktiveren, da die Schlagworte mit allen Kunden geteilt werden.)",
diff --git a/apps/updatenotification/l10n/de.js b/apps/updatenotification/l10n/de.js
index 7be7f614691..be37fac5bb9 100644
--- a/apps/updatenotification/l10n/de.js
+++ b/apps/updatenotification/l10n/de.js
@@ -45,8 +45,8 @@ OC.L10N.register(
"The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Die aktuellste stabile Version. Diese ist für den regelmäßigen Gebrauch geeignet und wird immer auf die letzte Hauptversion aktualisiert.",
"Beta" : "Beta",
"A pre-release version only for testing new features, not for production environments." : "Eine Vorabversion die einzig zum Testen neuer Funktionen dient, nicht aber für den Einsatz in Produktivumgebungen geeignet ist.",
- "_<strong>%n</strong> app has no compatible version for this Nextcloud version available._::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available._" : ["Für <strong>%n</strong> App steht keine kompatible Version zur Verfügung.","Für <strong>%n</strong> Apps steht keine kompatible Version zur Verfügung."],
+ "_<strong>%n</strong> app has no compatible version for this Nextcloud version available._::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available._" : ["Für <strong>%n</strong> App steht keine kompatible Version zur Verfügung.","Für <strong>%n</strong> Apps stehen keine kompatible Versionen zur Verfügung."],
"<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "Für <strong>alle</strong> Apps steht eine kompatible Version zur Verfügung",
- "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["Für <strong>%n</strong> App steht keine kompatible Version zur Verfügung","Für <strong>%n</strong> Apps steht keine kompatible Version zur Verfügung"]
+ "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["Für <strong>%n</strong> App steht keine kompatible Version zur Verfügung","Für <strong>%n</strong> Apps stehen keine kompatible Versionen zur Verfügung"]
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/de.json b/apps/updatenotification/l10n/de.json
index f9e7cefe51f..fcec97fb5de 100644
--- a/apps/updatenotification/l10n/de.json
+++ b/apps/updatenotification/l10n/de.json
@@ -43,8 +43,8 @@
"The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Die aktuellste stabile Version. Diese ist für den regelmäßigen Gebrauch geeignet und wird immer auf die letzte Hauptversion aktualisiert.",
"Beta" : "Beta",
"A pre-release version only for testing new features, not for production environments." : "Eine Vorabversion die einzig zum Testen neuer Funktionen dient, nicht aber für den Einsatz in Produktivumgebungen geeignet ist.",
- "_<strong>%n</strong> app has no compatible version for this Nextcloud version available._::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available._" : ["Für <strong>%n</strong> App steht keine kompatible Version zur Verfügung.","Für <strong>%n</strong> Apps steht keine kompatible Version zur Verfügung."],
+ "_<strong>%n</strong> app has no compatible version for this Nextcloud version available._::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available._" : ["Für <strong>%n</strong> App steht keine kompatible Version zur Verfügung.","Für <strong>%n</strong> Apps stehen keine kompatible Versionen zur Verfügung."],
"<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "Für <strong>alle</strong> Apps steht eine kompatible Version zur Verfügung",
- "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["Für <strong>%n</strong> App steht keine kompatible Version zur Verfügung","Für <strong>%n</strong> Apps steht keine kompatible Version zur Verfügung"]
+ "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["Für <strong>%n</strong> App steht keine kompatible Version zur Verfügung","Für <strong>%n</strong> Apps stehen keine kompatible Versionen zur Verfügung"]
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/de.js b/apps/user_ldap/l10n/de.js
index 083809ef2b3..f09242ac712 100644
--- a/apps/user_ldap/l10n/de.js
+++ b/apps/user_ldap/l10n/de.js
@@ -48,7 +48,7 @@ OC.L10N.register(
"User found and settings verified." : "Benutzer gefunden und Einstellungen überprüft.",
"Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Erwäge es, Deine Suche einzugrenzen, da sie viele Benutzer umfaßte. Nur der erste wird sich anmelden können.",
"An unspecified error occurred. Please check log and settings." : "Es ist ein nicht näher spezifizierter Fehler aufgetreten. Bitte prüfe die Logdatei und Einstellungen.",
- "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Der Suchfilter ist ungültig, möglicherweise bestehen Eingabefehler wie z.B. eine ungerade Anzahl von geöffneten und geschlossenen Klammern. Bitte überarbeiten.",
+ "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Der Suchfilter ist ungültig, möglicherweise bestehen Eingabefehler wie z. B. eine ungerade Anzahl von geöffneten und geschlossenen Klammern. Bitte überarbeiten.",
"A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Es ist ein Verbindungsfehler zum LDAP/AD aufgetreten. Bitte Host, Port und Anmeldeinformationen überprüfen.",
"The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Der \"%u id\" Platzhalter fehlt. Er wird durch den Anmeldenamen ersetzt, wenn LDAP/AD abgefragt wird.",
"Please provide a login name to test against" : "Bitte gib einen Benutzernamen an, um gegen diesen zu testen",
@@ -98,7 +98,7 @@ OC.L10N.register(
"Port" : "Port",
"Detect Port" : "Port ermitteln",
"User DN" : "Benutzer-DN",
- "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Der DN des Benutzers, mit dem der LDAP-Bind durchgeführt werden soll, z.B. uid=agent,dc=example,dc=com. Für anonymen Zugriff DN und Passwort leerlassen.",
+ "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Der DN des Benutzers, mit dem der LDAP-Bind durchgeführt werden soll, z. B. uid=agent,dc=example,dc=com. Für anonymen Zugriff DN und Passwort leerlassen.",
"Password" : "Passwort",
"For anonymous access, leave DN and Password empty." : "Lasse die Felder DN und Passwort für anonymen Zugang leer.",
"Save Credentials" : "Zugangsdaten speichern",
diff --git a/apps/user_ldap/l10n/de.json b/apps/user_ldap/l10n/de.json
index bde16ec3667..6b1d71430cb 100644
--- a/apps/user_ldap/l10n/de.json
+++ b/apps/user_ldap/l10n/de.json
@@ -46,7 +46,7 @@
"User found and settings verified." : "Benutzer gefunden und Einstellungen überprüft.",
"Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Erwäge es, Deine Suche einzugrenzen, da sie viele Benutzer umfaßte. Nur der erste wird sich anmelden können.",
"An unspecified error occurred. Please check log and settings." : "Es ist ein nicht näher spezifizierter Fehler aufgetreten. Bitte prüfe die Logdatei und Einstellungen.",
- "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Der Suchfilter ist ungültig, möglicherweise bestehen Eingabefehler wie z.B. eine ungerade Anzahl von geöffneten und geschlossenen Klammern. Bitte überarbeiten.",
+ "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Der Suchfilter ist ungültig, möglicherweise bestehen Eingabefehler wie z. B. eine ungerade Anzahl von geöffneten und geschlossenen Klammern. Bitte überarbeiten.",
"A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Es ist ein Verbindungsfehler zum LDAP/AD aufgetreten. Bitte Host, Port und Anmeldeinformationen überprüfen.",
"The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Der \"%u id\" Platzhalter fehlt. Er wird durch den Anmeldenamen ersetzt, wenn LDAP/AD abgefragt wird.",
"Please provide a login name to test against" : "Bitte gib einen Benutzernamen an, um gegen diesen zu testen",
@@ -96,7 +96,7 @@
"Port" : "Port",
"Detect Port" : "Port ermitteln",
"User DN" : "Benutzer-DN",
- "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Der DN des Benutzers, mit dem der LDAP-Bind durchgeführt werden soll, z.B. uid=agent,dc=example,dc=com. Für anonymen Zugriff DN und Passwort leerlassen.",
+ "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "Der DN des Benutzers, mit dem der LDAP-Bind durchgeführt werden soll, z. B. uid=agent,dc=example,dc=com. Für anonymen Zugriff DN und Passwort leerlassen.",
"Password" : "Passwort",
"For anonymous access, leave DN and Password empty." : "Lasse die Felder DN und Passwort für anonymen Zugang leer.",
"Save Credentials" : "Zugangsdaten speichern",
diff --git a/apps/workflowengine/l10n/de.js b/apps/workflowengine/l10n/de.js
index d0846bf90be..e2513515921 100644
--- a/apps/workflowengine/l10n/de.js
+++ b/apps/workflowengine/l10n/de.js
@@ -49,7 +49,7 @@ OC.L10N.register(
"Select a filter" : "Filter auswählen",
"Select a comparator" : "Wähle einen Komparator",
"Select a file type" : "Dateityp auswählen",
- "e.g. httpd/unix-directory" : "z.B. httpd/unix-directory",
+ "e.g. httpd/unix-directory" : "z. B. httpd/unix-directory",
"Folder" : "Ordner",
"Images" : "Bilder",
"Office documents" : "Office Dokumente",
diff --git a/apps/workflowengine/l10n/de.json b/apps/workflowengine/l10n/de.json
index 45b5db023fa..9e1d2211ae8 100644
--- a/apps/workflowengine/l10n/de.json
+++ b/apps/workflowengine/l10n/de.json
@@ -47,7 +47,7 @@
"Select a filter" : "Filter auswählen",
"Select a comparator" : "Wähle einen Komparator",
"Select a file type" : "Dateityp auswählen",
- "e.g. httpd/unix-directory" : "z.B. httpd/unix-directory",
+ "e.g. httpd/unix-directory" : "z. B. httpd/unix-directory",
"Folder" : "Ordner",
"Images" : "Bilder",
"Office documents" : "Office Dokumente",