From fa7eb801a766fb630c6ac5351c8792a0b39d6960 Mon Sep 17 00:00:00 2001 From: Avinash Gusain Date: Thu, 5 May 2022 18:31:14 +0530 Subject: [PATCH 1/3] mail trigger on accept,maybe decline --- lib/AppInfo/Application.php | 67 ++++++- lib/Middleware/InvitationMiddleware.php | 236 ++++++++++++++++++++++++ 2 files changed, 302 insertions(+), 1 deletion(-) create mode 100644 lib/Middleware/InvitationMiddleware.php diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index e41f2bfac..bd2438753 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -32,6 +32,20 @@ use OCP\AppFramework\Bootstrap\IBootstrap; use OCP\AppFramework\Bootstrap\IRegistrationContext; use OCP\User\Events\UserDeletedEvent; use function method_exists; +use OCA\Calendar\Middleware\InvitationMiddleware; +use OCP\IRequest; +use OCP\IConfig; +use \OCP\IDBConnection; +use \OC\Core\Application as CoreApplication; +use OCP\Http\Client\IResponse; +use OCP\Calendar\IManager; +use OCP\Mail\IMailer; +use OCP\IL10N; +use OCP\L10N\IFactory as L10NFactory; +use OCP\Defaults; +use OCP\ILogger; +use OCP\IUserManager; + class Application extends App implements IBootstrap { @@ -43,6 +57,53 @@ class Application extends App implements IBootstrap { */ public function __construct(array $params = []) { parent::__construct(self::APP_ID, $params); + //$app = new \OCP\AppFramework\App('ecloud-theme-helper'); + //$containerinvite = $app->getContainer() ; + $container = $this->getContainer(); + /** + * Middleware + */ + $container->registerService('InvitationMiddleware', function($c){ + return new InvitationMiddleware( + $c->get(IRequest::class), + $c->get(IConfig::class), + $c->get(IDBConnection::class), + $c->get(IManager::class), + $c->get(IMailer::class), + $c->get(IL10N::class), + $c->get(Defaults::class), + $c->get(ILogger::class), + $c->get(IUserManager::class), + $c->get(L10NFactory::class), + ); + }); + + // executed in the order that it is registered + $container->registerMiddleware('InvitationMiddleware'); + + $app = new \OCP\AppFramework\App('dav'); + $containerinvite = $app->getContainer() ; + + /** + * Middleware + */ + $containerinvite->registerService('InvitationMiddleware', function($c){ + return new InvitationMiddleware( + $c->get(IRequest::class), + $c->get(IConfig::class), + $c->get(IDBConnection::class), + $c->get(IManager::class), + $c->get(IMailer::class), + $c->get(IL10N::class), + $c->get(Defaults::class), + $c->get(ILogger::class), + $c->get(IUserManager::class), + $c->get(L10NFactory::class), + ); + }); + + // executed in the order that it is registered + $containerinvite->registerMiddleware('InvitationMiddleware'); } /** @@ -57,11 +118,15 @@ class Application extends App implements IBootstrap { } $context->registerEventListener(UserDeletedEvent::class, UserDeletedListener::class); + + } /** * @inheritDoc */ public function boot(IBootContext $context): void { + + } -} +} \ No newline at end of file diff --git a/lib/Middleware/InvitationMiddleware.php b/lib/Middleware/InvitationMiddleware.php new file mode 100644 index 000000000..4cae41519 --- /dev/null +++ b/lib/Middleware/InvitationMiddleware.php @@ -0,0 +1,236 @@ +request = $request; + $this->config = $config; + $this->db = $db; + $this->calendarManager = $calendarManager; + $this->mailer = $mailer; + $this->l10n = $l10n; + $this->defaults = $defaults; + $this->logger = $logger; + $this->iusermanager = $iusermanager; + $this->languageFactory = $languageFactory; + } + + public function afterController( + $controller, + $methodName, + Response $response + ) { + if ( + ($controller instanceof InvitationMaybeController && + $methodName === "tentative") || + ($controller instanceof InvitationResponseController && + ($methodName === "accept" || $methodName === "decline") && + $response->getStatus() == 200 && + $response->getTemplateName() == "schedule-response-success") + ) { + $token = $this->request->getParam("token"); + $query = $this->db->getQueryBuilder(); + $query + ->select("*") + ->from("calendar_invitations") + ->where( + $query + ->expr() + ->eq("token", $query->createNamedParameter($token)) + ); + $stmt = $query->execute(); + $row = $stmt->fetch(\PDO::FETCH_ASSOC); + + $uid = $row["uid"]; + $sender = substr($row["attendee"], 7); + $recipient = substr($row["organizer"], 7); + + $query2 = $this->db->getQueryBuilder(); + $query2 + ->select("*") + ->from("calendarobjects") + ->where( + $query + ->expr() + ->eq("uid", $query2->createNamedParameter($uid)) + ); + $stmt2 = $query2->execute(); + $row2 = $stmt2->fetch(\PDO::FETCH_ASSOC); + $calendarobjectid = $row2["id"]; + + $query3 = $this->db->getQueryBuilder(); + $query3 + ->select("*") + ->from("calendarobjects_props") + ->where( + $query3 + ->expr() + ->eq( + "objectid", + $query3->createNamedParameter($calendarobjectid) + ) + ); + $stmt3 = $query3->execute(); + $row3 = $stmt3->fetchAll(\PDO::FETCH_ASSOC); + foreach ($row3 as $calendarobj1) { + if ( + $calendarobj1["parameter"] == "CN" && + $calendarobj1["name"] == "ATTENDEE" + ) { + $attendeename = $calendarobj1["value"]; + } + if ( + $calendarobj1["parameter"] == "CN" && + $calendarobj1["name"] == "ORGANIZER" + ) { + $organizername = $calendarobj1["value"]; + } + } + + $vObject = Reader::read($row2["calendardata"]); + $SUMMARY = $vObject->VEVENT->SUMMARY; + $datestart = (string) $vObject->VEVENT->DTSTART; + if (str_contains($datestart, "T")) { + $eventdate = date("F d, Y h:i", strtotime($datestart)); + } else { + $eventdate = date("F d, Y", strtotime($datestart)); + } + + if ($attendeename == "") { + $attendeename = $sender; + } + + if ($organizername == "") { + $organizername = $recipient; + } + + $userdata = $this->iusermanager->getByEmail($recipient); + $username = $userdata[0]->getUID(); + $userlang = $this->languageFactory->getUserLanguage($userdata[0]); + + if ($methodName === "tentative") { + $meetingTitle = $SUMMARY . " Invitation Tentatively Accepted"; + $data = [ + "attendee_name" => (string) $sender ?: $defaultVal, + "invitee_name" => (string) $recipient ?: $defaultVal, + "meeting_title" => (string) $meetingTitle ?: $defaultVal, + ]; + $method = "reply"; + $emailTemplate = $this->mailer->createEMailTemplate( + "dav.calendarInvite." . $method, + $data + ); + $emailTemplate->setSubject( + $this->l10n->t("Invitation Tentatively Accepted:%s", [ + $SUMMARY, + ]) + ); + $emailTemplate->addHeader(); + $emailTemplate->addHeading( + $this->l10n->t("Tentatively Accepted") + ); + $mailbodytext = $this->l10n->t( + "%s has tentatively accepted your invitation to %s on %s", + [$attendeename, $SUMMARY, $eventdate] + ); + } + + if ($methodName === "accept") { + $meetingTitle = $SUMMARY . " Invitation Accepted"; + $data = [ + "attendee_name" => (string) $sender ?: $defaultVal, + "invitee_name" => (string) $recipient ?: $defaultVal, + "meeting_title" => (string) $meetingTitle ?: $defaultVal, + ]; + $method = "reply"; + $emailTemplate = $this->mailer->createEMailTemplate( + "dav.calendarInvite." . $method, + $data + ); + $emailTemplate->setSubject( + $this->l10n->t("Invitation Accepted:%s", [$SUMMARY]) + ); + $emailTemplate->addHeader(); + $emailTemplate->addHeading($this->l10n->t("Accepted")); + $mailbodytext = $this->l10n->t( + "%s has accepted your invitation to %s on %s", + [$attendeename, $SUMMARY, $eventdate] + ); + } + + if ($methodName === "decline") { + $meetingTitle = $SUMMARY . " Invitation Declined"; + $data = [ + "attendee_name" => (string) $sender ?: $defaultVal, + "invitee_name" => (string) $recipient ?: $defaultVal, + "meeting_title" => (string) $meetingTitle ?: $defaultVal, + ]; + $method = "reply"; + $emailTemplate = $this->mailer->createEMailTemplate( + "dav.calendarInvite." . $method, + $data + ); + $emailTemplate->setSubject( + $this->l10n->t("Invitation Declined:%s", [$SUMMARY]) + ); + $emailTemplate->addHeader(); + $emailTemplate->addHeading($this->l10n->t("Declined")); + $mailbodytext = $this->l10n->t( + "%s has declined your invitation to %s on %s", + [$attendeename, $SUMMARY, $eventdate] + ); + } + + $emailTemplate->addBodyText( + htmlspecialchars($mailbodytext), + $mailbodytext + ); + $emailTemplate->addFooter(); + try { + $message = $this->mailer->createMessage(); + $message->setTo([$recipient => $organizername]); + $message->useTemplate($emailTemplate); + $this->mailer->send($message); + } catch (\Exception $e) { + // Log the exception and continue + $this->logger->logException($e); + } + } + + return $response; + } +} -- GitLab From a603770f22f87895db171388d97543b15a3ce0fa Mon Sep 17 00:00:00 2001 From: Avinash Gusain Date: Fri, 6 May 2022 10:21:01 +0530 Subject: [PATCH 2/3] fixed the translations spacing,text and translation added --- l10n/de.js | 9 +- l10n/de.json | 9 +- l10n/de_DE.js | 9 +- l10n/de_DE.json | 9 +- l10n/en_GB.js | 184 +++++++++++++----------- l10n/en_GB.json | 175 +++++++++++----------- l10n/es.js | 9 +- l10n/es.json | 9 +- l10n/fr.js | 9 +- l10n/fr.json | 9 +- lib/Middleware/InvitationMiddleware.php | 23 ++- 11 files changed, 264 insertions(+), 190 deletions(-) diff --git a/l10n/de.js b/l10n/de.js index 5ccb90b8e..10bd670af 100644 --- a/l10n/de.js +++ b/l10n/de.js @@ -573,6 +573,13 @@ OC.L10N.register( "Lunch" : "Mittagessen", "Appointment not found" : "Termin nicht gefunden", "User not found" : "Benutzer nicht gefunden", - "Open Link" : "Link öffnen" + "Open Link" : "Link öffnen", + "Invitation Tentatively Accepted: %s": "Einladung Vorläufig Angenommen: %s", + "Tentatively Accepted": "Vorläufig Angenommen", + "Accepted": "Angenommen", + "Declined": "Abgelehnt", + "%s has declined your invitation to %s on %s" : "%s hat Ihre Einladung zu %s am %s abgelehnt", + "%s has accepted your invitation to %s on %s" : "%s hat Ihre Einladung zu %s am %s angenommen", + "%s has tentatively accepted your invitation to %s on %s" : "%s hat Ihre Einladung zu %s am %s vorläufig angenommen" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/de.json b/l10n/de.json index 08c2f21f5..1d0b949b6 100644 --- a/l10n/de.json +++ b/l10n/de.json @@ -571,6 +571,13 @@ "Lunch" : "Mittagessen", "Appointment not found" : "Termin nicht gefunden", "User not found" : "Benutzer nicht gefunden", - "Open Link" : "Link öffnen" + "Open Link" : "Link öffnen", + "Invitation Tentatively Accepted: %s": "Einladung Vorläufig Angenommen: %s", + "Tentatively Accepted": "Vorläufig Angenommen", + "Accepted": "Angenommen", + "Declined": "Abgelehnt", + "%s has declined your invitation to %s on %s" : "%s hat Ihre Einladung zu %s am %s abgelehnt", + "%s has accepted your invitation to %s on %s" : "%s hat Ihre Einladung zu %s am %s angenommen", + "%s has tentatively accepted your invitation to %s on %s" : "%s hat Ihre Einladung zu %s am %s vorläufig angenommen" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/de_DE.js b/l10n/de_DE.js index 2f677a239..f8318a309 100644 --- a/l10n/de_DE.js +++ b/l10n/de_DE.js @@ -584,6 +584,13 @@ OC.L10N.register( "Lunch" : "Mittagessen", "Appointment not found" : "Termin nicht gefunden", "User not found" : "Benutzer nicht gefunden", - "Open Link" : "Link öffnen" + "Open Link" : "Link öffnen", + "Invitation Tentatively Accepted: %s": "Einladung Vorläufig Angenommen: %s", + "Tentatively Accepted": "Vorläufig Angenommen", + "Accepted": "Angenommen", + "Declined": "Abgelehnt", + "%s has declined your invitation to %s on %s" : "%s hat deine Einladung zu %s am %s abgelehnt", + "%s has accepted your invitation to %s on %s" : "%s hat deine Einladung zu %s am %s angenommen", + "%s has tentatively accepted your invitation to %s on %s" : "%s hat deine Einladung zu %s am %s vorläufig angenommen" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/de_DE.json b/l10n/de_DE.json index 4a1c16d67..38418f928 100644 --- a/l10n/de_DE.json +++ b/l10n/de_DE.json @@ -582,6 +582,13 @@ "Lunch" : "Mittagessen", "Appointment not found" : "Termin nicht gefunden", "User not found" : "Benutzer nicht gefunden", - "Open Link" : "Link öffnen" + "Open Link" : "Link öffnen", + "Invitation Tentatively Accepted: %s": "Einladung Vorläufig Angenommen: %s", + "Tentatively Accepted": "Vorläufig Angenommen", + "Accepted": "Angenommen", + "Declined": "Abgelehnt", + "%s has declined your invitation to %s on %s" : "%s hat deine Einladung zu %s am %s abgelehnt", + "%s has accepted your invitation to %s on %s" : "%s hat deine Einladung zu %s am %s angenommen", + "%s has tentatively accepted your invitation to %s on %s" : "%s hat deine Einladung zu %s am %s vorläufig angenommen" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/en_GB.js b/l10n/en_GB.js index 1037c903b..8478e2769 100644 --- a/l10n/en_GB.js +++ b/l10n/en_GB.js @@ -1,85 +1,101 @@ OC.L10N.register( - "calendar", - { - "Provided email-address is not valid" : "Provided email address is not valid", - "%s has published the calendar »%s«" : "%s has published the calendar »%s«", - "Unexpected error sending email. Please contact your administrator." : "Unexpected error sending email. Please contact your administrator.", - "Successfully sent email to %1$s" : "Successfully sent email to %1$s", - "Hello," : "Hello,", - "We wanted to inform you that %s has published the calendar »%s«." : "We wanted to inform you that %s has published the calendar »%s«.", - "Open »%s«" : "Open »%s«", - "Cheers!" : "Cheers!", - "Upcoming events" : "Upcoming events", - "Calendar" : "Calendar", - "A Calendar app for Nextcloud" : "A Calendar app for Nextcloud", - "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s matchdays in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events\n* ⌚️ **Free/Busy!** See when your attendees are available to meet\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email\n* 🔍 Search! Find your events at ease\n* ☑️ Tasks! See tasks with a due date directly in the calendar\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries." : "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s match days in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events.\n* ⌚️ **Free/Busy!** See when your attendees are available to meet.\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email.\n* 🔍 Search! Find your events at ease.\n* ☑️ Tasks! See tasks with a due date directly in the calendar.\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.", - "Previous day" : "Previous day", - "Previous week" : "Previous week", - "Previous month" : "Previous month", - "Next day" : "Next day", - "Next week" : "Next week", - "Next month" : "Next month", - "Today" : "Today", - "Day" : "Day", - "Week" : "Week", - "Month" : "Month", - "List" : "List", - "Delete" : "Delete", - "Untitled calendar" : "Untitled calendar", - "Edit color" : "Edit colour", - "Copy private link" : "Copy private link", - "An error occurred, unable to change visibility of the calendar." : "An error occurred, unable to change visibility of the calendar.", - "An error occurred, unable to delete the calendar." : "An error occurred, unable to delete the calendar.", - "Calendar link copied to clipboard." : "Calendar link copied to clipboard.", - "Calendar link could not be copied to clipboard." : "Calendar link could not be copied to clipboard.", - "An error occurred, unable to change the calendar's color." : "An error occurred, unable to change the calendar's colour.", - "Share link" : "Share link", - "Publish calendar" : "Publish calendar", - "Publishing calendar" : "Publishing calendar", - "Share with users or groups" : "Share with users or groups", - "can edit" : "can edit", - "New calendar" : "New calendar", - "Filename" : "Filename", - "Cancel" : "Cancel", - "Automatic" : "Automatic", - "or" : "or", - "Actions" : "Actions", - "Show week numbers" : "Show week numbers", - "Settings & import" : "Settings & import", - "Location" : "Location", - "Description" : "Description", - "Monday" : "Monday", - "Save" : "Save", - "Update" : "Update", - "Notification" : "Notification", - "Email" : "Email", - "Busy" : "Busy", - "Unknown" : "Unknown", - "Tentative" : "Tentative", - "All day" : "All day", - "Repeat" : "Repeat", - "never" : "never", - "after" : "after", - "More" : "More", - "Global" : "Global", - "Personal" : "Personal", - "Details" : "Details", - "Attendees" : "Attendees", - "Close" : "Close", - "Anniversary" : "Anniversary", - "Week {number} of {year}" : "Week {number} of {year}", - "Daily" : "Daily", - "Weekly" : "Weekly", - "When shared show full event" : "When shared show full event", - "When shared show only busy" : "When shared show only busy", - "When shared hide this event" : "When shared hide this event", - "Status" : "Status", - "Confirmed" : "Confirmed", - "Categories" : "Categories", - "Custom color" : "Custom colour", - "Presentation" : "Presentation", - "Review" : "Review", - "Office" : "Office", - "Mail" : "Mail" -}, -"nplurals=2; plural=(n != 1);"); + "calendar", + { + "Provided email-address is not valid": + "Provided email address is not valid", + "%s has published the calendar »%s«": "%s has published the calendar »%s«", + "Unexpected error sending email. Please contact your administrator.": + "Unexpected error sending email. Please contact your administrator.", + "Successfully sent email to %1$s": "Successfully sent email to %1$s", + "Hello,": "Hello,", + "We wanted to inform you that %s has published the calendar »%s«.": + "We wanted to inform you that %s has published the calendar »%s«.", + "Open »%s«": "Open »%s«", + "Cheers!": "Cheers!", + "Upcoming events": "Upcoming events", + Calendar: "Calendar", + "A Calendar app for Nextcloud": "A Calendar app for Nextcloud", + "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s matchdays in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events\n* ⌚️ **Free/Busy!** See when your attendees are available to meet\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email\n* 🔍 Search! Find your events at ease\n* ☑️ Tasks! See tasks with a due date directly in the calendar\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.": + "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s match days in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events.\n* ⌚️ **Free/Busy!** See when your attendees are available to meet.\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email.\n* 🔍 Search! Find your events at ease.\n* ☑️ Tasks! See tasks with a due date directly in the calendar.\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.", + "Previous day": "Previous day", + "Previous week": "Previous week", + "Previous month": "Previous month", + "Next day": "Next day", + "Next week": "Next week", + "Next month": "Next month", + Today: "Today", + Day: "Day", + Week: "Week", + Month: "Month", + List: "List", + Delete: "Delete", + "Untitled calendar": "Untitled calendar", + "Edit color": "Edit colour", + "Copy private link": "Copy private link", + "An error occurred, unable to change visibility of the calendar.": + "An error occurred, unable to change visibility of the calendar.", + "An error occurred, unable to delete the calendar.": + "An error occurred, unable to delete the calendar.", + "Calendar link copied to clipboard.": "Calendar link copied to clipboard.", + "Calendar link could not be copied to clipboard.": + "Calendar link could not be copied to clipboard.", + "An error occurred, unable to change the calendar's color.": + "An error occurred, unable to change the calendar's colour.", + "Share link": "Share link", + "Publish calendar": "Publish calendar", + "Publishing calendar": "Publishing calendar", + "Share with users or groups": "Share with users or groups", + "can edit": "can edit", + "New calendar": "New calendar", + Filename: "Filename", + Cancel: "Cancel", + Automatic: "Automatic", + or: "or", + Actions: "Actions", + "Show week numbers": "Show week numbers", + "Settings & import": "Settings & import", + Location: "Location", + Description: "Description", + Monday: "Monday", + Save: "Save", + Update: "Update", + Notification: "Notification", + Email: "Email", + Busy: "Busy", + Unknown: "Unknown", + Tentative: "Tentative", + "All day": "All day", + Repeat: "Repeat", + never: "never", + after: "after", + More: "More", + Global: "Global", + Personal: "Personal", + Details: "Details", + Attendees: "Attendees", + Close: "Close", + Anniversary: "Anniversary", + "Week {number} of {year}": "Week {number} of {year}", + Daily: "Daily", + Weekly: "Weekly", + "When shared show full event": "When shared show full event", + "When shared show only busy": "When shared show only busy", + "When shared hide this event": "When shared hide this event", + Status: "Status", + Confirmed: "Confirmed", + Categories: "Categories", + "Custom color": "Custom colour", + Presentation: "Presentation", + Review: "Review", + Office: "Office", + Mail: "Mail", + "Invitation Tentatively Accepted: %s": "Invitation Tentatively Accepted: %s", + "Tentatively Accepted": "Tentatively Accepted", + "Accepted": "Accepted", + "Declined": "Declined", + "%s has declined your invitation to %s on %s" : "%s has declined your invitation to %s on %s", + "%s has accepted your invitation to %s on %s" : "%s has accepted your invitation to %s on %s", + "%s has tentatively accepted your invitation to %s on %s" : "%s has tentatively accepted your invitation to %s on %s" + }, + "nplurals=2; plural=(n != 1);" +); diff --git a/l10n/en_GB.json b/l10n/en_GB.json index 458687762..748b6946d 100644 --- a/l10n/en_GB.json +++ b/l10n/en_GB.json @@ -1,83 +1,92 @@ -{ "translations": { - "Provided email-address is not valid" : "Provided email address is not valid", - "%s has published the calendar »%s«" : "%s has published the calendar »%s«", - "Unexpected error sending email. Please contact your administrator." : "Unexpected error sending email. Please contact your administrator.", - "Successfully sent email to %1$s" : "Successfully sent email to %1$s", - "Hello," : "Hello,", - "We wanted to inform you that %s has published the calendar »%s«." : "We wanted to inform you that %s has published the calendar »%s«.", - "Open »%s«" : "Open »%s«", - "Cheers!" : "Cheers!", - "Upcoming events" : "Upcoming events", - "Calendar" : "Calendar", - "A Calendar app for Nextcloud" : "A Calendar app for Nextcloud", - "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s matchdays in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events\n* ⌚️ **Free/Busy!** See when your attendees are available to meet\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email\n* 🔍 Search! Find your events at ease\n* ☑️ Tasks! See tasks with a due date directly in the calendar\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries." : "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s match days in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events.\n* ⌚️ **Free/Busy!** See when your attendees are available to meet.\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email.\n* 🔍 Search! Find your events at ease.\n* ☑️ Tasks! See tasks with a due date directly in the calendar.\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.", - "Previous day" : "Previous day", - "Previous week" : "Previous week", - "Previous month" : "Previous month", - "Next day" : "Next day", - "Next week" : "Next week", - "Next month" : "Next month", - "Today" : "Today", - "Day" : "Day", - "Week" : "Week", - "Month" : "Month", - "List" : "List", - "Delete" : "Delete", - "Untitled calendar" : "Untitled calendar", - "Edit color" : "Edit colour", - "Copy private link" : "Copy private link", - "An error occurred, unable to change visibility of the calendar." : "An error occurred, unable to change visibility of the calendar.", - "An error occurred, unable to delete the calendar." : "An error occurred, unable to delete the calendar.", - "Calendar link copied to clipboard." : "Calendar link copied to clipboard.", - "Calendar link could not be copied to clipboard." : "Calendar link could not be copied to clipboard.", - "An error occurred, unable to change the calendar's color." : "An error occurred, unable to change the calendar's colour.", - "Share link" : "Share link", - "Publish calendar" : "Publish calendar", - "Publishing calendar" : "Publishing calendar", - "Share with users or groups" : "Share with users or groups", - "can edit" : "can edit", - "New calendar" : "New calendar", - "Filename" : "Filename", - "Cancel" : "Cancel", - "Automatic" : "Automatic", - "or" : "or", - "Actions" : "Actions", - "Show week numbers" : "Show week numbers", - "Settings & import" : "Settings & import", - "Location" : "Location", - "Description" : "Description", - "Monday" : "Monday", - "Save" : "Save", - "Update" : "Update", - "Notification" : "Notification", - "Email" : "Email", - "Busy" : "Busy", - "Unknown" : "Unknown", - "Tentative" : "Tentative", - "All day" : "All day", - "Repeat" : "Repeat", - "never" : "never", - "after" : "after", - "More" : "More", - "Global" : "Global", - "Personal" : "Personal", - "Details" : "Details", - "Attendees" : "Attendees", - "Close" : "Close", - "Anniversary" : "Anniversary", - "Week {number} of {year}" : "Week {number} of {year}", - "Daily" : "Daily", - "Weekly" : "Weekly", - "When shared show full event" : "When shared show full event", - "When shared show only busy" : "When shared show only busy", - "When shared hide this event" : "When shared hide this event", - "Status" : "Status", - "Confirmed" : "Confirmed", - "Categories" : "Categories", - "Custom color" : "Custom colour", - "Presentation" : "Presentation", - "Review" : "Review", - "Office" : "Office", - "Mail" : "Mail" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file +{ + "translations": { + "Provided email-address is not valid": "Provided email address is not valid", + "%s has published the calendar »%s«": "%s has published the calendar »%s«", + "Unexpected error sending email. Please contact your administrator.": "Unexpected error sending email. Please contact your administrator.", + "Successfully sent email to %1$s": "Successfully sent email to %1$s", + "Hello,": "Hello,", + "We wanted to inform you that %s has published the calendar »%s«.": "We wanted to inform you that %s has published the calendar »%s«.", + "Open »%s«": "Open »%s«", + "Cheers!": "Cheers!", + "Upcoming events": "Upcoming events", + "Calendar": "Calendar", + "A Calendar app for Nextcloud": "A Calendar app for Nextcloud", + "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s matchdays in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events\n* ⌚️ **Free/Busy!** See when your attendees are available to meet\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email\n* 🔍 Search! Find your events at ease\n* ☑️ Tasks! See tasks with a due date directly in the calendar\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.": "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s match days in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events.\n* ⌚️ **Free/Busy!** See when your attendees are available to meet.\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email.\n* 🔍 Search! Find your events at ease.\n* ☑️ Tasks! See tasks with a due date directly in the calendar.\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.", + "Previous day": "Previous day", + "Previous week": "Previous week", + "Previous month": "Previous month", + "Next day": "Next day", + "Next week": "Next week", + "Next month": "Next month", + "Today": "Today", + "Day": "Day", + "Week": "Week", + "Month": "Month", + "List": "List", + "Delete": "Delete", + "Untitled calendar": "Untitled calendar", + "Edit color": "Edit colour", + "Copy private link": "Copy private link", + "An error occurred, unable to change visibility of the calendar.": "An error occurred, unable to change visibility of the calendar.", + "An error occurred, unable to delete the calendar.": "An error occurred, unable to delete the calendar.", + "Calendar link copied to clipboard.": "Calendar link copied to clipboard.", + "Calendar link could not be copied to clipboard.": "Calendar link could not be copied to clipboard.", + "An error occurred, unable to change the calendar's color.": "An error occurred, unable to change the calendar's colour.", + "Share link": "Share link", + "Publish calendar": "Publish calendar", + "Publishing calendar": "Publishing calendar", + "Share with users or groups": "Share with users or groups", + "can edit": "can edit", + "New calendar": "New calendar", + "Filename": "Filename", + "Cancel": "Cancel", + "Automatic": "Automatic", + "or": "or", + "Actions": "Actions", + "Show week numbers": "Show week numbers", + "Settings & import": "Settings & import", + "Location": "Location", + "Description": "Description", + "Monday": "Monday", + "Save": "Save", + "Update": "Update", + "Notification": "Notification", + "Email": "Email", + "Busy": "Busy", + "Unknown": "Unknown", + "Tentative": "Tentative", + "All day": "All day", + "Repeat": "Repeat", + "never": "never", + "after": "after", + "More": "More", + "Global": "Global", + "Personal": "Personal", + "Details": "Details", + "Attendees": "Attendees", + "Close": "Close", + "Anniversary": "Anniversary", + "Week {number} of {year}": "Week {number} of {year}", + "Daily": "Daily", + "Weekly": "Weekly", + "When shared show full event": "When shared show full event", + "When shared show only busy": "When shared show only busy", + "When shared hide this event": "When shared hide this event", + "Status": "Status", + "Confirmed": "Confirmed", + "Categories": "Categories", + "Custom color": "Custom colour", + "Presentation": "Presentation", + "Review": "Review", + "Office": "Office", + "Mail": "Mail", + "Invitation Tentatively Accepted:%s": "Invitation Tentatively Accepted: %s", + "Tentatively Accepted": "Tentatively Accepted", + "Accepted": "Accepted", + "Declined": "Declined", + "%s has declined your invitation to %s on %s" : "%s has declined your invitation to %s on %s", + "%s has accepted your invitation to %s on %s" : "%s has accepted your invitation to %s on %s", + "%s has tentatively accepted your invitation to %s on %s" : "%s has tentatively accepted your invitation to %s on %s" + }, + "pluralForm": "nplurals=2; plural=(n != 1);" +} diff --git a/l10n/es.js b/l10n/es.js index ab5a5b601..7ccb3e75d 100644 --- a/l10n/es.js +++ b/l10n/es.js @@ -567,6 +567,13 @@ OC.L10N.register( "Lunch" : "Almuerzo", "Appointment not found" : "Cita no encontrada", "User not found" : "Usuario no encontrado", - "Open Link" : "Abrir el enlace" + "Open Link" : "Abrir el enlace", + "Invitation Tentatively Accepted: %s": "Invitación Provisionalmente Aceptado: %s", + "Tentatively Accepted": "Aceptado Provisionalmente", + "Accepted": "Aceptado", + "Declined": "Rechazado", + "%s has declined your invitation to %s on %s" : "%s ha rechazado tu invitación a %s el %s", + "%s has accepted your invitation to %s on %s" : "%s ha aceptado tu invitación a %s el %s", + "%s has tentatively accepted your invitation to %s on %s" : "%s ha provisionalmente aceptado tu invitación a %s el %s" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/es.json b/l10n/es.json index 9c11a3428..d9297c9ec 100644 --- a/l10n/es.json +++ b/l10n/es.json @@ -565,6 +565,13 @@ "Lunch" : "Almuerzo", "Appointment not found" : "Cita no encontrada", "User not found" : "Usuario no encontrado", - "Open Link" : "Abrir el enlace" + "Open Link" : "Abrir el enlace", + "Invitation Tentatively Accepted: %s": "Invitación Provisionalmente Aceptado : %s", + "Tentatively Accepted": "Aceptado Provisionalmente", + "Accepted": "Aceptado", + "Declined": "Rechazado", + "%s has declined your invitation to %s on %s" : "%s ha rechazado tu invitación a %s el %s", + "%s has accepted your invitation to %s on %s" : "%s ha aceptado tu invitación a %s el %s", + "%s has tentatively accepted your invitation to %s on %s" : "%s ha provisionalmente aceptado tu invitación a %s el %s" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/fr.js b/l10n/fr.js index a56dc0251..d65b538e2 100644 --- a/l10n/fr.js +++ b/l10n/fr.js @@ -571,6 +571,13 @@ OC.L10N.register( "Lunch" : "Repas", "Appointment not found" : "Rendez-vous non trouvé", "User not found" : "Utilisateur non trouvé", - "Open Link" : "Ouvrir le lien" + "Open Link" : "Ouvrir le lien", + "Invitation Tentatively Accepted: %s": "Invitation Accepté Provisoirement: %s", + "Tentatively Accepted": "Accepté Provisoirement", + "Accepted": "Accepté", + "Declined": "Refusé", + "%s has declined your invitation to %s on %s" : "%s a refusé votre invitation %s du %s", + "%s has accepted your invitation to %s on %s" : "%s a accepté votre invitation %s du %s", + "%s has tentatively accepted your invitation to %s on %s" : "%s a provisoirement accepté votre invitation %s du %s" }, "nplurals=2; plural=(n > 1);"); diff --git a/l10n/fr.json b/l10n/fr.json index fa7d74368..815854694 100644 --- a/l10n/fr.json +++ b/l10n/fr.json @@ -569,6 +569,13 @@ "Lunch" : "Repas", "Appointment not found" : "Rendez-vous non trouvé", "User not found" : "Utilisateur non trouvé", - "Open Link" : "Ouvrir le lien" + "Open Link" : "Ouvrir le lien", + "Invitation Tentatively Accepted: %s": "Invitation Accepté Provisoirement: %s", + "Tentatively Accepted": "Accepté Provisoirement", + "Accepted": "Accepté", + "Declined": "Refusé", + "%s has declined your invitation to %s on %s" : "%s a refusé votre invitation %s du %s", + "%s has accepted your invitation to %s on %s" : "%s a accepté votre invitation %s du %s", + "%s has tentatively accepted your invitation to %s on %s" : "%s a provisoirement accepté votre invitation %s du %s" },"pluralForm" :"nplurals=2; plural=(n > 1);" } \ No newline at end of file diff --git a/lib/Middleware/InvitationMiddleware.php b/lib/Middleware/InvitationMiddleware.php index 4cae41519..a5058c708 100644 --- a/lib/Middleware/InvitationMiddleware.php +++ b/lib/Middleware/InvitationMiddleware.php @@ -143,7 +143,8 @@ class InvitationMiddleware extends Middleware $userlang = $this->languageFactory->getUserLanguage($userdata[0]); if ($methodName === "tentative") { - $meetingTitle = $SUMMARY . " Invitation Tentatively Accepted"; + $meetingTitle = $this->l10n->t("Invitation Tentatively Accepted: %s", [$SUMMARY] ); + $data = [ "attendee_name" => (string) $sender ?: $defaultVal, "invitee_name" => (string) $recipient ?: $defaultVal, @@ -154,11 +155,7 @@ class InvitationMiddleware extends Middleware "dav.calendarInvite." . $method, $data ); - $emailTemplate->setSubject( - $this->l10n->t("Invitation Tentatively Accepted:%s", [ - $SUMMARY, - ]) - ); + $emailTemplate->setSubject($this->l10n->t("Invitation Tentatively Accepted: %s",[$SUMMARY])); $emailTemplate->addHeader(); $emailTemplate->addHeading( $this->l10n->t("Tentatively Accepted") @@ -170,7 +167,7 @@ class InvitationMiddleware extends Middleware } if ($methodName === "accept") { - $meetingTitle = $SUMMARY . " Invitation Accepted"; + $meetingTitle = $this->l10n->t("Invitation Accepted: %s", [$SUMMARY]); $data = [ "attendee_name" => (string) $sender ?: $defaultVal, "invitee_name" => (string) $recipient ?: $defaultVal, @@ -178,12 +175,10 @@ class InvitationMiddleware extends Middleware ]; $method = "reply"; $emailTemplate = $this->mailer->createEMailTemplate( - "dav.calendarInvite." . $method, + $recipient, $data ); - $emailTemplate->setSubject( - $this->l10n->t("Invitation Accepted:%s", [$SUMMARY]) - ); + $emailTemplate->setSubject($this->l10n->t("Invitation Accepted: %s", [$SUMMARY])); $emailTemplate->addHeader(); $emailTemplate->addHeading($this->l10n->t("Accepted")); $mailbodytext = $this->l10n->t( @@ -193,7 +188,7 @@ class InvitationMiddleware extends Middleware } if ($methodName === "decline") { - $meetingTitle = $SUMMARY . " Invitation Declined"; + $meetingTitle = $this->l10n->t("Invitation Declined: %s", [$SUMMARY]); $data = [ "attendee_name" => (string) $sender ?: $defaultVal, "invitee_name" => (string) $recipient ?: $defaultVal, @@ -204,9 +199,7 @@ class InvitationMiddleware extends Middleware "dav.calendarInvite." . $method, $data ); - $emailTemplate->setSubject( - $this->l10n->t("Invitation Declined:%s", [$SUMMARY]) - ); + $emailTemplate->setSubject($this->l10n->t("Invitation Declined: %s", [$SUMMARY])); $emailTemplate->addHeader(); $emailTemplate->addHeading($this->l10n->t("Declined")); $mailbodytext = $this->l10n->t( -- GitLab From d243bac8421434834440a6a8bd5b865436b77c17 Mon Sep 17 00:00:00 2001 From: Avinash Gusain Date: Fri, 6 May 2022 10:29:11 +0530 Subject: [PATCH 3/3] fixed the translations spacing,text and translation added --- l10n/en_GB.js | 191 +++++++++++++++++++++++------------------------- l10n/en_GB.json | 180 ++++++++++++++++++++++----------------------- 2 files changed, 180 insertions(+), 191 deletions(-) diff --git a/l10n/en_GB.js b/l10n/en_GB.js index 8478e2769..6367cfbe1 100644 --- a/l10n/en_GB.js +++ b/l10n/en_GB.js @@ -1,101 +1,92 @@ OC.L10N.register( - "calendar", - { - "Provided email-address is not valid": - "Provided email address is not valid", - "%s has published the calendar »%s«": "%s has published the calendar »%s«", - "Unexpected error sending email. Please contact your administrator.": - "Unexpected error sending email. Please contact your administrator.", - "Successfully sent email to %1$s": "Successfully sent email to %1$s", - "Hello,": "Hello,", - "We wanted to inform you that %s has published the calendar »%s«.": - "We wanted to inform you that %s has published the calendar »%s«.", - "Open »%s«": "Open »%s«", - "Cheers!": "Cheers!", - "Upcoming events": "Upcoming events", - Calendar: "Calendar", - "A Calendar app for Nextcloud": "A Calendar app for Nextcloud", - "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s matchdays in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events\n* ⌚️ **Free/Busy!** See when your attendees are available to meet\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email\n* 🔍 Search! Find your events at ease\n* ☑️ Tasks! See tasks with a due date directly in the calendar\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.": - "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s match days in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events.\n* ⌚️ **Free/Busy!** See when your attendees are available to meet.\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email.\n* 🔍 Search! Find your events at ease.\n* ☑️ Tasks! See tasks with a due date directly in the calendar.\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.", - "Previous day": "Previous day", - "Previous week": "Previous week", - "Previous month": "Previous month", - "Next day": "Next day", - "Next week": "Next week", - "Next month": "Next month", - Today: "Today", - Day: "Day", - Week: "Week", - Month: "Month", - List: "List", - Delete: "Delete", - "Untitled calendar": "Untitled calendar", - "Edit color": "Edit colour", - "Copy private link": "Copy private link", - "An error occurred, unable to change visibility of the calendar.": - "An error occurred, unable to change visibility of the calendar.", - "An error occurred, unable to delete the calendar.": - "An error occurred, unable to delete the calendar.", - "Calendar link copied to clipboard.": "Calendar link copied to clipboard.", - "Calendar link could not be copied to clipboard.": - "Calendar link could not be copied to clipboard.", - "An error occurred, unable to change the calendar's color.": - "An error occurred, unable to change the calendar's colour.", - "Share link": "Share link", - "Publish calendar": "Publish calendar", - "Publishing calendar": "Publishing calendar", - "Share with users or groups": "Share with users or groups", - "can edit": "can edit", - "New calendar": "New calendar", - Filename: "Filename", - Cancel: "Cancel", - Automatic: "Automatic", - or: "or", - Actions: "Actions", - "Show week numbers": "Show week numbers", - "Settings & import": "Settings & import", - Location: "Location", - Description: "Description", - Monday: "Monday", - Save: "Save", - Update: "Update", - Notification: "Notification", - Email: "Email", - Busy: "Busy", - Unknown: "Unknown", - Tentative: "Tentative", - "All day": "All day", - Repeat: "Repeat", - never: "never", - after: "after", - More: "More", - Global: "Global", - Personal: "Personal", - Details: "Details", - Attendees: "Attendees", - Close: "Close", - Anniversary: "Anniversary", - "Week {number} of {year}": "Week {number} of {year}", - Daily: "Daily", - Weekly: "Weekly", - "When shared show full event": "When shared show full event", - "When shared show only busy": "When shared show only busy", - "When shared hide this event": "When shared hide this event", - Status: "Status", - Confirmed: "Confirmed", - Categories: "Categories", - "Custom color": "Custom colour", - Presentation: "Presentation", - Review: "Review", - Office: "Office", - Mail: "Mail", - "Invitation Tentatively Accepted: %s": "Invitation Tentatively Accepted: %s", - "Tentatively Accepted": "Tentatively Accepted", - "Accepted": "Accepted", - "Declined": "Declined", - "%s has declined your invitation to %s on %s" : "%s has declined your invitation to %s on %s", - "%s has accepted your invitation to %s on %s" : "%s has accepted your invitation to %s on %s", - "%s has tentatively accepted your invitation to %s on %s" : "%s has tentatively accepted your invitation to %s on %s" - }, - "nplurals=2; plural=(n != 1);" -); + "calendar", + { + "Provided email-address is not valid" : "Provided email address is not valid", + "%s has published the calendar »%s«" : "%s has published the calendar »%s«", + "Unexpected error sending email. Please contact your administrator." : "Unexpected error sending email. Please contact your administrator.", + "Successfully sent email to %1$s" : "Successfully sent email to %1$s", + "Hello," : "Hello,", + "We wanted to inform you that %s has published the calendar »%s«." : "We wanted to inform you that %s has published the calendar »%s«.", + "Open »%s«" : "Open »%s«", + "Cheers!" : "Cheers!", + "Upcoming events" : "Upcoming events", + "Calendar" : "Calendar", + "A Calendar app for Nextcloud" : "A Calendar app for Nextcloud", + "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s matchdays in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events\n* ⌚️ **Free/Busy!** See when your attendees are available to meet\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email\n* 🔍 Search! Find your events at ease\n* ☑️ Tasks! See tasks with a due date directly in the calendar\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries." : "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s match days in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events.\n* ⌚️ **Free/Busy!** See when your attendees are available to meet.\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email.\n* 🔍 Search! Find your events at ease.\n* ☑️ Tasks! See tasks with a due date directly in the calendar.\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.", + "Previous day" : "Previous day", + "Previous week" : "Previous week", + "Previous month" : "Previous month", + "Next day" : "Next day", + "Next week" : "Next week", + "Next month" : "Next month", + "Today" : "Today", + "Day" : "Day", + "Week" : "Week", + "Month" : "Month", + "List" : "List", + "Delete" : "Delete", + "Untitled calendar" : "Untitled calendar", + "Edit color" : "Edit colour", + "Copy private link" : "Copy private link", + "An error occurred, unable to change visibility of the calendar." : "An error occurred, unable to change visibility of the calendar.", + "An error occurred, unable to delete the calendar." : "An error occurred, unable to delete the calendar.", + "Calendar link copied to clipboard." : "Calendar link copied to clipboard.", + "Calendar link could not be copied to clipboard." : "Calendar link could not be copied to clipboard.", + "An error occurred, unable to change the calendar's color." : "An error occurred, unable to change the calendar's colour.", + "Share link" : "Share link", + "Publish calendar" : "Publish calendar", + "Publishing calendar" : "Publishing calendar", + "Share with users or groups" : "Share with users or groups", + "can edit" : "can edit", + "New calendar" : "New calendar", + "Filename" : "Filename", + "Cancel" : "Cancel", + "Automatic" : "Automatic", + "or" : "or", + "Actions" : "Actions", + "Show week numbers" : "Show week numbers", + "Settings & import" : "Settings & import", + "Location" : "Location", + "Description" : "Description", + "Monday" : "Monday", + "Save" : "Save", + "Update" : "Update", + "Notification" : "Notification", + "Email" : "Email", + "Busy" : "Busy", + "Unknown" : "Unknown", + "Tentative" : "Tentative", + "All day" : "All day", + "Repeat" : "Repeat", + "never" : "never", + "after" : "after", + "More" : "More", + "Global" : "Global", + "Personal" : "Personal", + "Details" : "Details", + "Attendees" : "Attendees", + "Close" : "Close", + "Anniversary" : "Anniversary", + "Week {number} of {year}" : "Week {number} of {year}", + "Daily" : "Daily", + "Weekly" : "Weekly", + "When shared show full event" : "When shared show full event", + "When shared show only busy" : "When shared show only busy", + "When shared hide this event" : "When shared hide this event", + "Status" : "Status", + "Confirmed" : "Confirmed", + "Categories" : "Categories", + "Custom color" : "Custom colour", + "Presentation" : "Presentation", + "Review" : "Review", + "Office" : "Office", + "Mail" : "Mail", + "Invitation Tentatively Accepted: %s": "Invitation Tentatively Accepted: %s", + "Tentatively Accepted": "Tentatively Accepted", + "Accepted": "Accepted", + "Declined": "Declined", + "%s has declined your invitation to %s on %s" : "%s has declined your invitation to %s on %s", + "%s has accepted your invitation to %s on %s" : "%s has accepted your invitation to %s on %s", + "%s has tentatively accepted your invitation to %s on %s" : "%s has tentatively accepted your invitation to %s on %s" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/en_GB.json b/l10n/en_GB.json index 748b6946d..7c863649e 100644 --- a/l10n/en_GB.json +++ b/l10n/en_GB.json @@ -1,92 +1,90 @@ -{ - "translations": { - "Provided email-address is not valid": "Provided email address is not valid", - "%s has published the calendar »%s«": "%s has published the calendar »%s«", - "Unexpected error sending email. Please contact your administrator.": "Unexpected error sending email. Please contact your administrator.", - "Successfully sent email to %1$s": "Successfully sent email to %1$s", - "Hello,": "Hello,", - "We wanted to inform you that %s has published the calendar »%s«.": "We wanted to inform you that %s has published the calendar »%s«.", - "Open »%s«": "Open »%s«", - "Cheers!": "Cheers!", - "Upcoming events": "Upcoming events", - "Calendar": "Calendar", - "A Calendar app for Nextcloud": "A Calendar app for Nextcloud", - "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s matchdays in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events\n* ⌚️ **Free/Busy!** See when your attendees are available to meet\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email\n* 🔍 Search! Find your events at ease\n* ☑️ Tasks! See tasks with a due date directly in the calendar\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.": "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s match days in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events.\n* ⌚️ **Free/Busy!** See when your attendees are available to meet.\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email.\n* 🔍 Search! Find your events at ease.\n* ☑️ Tasks! See tasks with a due date directly in the calendar.\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.", - "Previous day": "Previous day", - "Previous week": "Previous week", - "Previous month": "Previous month", - "Next day": "Next day", - "Next week": "Next week", - "Next month": "Next month", - "Today": "Today", - "Day": "Day", - "Week": "Week", - "Month": "Month", - "List": "List", - "Delete": "Delete", - "Untitled calendar": "Untitled calendar", - "Edit color": "Edit colour", - "Copy private link": "Copy private link", - "An error occurred, unable to change visibility of the calendar.": "An error occurred, unable to change visibility of the calendar.", - "An error occurred, unable to delete the calendar.": "An error occurred, unable to delete the calendar.", - "Calendar link copied to clipboard.": "Calendar link copied to clipboard.", - "Calendar link could not be copied to clipboard.": "Calendar link could not be copied to clipboard.", - "An error occurred, unable to change the calendar's color.": "An error occurred, unable to change the calendar's colour.", - "Share link": "Share link", - "Publish calendar": "Publish calendar", - "Publishing calendar": "Publishing calendar", - "Share with users or groups": "Share with users or groups", - "can edit": "can edit", - "New calendar": "New calendar", - "Filename": "Filename", - "Cancel": "Cancel", - "Automatic": "Automatic", - "or": "or", - "Actions": "Actions", - "Show week numbers": "Show week numbers", - "Settings & import": "Settings & import", - "Location": "Location", - "Description": "Description", - "Monday": "Monday", - "Save": "Save", - "Update": "Update", - "Notification": "Notification", - "Email": "Email", - "Busy": "Busy", - "Unknown": "Unknown", - "Tentative": "Tentative", - "All day": "All day", - "Repeat": "Repeat", - "never": "never", - "after": "after", - "More": "More", - "Global": "Global", - "Personal": "Personal", - "Details": "Details", - "Attendees": "Attendees", - "Close": "Close", - "Anniversary": "Anniversary", - "Week {number} of {year}": "Week {number} of {year}", - "Daily": "Daily", - "Weekly": "Weekly", - "When shared show full event": "When shared show full event", - "When shared show only busy": "When shared show only busy", - "When shared hide this event": "When shared hide this event", - "Status": "Status", - "Confirmed": "Confirmed", - "Categories": "Categories", - "Custom color": "Custom colour", - "Presentation": "Presentation", - "Review": "Review", - "Office": "Office", - "Mail": "Mail", - "Invitation Tentatively Accepted:%s": "Invitation Tentatively Accepted: %s", - "Tentatively Accepted": "Tentatively Accepted", - "Accepted": "Accepted", - "Declined": "Declined", - "%s has declined your invitation to %s on %s" : "%s has declined your invitation to %s on %s", - "%s has accepted your invitation to %s on %s" : "%s has accepted your invitation to %s on %s", - "%s has tentatively accepted your invitation to %s on %s" : "%s has tentatively accepted your invitation to %s on %s" - }, - "pluralForm": "nplurals=2; plural=(n != 1);" +{ "translations": { + "Provided email-address is not valid" : "Provided email address is not valid", + "%s has published the calendar »%s«" : "%s has published the calendar »%s«", + "Unexpected error sending email. Please contact your administrator." : "Unexpected error sending email. Please contact your administrator.", + "Successfully sent email to %1$s" : "Successfully sent email to %1$s", + "Hello," : "Hello,", + "We wanted to inform you that %s has published the calendar »%s«." : "We wanted to inform you that %s has published the calendar »%s«.", + "Open »%s«" : "Open »%s«", + "Cheers!" : "Cheers!", + "Upcoming events" : "Upcoming events", + "Calendar" : "Calendar", + "A Calendar app for Nextcloud" : "A Calendar app for Nextcloud", + "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s matchdays in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events\n* ⌚️ **Free/Busy!** See when your attendees are available to meet\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email\n* 🔍 Search! Find your events at ease\n* ☑️ Tasks! See tasks with a due date directly in the calendar\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries." : "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s match days in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events.\n* ⌚️ **Free/Busy!** See when your attendees are available to meet.\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email.\n* 🔍 Search! Find your events at ease.\n* ☑️ Tasks! See tasks with a due date directly in the calendar.\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.", + "Previous day" : "Previous day", + "Previous week" : "Previous week", + "Previous month" : "Previous month", + "Next day" : "Next day", + "Next week" : "Next week", + "Next month" : "Next month", + "Today" : "Today", + "Day" : "Day", + "Week" : "Week", + "Month" : "Month", + "List" : "List", + "Delete" : "Delete", + "Untitled calendar" : "Untitled calendar", + "Edit color" : "Edit colour", + "Copy private link" : "Copy private link", + "An error occurred, unable to change visibility of the calendar." : "An error occurred, unable to change visibility of the calendar.", + "An error occurred, unable to delete the calendar." : "An error occurred, unable to delete the calendar.", + "Calendar link copied to clipboard." : "Calendar link copied to clipboard.", + "Calendar link could not be copied to clipboard." : "Calendar link could not be copied to clipboard.", + "An error occurred, unable to change the calendar's color." : "An error occurred, unable to change the calendar's colour.", + "Share link" : "Share link", + "Publish calendar" : "Publish calendar", + "Publishing calendar" : "Publishing calendar", + "Share with users or groups" : "Share with users or groups", + "can edit" : "can edit", + "New calendar" : "New calendar", + "Filename" : "Filename", + "Cancel" : "Cancel", + "Automatic" : "Automatic", + "or" : "or", + "Actions" : "Actions", + "Show week numbers" : "Show week numbers", + "Settings & import" : "Settings & import", + "Location" : "Location", + "Description" : "Description", + "Monday" : "Monday", + "Save" : "Save", + "Update" : "Update", + "Notification" : "Notification", + "Email" : "Email", + "Busy" : "Busy", + "Unknown" : "Unknown", + "Tentative" : "Tentative", + "All day" : "All day", + "Repeat" : "Repeat", + "never" : "never", + "after" : "after", + "More" : "More", + "Global" : "Global", + "Personal" : "Personal", + "Details" : "Details", + "Attendees" : "Attendees", + "Close" : "Close", + "Anniversary" : "Anniversary", + "Week {number} of {year}" : "Week {number} of {year}", + "Daily" : "Daily", + "Weekly" : "Weekly", + "When shared show full event" : "When shared show full event", + "When shared show only busy" : "When shared show only busy", + "When shared hide this event" : "When shared hide this event", + "Status" : "Status", + "Confirmed" : "Confirmed", + "Categories" : "Categories", + "Custom color" : "Custom colour", + "Presentation" : "Presentation", + "Review" : "Review", + "Office" : "Office", + "Mail" : "Mail", + "Invitation Tentatively Accepted: %s": "Invitation Tentatively Accepted: %s", + "Tentatively Accepted": "Tentatively Accepted", + "Accepted": "Accepted", + "Declined": "Declined", + "%s has declined your invitation to %s on %s" : "%s has declined your invitation to %s on %s", + "%s has accepted your invitation to %s on %s" : "%s has accepted your invitation to %s on %s", + "%s has tentatively accepted your invitation to %s on %s" : "%s has tentatively accepted your invitation to %s on %s" +},"pluralForm" :"nplurals=2; plural=(n != 1);" } -- GitLab