diff options
author | Faraz Samapoor <f.samapoor@gmail.com> | 2023-06-27 19:07:09 +0330 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-27 19:07:09 +0330 |
commit | bbfe2fb821f00713f46fd896a41dfc62cc02c31a (patch) | |
tree | 22923a6d3a78f7f1d780e958ff118a669c6c8c63 /apps/dav | |
parent | 8c64ccae01ef3143a47dcca0b7ddb115d601c2f1 (diff) | |
parent | 266436b76788d14e061bbe1f013bc052edc8041f (diff) | |
download | nextcloud-server-bbfe2fb821f00713f46fd896a41dfc62cc02c31a.tar.gz nextcloud-server-bbfe2fb821f00713f46fd896a41dfc62cc02c31a.zip |
Merge branch 'master' into replace_strpos_calls_in_dav_app
Signed-off-by: Faraz Samapoor <f.samapoor@gmail.com>
Diffstat (limited to 'apps/dav')
24 files changed, 822 insertions, 279 deletions
diff --git a/apps/dav/l10n/ar.js b/apps/dav/l10n/ar.js new file mode 100644 index 00000000000..c29b5ae0b30 --- /dev/null +++ b/apps/dav/l10n/ar.js @@ -0,0 +1,191 @@ +OC.L10N.register( + "dav", + { + "Calendar" : "التقويم", + "To-dos" : "قائمة المهام", + "Personal" : "شخصي", + "{actor} created calendar {calendar}" : "{actor} قام بإنشاء تقويم {calendar}", + "You created calendar {calendar}" : "قمت بإنشاء التقويم {calendar}", + "{actor} deleted calendar {calendar}" : "{actor} قام بحذف التقويم {calendar}", + "You deleted calendar {calendar}" : "لقد قمت بحذف التقويم {calendar}", + "{actor} updated calendar {calendar}" : "{actor} حدّث التقويم {calendar}", + "You updated calendar {calendar}" : "لقد قمت بتحديث التقويم {calendar}", + "{actor} restored calendar {calendar}" : "{actor} استعاد التقويم {calendar}", + "You restored calendar {calendar}" : "أنت استعدت التقويم {calendar}", + "You shared calendar {calendar} as public link" : "أنت شاركت التقويم {calendar} كرابطٍ عموميٍ public link", + "You removed public link for calendar {calendar}" : "أنت ألغيب الرابط العمومي للتقويم {calendar}", + "{actor} shared calendar {calendar} with you" : "{actor} قام بمشاركة التقويم {calendar} معك", + "You shared calendar {calendar} with {user}" : "لقد قمت بمشاركة التقويم {calendar} مع {user}", + "{actor} shared calendar {calendar} with {user}" : "{actor} قام بمشاركة التقويم {calendar} مع {user}", + "{actor} unshared calendar {calendar} from you" : "{actor} أزال مشاركة التقويم {calendar} منك", + "You unshared calendar {calendar} from {user}" : "لقد أزلت مشاركة التقويم {calendar} من {user}", + "{actor} unshared calendar {calendar} from {user}" : "{actor} أزال مشاركة التقويم {calendar} من {user}", + "{actor} unshared calendar {calendar} from themselves" : "{actor} أزال مشاركة التقويم {calendar} من نفسه", + "You shared calendar {calendar} with group {group}" : "أنت شاركت التقويم {calendar} مع المجموعة {group}", + "{actor} shared calendar {calendar} with group {group}" : "{actor} شارك التقويم {calendar} مع المجموعة {group}", + "You unshared calendar {calendar} from group {group}" : "أنت أزلت مشاركة التقويم {calendar} من المجموعة {group}", + "{actor} unshared calendar {calendar} from group {group}" : "{actor} أزال مشاركة التقويم {calendar} من المجموعة {group}", + "Untitled event" : "حدث بدون اسم", + "{actor} created event {event} in calendar {calendar}" : "{actor} أنشأ الحدث {event} في التقويم {calendar}", + "You created event {event} in calendar {calendar}" : "أنت أنشأت الحدث {event} في التقويم {calendar}", + "{actor} deleted event {event} from calendar {calendar}" : "{actor} حذف الحدث {event} من التقويم {calendar}", + "You deleted event {event} from calendar {calendar}" : "أنت حذفت الحدث {event} من التقويم {calendar}", + "{actor} updated event {event} in calendar {calendar}" : "{actor} عدّل الحدث {event} في التقويم {calendar}", + "You updated event {event} in calendar {calendar}" : "أنت عدّلت الحدث {event} في التقويم {calendar}", + "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} نقل الحدث {event} من التقويم {sourceCalendar} إلى التقويم {targetCalendar}", + "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "أنت نقلت الحدث {event} من التقويم {sourceCalendar} إلى التقويم {targetCalendar}", + "{actor} restored event {event} of calendar {calendar}" : "{actor} قام باستعادة الحدث {event} للتقويم {calendar}", + "You restored event {event} of calendar {calendar}" : "أنت قمت باستعادة الحدث {event} للتقويم {calendar}", + "Busy" : "مشغول", + "{actor} created to-do {todo} in list {calendar}" : "{actor} قائمة بإنشاء مهمة {todo} في القائمة {calendar}", + "You created to-do {todo} in list {calendar}" : "أنت قمت بإنشاء مهمة {todo} في القائمة {calendar}", + "{actor} deleted to-do {todo} from list {calendar}" : "{actor} قام بحذف مهمة {todo} من القائمة {calendar}", + "You deleted to-do {todo} from list {calendar}" : "أنت قمت بحذف مهمة {todo} من القائمة {calendar}", + "{actor} updated to-do {todo} in list {calendar}" : "{actor} قام بتعديل مهمة {todo} في القائمة {calendar}", + "You updated to-do {todo} in list {calendar}" : "أنت قمت بتعديل مهمة {todo} في القائمة {calendar}", + "{actor} solved to-do {todo} in list {calendar}" : "{actor} أنجز المهمة {todo} في القائمة{calendar}", + "You solved to-do {todo} in list {calendar}" : "أنت أنجزت المهمة {todo} في القائمة {calendar}", + "{actor} reopened to-do {todo} in list {calendar}" : "{actor} أعاد فتح المهمة {todo} في القائمة {calendar}", + "You reopened to-do {todo} in list {calendar}" : "أنت أعدت فتح المهمة {todo} في القائمة {calendar}", + "{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", + "Untitled calendar" : "تقويم بدون اسم", + "Calendar:" : "التقويم:", + "Date:" : "التاريخ:", + "Where:" : "المكان:", + "Description:" : "الوصف:", + "_%n minute_::_%n minutes_" : ["%n دقيقة","%n دقيقة","%n دقيقتيْن","%n دقائق","%n دقائق","%n دقائق"], + "%s (in %s)" : "%s (في %s)", + "%s (%s ago)" : "%s (%s مضت)", + "Calendar: %s" : "التقويم: %s", + "Date: %s" : "التاريخ: %s", + "Description: %s" : "الوصف: %s", + "Where: %s" : "المكان: %s", + "%1$s via %2$s" : "%1$s عبر %2$s", + "Cancelled: %1$s" : "مُلغىً: %1$s", + "\"%1$s\" has been canceled" : "\"%1$s\" تمّ إلغاؤه", + "Re: %1$s" : "إعادة: %1$s", + "%1$s has accepted your invitation" : "%1$s قبل دعوتك", + "%1$s has tentatively accepted your invitation" : "%1$s قبل دعوتك بشكل مبدئي", + "%1$s has declined your invitation" : "%1$s لم يقبل دعوتك", + "%1$s has responded to your invitation" : "%1$s استجاب لدعوتك", + "Invitation updated: %1$s" : "تحديث الدعوة: %1$s", + "%1$s updated the event \"%2$s\"" : "%1$s تحديث الحدث \"%2$s\"", + "Invitation: %1$s" : "دعوة: %1$s", + "%1$s would like to invite you to \"%2$s\"" : "%1$s يرغب في دعوتكم إلى \"%2$s\"", + "Organizer:" : "تنظيم:", + "Attendees:" : "الحُضُور:", + "Title:" : "العنوان:", + "Time:" : "الوقت:", + "Location:" : "المكان :", + "Link:" : "الرابط:", + "Accept" : "قبول", + "Decline" : "رفض", + "More options …" : "مزيد مِن الخيارات…", + "More options at %s" : "خيارات أخرى في %s", + "Contacts" : "المُراسِلون", + "{actor} created address book {addressbook}" : "{actor} أنشأ دفتر العناوين {addressbook}", + "You created address book {addressbook}" : "أنت أنشأت دفتر العناوين {addressbook}", + "{actor} deleted address book {addressbook}" : "{actor} قام بحذف دفتر العناوين {addressbook}", + "You deleted address book {addressbook}" : "أنت قمت بحذف دفتر العناوين {addressbook}", + "{actor} updated address book {addressbook}" : "{actor} قام بتعديل دفتر العناوين {addressbook}", + "You updated address book {addressbook}" : "أنت قمت بتعديل دفتر العناوين {addressbook}", + "{actor} shared address book {addressbook} with you" : "{actor} قام بمشاركة دفتر العناوين {addressbook} معك", + "You shared address book {addressbook} with {user}" : "أنت قمت بمشاركة دفتر العناوين {addressbook} مع {user}", + "{actor} shared address book {addressbook} with {user}" : "{actor} قام بمشاركة دفتر العناوين {addressbook} مع {user}", + "{actor} unshared address book {addressbook} from you" : "{actor} قام بإلغاء مشاركة دفتر العناوين {addressbook} معك", + "You unshared address book {addressbook} from {user}" : "أنت قمت بإلغاء مشاركة دفتر العناوين {addressbook} مع {user}", + "{actor} unshared address book {addressbook} from {user}" : "{actor} قام بإلغاء مشاركة دفتر العناوين {addressbook} مع {user}", + "{actor} unshared address book {addressbook} from themselves" : "{actor} قام بإلغاء مشاركته في دفتر العناوين {addressbook} ", + "You shared address book {addressbook} with group {group}" : "أنت قمت بمشاركة دفتر العناوين {addressbook} مع المجموعة {group}", + "{actor} shared address book {addressbook} with group {group}" : "{actor} قام بمشاركة دفتر العناوين {addressbook} مع المجموعة {group}", + "You unshared address book {addressbook} from group {group}" : "أنت قمت بإلغاء مشاركة دفتر العناوين {addressbook} مع المجموعة {group}", + "{actor} unshared address book {addressbook} from group {group}" : "{actor} قام بإلغاء مشاركة دفتر العناوين {addressbook} مع المجموعة {group}", + "{actor} created contact {card} in address book {addressbook}" : "{actor} قام بإنشاء جهة اتصال {card} في دفتر العناوين {addressbook}", + "You created contact {card} in address book {addressbook}" : "أنت قمت بإنشاء جهة اتصال {card} في دفتر العناوين {addressbook}", + "{actor} deleted contact {card} from address book {addressbook}" : "{actor} قام بحذف جهة الاتصال {card} من دفتر العناوين {addressbook}", + "You deleted contact {card} from address book {addressbook}" : "أنت قمت بحذف جهة الاتصال {card} من دفتر العناوين {addressbook}", + "{actor} updated contact {card} in address book {addressbook}" : "{actor} قام بتحديث جهة الاتصال {card} في دفتر العناوين {addressbook}", + "You updated contact {card} in address book {addressbook}" : "أنت قمت بتحديث جهة الاتصال {card} في دفتر العناوين {addressbook}", + "A <strong>contact</strong> or <strong>address book</strong> was modified" : "تمّ تعديل <strong>جهة الاتصال</strong> أو <strong>دفتر العناوين</strong> ", + "Accounts" : "حسابات", + "System address book which holds all accounts" : "دفتر عناوين النظام الذي يحوي كل الحسابات", + "File is not updatable: %1$s" : "ملف غير قابل للتعديل: %1$s", + "Could not write to final file, canceled by hook" : "تعذرت الكتابة إلى الملف النهائي، تم إلغاؤه بواسطة خطّاف hook", + "Could not write file contents" : "تعذرت كتابة محتويات الملف", + "Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "حدث خطأ أثناء نسخ الملف إلى الموقع المقصد (تمّ نسخه: %1$s, حجم الملف المتوقع: %2$s)", + "Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "الحجم المتوقع للملف هو %1$s؛ بينما المقروء من ( الجهاز العميل لنكست كلاود) و المكتوب في (تخزين نكست كلاود) هو %2$s. يمكن أن يكون السبب إمّا مشكلة اتصال في جانب الجهاز العميل أو مشكلة في الكتابة في وحدة التخزين في جانب خادوم نكست كلاود .", + "Could not rename part file to final file, canceled by hook" : "تعذّرت إعادة تسمية ملف جزئي إلى ملف نهائي. تمّ الإلغاء من قِبَل الخطّاف hook.", + "Could not rename part file to final file" : "تعذّرت إعادة تسمية ملف جزئي إلى ملف نهائي", + "Failed to check file size: %1$s" : "إخفاق في تحديد حجم الملف: %1$s", + "Could not open file" : "تعذّر فتح الملف", + "Encryption not ready: %1$s" : "التشفير غير جاهز: %1$s", + "Failed to open file: %1$s" : "تعذّر فتح الملف: %1$s", + "Failed to unlink: %1$s" : "تعذّر فك الارتباط: %1$s", + "Invalid chunk name" : "اسم كتلة chunk غير صحيح", + "Could not rename part file assembled from chunks" : "تعذّرت إعادة تسمية ملف جزئي مُجمّعٍ من كُتلٍ chunks", + "Failed to write file contents: %1$s" : "إخفاق في كتابة محتويات الملف: %1$s", + "File not found: %1$s" : "ملف غير موجود: %1$s", + "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", + "Configures a CardDAV account" : "تكوين حساب CardDAV", + "Events" : "أحداث", + "Tasks" : "المهام", + "Untitled task" : "مهمة بدون اسم", + "Completed on %s" : "تمّ الانتهاء منه في %s", + "Due on %s by %s" : "مطلوبٌ في %s من قِبَل%s", + "Due on %s" : "مطلوبٌ في %s", + "Migrated calendar (%1$s)" : "تقويم مُرحّل (%1$s)", + "Calendars including events, details and attendees" : "تحوي التقاويم الأحداث، و تفاصيلها، و الحُضُور", + "Contacts and groups" : "جهات الاتصال والمجموعات", + "WebDAV" : "WebDAV", + "WebDAV endpoint" : "النقطة الحدّيّة endpoint لـ WebDAV", + "Availability" : "أوقات التواجد 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" : "حذف فُرَضَةٍ slot زمنيّةٍ", + "No working hours set" : "لم يتم تحديد ساعات العمل", + "Add slot" : "أضِف فُرَضَةً slot زمنيّةً", + "Monday" : "الإثنين", + "Tuesday" : "الثلاثاء", + "Wednesday" : "الأربعاء", + "Thursday" : "الخميس", + "Friday" : "الجمعة", + "Saturday" : "السبت", + "Sunday" : "الأحد", + "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "قم بتعيين حالة المستخدم تلقائيًا على \"عدم الإزعاج\" خارج نطاق أوقات التوافر لكتم جميع الإشعارات", + "Save" : "حفظ", + "Failed to load availability" : "إخفاق في تحميل أوقات التوافر", + "Saved availability" : "تمّ حفظ أوقات التوافر", + "Failed to save availability" : "إخفاق في حفظ أوقات التواجد", + "Calendar server" : "خادوم التقويم", + "Send invitations to attendees" : "إرسال دعوات للمُستهدفين بالحُضُُور", + "Automatically generate a birthday calendar" : "تجاهل تقويم أعياد الميلاد تلقائيّاً", + "Birthday calendars will be generated by a background job." : "تقويم أعياد الميلاد سيتم توليده من قِبَل مهمةٍ في الخلفية.", + "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}.", + "There was an error updating your attendance status." : "حدث خطأ في تحديث حالة حضورك.", + "Please contact the organizer directly." : "رجاءً، تواصل مع المُنظّم أو المُنظّمين مُباشرةً.", + "Are you accepting the invitation?" : "هل تقبل الدعوة؟", + "Tentative" : "مبدئي", + "Your attendance was updated successfully." : "حضورك تم تحديثه بنجاحٍ", + "Invitation canceled" : "تمّ إلغاء الدعوة", + "Invitation updated" : "تمّ تعديل الدعوة", + "Invitation" : "دعوة" +}, +"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"); diff --git a/apps/dav/l10n/ar.json b/apps/dav/l10n/ar.json new file mode 100644 index 00000000000..2f5dd3da247 --- /dev/null +++ b/apps/dav/l10n/ar.json @@ -0,0 +1,189 @@ +{ "translations": { + "Calendar" : "التقويم", + "To-dos" : "قائمة المهام", + "Personal" : "شخصي", + "{actor} created calendar {calendar}" : "{actor} قام بإنشاء تقويم {calendar}", + "You created calendar {calendar}" : "قمت بإنشاء التقويم {calendar}", + "{actor} deleted calendar {calendar}" : "{actor} قام بحذف التقويم {calendar}", + "You deleted calendar {calendar}" : "لقد قمت بحذف التقويم {calendar}", + "{actor} updated calendar {calendar}" : "{actor} حدّث التقويم {calendar}", + "You updated calendar {calendar}" : "لقد قمت بتحديث التقويم {calendar}", + "{actor} restored calendar {calendar}" : "{actor} استعاد التقويم {calendar}", + "You restored calendar {calendar}" : "أنت استعدت التقويم {calendar}", + "You shared calendar {calendar} as public link" : "أنت شاركت التقويم {calendar} كرابطٍ عموميٍ public link", + "You removed public link for calendar {calendar}" : "أنت ألغيب الرابط العمومي للتقويم {calendar}", + "{actor} shared calendar {calendar} with you" : "{actor} قام بمشاركة التقويم {calendar} معك", + "You shared calendar {calendar} with {user}" : "لقد قمت بمشاركة التقويم {calendar} مع {user}", + "{actor} shared calendar {calendar} with {user}" : "{actor} قام بمشاركة التقويم {calendar} مع {user}", + "{actor} unshared calendar {calendar} from you" : "{actor} أزال مشاركة التقويم {calendar} منك", + "You unshared calendar {calendar} from {user}" : "لقد أزلت مشاركة التقويم {calendar} من {user}", + "{actor} unshared calendar {calendar} from {user}" : "{actor} أزال مشاركة التقويم {calendar} من {user}", + "{actor} unshared calendar {calendar} from themselves" : "{actor} أزال مشاركة التقويم {calendar} من نفسه", + "You shared calendar {calendar} with group {group}" : "أنت شاركت التقويم {calendar} مع المجموعة {group}", + "{actor} shared calendar {calendar} with group {group}" : "{actor} شارك التقويم {calendar} مع المجموعة {group}", + "You unshared calendar {calendar} from group {group}" : "أنت أزلت مشاركة التقويم {calendar} من المجموعة {group}", + "{actor} unshared calendar {calendar} from group {group}" : "{actor} أزال مشاركة التقويم {calendar} من المجموعة {group}", + "Untitled event" : "حدث بدون اسم", + "{actor} created event {event} in calendar {calendar}" : "{actor} أنشأ الحدث {event} في التقويم {calendar}", + "You created event {event} in calendar {calendar}" : "أنت أنشأت الحدث {event} في التقويم {calendar}", + "{actor} deleted event {event} from calendar {calendar}" : "{actor} حذف الحدث {event} من التقويم {calendar}", + "You deleted event {event} from calendar {calendar}" : "أنت حذفت الحدث {event} من التقويم {calendar}", + "{actor} updated event {event} in calendar {calendar}" : "{actor} عدّل الحدث {event} في التقويم {calendar}", + "You updated event {event} in calendar {calendar}" : "أنت عدّلت الحدث {event} في التقويم {calendar}", + "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} نقل الحدث {event} من التقويم {sourceCalendar} إلى التقويم {targetCalendar}", + "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "أنت نقلت الحدث {event} من التقويم {sourceCalendar} إلى التقويم {targetCalendar}", + "{actor} restored event {event} of calendar {calendar}" : "{actor} قام باستعادة الحدث {event} للتقويم {calendar}", + "You restored event {event} of calendar {calendar}" : "أنت قمت باستعادة الحدث {event} للتقويم {calendar}", + "Busy" : "مشغول", + "{actor} created to-do {todo} in list {calendar}" : "{actor} قائمة بإنشاء مهمة {todo} في القائمة {calendar}", + "You created to-do {todo} in list {calendar}" : "أنت قمت بإنشاء مهمة {todo} في القائمة {calendar}", + "{actor} deleted to-do {todo} from list {calendar}" : "{actor} قام بحذف مهمة {todo} من القائمة {calendar}", + "You deleted to-do {todo} from list {calendar}" : "أنت قمت بحذف مهمة {todo} من القائمة {calendar}", + "{actor} updated to-do {todo} in list {calendar}" : "{actor} قام بتعديل مهمة {todo} في القائمة {calendar}", + "You updated to-do {todo} in list {calendar}" : "أنت قمت بتعديل مهمة {todo} في القائمة {calendar}", + "{actor} solved to-do {todo} in list {calendar}" : "{actor} أنجز المهمة {todo} في القائمة{calendar}", + "You solved to-do {todo} in list {calendar}" : "أنت أنجزت المهمة {todo} في القائمة {calendar}", + "{actor} reopened to-do {todo} in list {calendar}" : "{actor} أعاد فتح المهمة {todo} في القائمة {calendar}", + "You reopened to-do {todo} in list {calendar}" : "أنت أعدت فتح المهمة {todo} في القائمة {calendar}", + "{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", + "Untitled calendar" : "تقويم بدون اسم", + "Calendar:" : "التقويم:", + "Date:" : "التاريخ:", + "Where:" : "المكان:", + "Description:" : "الوصف:", + "_%n minute_::_%n minutes_" : ["%n دقيقة","%n دقيقة","%n دقيقتيْن","%n دقائق","%n دقائق","%n دقائق"], + "%s (in %s)" : "%s (في %s)", + "%s (%s ago)" : "%s (%s مضت)", + "Calendar: %s" : "التقويم: %s", + "Date: %s" : "التاريخ: %s", + "Description: %s" : "الوصف: %s", + "Where: %s" : "المكان: %s", + "%1$s via %2$s" : "%1$s عبر %2$s", + "Cancelled: %1$s" : "مُلغىً: %1$s", + "\"%1$s\" has been canceled" : "\"%1$s\" تمّ إلغاؤه", + "Re: %1$s" : "إعادة: %1$s", + "%1$s has accepted your invitation" : "%1$s قبل دعوتك", + "%1$s has tentatively accepted your invitation" : "%1$s قبل دعوتك بشكل مبدئي", + "%1$s has declined your invitation" : "%1$s لم يقبل دعوتك", + "%1$s has responded to your invitation" : "%1$s استجاب لدعوتك", + "Invitation updated: %1$s" : "تحديث الدعوة: %1$s", + "%1$s updated the event \"%2$s\"" : "%1$s تحديث الحدث \"%2$s\"", + "Invitation: %1$s" : "دعوة: %1$s", + "%1$s would like to invite you to \"%2$s\"" : "%1$s يرغب في دعوتكم إلى \"%2$s\"", + "Organizer:" : "تنظيم:", + "Attendees:" : "الحُضُور:", + "Title:" : "العنوان:", + "Time:" : "الوقت:", + "Location:" : "المكان :", + "Link:" : "الرابط:", + "Accept" : "قبول", + "Decline" : "رفض", + "More options …" : "مزيد مِن الخيارات…", + "More options at %s" : "خيارات أخرى في %s", + "Contacts" : "المُراسِلون", + "{actor} created address book {addressbook}" : "{actor} أنشأ دفتر العناوين {addressbook}", + "You created address book {addressbook}" : "أنت أنشأت دفتر العناوين {addressbook}", + "{actor} deleted address book {addressbook}" : "{actor} قام بحذف دفتر العناوين {addressbook}", + "You deleted address book {addressbook}" : "أنت قمت بحذف دفتر العناوين {addressbook}", + "{actor} updated address book {addressbook}" : "{actor} قام بتعديل دفتر العناوين {addressbook}", + "You updated address book {addressbook}" : "أنت قمت بتعديل دفتر العناوين {addressbook}", + "{actor} shared address book {addressbook} with you" : "{actor} قام بمشاركة دفتر العناوين {addressbook} معك", + "You shared address book {addressbook} with {user}" : "أنت قمت بمشاركة دفتر العناوين {addressbook} مع {user}", + "{actor} shared address book {addressbook} with {user}" : "{actor} قام بمشاركة دفتر العناوين {addressbook} مع {user}", + "{actor} unshared address book {addressbook} from you" : "{actor} قام بإلغاء مشاركة دفتر العناوين {addressbook} معك", + "You unshared address book {addressbook} from {user}" : "أنت قمت بإلغاء مشاركة دفتر العناوين {addressbook} مع {user}", + "{actor} unshared address book {addressbook} from {user}" : "{actor} قام بإلغاء مشاركة دفتر العناوين {addressbook} مع {user}", + "{actor} unshared address book {addressbook} from themselves" : "{actor} قام بإلغاء مشاركته في دفتر العناوين {addressbook} ", + "You shared address book {addressbook} with group {group}" : "أنت قمت بمشاركة دفتر العناوين {addressbook} مع المجموعة {group}", + "{actor} shared address book {addressbook} with group {group}" : "{actor} قام بمشاركة دفتر العناوين {addressbook} مع المجموعة {group}", + "You unshared address book {addressbook} from group {group}" : "أنت قمت بإلغاء مشاركة دفتر العناوين {addressbook} مع المجموعة {group}", + "{actor} unshared address book {addressbook} from group {group}" : "{actor} قام بإلغاء مشاركة دفتر العناوين {addressbook} مع المجموعة {group}", + "{actor} created contact {card} in address book {addressbook}" : "{actor} قام بإنشاء جهة اتصال {card} في دفتر العناوين {addressbook}", + "You created contact {card} in address book {addressbook}" : "أنت قمت بإنشاء جهة اتصال {card} في دفتر العناوين {addressbook}", + "{actor} deleted contact {card} from address book {addressbook}" : "{actor} قام بحذف جهة الاتصال {card} من دفتر العناوين {addressbook}", + "You deleted contact {card} from address book {addressbook}" : "أنت قمت بحذف جهة الاتصال {card} من دفتر العناوين {addressbook}", + "{actor} updated contact {card} in address book {addressbook}" : "{actor} قام بتحديث جهة الاتصال {card} في دفتر العناوين {addressbook}", + "You updated contact {card} in address book {addressbook}" : "أنت قمت بتحديث جهة الاتصال {card} في دفتر العناوين {addressbook}", + "A <strong>contact</strong> or <strong>address book</strong> was modified" : "تمّ تعديل <strong>جهة الاتصال</strong> أو <strong>دفتر العناوين</strong> ", + "Accounts" : "حسابات", + "System address book which holds all accounts" : "دفتر عناوين النظام الذي يحوي كل الحسابات", + "File is not updatable: %1$s" : "ملف غير قابل للتعديل: %1$s", + "Could not write to final file, canceled by hook" : "تعذرت الكتابة إلى الملف النهائي، تم إلغاؤه بواسطة خطّاف hook", + "Could not write file contents" : "تعذرت كتابة محتويات الملف", + "Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "حدث خطأ أثناء نسخ الملف إلى الموقع المقصد (تمّ نسخه: %1$s, حجم الملف المتوقع: %2$s)", + "Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "الحجم المتوقع للملف هو %1$s؛ بينما المقروء من ( الجهاز العميل لنكست كلاود) و المكتوب في (تخزين نكست كلاود) هو %2$s. يمكن أن يكون السبب إمّا مشكلة اتصال في جانب الجهاز العميل أو مشكلة في الكتابة في وحدة التخزين في جانب خادوم نكست كلاود .", + "Could not rename part file to final file, canceled by hook" : "تعذّرت إعادة تسمية ملف جزئي إلى ملف نهائي. تمّ الإلغاء من قِبَل الخطّاف hook.", + "Could not rename part file to final file" : "تعذّرت إعادة تسمية ملف جزئي إلى ملف نهائي", + "Failed to check file size: %1$s" : "إخفاق في تحديد حجم الملف: %1$s", + "Could not open file" : "تعذّر فتح الملف", + "Encryption not ready: %1$s" : "التشفير غير جاهز: %1$s", + "Failed to open file: %1$s" : "تعذّر فتح الملف: %1$s", + "Failed to unlink: %1$s" : "تعذّر فك الارتباط: %1$s", + "Invalid chunk name" : "اسم كتلة chunk غير صحيح", + "Could not rename part file assembled from chunks" : "تعذّرت إعادة تسمية ملف جزئي مُجمّعٍ من كُتلٍ chunks", + "Failed to write file contents: %1$s" : "إخفاق في كتابة محتويات الملف: %1$s", + "File not found: %1$s" : "ملف غير موجود: %1$s", + "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", + "Configures a CardDAV account" : "تكوين حساب CardDAV", + "Events" : "أحداث", + "Tasks" : "المهام", + "Untitled task" : "مهمة بدون اسم", + "Completed on %s" : "تمّ الانتهاء منه في %s", + "Due on %s by %s" : "مطلوبٌ في %s من قِبَل%s", + "Due on %s" : "مطلوبٌ في %s", + "Migrated calendar (%1$s)" : "تقويم مُرحّل (%1$s)", + "Calendars including events, details and attendees" : "تحوي التقاويم الأحداث، و تفاصيلها، و الحُضُور", + "Contacts and groups" : "جهات الاتصال والمجموعات", + "WebDAV" : "WebDAV", + "WebDAV endpoint" : "النقطة الحدّيّة endpoint لـ WebDAV", + "Availability" : "أوقات التواجد 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" : "حذف فُرَضَةٍ slot زمنيّةٍ", + "No working hours set" : "لم يتم تحديد ساعات العمل", + "Add slot" : "أضِف فُرَضَةً slot زمنيّةً", + "Monday" : "الإثنين", + "Tuesday" : "الثلاثاء", + "Wednesday" : "الأربعاء", + "Thursday" : "الخميس", + "Friday" : "الجمعة", + "Saturday" : "السبت", + "Sunday" : "الأحد", + "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "قم بتعيين حالة المستخدم تلقائيًا على \"عدم الإزعاج\" خارج نطاق أوقات التوافر لكتم جميع الإشعارات", + "Save" : "حفظ", + "Failed to load availability" : "إخفاق في تحميل أوقات التوافر", + "Saved availability" : "تمّ حفظ أوقات التوافر", + "Failed to save availability" : "إخفاق في حفظ أوقات التواجد", + "Calendar server" : "خادوم التقويم", + "Send invitations to attendees" : "إرسال دعوات للمُستهدفين بالحُضُُور", + "Automatically generate a birthday calendar" : "تجاهل تقويم أعياد الميلاد تلقائيّاً", + "Birthday calendars will be generated by a background job." : "تقويم أعياد الميلاد سيتم توليده من قِبَل مهمةٍ في الخلفية.", + "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}.", + "There was an error updating your attendance status." : "حدث خطأ في تحديث حالة حضورك.", + "Please contact the organizer directly." : "رجاءً، تواصل مع المُنظّم أو المُنظّمين مُباشرةً.", + "Are you accepting the invitation?" : "هل تقبل الدعوة؟", + "Tentative" : "مبدئي", + "Your attendance was updated successfully." : "حضورك تم تحديثه بنجاحٍ", + "Invitation canceled" : "تمّ إلغاء الدعوة", + "Invitation updated" : "تمّ تعديل الدعوة", + "Invitation" : "دعوة" +},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;" +}
\ No newline at end of file diff --git a/apps/dav/l10n/ca.js b/apps/dav/l10n/ca.js index 8c5a24aa162..581bb4ccc10 100644 --- a/apps/dav/l10n/ca.js +++ b/apps/dav/l10n/ca.js @@ -65,7 +65,7 @@ OC.L10N.register( "_%n day_::_%n days_" : ["%n dia","%n dies"], "_%n hour_::_%n hours_" : ["%n hora","%n hores"], "_%n minute_::_%n minutes_" : ["%n minut","%n minuts"], - "%s (in %s)" : "%s (d'aquí %s)", + "%s (in %s)" : "%s (d'aquí a %s)", "%s (%s ago)" : "%s (fa %s)", "Calendar: %s" : "Calendari: %s", "Date: %s" : "Data: %s", diff --git a/apps/dav/l10n/ca.json b/apps/dav/l10n/ca.json index 6b92dedc53e..522bc984fba 100644 --- a/apps/dav/l10n/ca.json +++ b/apps/dav/l10n/ca.json @@ -63,7 +63,7 @@ "_%n day_::_%n days_" : ["%n dia","%n dies"], "_%n hour_::_%n hours_" : ["%n hora","%n hores"], "_%n minute_::_%n minutes_" : ["%n minut","%n minuts"], - "%s (in %s)" : "%s (d'aquí %s)", + "%s (in %s)" : "%s (d'aquí a %s)", "%s (%s ago)" : "%s (fa %s)", "Calendar: %s" : "Calendari: %s", "Date: %s" : "Data: %s", diff --git a/apps/dav/l10n/fr.js b/apps/dav/l10n/fr.js index c9cdeea5ff3..d4547b65fb1 100644 --- a/apps/dav/l10n/fr.js +++ b/apps/dav/l10n/fr.js @@ -153,7 +153,7 @@ OC.L10N.register( "Contacts and groups" : "Contacts et groupes", "WebDAV" : "WebDAV", "WebDAV endpoint" : "Point d'accès WebDAV", - "Availability" : "Disponibilité", + "Availability" : "Disponibilités", "If you configure your working hours, other users will see when you are out of office when they book a meeting." : "Si vous configurez vos heures de travail, les autres utilisateurs verront si vous êtes disponible quand ils planifient une réunion.", "Time zone:" : "Fuseau horaire :", "to" : "à", @@ -167,11 +167,11 @@ OC.L10N.register( "Friday" : "Vendredi", "Saturday" : "Samedi", "Sunday" : "Dimanche", - "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Définir automatiquement le statut \"Ne pas déranger\" en dehors des heures de disponibilité pour désactiver toutes les notifications.", + "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Définir automatiquement le statut \"Ne pas déranger\" en dehors des heures de disponibilités pour désactiver toutes les notifications.", "Save" : "Enregistrer", - "Failed to load availability" : "Impossible de charger la disponibilité", - "Saved availability" : "Disponibilité sauvegardée", - "Failed to save availability" : "Impossible de sauvegarder la disponibilité", + "Failed to load availability" : "Impossible de charger les disponibilités", + "Saved availability" : "Disponibilités sauvegardées", + "Failed to save availability" : "Impossible de sauvegarder les disponibilités", "Calendar server" : "Serveur de calendrier", "Send invitations to attendees" : "Envoyer des invitations aux participants", "Automatically generate a birthday calendar" : "Générer automatiquement un agenda d'anniversaire", diff --git a/apps/dav/l10n/fr.json b/apps/dav/l10n/fr.json index ae4887e0ce1..672f4174af3 100644 --- a/apps/dav/l10n/fr.json +++ b/apps/dav/l10n/fr.json @@ -151,7 +151,7 @@ "Contacts and groups" : "Contacts et groupes", "WebDAV" : "WebDAV", "WebDAV endpoint" : "Point d'accès WebDAV", - "Availability" : "Disponibilité", + "Availability" : "Disponibilités", "If you configure your working hours, other users will see when you are out of office when they book a meeting." : "Si vous configurez vos heures de travail, les autres utilisateurs verront si vous êtes disponible quand ils planifient une réunion.", "Time zone:" : "Fuseau horaire :", "to" : "à", @@ -165,11 +165,11 @@ "Friday" : "Vendredi", "Saturday" : "Samedi", "Sunday" : "Dimanche", - "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Définir automatiquement le statut \"Ne pas déranger\" en dehors des heures de disponibilité pour désactiver toutes les notifications.", + "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Définir automatiquement le statut \"Ne pas déranger\" en dehors des heures de disponibilités pour désactiver toutes les notifications.", "Save" : "Enregistrer", - "Failed to load availability" : "Impossible de charger la disponibilité", - "Saved availability" : "Disponibilité sauvegardée", - "Failed to save availability" : "Impossible de sauvegarder la disponibilité", + "Failed to load availability" : "Impossible de charger les disponibilités", + "Saved availability" : "Disponibilités sauvegardées", + "Failed to save availability" : "Impossible de sauvegarder les disponibilités", "Calendar server" : "Serveur de calendrier", "Send invitations to attendees" : "Envoyer des invitations aux participants", "Automatically generate a birthday calendar" : "Générer automatiquement un agenda d'anniversaire", diff --git a/apps/dav/l10n/gl.js b/apps/dav/l10n/gl.js index 1bbc6a1afb5..288ad39f189 100644 --- a/apps/dav/l10n/gl.js +++ b/apps/dav/l10n/gl.js @@ -5,13 +5,13 @@ OC.L10N.register( "To-dos" : "Tarefas pendentes", "Personal" : "Persoal", "{actor} created calendar {calendar}" : "{actor} creou o calendario {calendar}", - "You created calendar {calendar}" : "Vostede creou o calendario {calendar}", + "You created calendar {calendar}" : "Creou o calendario {calendar}", "{actor} deleted calendar {calendar}" : "{actor} eliminou o calendario {calendar}", - "You deleted calendar {calendar}" : "Vostede eliminou o calendario {calendar}", + "You deleted calendar {calendar}" : "Eliminou o calendario {calendar}", "{actor} updated calendar {calendar}" : "{actor} actualizou o calendario {calendar}", "You updated calendar {calendar}" : "Vostede actualizou o calendario {calendar}", "{actor} restored calendar {calendar}" : "{actor} restaurou o calendario {calendar}", - "You restored calendar {calendar}" : "Restauraches o calendario {calendar}", + "You restored calendar {calendar}" : "Vostede restaurou o calendario {calendar}", "You shared calendar {calendar} as public link" : "Vostede compartiu o calendario {calendar} como ligazón pública", "You removed public link for calendar {calendar}" : "Vostede retirou a ligazón pública do calendario {calendar}", "{actor} shared calendar {calendar} with you" : "{actor} compartiu o calendario {calendar} con vostede", @@ -33,26 +33,26 @@ OC.L10N.register( "{actor} updated event {event} in calendar {calendar}" : "{actor} actualizou o evento {event} no calendario {calendar}", "You updated event {event} in calendar {calendar}" : "Vostede actualizou o evento {event} no calendario {calendar}", "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} moveu o evento {event} do calendario {sourceCalendar} ao calendario {targetCalendar}", - "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Moveches o evento {evento} do calendario {sourceCalendar} ao calendario {targetCalendar}", + "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Moveu o evento {evento} do calendario {sourceCalendar} ao calendario {targetCalendar}", "{actor} restored event {event} of calendar {calendar}" : "{actor} restaurou o evento {evento} do calendario {calendar}", - "You restored event {event} of calendar {calendar}" : "Restauraches o evento {evento} do calendario {calendar}", + "You restored event {event} of calendar {calendar}" : "Restaurou o evento {evento} do calendario {calendar}", "Busy" : "Ocupado", - "{actor} created to-do {todo} in list {calendar}" : "{actor} creou as tarefas {todo} na lista {calendar}", - "You created to-do {todo} in list {calendar}" : "Creaches a tarefa {todo} na lista {calendar}", - "{actor} deleted to-do {todo} from list {calendar}" : "{actor} eliminou as tarefas pendentes {todo} da lista {calendar}", - "You deleted to-do {todo} from list {calendar}" : "Eliminaches as tarefas pendentes {todo} da lista {calendar}", - "{actor} updated to-do {todo} in list {calendar}" : "{actor} actualizou a tarefa {todo} na lista {calendar}", - "You updated to-do {todo} in list {calendar}" : "Actualizaches a tarefa {todo} na lista {calendar}", - "{actor} solved to-do {todo} in list {calendar}" : "{actor} resolveu as tarefas {todo} na lista {calendar}", - "You solved to-do {todo} in list {calendar}" : "Resolveches a tarefa {todo} na lista {calendar}", - "{actor} reopened to-do {todo} in list {calendar}" : "{actor} reabriu as tarefas {todo} na lista {calendar}", - "You reopened to-do {todo} in list {calendar}" : "Reabriches as tarefas {todo} na lista {calendar}", - "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} moveu a tarefa {todo} da lista {sourceCalendar} á lista {targetCalendar}", - "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Moveches a tarefa {todo} da lista {sourceCalendar} á lista {targetCalendar}", + "{actor} created to-do {todo} in list {calendar}" : "{actor} creou a tarefa pendente {todo} na lista {calendar}", + "You created to-do {todo} in list {calendar}" : "Creou a tarefa pendente {todo} na lista {calendar}", + "{actor} deleted to-do {todo} from list {calendar}" : "{actor} eliminou a tarefa pendente {todo} da lista {calendar}", + "You deleted to-do {todo} from list {calendar}" : "Eliminou a tarefa pendente {todo} da lista {calendar}", + "{actor} updated to-do {todo} in list {calendar}" : "{actor} actualizou a tarefa pendente {todo} na lista {calendar}", + "You updated to-do {todo} in list {calendar}" : "Actualizou a tarefa pendente {todo} na lista {calendar}", + "{actor} solved to-do {todo} in list {calendar}" : "{actor} resolveu a tarefa pendente {todo} na lista {calendar}", + "You solved to-do {todo} in list {calendar}" : "Resolveu a tarefa pendente {todo} na lista {calendar}", + "{actor} reopened to-do {todo} in list {calendar}" : "{actor} reabriu a tarefa pendente {todo} na lista {calendar}", + "You reopened to-do {todo} in list {calendar}" : "Reabriu a tarefa pendente {todo} na lista {calendar}", + "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} moveu a tarefa pendente {todo} da lista {sourceCalendar} á lista {targetCalendar}", + "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Moveu a tarefa pendente {todo} da lista {sourceCalendar} á lista {targetCalendar}", "Calendar, contacts and tasks" : "Calendario, contactos e tarefas", "A <strong>calendar</strong> was modified" : "Foi modificado un <strong>calendario</strong>", "A calendar <strong>event</strong> was modified" : "Foi modificado un <strong>evento</strong> do calendario", - "A calendar <strong>to-do</strong> was modified" : "Modificouse unha <strong>tarefa</strong> do calendario", + "A calendar <strong>to-do</strong> was modified" : "Modificouse unha <strong>tarefa pendente</strong> do calendario", "Contact birthdays" : "Aniversario do contacto", "Death of %s" : "Falecemento de %s", "Untitled calendar" : "Calendario sen título", @@ -73,16 +73,16 @@ OC.L10N.register( "Where: %s" : "Onde: %s", "%1$s via %2$s" : "%1$s mediante %2$s", "Cancelled: %1$s" : "Cancelado: %1$s", - "\"%1$s\" has been canceled" : "\"%1$s\" cancelouse", + "\"%1$s\" has been canceled" : "Cancelouse «%1$s»", "Re: %1$s" : "Re: %1$s", - "%1$s has accepted your invitation" : "%1$s aceptou a túa invitación", - "%1$s has tentatively accepted your invitation" : "%1$s aceptou provisionalmente a túa invitación", - "%1$s has declined your invitation" : "%1$s rexeitou a túa invitación", - "%1$s has responded to your invitation" : "%1$s respondeu á túa invitación", - "Invitation updated: %1$s" : "Invitación actualizada: %1$s", - "%1$s updated the event \"%2$s\"" : "%1$s actualizou o evento \"%2$s\"", - "Invitation: %1$s" : "Invitación: %1$s", - "%1$s would like to invite you to \"%2$s\"" : "%1$s quere invitarte a \"%2$s\"", + "%1$s has accepted your invitation" : "%1$s aceptou o seu convite", + "%1$s has tentatively accepted your invitation" : "%1$s aceptou provisionalmente o seu convite", + "%1$s has declined your invitation" : "%1$s rexeitou o seu convite", + "%1$s has responded to your invitation" : "%1$s respondeu ao seu convite", + "Invitation updated: %1$s" : "Convite actualizado: %1$s", + "%1$s updated the event \"%2$s\"" : "%1$s actualizou o evento «%2$s»", + "Invitation: %1$s" : "Convite: %1$s", + "%1$s would like to invite you to \"%2$s\"" : "%1$s quere convidalo a «%2$s»", "Organizer:" : "Organizador:", "Attendees:" : "Asistentes:", "Title:" : "Título:", @@ -94,49 +94,51 @@ OC.L10N.register( "More options …" : "Máis opcións…", "More options at %s" : "Máis opcións en %s", "Contacts" : "Contactos", - "{actor} created address book {addressbook}" : "{actor} creou a axenda de enderezos {addressbook}", - "You created address book {addressbook}" : "Creaches a axenda de enderezos {addressbook}", - "{actor} deleted address book {addressbook}" : "{actor} eliminou a axenda de enderezos {addressbook}", - "You deleted address book {addressbook}" : "Eliminaches a axenda de enderezos {addressbook}", - "{actor} updated address book {addressbook}" : "{actor} actualizou a axenda de enderezos {addressbook}", - "You updated address book {addressbook}" : "Actualizaches a axenda de enderezos {addressbook}", - "{actor} shared address book {addressbook} with you" : "{actor} compartiu a axenda de enderezos {addressbook} contigo", - "You shared address book {addressbook} with {user}" : "Compartiches a axenda de enderezos {addressbook} con {user}", - "{actor} shared address book {addressbook} with {user}" : "{actor} compartiu a axenda de enderezos {addressbook} con {user}", - "{actor} unshared address book {addressbook} from you" : "{actor} deixou de compartir a túa axenda de enderezos {addressbook}", - "You unshared address book {addressbook} from {user}" : "Deixaches de compartir a axenda de enderezos {addressbook} de {user}", - "{actor} unshared address book {addressbook} from {user}" : "{actor} deixou de compartir a axenda de enderezos {addressbook} de {user}", - "{actor} unshared address book {addressbook} from themselves" : "{actor} deixaron de compartir a súa axenda de enderezos {addressbook}", - "You shared address book {addressbook} with group {group}" : "Compartiches a axenda de enderezos {addressbook} co grupo {group}", - "{actor} shared address book {addressbook} with group {group}" : "{actor} compartiu a axenda de enderezos {addressbook} co grupo {group}", - "You unshared address book {addressbook} from group {group}" : "Deixaches de compartir a axenda de enderezos {addressbook} do grupo {group}", - "{actor} unshared address book {addressbook} from group {group}" : "{actor} deixou de compartir axenda de enderezos {addressbook} do grupo {group}", - "{actor} created contact {card} in address book {addressbook}" : "{actor} creou o contacto {card} na axenda de enderezos {addressbook}", - "You created contact {card} in address book {addressbook}" : "Creaches o contacto {card} na axenda de enderezos {addressbook}", - "{actor} deleted contact {card} from address book {addressbook}" : "{actor} eliminou o contacto {card} da axenda de enderezos {addressbook}", - "You deleted contact {card} from address book {addressbook}" : "Eliminaches o contacto {card} da axenda de enderezos {addressbook}", - "{actor} updated contact {card} in address book {addressbook}" : "{actor} actualizou o contacto {card} na axenda de enderezos {addressbook}", - "You updated contact {card} in address book {addressbook}" : "Actualizaches o contacto {card} na axenda de enderezos {addressbook}", - "A <strong>contact</strong> or <strong>address book</strong> was modified" : "Modificouse un <strong>contacto</strong> ou <strong>axenda de enderezos</strong>", - "File is not updatable: %1$s" : "O ficheiro non se pode actualizar: %1$s", - "Could not write to final file, canceled by hook" : "Non foi posíbel escribir no ficheiro final, cancelouse polo hook", - "Could not write file contents" : "Non se puido escribir o contido do ficheiro", + "{actor} created address book {addressbook}" : "{actor} creou o caderno de enderezos {addressbook}", + "You created address book {addressbook}" : "Vostede creou o caderno de enderezos {addressbook}", + "{actor} deleted address book {addressbook}" : "{actor} eliminou o caderno de enderezos {addressbook}", + "You deleted address book {addressbook}" : "Vostede eliminou o caderno de enderezos {addressbook}", + "{actor} updated address book {addressbook}" : "{actor} actualizou o caderno de enderezos {addressbook}", + "You updated address book {addressbook}" : "Vostede actualizou o caderno de enderezos {addressbook}", + "{actor} shared address book {addressbook} with you" : "{actor} compartiu o caderno de enderezos {addressbook} con vostede", + "You shared address book {addressbook} with {user}" : "Vostede compartiu o caderno de enderezos {addressbook} con {user}", + "{actor} shared address book {addressbook} with {user}" : "{actor} compartiu o caderno de enderezos {addressbook} con {user}", + "{actor} unshared address book {addressbook} from you" : "{actor} deixou de compartir o seu caderno de enderezos {addressbook}", + "You unshared address book {addressbook} from {user}" : "Vostede deixou de compartir o caderno de enderezos {addressbook} de {user}", + "{actor} unshared address book {addressbook} from {user}" : "{actor} deixou de compartir o caderno de enderezos {addressbook} de {user}", + "{actor} unshared address book {addressbook} from themselves" : "{actor} deixaron de compartir o seu caderno de enderezos {addressbook}", + "You shared address book {addressbook} with group {group}" : "Vostede compartiu o caderno de enderezos {addressbook} co grupo {group}", + "{actor} shared address book {addressbook} with group {group}" : "{actor} compartiu o caderno de enderezos {addressbook} co grupo {group}", + "You unshared address book {addressbook} from group {group}" : "Vostede deixou de compartir o caderno de enderezos {addressbook} do grupo {group}", + "{actor} unshared address book {addressbook} from group {group}" : "{actor} deixou de compartir o caderno de enderezos {addressbook} do grupo {group}", + "{actor} created contact {card} in address book {addressbook}" : "{actor} creou o contacto {card} no caderno de enderezos {addressbook}", + "You created contact {card} in address book {addressbook}" : "Vostede creou o contacto {card} no caderno de enderezos {addressbook}", + "{actor} deleted contact {card} from address book {addressbook}" : "{actor} eliminou o contacto {card} do caderno de enderezos {addressbook}", + "You deleted contact {card} from address book {addressbook}" : "Vostede eliminou o contacto {card} do caderno de enderezos {addressbook}", + "{actor} updated contact {card} in address book {addressbook}" : "{actor} actualizou o contacto {card} no caderno de enderezos {addressbook}", + "You updated contact {card} in address book {addressbook}" : "Vostede actualizou o contacto {card} no caderno de enderezos {addressbook}", + "A <strong>contact</strong> or <strong>address book</strong> was modified" : "Foi modificado un <strong>contacto</strong> ou <strong>caderno de enderezos</strong>", + "Accounts" : "Contas", + "System address book which holds all accounts" : "Caderno de enderezos do sistema que contén todas as contas", + "File is not updatable: %1$s" : "Non é posíbel actualizar o ficheiro: %1$s", + "Could not write to final file, canceled by hook" : "Non foi posíbel escribir no ficheiro final, foi cancelado polo sistema", + "Could not write file contents" : "Non foi posíbel escribir o contido do ficheiro", "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], - "Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Produciuse un erro ao copiar o ficheiro na localización de destino (copiado: %1$s, tamaño esperado do ficheiro: %2$s)", - "Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "Tamaño esperado do ficheiro %1$s pero lido (do cliente de Nextcloud) e escrito (no almacenamento de Nextcloud) %2$s. Pode ser un problema de rede no lado do envío ou un problema ao escribir no almacenamento no lado do servidor.", - "Could not rename part file to final file, canceled by hook" : "Non foi posíbel cambiar o nome do ficheiro de parte ao ficheiro final, cancelado polo hook", - "Could not rename part file to final file" : "Non se puido cambiar o nome do ficheiro de parte ao ficheiro final", + "Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Produciuse un erro ao copiar o ficheiro na localización de destino (copiado: %1$s, tamaño agardado do ficheiro: %2$s)", + "Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "Tamaño agardado do ficheiro %1$s mais lido (do cliente de Nextcloud) e escrito (no almacenamento de Nextcloud) %2$s. Pode ser un problema de rede no lado do envío ou un problema ao escribir no almacenamento no lado do servidor.", + "Could not rename part file to final file, canceled by hook" : "Non foi posíbel cambiar o nome do ficheiro parcial ao ficheiro final, foi cancelado polo sistema", + "Could not rename part file to final file" : "Non foi posíbel cambiar o nome do ficheiro parcial ao ficheiro final", "Failed to check file size: %1$s" : "Produciuse un erro ao comprobar o tamaño do ficheiro: %1$s", - "Could not open file" : "Non se puido abrir o ficheiro", - "Encryption not ready: %1$s" : "O cifrado non está listo: %1$s", + "Could not open file" : "Non foi posíbel abrir o ficheiro", + "Encryption not ready: %1$s" : "O cifrado non está preparado: %1$s", "Failed to open file: %1$s" : "Produciuse un erro ao abrir o ficheiro: %1$s", "Failed to unlink: %1$s" : "Produciuse un erro ao desligar: %1$s", "Invalid chunk name" : "O nome do fragmento non é válido", - "Could not rename part file assembled from chunks" : "Non se puido cambiar o nome do ficheiro de pezas ensamblados a partir de fragmentos", + "Could not rename part file assembled from chunks" : "Non foi posíbel cambiar o nome do ficheiro de pezas ensamblados a partir de fragmentos", "Failed to write file contents: %1$s" : "Produciuse un erro ao escribir o contido do ficheiro: %1$s", - "File not found: %1$s" : "Arquivo non atopado: %1$s", + "File not found: %1$s" : "Non se atopou o ficheiro: %1$s", "System is in maintenance mode." : "O sistema está en modo de mantemento.", - "Upgrade needed" : "É necesario anovar actualizar", + "Upgrade needed" : "É necesario anovar", "Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "É preciso configurar o seu %s para que empregue HTTPS para poder usar CalDAV e CardDAV con iOS / macOS.", "Configures a CalDAV account" : "Configurar unha conta de CalDAV", "Configures a CardDAV account" : "Configurar unha conta de CardDAV", @@ -152,11 +154,11 @@ OC.L10N.register( "WebDAV" : "WebDAV", "WebDAV endpoint" : "Terminación WebDAV", "Availability" : "Dispoñibilidade", - "If you configure your working hours, other users will see when you are out of office when they book a meeting." : "Se configuras o teu horario de traballo, outros usuarios verán cando estás fóra da oficina cando reserven unha reunión.", - "Time zone:" : "Franxa horaria:", + "If you configure your working hours, other users will see when you are out of office when they book a meeting." : "Se configura o seu horario de traballo, outros usuarios verán cando está fóra da oficina cando reserven unha xuntanza.", + "Time zone:" : "Fuso horario:", "to" : "para", "Delete slot" : "Eliminar franxa horaria", - "No working hours set" : "Sen horario de traballo establecido", + "No working hours set" : "Sen horario de traballo estabelecido", "Add slot" : "Engadir franxa horaria", "Monday" : "luns", "Tuesday" : "martes", @@ -165,7 +167,7 @@ OC.L10N.register( "Friday" : "venres", "Saturday" : "sábado", "Sunday" : "domingo", - "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Establece automaticamente o estado do usuario en \"Non molestar\" fóra da dispoñibilidade para silenciar todas as notificacións.", + "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Estabelecer automaticamente o estado do usuario en «Non molestar» fóra de dispoñibilidade para silenciar todas as notificacións.", "Save" : "Gardar", "Failed to load availability" : "Produciuse un erro ao cargar a dispoñibilidade", "Saved availability" : "Dispoñibilidade gardada", @@ -177,8 +179,8 @@ OC.L10N.register( "Hence they will not be available immediately after enabling but will show up after some time." : "Por isto, non estarán dispoñíbeis inmediatamente tras activalos, senón que aparecerán após certo tempo", "Send notifications for events" : "Enviar notificacións para eventos", "Notifications are sent via background jobs, so these must occur often enough." : "As notificacións enviaranse mediante procesos en segundo plano, polo que estes teñen que suceder con frecuencia.", - "Send reminder notifications to calendar sharees as well" : "Envía notificacións de recordatorio tamén aos que comparten calendario", - "Reminders are always sent to organizers and attendees." : "Os recordatorios sempre se envían aos organizadores e aos asistentes.", + "Send reminder notifications to calendar sharees as well" : "Enviar notificacións de lembrete tamén aos que comparten calendario", + "Reminders are always sent to organizers and attendees." : "Os lembretes envíanselle sempre aos organizadores e aos asistentes.", "Enable notifications for events via push" : "Activar o envío de notificacións do automáticas para eventos", "Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instale tamén a {calendarappstoreopen}aplicación do Calendario{linkclose} ou {calendardocopen}conecte os seus escritorio e móbil para sincronizalos ↗{linkclose}.", "Please make sure to properly set up {emailopen}the email server{linkclose}." : "Asegúrese de ter configurado correctamente {emailopen}o servidor de correo-e{linkclose}.", diff --git a/apps/dav/l10n/gl.json b/apps/dav/l10n/gl.json index 87296f5f364..17e88139f67 100644 --- a/apps/dav/l10n/gl.json +++ b/apps/dav/l10n/gl.json @@ -3,13 +3,13 @@ "To-dos" : "Tarefas pendentes", "Personal" : "Persoal", "{actor} created calendar {calendar}" : "{actor} creou o calendario {calendar}", - "You created calendar {calendar}" : "Vostede creou o calendario {calendar}", + "You created calendar {calendar}" : "Creou o calendario {calendar}", "{actor} deleted calendar {calendar}" : "{actor} eliminou o calendario {calendar}", - "You deleted calendar {calendar}" : "Vostede eliminou o calendario {calendar}", + "You deleted calendar {calendar}" : "Eliminou o calendario {calendar}", "{actor} updated calendar {calendar}" : "{actor} actualizou o calendario {calendar}", "You updated calendar {calendar}" : "Vostede actualizou o calendario {calendar}", "{actor} restored calendar {calendar}" : "{actor} restaurou o calendario {calendar}", - "You restored calendar {calendar}" : "Restauraches o calendario {calendar}", + "You restored calendar {calendar}" : "Vostede restaurou o calendario {calendar}", "You shared calendar {calendar} as public link" : "Vostede compartiu o calendario {calendar} como ligazón pública", "You removed public link for calendar {calendar}" : "Vostede retirou a ligazón pública do calendario {calendar}", "{actor} shared calendar {calendar} with you" : "{actor} compartiu o calendario {calendar} con vostede", @@ -31,26 +31,26 @@ "{actor} updated event {event} in calendar {calendar}" : "{actor} actualizou o evento {event} no calendario {calendar}", "You updated event {event} in calendar {calendar}" : "Vostede actualizou o evento {event} no calendario {calendar}", "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} moveu o evento {event} do calendario {sourceCalendar} ao calendario {targetCalendar}", - "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Moveches o evento {evento} do calendario {sourceCalendar} ao calendario {targetCalendar}", + "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Moveu o evento {evento} do calendario {sourceCalendar} ao calendario {targetCalendar}", "{actor} restored event {event} of calendar {calendar}" : "{actor} restaurou o evento {evento} do calendario {calendar}", - "You restored event {event} of calendar {calendar}" : "Restauraches o evento {evento} do calendario {calendar}", + "You restored event {event} of calendar {calendar}" : "Restaurou o evento {evento} do calendario {calendar}", "Busy" : "Ocupado", - "{actor} created to-do {todo} in list {calendar}" : "{actor} creou as tarefas {todo} na lista {calendar}", - "You created to-do {todo} in list {calendar}" : "Creaches a tarefa {todo} na lista {calendar}", - "{actor} deleted to-do {todo} from list {calendar}" : "{actor} eliminou as tarefas pendentes {todo} da lista {calendar}", - "You deleted to-do {todo} from list {calendar}" : "Eliminaches as tarefas pendentes {todo} da lista {calendar}", - "{actor} updated to-do {todo} in list {calendar}" : "{actor} actualizou a tarefa {todo} na lista {calendar}", - "You updated to-do {todo} in list {calendar}" : "Actualizaches a tarefa {todo} na lista {calendar}", - "{actor} solved to-do {todo} in list {calendar}" : "{actor} resolveu as tarefas {todo} na lista {calendar}", - "You solved to-do {todo} in list {calendar}" : "Resolveches a tarefa {todo} na lista {calendar}", - "{actor} reopened to-do {todo} in list {calendar}" : "{actor} reabriu as tarefas {todo} na lista {calendar}", - "You reopened to-do {todo} in list {calendar}" : "Reabriches as tarefas {todo} na lista {calendar}", - "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} moveu a tarefa {todo} da lista {sourceCalendar} á lista {targetCalendar}", - "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Moveches a tarefa {todo} da lista {sourceCalendar} á lista {targetCalendar}", + "{actor} created to-do {todo} in list {calendar}" : "{actor} creou a tarefa pendente {todo} na lista {calendar}", + "You created to-do {todo} in list {calendar}" : "Creou a tarefa pendente {todo} na lista {calendar}", + "{actor} deleted to-do {todo} from list {calendar}" : "{actor} eliminou a tarefa pendente {todo} da lista {calendar}", + "You deleted to-do {todo} from list {calendar}" : "Eliminou a tarefa pendente {todo} da lista {calendar}", + "{actor} updated to-do {todo} in list {calendar}" : "{actor} actualizou a tarefa pendente {todo} na lista {calendar}", + "You updated to-do {todo} in list {calendar}" : "Actualizou a tarefa pendente {todo} na lista {calendar}", + "{actor} solved to-do {todo} in list {calendar}" : "{actor} resolveu a tarefa pendente {todo} na lista {calendar}", + "You solved to-do {todo} in list {calendar}" : "Resolveu a tarefa pendente {todo} na lista {calendar}", + "{actor} reopened to-do {todo} in list {calendar}" : "{actor} reabriu a tarefa pendente {todo} na lista {calendar}", + "You reopened to-do {todo} in list {calendar}" : "Reabriu a tarefa pendente {todo} na lista {calendar}", + "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} moveu a tarefa pendente {todo} da lista {sourceCalendar} á lista {targetCalendar}", + "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Moveu a tarefa pendente {todo} da lista {sourceCalendar} á lista {targetCalendar}", "Calendar, contacts and tasks" : "Calendario, contactos e tarefas", "A <strong>calendar</strong> was modified" : "Foi modificado un <strong>calendario</strong>", "A calendar <strong>event</strong> was modified" : "Foi modificado un <strong>evento</strong> do calendario", - "A calendar <strong>to-do</strong> was modified" : "Modificouse unha <strong>tarefa</strong> do calendario", + "A calendar <strong>to-do</strong> was modified" : "Modificouse unha <strong>tarefa pendente</strong> do calendario", "Contact birthdays" : "Aniversario do contacto", "Death of %s" : "Falecemento de %s", "Untitled calendar" : "Calendario sen título", @@ -71,16 +71,16 @@ "Where: %s" : "Onde: %s", "%1$s via %2$s" : "%1$s mediante %2$s", "Cancelled: %1$s" : "Cancelado: %1$s", - "\"%1$s\" has been canceled" : "\"%1$s\" cancelouse", + "\"%1$s\" has been canceled" : "Cancelouse «%1$s»", "Re: %1$s" : "Re: %1$s", - "%1$s has accepted your invitation" : "%1$s aceptou a túa invitación", - "%1$s has tentatively accepted your invitation" : "%1$s aceptou provisionalmente a túa invitación", - "%1$s has declined your invitation" : "%1$s rexeitou a túa invitación", - "%1$s has responded to your invitation" : "%1$s respondeu á túa invitación", - "Invitation updated: %1$s" : "Invitación actualizada: %1$s", - "%1$s updated the event \"%2$s\"" : "%1$s actualizou o evento \"%2$s\"", - "Invitation: %1$s" : "Invitación: %1$s", - "%1$s would like to invite you to \"%2$s\"" : "%1$s quere invitarte a \"%2$s\"", + "%1$s has accepted your invitation" : "%1$s aceptou o seu convite", + "%1$s has tentatively accepted your invitation" : "%1$s aceptou provisionalmente o seu convite", + "%1$s has declined your invitation" : "%1$s rexeitou o seu convite", + "%1$s has responded to your invitation" : "%1$s respondeu ao seu convite", + "Invitation updated: %1$s" : "Convite actualizado: %1$s", + "%1$s updated the event \"%2$s\"" : "%1$s actualizou o evento «%2$s»", + "Invitation: %1$s" : "Convite: %1$s", + "%1$s would like to invite you to \"%2$s\"" : "%1$s quere convidalo a «%2$s»", "Organizer:" : "Organizador:", "Attendees:" : "Asistentes:", "Title:" : "Título:", @@ -92,49 +92,51 @@ "More options …" : "Máis opcións…", "More options at %s" : "Máis opcións en %s", "Contacts" : "Contactos", - "{actor} created address book {addressbook}" : "{actor} creou a axenda de enderezos {addressbook}", - "You created address book {addressbook}" : "Creaches a axenda de enderezos {addressbook}", - "{actor} deleted address book {addressbook}" : "{actor} eliminou a axenda de enderezos {addressbook}", - "You deleted address book {addressbook}" : "Eliminaches a axenda de enderezos {addressbook}", - "{actor} updated address book {addressbook}" : "{actor} actualizou a axenda de enderezos {addressbook}", - "You updated address book {addressbook}" : "Actualizaches a axenda de enderezos {addressbook}", - "{actor} shared address book {addressbook} with you" : "{actor} compartiu a axenda de enderezos {addressbook} contigo", - "You shared address book {addressbook} with {user}" : "Compartiches a axenda de enderezos {addressbook} con {user}", - "{actor} shared address book {addressbook} with {user}" : "{actor} compartiu a axenda de enderezos {addressbook} con {user}", - "{actor} unshared address book {addressbook} from you" : "{actor} deixou de compartir a túa axenda de enderezos {addressbook}", - "You unshared address book {addressbook} from {user}" : "Deixaches de compartir a axenda de enderezos {addressbook} de {user}", - "{actor} unshared address book {addressbook} from {user}" : "{actor} deixou de compartir a axenda de enderezos {addressbook} de {user}", - "{actor} unshared address book {addressbook} from themselves" : "{actor} deixaron de compartir a súa axenda de enderezos {addressbook}", - "You shared address book {addressbook} with group {group}" : "Compartiches a axenda de enderezos {addressbook} co grupo {group}", - "{actor} shared address book {addressbook} with group {group}" : "{actor} compartiu a axenda de enderezos {addressbook} co grupo {group}", - "You unshared address book {addressbook} from group {group}" : "Deixaches de compartir a axenda de enderezos {addressbook} do grupo {group}", - "{actor} unshared address book {addressbook} from group {group}" : "{actor} deixou de compartir axenda de enderezos {addressbook} do grupo {group}", - "{actor} created contact {card} in address book {addressbook}" : "{actor} creou o contacto {card} na axenda de enderezos {addressbook}", - "You created contact {card} in address book {addressbook}" : "Creaches o contacto {card} na axenda de enderezos {addressbook}", - "{actor} deleted contact {card} from address book {addressbook}" : "{actor} eliminou o contacto {card} da axenda de enderezos {addressbook}", - "You deleted contact {card} from address book {addressbook}" : "Eliminaches o contacto {card} da axenda de enderezos {addressbook}", - "{actor} updated contact {card} in address book {addressbook}" : "{actor} actualizou o contacto {card} na axenda de enderezos {addressbook}", - "You updated contact {card} in address book {addressbook}" : "Actualizaches o contacto {card} na axenda de enderezos {addressbook}", - "A <strong>contact</strong> or <strong>address book</strong> was modified" : "Modificouse un <strong>contacto</strong> ou <strong>axenda de enderezos</strong>", - "File is not updatable: %1$s" : "O ficheiro non se pode actualizar: %1$s", - "Could not write to final file, canceled by hook" : "Non foi posíbel escribir no ficheiro final, cancelouse polo hook", - "Could not write file contents" : "Non se puido escribir o contido do ficheiro", + "{actor} created address book {addressbook}" : "{actor} creou o caderno de enderezos {addressbook}", + "You created address book {addressbook}" : "Vostede creou o caderno de enderezos {addressbook}", + "{actor} deleted address book {addressbook}" : "{actor} eliminou o caderno de enderezos {addressbook}", + "You deleted address book {addressbook}" : "Vostede eliminou o caderno de enderezos {addressbook}", + "{actor} updated address book {addressbook}" : "{actor} actualizou o caderno de enderezos {addressbook}", + "You updated address book {addressbook}" : "Vostede actualizou o caderno de enderezos {addressbook}", + "{actor} shared address book {addressbook} with you" : "{actor} compartiu o caderno de enderezos {addressbook} con vostede", + "You shared address book {addressbook} with {user}" : "Vostede compartiu o caderno de enderezos {addressbook} con {user}", + "{actor} shared address book {addressbook} with {user}" : "{actor} compartiu o caderno de enderezos {addressbook} con {user}", + "{actor} unshared address book {addressbook} from you" : "{actor} deixou de compartir o seu caderno de enderezos {addressbook}", + "You unshared address book {addressbook} from {user}" : "Vostede deixou de compartir o caderno de enderezos {addressbook} de {user}", + "{actor} unshared address book {addressbook} from {user}" : "{actor} deixou de compartir o caderno de enderezos {addressbook} de {user}", + "{actor} unshared address book {addressbook} from themselves" : "{actor} deixaron de compartir o seu caderno de enderezos {addressbook}", + "You shared address book {addressbook} with group {group}" : "Vostede compartiu o caderno de enderezos {addressbook} co grupo {group}", + "{actor} shared address book {addressbook} with group {group}" : "{actor} compartiu o caderno de enderezos {addressbook} co grupo {group}", + "You unshared address book {addressbook} from group {group}" : "Vostede deixou de compartir o caderno de enderezos {addressbook} do grupo {group}", + "{actor} unshared address book {addressbook} from group {group}" : "{actor} deixou de compartir o caderno de enderezos {addressbook} do grupo {group}", + "{actor} created contact {card} in address book {addressbook}" : "{actor} creou o contacto {card} no caderno de enderezos {addressbook}", + "You created contact {card} in address book {addressbook}" : "Vostede creou o contacto {card} no caderno de enderezos {addressbook}", + "{actor} deleted contact {card} from address book {addressbook}" : "{actor} eliminou o contacto {card} do caderno de enderezos {addressbook}", + "You deleted contact {card} from address book {addressbook}" : "Vostede eliminou o contacto {card} do caderno de enderezos {addressbook}", + "{actor} updated contact {card} in address book {addressbook}" : "{actor} actualizou o contacto {card} no caderno de enderezos {addressbook}", + "You updated contact {card} in address book {addressbook}" : "Vostede actualizou o contacto {card} no caderno de enderezos {addressbook}", + "A <strong>contact</strong> or <strong>address book</strong> was modified" : "Foi modificado un <strong>contacto</strong> ou <strong>caderno de enderezos</strong>", + "Accounts" : "Contas", + "System address book which holds all accounts" : "Caderno de enderezos do sistema que contén todas as contas", + "File is not updatable: %1$s" : "Non é posíbel actualizar o ficheiro: %1$s", + "Could not write to final file, canceled by hook" : "Non foi posíbel escribir no ficheiro final, foi cancelado polo sistema", + "Could not write file contents" : "Non foi posíbel escribir o contido do ficheiro", "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], - "Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Produciuse un erro ao copiar o ficheiro na localización de destino (copiado: %1$s, tamaño esperado do ficheiro: %2$s)", - "Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "Tamaño esperado do ficheiro %1$s pero lido (do cliente de Nextcloud) e escrito (no almacenamento de Nextcloud) %2$s. Pode ser un problema de rede no lado do envío ou un problema ao escribir no almacenamento no lado do servidor.", - "Could not rename part file to final file, canceled by hook" : "Non foi posíbel cambiar o nome do ficheiro de parte ao ficheiro final, cancelado polo hook", - "Could not rename part file to final file" : "Non se puido cambiar o nome do ficheiro de parte ao ficheiro final", + "Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Produciuse un erro ao copiar o ficheiro na localización de destino (copiado: %1$s, tamaño agardado do ficheiro: %2$s)", + "Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "Tamaño agardado do ficheiro %1$s mais lido (do cliente de Nextcloud) e escrito (no almacenamento de Nextcloud) %2$s. Pode ser un problema de rede no lado do envío ou un problema ao escribir no almacenamento no lado do servidor.", + "Could not rename part file to final file, canceled by hook" : "Non foi posíbel cambiar o nome do ficheiro parcial ao ficheiro final, foi cancelado polo sistema", + "Could not rename part file to final file" : "Non foi posíbel cambiar o nome do ficheiro parcial ao ficheiro final", "Failed to check file size: %1$s" : "Produciuse un erro ao comprobar o tamaño do ficheiro: %1$s", - "Could not open file" : "Non se puido abrir o ficheiro", - "Encryption not ready: %1$s" : "O cifrado non está listo: %1$s", + "Could not open file" : "Non foi posíbel abrir o ficheiro", + "Encryption not ready: %1$s" : "O cifrado non está preparado: %1$s", "Failed to open file: %1$s" : "Produciuse un erro ao abrir o ficheiro: %1$s", "Failed to unlink: %1$s" : "Produciuse un erro ao desligar: %1$s", "Invalid chunk name" : "O nome do fragmento non é válido", - "Could not rename part file assembled from chunks" : "Non se puido cambiar o nome do ficheiro de pezas ensamblados a partir de fragmentos", + "Could not rename part file assembled from chunks" : "Non foi posíbel cambiar o nome do ficheiro de pezas ensamblados a partir de fragmentos", "Failed to write file contents: %1$s" : "Produciuse un erro ao escribir o contido do ficheiro: %1$s", - "File not found: %1$s" : "Arquivo non atopado: %1$s", + "File not found: %1$s" : "Non se atopou o ficheiro: %1$s", "System is in maintenance mode." : "O sistema está en modo de mantemento.", - "Upgrade needed" : "É necesario anovar actualizar", + "Upgrade needed" : "É necesario anovar", "Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "É preciso configurar o seu %s para que empregue HTTPS para poder usar CalDAV e CardDAV con iOS / macOS.", "Configures a CalDAV account" : "Configurar unha conta de CalDAV", "Configures a CardDAV account" : "Configurar unha conta de CardDAV", @@ -150,11 +152,11 @@ "WebDAV" : "WebDAV", "WebDAV endpoint" : "Terminación WebDAV", "Availability" : "Dispoñibilidade", - "If you configure your working hours, other users will see when you are out of office when they book a meeting." : "Se configuras o teu horario de traballo, outros usuarios verán cando estás fóra da oficina cando reserven unha reunión.", - "Time zone:" : "Franxa horaria:", + "If you configure your working hours, other users will see when you are out of office when they book a meeting." : "Se configura o seu horario de traballo, outros usuarios verán cando está fóra da oficina cando reserven unha xuntanza.", + "Time zone:" : "Fuso horario:", "to" : "para", "Delete slot" : "Eliminar franxa horaria", - "No working hours set" : "Sen horario de traballo establecido", + "No working hours set" : "Sen horario de traballo estabelecido", "Add slot" : "Engadir franxa horaria", "Monday" : "luns", "Tuesday" : "martes", @@ -163,7 +165,7 @@ "Friday" : "venres", "Saturday" : "sábado", "Sunday" : "domingo", - "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Establece automaticamente o estado do usuario en \"Non molestar\" fóra da dispoñibilidade para silenciar todas as notificacións.", + "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Estabelecer automaticamente o estado do usuario en «Non molestar» fóra de dispoñibilidade para silenciar todas as notificacións.", "Save" : "Gardar", "Failed to load availability" : "Produciuse un erro ao cargar a dispoñibilidade", "Saved availability" : "Dispoñibilidade gardada", @@ -175,8 +177,8 @@ "Hence they will not be available immediately after enabling but will show up after some time." : "Por isto, non estarán dispoñíbeis inmediatamente tras activalos, senón que aparecerán após certo tempo", "Send notifications for events" : "Enviar notificacións para eventos", "Notifications are sent via background jobs, so these must occur often enough." : "As notificacións enviaranse mediante procesos en segundo plano, polo que estes teñen que suceder con frecuencia.", - "Send reminder notifications to calendar sharees as well" : "Envía notificacións de recordatorio tamén aos que comparten calendario", - "Reminders are always sent to organizers and attendees." : "Os recordatorios sempre se envían aos organizadores e aos asistentes.", + "Send reminder notifications to calendar sharees as well" : "Enviar notificacións de lembrete tamén aos que comparten calendario", + "Reminders are always sent to organizers and attendees." : "Os lembretes envíanselle sempre aos organizadores e aos asistentes.", "Enable notifications for events via push" : "Activar o envío de notificacións do automáticas para eventos", "Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instale tamén a {calendarappstoreopen}aplicación do Calendario{linkclose} ou {calendardocopen}conecte os seus escritorio e móbil para sincronizalos ↗{linkclose}.", "Please make sure to properly set up {emailopen}the email server{linkclose}." : "Asegúrese de ter configurado correctamente {emailopen}o servidor de correo-e{linkclose}.", diff --git a/apps/dav/l10n/ko.js b/apps/dav/l10n/ko.js index 43c181bd079..5f37a04a480 100644 --- a/apps/dav/l10n/ko.js +++ b/apps/dav/l10n/ko.js @@ -10,7 +10,7 @@ OC.L10N.register( "You deleted calendar {calendar}" : "달력 {calendar}을(를) 삭제함", "{actor} updated calendar {calendar}" : "{actor} 님이 달력 {calendar}을(를) 업데이트함", "You updated calendar {calendar}" : "달력 {calendar}을(를) 업데이트함", - "{actor} restored calendar {calendar}" : "{actor} 님이 달력 {calendar}을(를) 복구함", + "{actor} restored calendar {calendar}" : "{actor}님이 달력 {calendar}을(를) 복구함", "You restored calendar {calendar}" : "달력 {calendar}을(를) 복구함", "You shared calendar {calendar} as public link" : "달력 {calendar}을(를) 공개 링크로 공유함", "You removed public link for calendar {calendar}" : "달력 {calendar}의 공개 링크를 삭제함", @@ -32,22 +32,22 @@ OC.L10N.register( "You deleted event {event} from calendar {calendar}" : "행사 {event}을(를) 달력 {calendar}에서 삭제함", "{actor} updated event {event} in calendar {calendar}" : "{actor} 님이 달력 {calendar}의 행사 {event}을(를) 업데이트함", "You updated event {event} in calendar {calendar}" : "달력 {calendar}의 행사 {event}을(를) 업데이트함", - "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} 님이 행사 {event}을(를) 달력 {sourceCalendar}에서 달력 {targetCalendar}(으)로 옮김", + "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor}님이 행사 {event}을(를) 달력 {sourceCalendar}에서 달력 {targetCalendar}(으)로 옮김", "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "행사 {event}을(를) 달력 {sourceCalendar}에서 달력 {targetCalendar}(으)로 옮김", - "{actor} restored event {event} of calendar {calendar}" : "{actor} 님이 행사 {event}을(를) 달력 {calendar}에 복구함", + "{actor} restored event {event} of calendar {calendar}" : "{actor}님이 행사 {event}을(를) 달력 {calendar}에 복구함", "You restored event {event} of calendar {calendar}" : "행사 {event}을(를) 달력 {calendar}에 복구함", "Busy" : "바쁨", - "{actor} created to-do {todo} in list {calendar}" : "{actor} 님이 목록 {calendar}에 할 일 {todo}을(를) 생성함", + "{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}을(를) 삭제함", + "{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}을(를) 업데이트함", + "{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}을(를) 끝냄", + "{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}을(를) 다시 엶", + "{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}(으)로 옮김", + "{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>이 수정됨", @@ -86,28 +86,28 @@ OC.L10N.register( "More options …" : "더 많은 옵션 …", "More options at %s" : "%s에 더 많은 옵션 있음", "Contacts" : "연락처", - "{actor} created address book {addressbook}" : "{actor} 님이 주소록 {addressbook}을(를) 생성함", + "{actor} created address book {addressbook}" : "{actor}님이 주소록 {addressbook}을(를) 생성함", "You created address book {addressbook}" : "주소록 {addressbook}을(를) 생성함", - "{actor} deleted address book {addressbook}" : "{actor} 님이 주소록 {addressbook}을(를) 제거함", + "{actor} deleted address book {addressbook}" : "{actor}님이 주소록 {addressbook}을(를) 제거함", "You deleted address book {addressbook}" : "주소록 {addressbook}을(를) 제거함", - "{actor} updated address book {addressbook}" : "{actor} 님이 주소록 {addressbook}을(를) 갱신함", + "{actor} updated address book {addressbook}" : "{actor}님이 주소록 {addressbook}을(를) 갱신함", "You updated address book {addressbook}" : "주소록 {addressbook}을(를) 갱신함", - "{actor} shared address book {addressbook} with you" : "{actor} 님이 나와 주소록 {addressbook}을(를) 공유함", - "You shared address book {addressbook} with {user}" : "{user} 님과 주소록 {addressbook}을(를) 공유함", - "{actor} shared address book {addressbook} with {user}" : "{actor} 님이 {user} 님과 주소록 {addressbook}을(를) 공유함", - "{actor} unshared address book {addressbook} from you" : "{actor} 님이 주소록 {addressbook}의 공유를 해제함", - "You unshared address book {addressbook} from {user}" : "{user} 님과 주소록 {addressbook}의 공유를 해제함", - "{actor} unshared address book {addressbook} from {user}" : "{actor} 님이 {user} 님과 주소록 {addressbook}의 공유를 해제함", - "{actor} unshared address book {addressbook} from themselves" : "{actor} 님이 자신과 주소록 {addressbook}의 공유를 해제함", + "{actor} shared address book {addressbook} with you" : "{actor}님이 나와 주소록 {addressbook}을(를) 공유함", + "You shared address book {addressbook} with {user}" : "{user}님과 주소록 {addressbook}을(를) 공유함", + "{actor} shared address book {addressbook} with {user}" : "{actor}님이 {user}님과 주소록 {addressbook}을(를) 공유함", + "{actor} unshared address book {addressbook} from you" : "{actor}님이 주소록 {addressbook}의 공유를 해제함", + "You unshared address book {addressbook} from {user}" : "{user}님과 주소록 {addressbook}의 공유를 해제함", + "{actor} unshared address book {addressbook} from {user}" : "{actor}님이 {user}님과 주소록 {addressbook}의 공유를 해제함", + "{actor} unshared address book {addressbook} from themselves" : "{actor}님이 자신과 주소록 {addressbook}의 공유를 해제함", "You shared address book {addressbook} with group {group}" : "그룹 {group}과(와) 주소록 {addressbook}을(를) 공유함", - "{actor} shared address book {addressbook} with group {group}" : "{actor} 님이 그룹 {group}과(와) 주소록 {addressbook}을(를) 공유함", + "{actor} shared address book {addressbook} with group {group}" : "{actor}님이 그룹 {group}과(와) 주소록 {addressbook}을(를) 공유함", "You unshared address book {addressbook} from group {group}" : "그룹 {group}과(와) 주소록 {addressbook}의 공유를 해제함", - "{actor} unshared address book {addressbook} from group {group}" : "{actor} 님이 그룹 {group}과(와) 주소록 {addressbook}의 공유를 해제함", - "{actor} created contact {card} in address book {addressbook}" : "{actor} 님이 연락처 {card}을(를) 주소록 {addressbook}에 생성함", + "{actor} unshared address book {addressbook} from group {group}" : "{actor}님이 그룹 {group}과(와) 주소록 {addressbook}의 공유를 해제함", + "{actor} created contact {card} in address book {addressbook}" : "{actor}님이 연락처 {card}을(를) 주소록 {addressbook}에 생성함", "You created contact {card} in address book {addressbook}" : "연락처 {card}을(를) 주소록 {addressbook}에 생성함", - "{actor} deleted contact {card} from address book {addressbook}" : "{actor} 님이 연락처 {card}을(를) 주소록 {addressbook}에서 제거함", + "{actor} deleted contact {card} from address book {addressbook}" : "{actor}님이 연락처 {card}을(를) 주소록 {addressbook}에서 제거함", "You deleted contact {card} from address book {addressbook}" : "연락처 {card}을(를) 주소록 {addressbook}에서 제거함", - "{actor} updated contact {card} in address book {addressbook}" : "{actor} 님이 주소록 {addressbook}의 연락처 {card}을(를) 갱신함", + "{actor} updated contact {card} in address book {addressbook}" : "{actor}님이 주소록 {addressbook}의 연락처 {card}을(를) 갱신함", "You updated contact {card} in address book {addressbook}" : "주소록 {addressbook}의 연락처 {card}을(를) 갱신함", "A <strong>contact</strong> or <strong>address book</strong> was modified" : "<strong>연락처</strong> 또는 <strong>주소록</strong>이 변경됨", "File is not updatable: %1$s" : "파일을 갱신할 수 없습니다: %1$s", @@ -143,7 +143,7 @@ OC.L10N.register( "Contacts and groups" : "연락처 및 그룹", "WebDAV" : "WebDAV", "WebDAV endpoint" : "WebDAV 종단점", - "Availability" : "가능한 시간대", + "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" : "에서", @@ -157,10 +157,11 @@ OC.L10N.register( "Friday" : "금요일", "Saturday" : "토요일", "Sunday" : "일요일", + "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "다른 용무 중일 때 자동으로 사용자를 '방해 금지' 모드로 설정해 모든 알림을 음소거합니다.", "Save" : "저장", - "Failed to load availability" : "가능한 시간대 불러오기 실패", - "Saved availability" : "가능한 시간대를 저장함", - "Failed to save availability" : "가능한 시간대 저장 실패", + "Failed to load availability" : "가용성 불러오기 실패", + "Saved availability" : "가용성을 저장함", + "Failed to save availability" : "가용성 저장 실패", "Calendar server" : "달력 서버", "Send invitations to attendees" : "참석자에게 초대장 보내기", "Automatically generate a birthday calendar" : "자동으로 생일 달력 생성", diff --git a/apps/dav/l10n/ko.json b/apps/dav/l10n/ko.json index 8ef3286bdbe..2bf4574188d 100644 --- a/apps/dav/l10n/ko.json +++ b/apps/dav/l10n/ko.json @@ -8,7 +8,7 @@ "You deleted calendar {calendar}" : "달력 {calendar}을(를) 삭제함", "{actor} updated calendar {calendar}" : "{actor} 님이 달력 {calendar}을(를) 업데이트함", "You updated calendar {calendar}" : "달력 {calendar}을(를) 업데이트함", - "{actor} restored calendar {calendar}" : "{actor} 님이 달력 {calendar}을(를) 복구함", + "{actor} restored calendar {calendar}" : "{actor}님이 달력 {calendar}을(를) 복구함", "You restored calendar {calendar}" : "달력 {calendar}을(를) 복구함", "You shared calendar {calendar} as public link" : "달력 {calendar}을(를) 공개 링크로 공유함", "You removed public link for calendar {calendar}" : "달력 {calendar}의 공개 링크를 삭제함", @@ -30,22 +30,22 @@ "You deleted event {event} from calendar {calendar}" : "행사 {event}을(를) 달력 {calendar}에서 삭제함", "{actor} updated event {event} in calendar {calendar}" : "{actor} 님이 달력 {calendar}의 행사 {event}을(를) 업데이트함", "You updated event {event} in calendar {calendar}" : "달력 {calendar}의 행사 {event}을(를) 업데이트함", - "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} 님이 행사 {event}을(를) 달력 {sourceCalendar}에서 달력 {targetCalendar}(으)로 옮김", + "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor}님이 행사 {event}을(를) 달력 {sourceCalendar}에서 달력 {targetCalendar}(으)로 옮김", "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "행사 {event}을(를) 달력 {sourceCalendar}에서 달력 {targetCalendar}(으)로 옮김", - "{actor} restored event {event} of calendar {calendar}" : "{actor} 님이 행사 {event}을(를) 달력 {calendar}에 복구함", + "{actor} restored event {event} of calendar {calendar}" : "{actor}님이 행사 {event}을(를) 달력 {calendar}에 복구함", "You restored event {event} of calendar {calendar}" : "행사 {event}을(를) 달력 {calendar}에 복구함", "Busy" : "바쁨", - "{actor} created to-do {todo} in list {calendar}" : "{actor} 님이 목록 {calendar}에 할 일 {todo}을(를) 생성함", + "{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}을(를) 삭제함", + "{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}을(를) 업데이트함", + "{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}을(를) 끝냄", + "{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}을(를) 다시 엶", + "{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}(으)로 옮김", + "{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>이 수정됨", @@ -84,28 +84,28 @@ "More options …" : "더 많은 옵션 …", "More options at %s" : "%s에 더 많은 옵션 있음", "Contacts" : "연락처", - "{actor} created address book {addressbook}" : "{actor} 님이 주소록 {addressbook}을(를) 생성함", + "{actor} created address book {addressbook}" : "{actor}님이 주소록 {addressbook}을(를) 생성함", "You created address book {addressbook}" : "주소록 {addressbook}을(를) 생성함", - "{actor} deleted address book {addressbook}" : "{actor} 님이 주소록 {addressbook}을(를) 제거함", + "{actor} deleted address book {addressbook}" : "{actor}님이 주소록 {addressbook}을(를) 제거함", "You deleted address book {addressbook}" : "주소록 {addressbook}을(를) 제거함", - "{actor} updated address book {addressbook}" : "{actor} 님이 주소록 {addressbook}을(를) 갱신함", + "{actor} updated address book {addressbook}" : "{actor}님이 주소록 {addressbook}을(를) 갱신함", "You updated address book {addressbook}" : "주소록 {addressbook}을(를) 갱신함", - "{actor} shared address book {addressbook} with you" : "{actor} 님이 나와 주소록 {addressbook}을(를) 공유함", - "You shared address book {addressbook} with {user}" : "{user} 님과 주소록 {addressbook}을(를) 공유함", - "{actor} shared address book {addressbook} with {user}" : "{actor} 님이 {user} 님과 주소록 {addressbook}을(를) 공유함", - "{actor} unshared address book {addressbook} from you" : "{actor} 님이 주소록 {addressbook}의 공유를 해제함", - "You unshared address book {addressbook} from {user}" : "{user} 님과 주소록 {addressbook}의 공유를 해제함", - "{actor} unshared address book {addressbook} from {user}" : "{actor} 님이 {user} 님과 주소록 {addressbook}의 공유를 해제함", - "{actor} unshared address book {addressbook} from themselves" : "{actor} 님이 자신과 주소록 {addressbook}의 공유를 해제함", + "{actor} shared address book {addressbook} with you" : "{actor}님이 나와 주소록 {addressbook}을(를) 공유함", + "You shared address book {addressbook} with {user}" : "{user}님과 주소록 {addressbook}을(를) 공유함", + "{actor} shared address book {addressbook} with {user}" : "{actor}님이 {user}님과 주소록 {addressbook}을(를) 공유함", + "{actor} unshared address book {addressbook} from you" : "{actor}님이 주소록 {addressbook}의 공유를 해제함", + "You unshared address book {addressbook} from {user}" : "{user}님과 주소록 {addressbook}의 공유를 해제함", + "{actor} unshared address book {addressbook} from {user}" : "{actor}님이 {user}님과 주소록 {addressbook}의 공유를 해제함", + "{actor} unshared address book {addressbook} from themselves" : "{actor}님이 자신과 주소록 {addressbook}의 공유를 해제함", "You shared address book {addressbook} with group {group}" : "그룹 {group}과(와) 주소록 {addressbook}을(를) 공유함", - "{actor} shared address book {addressbook} with group {group}" : "{actor} 님이 그룹 {group}과(와) 주소록 {addressbook}을(를) 공유함", + "{actor} shared address book {addressbook} with group {group}" : "{actor}님이 그룹 {group}과(와) 주소록 {addressbook}을(를) 공유함", "You unshared address book {addressbook} from group {group}" : "그룹 {group}과(와) 주소록 {addressbook}의 공유를 해제함", - "{actor} unshared address book {addressbook} from group {group}" : "{actor} 님이 그룹 {group}과(와) 주소록 {addressbook}의 공유를 해제함", - "{actor} created contact {card} in address book {addressbook}" : "{actor} 님이 연락처 {card}을(를) 주소록 {addressbook}에 생성함", + "{actor} unshared address book {addressbook} from group {group}" : "{actor}님이 그룹 {group}과(와) 주소록 {addressbook}의 공유를 해제함", + "{actor} created contact {card} in address book {addressbook}" : "{actor}님이 연락처 {card}을(를) 주소록 {addressbook}에 생성함", "You created contact {card} in address book {addressbook}" : "연락처 {card}을(를) 주소록 {addressbook}에 생성함", - "{actor} deleted contact {card} from address book {addressbook}" : "{actor} 님이 연락처 {card}을(를) 주소록 {addressbook}에서 제거함", + "{actor} deleted contact {card} from address book {addressbook}" : "{actor}님이 연락처 {card}을(를) 주소록 {addressbook}에서 제거함", "You deleted contact {card} from address book {addressbook}" : "연락처 {card}을(를) 주소록 {addressbook}에서 제거함", - "{actor} updated contact {card} in address book {addressbook}" : "{actor} 님이 주소록 {addressbook}의 연락처 {card}을(를) 갱신함", + "{actor} updated contact {card} in address book {addressbook}" : "{actor}님이 주소록 {addressbook}의 연락처 {card}을(를) 갱신함", "You updated contact {card} in address book {addressbook}" : "주소록 {addressbook}의 연락처 {card}을(를) 갱신함", "A <strong>contact</strong> or <strong>address book</strong> was modified" : "<strong>연락처</strong> 또는 <strong>주소록</strong>이 변경됨", "File is not updatable: %1$s" : "파일을 갱신할 수 없습니다: %1$s", @@ -141,7 +141,7 @@ "Contacts and groups" : "연락처 및 그룹", "WebDAV" : "WebDAV", "WebDAV endpoint" : "WebDAV 종단점", - "Availability" : "가능한 시간대", + "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" : "에서", @@ -155,10 +155,11 @@ "Friday" : "금요일", "Saturday" : "토요일", "Sunday" : "일요일", + "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "다른 용무 중일 때 자동으로 사용자를 '방해 금지' 모드로 설정해 모든 알림을 음소거합니다.", "Save" : "저장", - "Failed to load availability" : "가능한 시간대 불러오기 실패", - "Saved availability" : "가능한 시간대를 저장함", - "Failed to save availability" : "가능한 시간대 저장 실패", + "Failed to load availability" : "가용성 불러오기 실패", + "Saved availability" : "가용성을 저장함", + "Failed to save availability" : "가용성 저장 실패", "Calendar server" : "달력 서버", "Send invitations to attendees" : "참석자에게 초대장 보내기", "Automatically generate a birthday calendar" : "자동으로 생일 달력 생성", diff --git a/apps/dav/l10n/zh_CN.js b/apps/dav/l10n/zh_CN.js index 505b3a734e3..f3c009b0cb0 100644 --- a/apps/dav/l10n/zh_CN.js +++ b/apps/dav/l10n/zh_CN.js @@ -2,7 +2,7 @@ OC.L10N.register( "dav", { "Calendar" : "日历", - "To-dos" : "代办事项", + "To-dos" : "待办事项", "Personal" : "个人", "{actor} created calendar {calendar}" : "{actor} 创建了日历 {calendar}", "You created calendar {calendar}" : "您创建的日历 {calendar}", @@ -37,8 +37,8 @@ OC.L10N.register( "{actor} restored event {event} of calendar {calendar}" : "{actor} 还原了事件 {event},它位于日历 {calendar}", "You restored event {event} of calendar {calendar}" : "你还原了事件 {event},它位于日历 {calendar}", "Busy" : "忙碌", - "{actor} created to-do {todo} in list {calendar}" : "{actor} 在清单 {calendar} 中创建了代办事项 {todo}", - "You created to-do {todo} in list {calendar}" : "您已在清单 {calendar} 中创建了代办事项 {todo}", + "{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}", @@ -63,8 +63,8 @@ OC.L10N.register( "_%n year_::_%n years_" : ["%n 年"], "_%n month_::_%n months_" : ["%n 月"], "_%n day_::_%n days_" : ["%n 天"], - "_%n hour_::_%n hours_" : ["%n 小时"], - "_%n minute_::_%n minutes_" : ["%n 分钟"], + "_%n hour_::_%n hours_" : ["%n小时"], + "_%n minute_::_%n minutes_" : ["%n分钟"], "%s (in %s)" : "%s (在 %s)", "%s (%s ago)" : "%s (%s 前)", "Calendar: %s" : "日历:%s", @@ -73,8 +73,16 @@ OC.L10N.register( "Where: %s" : "地点:%s", "%1$s via %2$s" : "%1$s 通过 %2$s", "Cancelled: %1$s" : "已取消:%1$s", + "\"%1$s\" has been canceled" : "“%1$s”已取消", "Re: %1$s" : "回复:%1$s", + "%1$s has accepted your invitation" : "%1$s 已接受您的邀请", + "%1$s has tentatively accepted your invitation" : "%1$s 暂时接受了您的邀请", + "%1$s has declined your invitation" : "%1$s 已拒绝了您的邀请", + "%1$s has responded to your invitation" : "%1$s 已回应了您的邀请", + "Invitation updated: %1$s" : "邀请已更新:%1$s", + "%1$s updated the event \"%2$s\"" : "%1$s 已更新事件“%2$s”", "Invitation: %1$s" : "邀请:%1$s", + "%1$s would like to invite you to \"%2$s\"" : "%1$s 想邀请您加入“%2$s”", "Organizer:" : "组织者:", "Attendees:" : "与会者:", "Title:" : "标题:", @@ -110,6 +118,8 @@ OC.L10N.register( "{actor} updated contact {card} in address book {addressbook}" : "{actor} 更新了通讯录 {addressbook} 中的联系人 {card} ", "You updated contact {card} in address book {addressbook}" : "你更新了通讯录 {addressbook} 中的联系人 {card} ", "A <strong>contact</strong> or <strong>address book</strong> was modified" : "一名 <strong>联系人</strong>或一个<strong>通讯录</strong>被更改了", + "Accounts" : "账户", + "System address book which holds all accounts" : "包含所有账户的系统通讯录", "File is not updatable: %1$s" : "无法更新文件:%1$s", "Could not write to final file, canceled by hook" : "无法写入最终文件,操作被插件取消", "Could not write file contents" : "无法写入文件内容", @@ -127,22 +137,22 @@ OC.L10N.register( "Could not rename part file assembled from chunks" : "无法重命名从分片组合的部分文件", "Failed to write file contents: %1$s" : "写入文件内容失败:%1$s", "File not found: %1$s" : "找不到文件:%1$s", - "System is in maintenance mode." : "系统处于维护模式 ", + "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以在iOS/macOS中使用CalDAV和CardDAV。", + "Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "您的 %s 需要配置使用 HTTPS 以在 iOS/macOS 中使用 CalDAV 和 CardDAV。", "Configures a CalDAV account" : "配置一个 CalDAV 账号", "Configures a CardDAV account" : "配置一个 CardDAV 账号", "Events" : "事件", "Tasks" : "任务", "Untitled task" : "无标题任务", "Completed on %s" : "已完成 %s", - "Due on %s by %s" : "到期于%s ,在%s之前", - "Due on %s" : "到期于%s", + "Due on %s by %s" : "到期于 %s,在 %s 之前", + "Due on %s" : "到期于 %s", "Migrated calendar (%1$s)" : "迁移的日历(%1$s)", "Calendars including events, details and attendees" : "日历包含活动、参与人和事件详情", "Contacts and groups" : "联系人和群组", "WebDAV" : "WebDAV", - "WebDAV endpoint" : "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:" : "时区:", @@ -172,8 +182,8 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "同时向日历共享者发送提醒通知", "Reminders are always sent to organizers and attendees." : "始终向组织者和与会者发出提醒。", "Enable notifications for events via push" : "启用推送事件通知", - "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}。", + "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}。", "There was an error updating your attendance status." : "更新您的出席状态时出错。", "Please contact the organizer directly." : "请直接联系组织者。", "Are you accepting the invitation?" : "您是否接受邀请?", diff --git a/apps/dav/l10n/zh_CN.json b/apps/dav/l10n/zh_CN.json index a0033eaab87..051a53ef8df 100644 --- a/apps/dav/l10n/zh_CN.json +++ b/apps/dav/l10n/zh_CN.json @@ -1,6 +1,6 @@ { "translations": { "Calendar" : "日历", - "To-dos" : "代办事项", + "To-dos" : "待办事项", "Personal" : "个人", "{actor} created calendar {calendar}" : "{actor} 创建了日历 {calendar}", "You created calendar {calendar}" : "您创建的日历 {calendar}", @@ -35,8 +35,8 @@ "{actor} restored event {event} of calendar {calendar}" : "{actor} 还原了事件 {event},它位于日历 {calendar}", "You restored event {event} of calendar {calendar}" : "你还原了事件 {event},它位于日历 {calendar}", "Busy" : "忙碌", - "{actor} created to-do {todo} in list {calendar}" : "{actor} 在清单 {calendar} 中创建了代办事项 {todo}", - "You created to-do {todo} in list {calendar}" : "您已在清单 {calendar} 中创建了代办事项 {todo}", + "{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}", @@ -61,8 +61,8 @@ "_%n year_::_%n years_" : ["%n 年"], "_%n month_::_%n months_" : ["%n 月"], "_%n day_::_%n days_" : ["%n 天"], - "_%n hour_::_%n hours_" : ["%n 小时"], - "_%n minute_::_%n minutes_" : ["%n 分钟"], + "_%n hour_::_%n hours_" : ["%n小时"], + "_%n minute_::_%n minutes_" : ["%n分钟"], "%s (in %s)" : "%s (在 %s)", "%s (%s ago)" : "%s (%s 前)", "Calendar: %s" : "日历:%s", @@ -71,8 +71,16 @@ "Where: %s" : "地点:%s", "%1$s via %2$s" : "%1$s 通过 %2$s", "Cancelled: %1$s" : "已取消:%1$s", + "\"%1$s\" has been canceled" : "“%1$s”已取消", "Re: %1$s" : "回复:%1$s", + "%1$s has accepted your invitation" : "%1$s 已接受您的邀请", + "%1$s has tentatively accepted your invitation" : "%1$s 暂时接受了您的邀请", + "%1$s has declined your invitation" : "%1$s 已拒绝了您的邀请", + "%1$s has responded to your invitation" : "%1$s 已回应了您的邀请", + "Invitation updated: %1$s" : "邀请已更新:%1$s", + "%1$s updated the event \"%2$s\"" : "%1$s 已更新事件“%2$s”", "Invitation: %1$s" : "邀请:%1$s", + "%1$s would like to invite you to \"%2$s\"" : "%1$s 想邀请您加入“%2$s”", "Organizer:" : "组织者:", "Attendees:" : "与会者:", "Title:" : "标题:", @@ -108,6 +116,8 @@ "{actor} updated contact {card} in address book {addressbook}" : "{actor} 更新了通讯录 {addressbook} 中的联系人 {card} ", "You updated contact {card} in address book {addressbook}" : "你更新了通讯录 {addressbook} 中的联系人 {card} ", "A <strong>contact</strong> or <strong>address book</strong> was modified" : "一名 <strong>联系人</strong>或一个<strong>通讯录</strong>被更改了", + "Accounts" : "账户", + "System address book which holds all accounts" : "包含所有账户的系统通讯录", "File is not updatable: %1$s" : "无法更新文件:%1$s", "Could not write to final file, canceled by hook" : "无法写入最终文件,操作被插件取消", "Could not write file contents" : "无法写入文件内容", @@ -125,22 +135,22 @@ "Could not rename part file assembled from chunks" : "无法重命名从分片组合的部分文件", "Failed to write file contents: %1$s" : "写入文件内容失败:%1$s", "File not found: %1$s" : "找不到文件:%1$s", - "System is in maintenance mode." : "系统处于维护模式 ", + "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以在iOS/macOS中使用CalDAV和CardDAV。", + "Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "您的 %s 需要配置使用 HTTPS 以在 iOS/macOS 中使用 CalDAV 和 CardDAV。", "Configures a CalDAV account" : "配置一个 CalDAV 账号", "Configures a CardDAV account" : "配置一个 CardDAV 账号", "Events" : "事件", "Tasks" : "任务", "Untitled task" : "无标题任务", "Completed on %s" : "已完成 %s", - "Due on %s by %s" : "到期于%s ,在%s之前", - "Due on %s" : "到期于%s", + "Due on %s by %s" : "到期于 %s,在 %s 之前", + "Due on %s" : "到期于 %s", "Migrated calendar (%1$s)" : "迁移的日历(%1$s)", "Calendars including events, details and attendees" : "日历包含活动、参与人和事件详情", "Contacts and groups" : "联系人和群组", "WebDAV" : "WebDAV", - "WebDAV endpoint" : "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:" : "时区:", @@ -170,8 +180,8 @@ "Send reminder notifications to calendar sharees as well" : "同时向日历共享者发送提醒通知", "Reminders are always sent to organizers and attendees." : "始终向组织者和与会者发出提醒。", "Enable notifications for events via 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}。", + "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}。", "There was an error updating your attendance status." : "更新您的出席状态时出错。", "Please contact the organizer directly." : "请直接联系组织者。", "Are you accepting the invitation?" : "您是否接受邀请?", diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php index 1cdb705ac92..94fe9acf356 100644 --- a/apps/dav/lib/CalDAV/CalDavBackend.php +++ b/apps/dav/lib/CalDAV/CalDavBackend.php @@ -3134,10 +3134,19 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription if ($keep < 0) { throw new \InvalidArgumentException(); } + + $query = $this->db->getQueryBuilder(); + $query->select($query->func()->max('id')) + ->from('calendarchanges'); + + $maxId = $query->executeQuery()->fetchOne(); + if (!$maxId || $maxId < $keep) { + return 0; + } + $query = $this->db->getQueryBuilder(); $query->delete('calendarchanges') - ->orderBy('id', 'DESC') - ->setFirstResult($keep); + ->where($query->expr()->lte('id', $query->createNamedParameter($maxId - $keep, IQueryBuilder::PARAM_INT), IQueryBuilder::PARAM_INT)); return $query->executeStatement(); } diff --git a/apps/dav/lib/CardDAV/CardDavBackend.php b/apps/dav/lib/CardDAV/CardDavBackend.php index 87e9cd22dac..f6ca364f4a5 100644 --- a/apps/dav/lib/CardDAV/CardDavBackend.php +++ b/apps/dav/lib/CardDAV/CardDavBackend.php @@ -1399,10 +1399,19 @@ class CardDavBackend implements BackendInterface, SyncSupport { if ($keep < 0) { throw new \InvalidArgumentException(); } + + $query = $this->db->getQueryBuilder(); + $query->select($query->func()->max('id')) + ->from('addressbookchanges'); + + $maxId = $query->executeQuery()->fetchOne(); + if (!$maxId || $maxId < $keep) { + return 0; + } + $query = $this->db->getQueryBuilder(); $query->delete('addressbookchanges') - ->orderBy('id', 'DESC') - ->setFirstResult($keep); + ->where($query->expr()->lte('id', $query->createNamedParameter($maxId - $keep, IQueryBuilder::PARAM_INT), IQueryBuilder::PARAM_INT)); return $query->executeStatement(); } diff --git a/apps/dav/lib/CardDAV/Converter.php b/apps/dav/lib/CardDAV/Converter.php index c8add1b96a6..b3d8b094d69 100644 --- a/apps/dav/lib/CardDAV/Converter.php +++ b/apps/dav/lib/CardDAV/Converter.php @@ -92,7 +92,19 @@ class Converter { $vCard->add(new Text($vCard, 'TEL', $property->getValue(), ['TYPE' => 'VOICE', 'X-NC-SCOPE' => $scope])); break; case IAccountManager::PROPERTY_ADDRESS: - $vCard->add(new Text($vCard, 'ADR', $property->getValue(), ['TYPE' => 'OTHER', 'X-NC-SCOPE' => $scope])); + // structured prop: https://www.rfc-editor.org/rfc/rfc6350.html#section-6.3.1 + // post office box;extended address;street address;locality;region;postal code;country + $vCard->add( + new Text( + $vCard, + 'ADR', + [ '', '', '', $property->getValue(), '', '', '' ], + [ + 'TYPE' => 'OTHER', + 'X-NC-SCOPE' => $scope, + ] + ) + ); break; case IAccountManager::PROPERTY_TWITTER: $vCard->add(new Text($vCard, 'X-SOCIALPROFILE', $property->getValue(), ['TYPE' => 'TWITTER', 'X-NC-SCOPE' => $scope])); diff --git a/apps/dav/lib/CardDAV/SystemAddressbook.php b/apps/dav/lib/CardDAV/SystemAddressbook.php index 5587324efcd..498c4e95be7 100644 --- a/apps/dav/lib/CardDAV/SystemAddressbook.php +++ b/apps/dav/lib/CardDAV/SystemAddressbook.php @@ -64,7 +64,7 @@ class SystemAddressbook extends AddressBook { IUserSession $userSession, ?IRequest $request = null, ?TrustedServers $trustedServers = null, - ?IGroupManager $groupManager) { + ?IGroupManager $groupManager = null) { parent::__construct($carddavBackend, $addressBookInfo, $l10n); $this->config = $config; $this->userSession = $userSession; diff --git a/apps/dav/lib/Comments/CommentNode.php b/apps/dav/lib/Comments/CommentNode.php index 332c0e2d4d8..1d43c9c9309 100644 --- a/apps/dav/lib/Comments/CommentNode.php +++ b/apps/dav/lib/Comments/CommentNode.php @@ -165,10 +165,8 @@ class CommentNode implements \Sabre\DAV\INode, \Sabre\DAV\IProperties { /** * Returns the last modification time, as a unix timestamp - * - * @return int */ - public function getLastModified() { + public function getLastModified(): ?int { return null; } diff --git a/apps/dav/lib/Comments/CommentsPlugin.php b/apps/dav/lib/Comments/CommentsPlugin.php index bb07217a0ab..58de3e36139 100644 --- a/apps/dav/lib/Comments/CommentsPlugin.php +++ b/apps/dav/lib/Comments/CommentsPlugin.php @@ -176,7 +176,7 @@ class CommentsPlugin extends ServerPlugin { } if (!is_null($args['datetime'])) { - $args['datetime'] = new \DateTime($args['datetime']); + $args['datetime'] = new \DateTime((string)$args['datetime']); } $results = $node->findChildren($args['limit'], $args['offset'], $args['datetime']); @@ -189,7 +189,7 @@ class CommentsPlugin extends ServerPlugin { $responses[] = new Response( $this->server->getBaseUri() . $nodePath, [200 => $resultSet[0][200]], - 200 + '200' ); } } diff --git a/apps/dav/lib/Comments/EntityTypeCollection.php b/apps/dav/lib/Comments/EntityTypeCollection.php index d140a33ec4c..32adcee54f0 100644 --- a/apps/dav/lib/Comments/EntityTypeCollection.php +++ b/apps/dav/lib/Comments/EntityTypeCollection.php @@ -42,25 +42,14 @@ use Sabre\DAV\Exception\NotFound; * @package OCA\DAV\Comments */ class EntityTypeCollection extends RootCollection { - protected LoggerInterface $logger; - - /** @var IUserManager */ - protected $userManager; + protected IUserManager $userManager; /** @var \Closure */ protected $childExistsFunction; - /** - * @param string $name - * @param ICommentsManager $commentsManager - * @param IUserManager $userManager - * @param IUserSession $userSession - * @param LoggerInterface $logger - * @param \Closure $childExistsFunction - */ public function __construct( - $name, + string $name, ICommentsManager $commentsManager, IUserManager $userManager, IUserSession $userSession, @@ -68,7 +57,7 @@ class EntityTypeCollection extends RootCollection { \Closure $childExistsFunction ) { $name = trim($name); - if (empty($name) || !is_string($name)) { + if (empty($name)) { throw new \InvalidArgumentException('"name" parameter must be non-empty string'); } $this->name = $name; diff --git a/apps/dav/lib/Comments/RootCollection.php b/apps/dav/lib/Comments/RootCollection.php index 9832030291e..39d644b4766 100644 --- a/apps/dav/lib/Comments/RootCollection.php +++ b/apps/dav/lib/Comments/RootCollection.php @@ -36,26 +36,14 @@ use Sabre\DAV\ICollection; use Symfony\Component\EventDispatcher\EventDispatcherInterface; class RootCollection implements ICollection { - /** @var EntityTypeCollection[]|null */ - private $entityTypeCollections; - - /** @var ICommentsManager */ - protected $commentsManager; - - /** @var string */ - protected $name = 'comments'; - + private ?array $entityTypeCollections = null; + protected ICommentsManager $commentsManager; + protected string $name = 'comments'; protected LoggerInterface $logger; - - /** @var IUserManager */ - protected $userManager; - - /** @var IUserSession */ - protected $userSession; - - /** @var EventDispatcherInterface */ - protected $dispatcher; + protected IUserManager $userManager; + protected IUserSession $userSession; + protected EventDispatcherInterface $dispatcher; public function __construct( ICommentsManager $commentsManager, @@ -149,6 +137,7 @@ class RootCollection implements ICollection { */ public function getChildren() { $this->initCollections(); + assert(!is_null($this->entityTypeCollections)); return $this->entityTypeCollections; } @@ -160,6 +149,7 @@ class RootCollection implements ICollection { */ public function childExists($name) { $this->initCollections(); + assert(!is_null($this->entityTypeCollections)); return isset($this->entityTypeCollections[$name]); } @@ -196,7 +186,7 @@ class RootCollection implements ICollection { /** * Returns the last modification time, as a unix timestamp * - * @return int + * @return ?int */ public function getLastModified() { return null; diff --git a/apps/dav/lib/Connector/Sabre/DavAclPlugin.php b/apps/dav/lib/Connector/Sabre/DavAclPlugin.php index 6164b28b625..7fa94d7b903 100644 --- a/apps/dav/lib/Connector/Sabre/DavAclPlugin.php +++ b/apps/dav/lib/Connector/Sabre/DavAclPlugin.php @@ -94,8 +94,19 @@ class DavAclPlugin extends \Sabre\DAVACL\Plugin { $path = $request->getPath(); // prevent the plugin from causing an unneeded overhead for file requests - if (!str_starts_with($path, 'files/')) { - parent::beforeMethod($request, $response); + if (str_starts_with($path, 'files/')) { + return; + } + + parent::beforeMethod($request, $response); + + $createAddressbookOrCalendarRequest = ($request->getMethod() === 'MKCALENDAR' || $request->getMethod() === 'MKCOL') + && (str_starts_with($path, 'addressbooks/') || str_starts_with($path, 'calendars/')); + + if ($createAddressbookOrCalendarRequest) { + [$parentName] = \Sabre\Uri\split($path); + // is calendars/users/bob or addressbooks/users/bob writeable? + $this->checkPrivileges($parentName, '{DAV:}write'); } } } diff --git a/apps/dav/lib/Migration/Version1027Date20230504122946.php b/apps/dav/lib/Migration/Version1027Date20230504122946.php index e9ae174f56e..be3d19e8a80 100644 --- a/apps/dav/lib/Migration/Version1027Date20230504122946.php +++ b/apps/dav/lib/Migration/Version1027Date20230504122946.php @@ -34,6 +34,7 @@ use OCP\Migration\SimpleMigrationStep; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; use Psr\Log\LoggerInterface; +use Throwable; class Version1027Date20230504122946 extends SimpleMigrationStep { private SyncService $syncService; @@ -49,6 +50,13 @@ class Version1027Date20230504122946 extends SimpleMigrationStep { * @param array $options */ public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): void { - $this->syncService->syncInstance(); + try { + $this->syncService->syncInstance(); + } catch (Throwable $e) { + $this->logger->error('Could not sync system address books during update', [ + 'exception' => $e, + ]); + $output->warning('System address book sync failed. See logs for details'); + } } } diff --git a/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php b/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php index 69096d0cfbb..0fdd617943b 100644 --- a/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php +++ b/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php @@ -1291,6 +1291,8 @@ EOD; */ public function testPruneOutdatedSyncTokens(): void { $calendarId = $this->createTestCalendar(); + $changes = $this->backend->getChangesForCalendar($calendarId, '', 1); + $syncToken = $changes['syncToken']; $uri = static::getUniqueID('calobj'); $calData = <<<EOD @@ -1333,9 +1335,79 @@ EOD; $deleted = $this->backend->pruneOutdatedSyncTokens(0); // At least one from the object creation and one from the object update $this->assertGreaterThanOrEqual(2, $deleted); - $changes = $this->backend->getChangesForCalendar($calendarId, '5', 1); + $changes = $this->backend->getChangesForCalendar($calendarId, $syncToken, 1); $this->assertEmpty($changes['added']); $this->assertEmpty($changes['modified']); $this->assertEmpty($changes['deleted']); + + // Test that objects remain + + // Currently changes are empty + $changes = $this->backend->getChangesForCalendar($calendarId, $syncToken, 100); + $this->assertEquals(0, count($changes['added'] + $changes['modified'] + $changes['deleted'])); + + // Create card + $uri = static::getUniqueID('calobj'); +$calData = <<<EOD +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:Nextcloud Calendar +BEGIN:VEVENT +CREATED;VALUE=DATE-TIME:20230910T125139Z +UID:47d15e3ec9 +LAST-MODIFIED;VALUE=DATE-TIME:20230910T125139Z +DTSTAMP;VALUE=DATE-TIME:20230910T125139Z +SUMMARY:Test Event +DTSTART;VALUE=DATE-TIME:20230912T130000Z +DTEND;VALUE=DATE-TIME:20230912T140000Z +CLASS:PUBLIC +END:VEVENT +END:VCALENDAR +EOD; + $this->backend->createCalendarObject($calendarId, $uri, $calData); + + // We now have one add + $changes = $this->backend->getChangesForCalendar($calendarId, $syncToken, 100); + $this->assertEquals(1, count($changes['added'])); + $this->assertEmpty($changes['modified']); + $this->assertEmpty($changes['deleted']); + + // update the card + $calData = <<<'EOD' +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:Nextcloud Calendar +BEGIN:VEVENT +CREATED;VALUE=DATE-TIME:20230910T125139Z +UID:47d15e3ec9 +LAST-MODIFIED;VALUE=DATE-TIME:20230910T125139Z +DTSTAMP;VALUE=DATE-TIME:20230910T125139Z +SUMMARY:123 Event 🙈 +DTSTART;VALUE=DATE-TIME:20230912T130000Z +DTEND;VALUE=DATE-TIME:20230912T140000Z +ATTENDEE;CN=test:mailto:foo@bar.com +END:VEVENT +END:VCALENDAR +EOD; + $this->backend->updateCalendarObject($calendarId, $uri, $calData); + + // One add, one modify, but shortened to modify + $changes = $this->backend->getChangesForCalendar($calendarId, $syncToken, 100); + $this->assertEmpty($changes['added']); + $this->assertEquals(1, count($changes['modified'])); + $this->assertEmpty($changes['deleted']); + + // Delete all but last change + $deleted = $this->backend->pruneOutdatedSyncTokens(1); + $this->assertEquals(1, $deleted); // We had two changes before, now one + + // Only update should remain + $changes = $this->backend->getChangesForCalendar($calendarId, $syncToken, 100); + $this->assertEmpty($changes['added']); + $this->assertEquals(1, count($changes['modified'])); + $this->assertEmpty($changes['deleted']); + + // Check that no crash occurs when prune is called without current changes + $deleted = $this->backend->pruneOutdatedSyncTokens(1); } } diff --git a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php index adf64ef82b0..425e7c44ba7 100644 --- a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php +++ b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php @@ -853,15 +853,54 @@ class CardDavBackendTest extends TestCase { */ public function testPruneOutdatedSyncTokens(): void { $addressBookId = $this->backend->createAddressBook(self::UNIT_TEST_USER, 'Example', []); + $changes = $this->backend->getChangesForAddressBook($addressBookId, '', 1); + $syncToken = $changes['syncToken']; + $uri = $this->getUniqueID('card'); $this->backend->createCard($addressBookId, $uri, $this->vcardTest0); $this->backend->updateCard($addressBookId, $uri, $this->vcardTest1); $deleted = $this->backend->pruneOutdatedSyncTokens(0); // At least one from the object creation and one from the object update $this->assertGreaterThanOrEqual(2, $deleted); - $changes = $this->backend->getChangesForAddressBook($addressBookId, '5', 1); + $changes = $this->backend->getChangesForAddressBook($addressBookId, $syncToken, 1); $this->assertEmpty($changes['added']); $this->assertEmpty($changes['modified']); $this->assertEmpty($changes['deleted']); + + // Test that objects remain + + // Currently changes are empty + $changes = $this->backend->getChangesForAddressBook($addressBookId, $syncToken, 100); + $this->assertEquals(0, count($changes['added'] + $changes['modified'] + $changes['deleted'])); + + // Create card + $uri = $this->getUniqueID('card'); + $this->backend->createCard($addressBookId, $uri, $this->vcardTest0); + // We now have one add + $changes = $this->backend->getChangesForAddressBook($addressBookId, $syncToken, 100); + $this->assertEquals(1, count($changes['added'])); + $this->assertEmpty($changes['modified']); + $this->assertEmpty($changes['deleted']); + + // Update card + $this->backend->updateCard($addressBookId, $uri, $this->vcardTest1); + // One add, one modify, but shortened to modify + $changes = $this->backend->getChangesForAddressBook($addressBookId, $syncToken, 100); + $this->assertEmpty($changes['added']); + $this->assertEquals(1, count($changes['modified'])); + $this->assertEmpty($changes['deleted']); + + // Delete all but last change + $deleted = $this->backend->pruneOutdatedSyncTokens(1); + $this->assertEquals(1, $deleted); // We had two changes before, now one + + // Only update should remain + $changes = $this->backend->getChangesForAddressBook($addressBookId, $syncToken, 100); + $this->assertEmpty($changes['added']); + $this->assertEquals(1, count($changes['modified'])); + $this->assertEmpty($changes['deleted']); + + // Check that no crash occurs when prune is called without current changes + $deleted = $this->backend->pruneOutdatedSyncTokens(1); } } |