diff options
Diffstat (limited to 'apps')
339 files changed, 3298 insertions, 1277 deletions
diff --git a/apps/admin_audit/l10n/id.js b/apps/admin_audit/l10n/id.js index 441f1940069..144a85299f1 100644 --- a/apps/admin_audit/l10n/id.js +++ b/apps/admin_audit/l10n/id.js @@ -1,7 +1,7 @@ OC.L10N.register( "admin_audit", { - "Auditing / Logging" : "Pemeriksaan / Pencatatan", - "Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Menyediakan kemampuan pencatatan untuk Nextcloud seperti pencatatan akses berkas atau tindakan sensitif lainnya." + "Auditing / Logging" : "Pengauditan/Pencatatan", + "Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Menyediakan kemampuan pencatatan untuk Nextcloud, misalnya pencatatan akses file atau tindakan sensitif lainnya." }, "nplurals=1; plural=0;"); diff --git a/apps/admin_audit/l10n/id.json b/apps/admin_audit/l10n/id.json index 91af029f895..868f7c94d32 100644 --- a/apps/admin_audit/l10n/id.json +++ b/apps/admin_audit/l10n/id.json @@ -1,5 +1,5 @@ { "translations": { - "Auditing / Logging" : "Pemeriksaan / Pencatatan", - "Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Menyediakan kemampuan pencatatan untuk Nextcloud seperti pencatatan akses berkas atau tindakan sensitif lainnya." + "Auditing / Logging" : "Pengauditan/Pencatatan", + "Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Menyediakan kemampuan pencatatan untuk Nextcloud, misalnya pencatatan akses file atau tindakan sensitif lainnya." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/dav/appinfo/routes.php b/apps/dav/appinfo/routes.php index d0953add93f..91c1ba58ea2 100644 --- a/apps/dav/appinfo/routes.php +++ b/apps/dav/appinfo/routes.php @@ -11,9 +11,6 @@ return [ ['name' => 'invitation_response#decline', 'url' => '/invitation/decline/{token}', 'verb' => 'GET'], ['name' => 'invitation_response#options', 'url' => '/invitation/moreOptions/{token}', 'verb' => 'GET'], ['name' => 'invitation_response#processMoreOptionsResult', 'url' => '/invitation/moreOptions/{token}', 'verb' => 'POST'], - ['name' => 'example_content#getDefaultContact', 'url' => '/api/defaultcontact/contact', 'verb' => 'GET'], - ['name' => 'example_content#setDefaultContact', 'url' => '/api/defaultcontact/contact', 'verb' => 'PUT'], - ['name' => 'example_content#setEnableDefaultContact', 'url' => '/api/defaultcontact/config', 'verb' => 'PUT'], ], 'ocs' => [ ['name' => 'direct#getUrl', 'url' => '/api/v1/direct', 'verb' => 'POST'], diff --git a/apps/dav/composer/composer/autoload_classmap.php b/apps/dav/composer/composer/autoload_classmap.php index 312f30ca8c5..4c48f343c4c 100644 --- a/apps/dav/composer/composer/autoload_classmap.php +++ b/apps/dav/composer/composer/autoload_classmap.php @@ -366,7 +366,7 @@ return array( 'OCA\\DAV\\Server' => $baseDir . '/../lib/Server.php', 'OCA\\DAV\\ServerFactory' => $baseDir . '/../lib/ServerFactory.php', 'OCA\\DAV\\Service\\AbsenceService' => $baseDir . '/../lib/Service/AbsenceService.php', - 'OCA\\DAV\\Service\\DefaultContactService' => $baseDir . '/../lib/Service/DefaultContactService.php', + 'OCA\\DAV\\Service\\ExampleContactService' => $baseDir . '/../lib/Service/ExampleContactService.php', 'OCA\\DAV\\Service\\ExampleEventService' => $baseDir . '/../lib/Service/ExampleEventService.php', 'OCA\\DAV\\Settings\\Admin\\SystemAddressBookSettings' => $baseDir . '/../lib/Settings/Admin/SystemAddressBookSettings.php', 'OCA\\DAV\\Settings\\AvailabilitySettings' => $baseDir . '/../lib/Settings/AvailabilitySettings.php', diff --git a/apps/dav/composer/composer/autoload_static.php b/apps/dav/composer/composer/autoload_static.php index aeb354685bf..4d9166a2d5a 100644 --- a/apps/dav/composer/composer/autoload_static.php +++ b/apps/dav/composer/composer/autoload_static.php @@ -381,7 +381,7 @@ class ComposerStaticInitDAV 'OCA\\DAV\\Server' => __DIR__ . '/..' . '/../lib/Server.php', 'OCA\\DAV\\ServerFactory' => __DIR__ . '/..' . '/../lib/ServerFactory.php', 'OCA\\DAV\\Service\\AbsenceService' => __DIR__ . '/..' . '/../lib/Service/AbsenceService.php', - 'OCA\\DAV\\Service\\DefaultContactService' => __DIR__ . '/..' . '/../lib/Service/DefaultContactService.php', + 'OCA\\DAV\\Service\\ExampleContactService' => __DIR__ . '/..' . '/../lib/Service/ExampleContactService.php', 'OCA\\DAV\\Service\\ExampleEventService' => __DIR__ . '/..' . '/../lib/Service/ExampleEventService.php', 'OCA\\DAV\\Settings\\Admin\\SystemAddressBookSettings' => __DIR__ . '/..' . '/../lib/Settings/Admin/SystemAddressBookSettings.php', 'OCA\\DAV\\Settings\\AvailabilitySettings' => __DIR__ . '/..' . '/../lib/Settings/AvailabilitySettings.php', diff --git a/apps/dav/l10n/ar.js b/apps/dav/l10n/ar.js index 8b977d009c9..a058786dd54 100644 --- a/apps/dav/l10n/ar.js +++ b/apps/dav/l10n/ar.js @@ -290,6 +290,17 @@ OC.L10N.register( "Pick a start time for {dayName}" : "إختَر وقت البدء ليوم {dayName}", "Pick a end time for {dayName}" : "إختَر وقت الانتهاء ليوم {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "قم بتعيين حالة المستخدم تلقائيًا على \"عدم الإزعاج\" خارج نطاق أوقات التواجد لكتم جميع الإشعارات", + "Cancel" : "إلغاء", + "Import" : "إستيراد", + "Error while saving settings" : "خطأ أثناء حفظ الإعدادات", + "Contact reset successfully" : "تمّت إعادة تعيين جهة الاتصال بنجاحٍ", + "Error while resetting contact" : "خطأ أثناء إعادة تعيين جهة الاتصال", + "Contact imported successfully" : "تمّ استيراد جهة الاتصال بنجاحٍ", + "Error while importing contact" : "خطأ أثناء استيراد جهة الاتصال", + "Import contact" : "استيراد جهة اتصال", + "Reset to default" : "اعادة تعيين الافتراضيات", + "Import contacts" : "استيراد جهات اتصال", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "استيراد ملف .cvf جديد سوف يؤدي إلى حذف جهات الاتصال التلقائية الحالية واستبدالها بالجديدة. هل ترغب في الاستمرار؟", "Availability" : "أوقات التواجد ", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "إذا قمت بضبط ساعات عملك، سيرى الآخرون متى تكون خارج المكتب عندما يقومون بحجز اجتماع معك.", "Absence" : "غياب", @@ -306,19 +317,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "أرسل إشعارات للتذكير إلى المشتركين بالتقويم كذلك", "Reminders are always sent to organizers and attendees." : "إشعارات التذكير يتم إرسالها دائماً إلى مُنظّم أو مُنظّمي الحدث و المستهدفين بحضوره.", "Enable notifications for events via push" : "تمكين الإشعارات حول الأحداث عن طريق أسلوب دفع الإشعارات Push", - "Cancel" : "إلغاء", - "Import" : "إستيراد", - "Error while saving settings" : "خطأ أثناء حفظ الإعدادات", - "Contact reset successfully" : "تمّت إعادة تعيين جهة الاتصال بنجاحٍ", - "Error while resetting contact" : "خطأ أثناء إعادة تعيين جهة الاتصال", - "Contact imported successfully" : "تمّ استيراد جهة الاتصال بنجاحٍ", - "Error while importing contact" : "خطأ أثناء استيراد جهة الاتصال", - "Example Content" : "نموذج للمحتوى", - "Set example content to be created on new user first login." : "عيِّن نموذجاً للمحتوى ليتم إنشاؤه عند تسجيل المستخدِم دخوله لأول مرةٍ.", - "Import contact" : "استيراد جهة اتصال", - "Reset to default contact" : "إعادة التعيين لجهة اتصال تلقائية ", - "Import contacts" : "استيراد جهات اتصال", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "استيراد ملف .cvf جديد سوف يؤدي إلى حذف جهات الاتصال التلقائية الحالية واستبدالها بالجديدة. هل ترغب في الاستمرار؟", "There was an error updating your attendance status." : "حدث خطأ في تحديث حالة حضورك.", "Please contact the organizer directly." : "يرجى الاتصال بالمنظم مباشرةً", "Are you accepting the invitation?" : "هل تقبل الدعوة؟", diff --git a/apps/dav/l10n/ar.json b/apps/dav/l10n/ar.json index 26267cc12f8..212dc54ee03 100644 --- a/apps/dav/l10n/ar.json +++ b/apps/dav/l10n/ar.json @@ -288,6 +288,17 @@ "Pick a start time for {dayName}" : "إختَر وقت البدء ليوم {dayName}", "Pick a end time for {dayName}" : "إختَر وقت الانتهاء ليوم {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "قم بتعيين حالة المستخدم تلقائيًا على \"عدم الإزعاج\" خارج نطاق أوقات التواجد لكتم جميع الإشعارات", + "Cancel" : "إلغاء", + "Import" : "إستيراد", + "Error while saving settings" : "خطأ أثناء حفظ الإعدادات", + "Contact reset successfully" : "تمّت إعادة تعيين جهة الاتصال بنجاحٍ", + "Error while resetting contact" : "خطأ أثناء إعادة تعيين جهة الاتصال", + "Contact imported successfully" : "تمّ استيراد جهة الاتصال بنجاحٍ", + "Error while importing contact" : "خطأ أثناء استيراد جهة الاتصال", + "Import contact" : "استيراد جهة اتصال", + "Reset to default" : "اعادة تعيين الافتراضيات", + "Import contacts" : "استيراد جهات اتصال", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "استيراد ملف .cvf جديد سوف يؤدي إلى حذف جهات الاتصال التلقائية الحالية واستبدالها بالجديدة. هل ترغب في الاستمرار؟", "Availability" : "أوقات التواجد ", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "إذا قمت بضبط ساعات عملك، سيرى الآخرون متى تكون خارج المكتب عندما يقومون بحجز اجتماع معك.", "Absence" : "غياب", @@ -304,19 +315,6 @@ "Send reminder notifications to calendar sharees as well" : "أرسل إشعارات للتذكير إلى المشتركين بالتقويم كذلك", "Reminders are always sent to organizers and attendees." : "إشعارات التذكير يتم إرسالها دائماً إلى مُنظّم أو مُنظّمي الحدث و المستهدفين بحضوره.", "Enable notifications for events via push" : "تمكين الإشعارات حول الأحداث عن طريق أسلوب دفع الإشعارات Push", - "Cancel" : "إلغاء", - "Import" : "إستيراد", - "Error while saving settings" : "خطأ أثناء حفظ الإعدادات", - "Contact reset successfully" : "تمّت إعادة تعيين جهة الاتصال بنجاحٍ", - "Error while resetting contact" : "خطأ أثناء إعادة تعيين جهة الاتصال", - "Contact imported successfully" : "تمّ استيراد جهة الاتصال بنجاحٍ", - "Error while importing contact" : "خطأ أثناء استيراد جهة الاتصال", - "Example Content" : "نموذج للمحتوى", - "Set example content to be created on new user first login." : "عيِّن نموذجاً للمحتوى ليتم إنشاؤه عند تسجيل المستخدِم دخوله لأول مرةٍ.", - "Import contact" : "استيراد جهة اتصال", - "Reset to default contact" : "إعادة التعيين لجهة اتصال تلقائية ", - "Import contacts" : "استيراد جهات اتصال", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "استيراد ملف .cvf جديد سوف يؤدي إلى حذف جهات الاتصال التلقائية الحالية واستبدالها بالجديدة. هل ترغب في الاستمرار؟", "There was an error updating your attendance status." : "حدث خطأ في تحديث حالة حضورك.", "Please contact the organizer directly." : "يرجى الاتصال بالمنظم مباشرةً", "Are you accepting the invitation?" : "هل تقبل الدعوة؟", diff --git a/apps/dav/l10n/ast.js b/apps/dav/l10n/ast.js index 5b9dff11f0e..b0cba5d934f 100644 --- a/apps/dav/l10n/ast.js +++ b/apps/dav/l10n/ast.js @@ -195,6 +195,10 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Escueyi una hora de comienzu pal {dayName}", "Pick a end time for {dayName}" : "Escueyi una hora de fin pal {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Afitar automáticamente l'estáu a «Nun molestar» fuera de la disponibilidá pa desactivar tolos avisos.", + "Cancel" : "Encaboxar", + "Import" : "Importa", + "Error while saving settings" : "Hebo un error mentanto se guardaba la configuración", + "Reset to default" : "Reafitar los valores", "Availability" : "Disponibilidá", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configures les hores llaborales, les demás persones van ver cuando coles de la oficina al acutar una reunión.", "Absence" : "Ausencia", @@ -211,9 +215,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Unvia tamién avisos de recordatoriu pa les persones coles que se compartiere'l calendariu", "Reminders are always sent to organizers and attendees." : "Los recordatorios únviense siempres a organizadores y asistentes", "Enable notifications for events via push" : "Acriva los avisos automáticos pa los eventos", - "Cancel" : "Encaboxar", - "Import" : "Importa", - "Error while saving settings" : "Hebo un error mentanto se guardaba la configuración", "There was an error updating your attendance status." : "Hebo un error al anovar l'estáu de l'asistencia.", "Please contact the organizer directly." : "Ponte en contautu direutamente cola organización.", "Are you accepting the invitation?" : "¿Aceptes la invitación?", diff --git a/apps/dav/l10n/ast.json b/apps/dav/l10n/ast.json index d29a619d649..519aa700951 100644 --- a/apps/dav/l10n/ast.json +++ b/apps/dav/l10n/ast.json @@ -193,6 +193,10 @@ "Pick a start time for {dayName}" : "Escueyi una hora de comienzu pal {dayName}", "Pick a end time for {dayName}" : "Escueyi una hora de fin pal {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Afitar automáticamente l'estáu a «Nun molestar» fuera de la disponibilidá pa desactivar tolos avisos.", + "Cancel" : "Encaboxar", + "Import" : "Importa", + "Error while saving settings" : "Hebo un error mentanto se guardaba la configuración", + "Reset to default" : "Reafitar los valores", "Availability" : "Disponibilidá", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configures les hores llaborales, les demás persones van ver cuando coles de la oficina al acutar una reunión.", "Absence" : "Ausencia", @@ -209,9 +213,6 @@ "Send reminder notifications to calendar sharees as well" : "Unvia tamién avisos de recordatoriu pa les persones coles que se compartiere'l calendariu", "Reminders are always sent to organizers and attendees." : "Los recordatorios únviense siempres a organizadores y asistentes", "Enable notifications for events via push" : "Acriva los avisos automáticos pa los eventos", - "Cancel" : "Encaboxar", - "Import" : "Importa", - "Error while saving settings" : "Hebo un error mentanto se guardaba la configuración", "There was an error updating your attendance status." : "Hebo un error al anovar l'estáu de l'asistencia.", "Please contact the organizer directly." : "Ponte en contautu direutamente cola organización.", "Are you accepting the invitation?" : "¿Aceptes la invitación?", diff --git a/apps/dav/l10n/bg.js b/apps/dav/l10n/bg.js index 72a50572ab1..d8d27bc7d4b 100644 --- a/apps/dav/l10n/bg.js +++ b/apps/dav/l10n/bg.js @@ -138,6 +138,7 @@ OC.L10N.register( "{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>contact</strong> или <strong>address book</strong> са променени", + "Accounts" : "Профили", "File is not updatable: %1$s" : "Файлът не подлежи на актуализиране: %1$s", "Could not write to final file, canceled by hook" : "Не можа да се запише в крайния файл, анулирано от кука", "Could not write file contents" : "Съдържанието на файла не можа да се запише", @@ -187,6 +188,10 @@ OC.L10N.register( "No working hours set" : "Няма зададено работно време", "Add slot" : "Добавяне на слот", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Автоматично задаване на потребителският статус на „Не безпокойте“ извън достъпността, за заглушаване на всички известия.", + "Cancel" : "Отказ", + "Import" : "Импортиране /внасяне/", + "Error while saving settings" : "Грешка при запазване на настройките", + "Reset to default" : "Настройки по подразбиране", "Availability" : "Работно време", "Absence" : "Отсъствия", "Configure your next absence period." : "Задай своето съобщение за отсъствие.", @@ -202,9 +207,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Изпращане на известия за напомняния и до споделящите календар", "Reminders are always sent to organizers and attendees." : "Напомнянията винаги се изпращат до организаторите и присъстващите.", "Enable notifications for events via push" : "Активиране на известията за събития чрез push", - "Cancel" : "Отказ", - "Import" : "Импортиране /внасяне/", - "Error while saving settings" : "Грешка при запазване на настройките", "There was an error updating your attendance status." : "Възникна грешка при актуализиране на състоянието на присъствието Ви.", "Please contact the organizer directly." : "Моля, свържете се директно с организатора.", "Are you accepting the invitation?" : "Приемате ли поканата?", diff --git a/apps/dav/l10n/bg.json b/apps/dav/l10n/bg.json index 76144d4e0e1..6ebc3b0f6ab 100644 --- a/apps/dav/l10n/bg.json +++ b/apps/dav/l10n/bg.json @@ -136,6 +136,7 @@ "{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>contact</strong> или <strong>address book</strong> са променени", + "Accounts" : "Профили", "File is not updatable: %1$s" : "Файлът не подлежи на актуализиране: %1$s", "Could not write to final file, canceled by hook" : "Не можа да се запише в крайния файл, анулирано от кука", "Could not write file contents" : "Съдържанието на файла не можа да се запише", @@ -185,6 +186,10 @@ "No working hours set" : "Няма зададено работно време", "Add slot" : "Добавяне на слот", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Автоматично задаване на потребителският статус на „Не безпокойте“ извън достъпността, за заглушаване на всички известия.", + "Cancel" : "Отказ", + "Import" : "Импортиране /внасяне/", + "Error while saving settings" : "Грешка при запазване на настройките", + "Reset to default" : "Настройки по подразбиране", "Availability" : "Работно време", "Absence" : "Отсъствия", "Configure your next absence period." : "Задай своето съобщение за отсъствие.", @@ -200,9 +205,6 @@ "Send reminder notifications to calendar sharees as well" : "Изпращане на известия за напомняния и до споделящите календар", "Reminders are always sent to organizers and attendees." : "Напомнянията винаги се изпращат до организаторите и присъстващите.", "Enable notifications for events via push" : "Активиране на известията за събития чрез push", - "Cancel" : "Отказ", - "Import" : "Импортиране /внасяне/", - "Error while saving settings" : "Грешка при запазване на настройките", "There was an error updating your attendance status." : "Възникна грешка при актуализиране на състоянието на присъствието Ви.", "Please contact the organizer directly." : "Моля, свържете се директно с организатора.", "Are you accepting the invitation?" : "Приемате ли поканата?", diff --git a/apps/dav/l10n/ca.js b/apps/dav/l10n/ca.js index 634569e358e..6ed5523a0e5 100644 --- a/apps/dav/l10n/ca.js +++ b/apps/dav/l10n/ca.js @@ -290,6 +290,10 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Trieu una hora d'inici per a {dayName}", "Pick a end time for {dayName}" : "Trieu una hora de finalització per a {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Estableix automàticament l'estat de l'usuari com a \"No molesteu” fora de la disponibilitat per a silenciar totes les notificacions.", + "Cancel" : "Cancel·la", + "Import" : "Importa", + "Error while saving settings" : "S'ha produït un error en desar els paràmetres", + "Reset to default" : "Reinicialitza els valors per defecte", "Availability" : "Disponibilitat", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configureu el vostre horari laboral, la resta de persones veuran quan sou fora de l'oficina quan planifiquin una reunió.", "Absence" : "Absència", @@ -306,9 +310,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Envia també notificacions de recordatori als usuaris amb qui s'ha compartit el calendari", "Reminders are always sent to organizers and attendees." : "Sempre s'envien recordatoris als organitzadors i als assistents.", "Enable notifications for events via push" : "Habilita les notificacions automàtiques per als esdeveniments", - "Cancel" : "Cancel·la", - "Import" : "Importa", - "Error while saving settings" : "S'ha produït un error en desar els paràmetres", "There was an error updating your attendance status." : "S'ha produït un error en actualitzar l'estat d'assistència.", "Please contact the organizer directly." : "Contacteu amb l'organització directament.", "Are you accepting the invitation?" : "Accepteu la invitació?", diff --git a/apps/dav/l10n/ca.json b/apps/dav/l10n/ca.json index 88e6b809c75..88cb071325a 100644 --- a/apps/dav/l10n/ca.json +++ b/apps/dav/l10n/ca.json @@ -288,6 +288,10 @@ "Pick a start time for {dayName}" : "Trieu una hora d'inici per a {dayName}", "Pick a end time for {dayName}" : "Trieu una hora de finalització per a {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Estableix automàticament l'estat de l'usuari com a \"No molesteu” fora de la disponibilitat per a silenciar totes les notificacions.", + "Cancel" : "Cancel·la", + "Import" : "Importa", + "Error while saving settings" : "S'ha produït un error en desar els paràmetres", + "Reset to default" : "Reinicialitza els valors per defecte", "Availability" : "Disponibilitat", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configureu el vostre horari laboral, la resta de persones veuran quan sou fora de l'oficina quan planifiquin una reunió.", "Absence" : "Absència", @@ -304,9 +308,6 @@ "Send reminder notifications to calendar sharees as well" : "Envia també notificacions de recordatori als usuaris amb qui s'ha compartit el calendari", "Reminders are always sent to organizers and attendees." : "Sempre s'envien recordatoris als organitzadors i als assistents.", "Enable notifications for events via push" : "Habilita les notificacions automàtiques per als esdeveniments", - "Cancel" : "Cancel·la", - "Import" : "Importa", - "Error while saving settings" : "S'ha produït un error en desar els paràmetres", "There was an error updating your attendance status." : "S'ha produït un error en actualitzar l'estat d'assistència.", "Please contact the organizer directly." : "Contacteu amb l'organització directament.", "Are you accepting the invitation?" : "Accepteu la invitació?", diff --git a/apps/dav/l10n/cs.js b/apps/dav/l10n/cs.js index d841e581d64..c2d10ac429d 100644 --- a/apps/dav/l10n/cs.js +++ b/apps/dav/l10n/cs.js @@ -290,6 +290,25 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Vyberte začátek pro {dayName}", "Pick a end time for {dayName}" : "Vyberte konec pro {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "V době, kdy není k dispozici, automaticky nastavit stav uživatele na „Nerušit“ a ztlumit tak veškerá upozornění.", + "Cancel" : "Storno", + "Import" : "Naimportovat", + "Error while saving settings" : "Chyba při ukládání nastavení", + "Contact reset successfully" : "Kontakt úspěšně resetován", + "Error while resetting contact" : "Chyba při resetování kontaktu", + "Contact imported successfully" : "Kontakt úspěšně naimportován", + "Error while importing contact" : "Chyba při importování kontaktu", + "Import contact" : "Importovat kontakt", + "Reset to default" : "Vrátit zpět na výchozí hodnoty", + "Import contacts" : "Importovat kontakty", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Naimportování nového .vcf souboru smaže stávající výchozí kontakt a nahradí ho novým. Chcete pokračovat?", + "Failed to save example event creation setting" : "Nepodařilo se uložit nastavení vytváření události pro ukázku", + "Failed to upload the example event" : "Nepodařilo se nahrát událost pro ukázku", + "Custom example event was saved successfully" : "Uživatelsky určená událost pro ukázku byla úspěšně uložena", + "Failed to delete the custom example event" : "Nepodařilo se smazat uživatelsky určenou událost pro ukázku", + "Custom example event was deleted successfully" : "Uživatelsky určená událost pro ukázku byla úspěšně smazána", + "Import calendar event" : "Naimportovat událost kalendáře", + "Uploading a new event will overwrite the existing one." : "Nahrání nové události přepíše tu existující.", + "Upload event" : "Nahrát událost", "Availability" : "Dostupnost", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Když sem zadáte svou pracovní dobu, ostatní lidé při rezervování schůzky uvidí, kdy jste mimo kancelář.", "Absence" : "Nepřítomnost", @@ -306,19 +325,8 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Poslat připomínky také těm, kteří mají tento sdílený kalendář připojený", "Reminders are always sent to organizers and attendees." : "Připomínky jsou vždy poslány organizátorům a účastníkům.", "Enable notifications for events via push" : "Upozorňovat na události prostřednictvím služby push", - "Cancel" : "Storno", - "Import" : "Naimportovat", - "Error while saving settings" : "Chyba při ukládání nastavení", - "Contact reset successfully" : "Kontakt úspěšně resetován", - "Error while resetting contact" : "Chyba při resetování kontaktu", - "Contact imported successfully" : "Kontakt úspěšně naimportován", - "Error while importing contact" : "Chyba při importování kontaktu", - "Example Content" : "Obsah pro ukázku", - "Set example content to be created on new user first login." : "Nastavit obsah pro ukázku, který vytvořit při prvním přihlášení nového uživatele.", - "Import contact" : "Importovat kontakt", - "Reset to default contact" : "Vrátit na výchozí kontakt", - "Import contacts" : "Importovat kontakty", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Naimportování nového .vcf souboru smaže stávající výchozí kontakt a nahradí ho novým. Chcete pokračovat?", + "Example content" : "Obsah pro ukázku", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Obsah pro ukázku slouží pro předvedení funkcí Nextcloud. Výchozí obsah je dodáván s Nextcloud a je možné ho nahradit uživatelsky určeným.", "There was an error updating your attendance status." : "Vyskytla se chyba při aktualizaci vašeho stavu účasti.", "Please contact the organizer directly." : "Kontaktujte organizátora přímo.", "Are you accepting the invitation?" : "Přijímáte pozvání?", diff --git a/apps/dav/l10n/cs.json b/apps/dav/l10n/cs.json index 0aed37af86a..69be44bbd4e 100644 --- a/apps/dav/l10n/cs.json +++ b/apps/dav/l10n/cs.json @@ -288,6 +288,25 @@ "Pick a start time for {dayName}" : "Vyberte začátek pro {dayName}", "Pick a end time for {dayName}" : "Vyberte konec pro {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "V době, kdy není k dispozici, automaticky nastavit stav uživatele na „Nerušit“ a ztlumit tak veškerá upozornění.", + "Cancel" : "Storno", + "Import" : "Naimportovat", + "Error while saving settings" : "Chyba při ukládání nastavení", + "Contact reset successfully" : "Kontakt úspěšně resetován", + "Error while resetting contact" : "Chyba při resetování kontaktu", + "Contact imported successfully" : "Kontakt úspěšně naimportován", + "Error while importing contact" : "Chyba při importování kontaktu", + "Import contact" : "Importovat kontakt", + "Reset to default" : "Vrátit zpět na výchozí hodnoty", + "Import contacts" : "Importovat kontakty", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Naimportování nového .vcf souboru smaže stávající výchozí kontakt a nahradí ho novým. Chcete pokračovat?", + "Failed to save example event creation setting" : "Nepodařilo se uložit nastavení vytváření události pro ukázku", + "Failed to upload the example event" : "Nepodařilo se nahrát událost pro ukázku", + "Custom example event was saved successfully" : "Uživatelsky určená událost pro ukázku byla úspěšně uložena", + "Failed to delete the custom example event" : "Nepodařilo se smazat uživatelsky určenou událost pro ukázku", + "Custom example event was deleted successfully" : "Uživatelsky určená událost pro ukázku byla úspěšně smazána", + "Import calendar event" : "Naimportovat událost kalendáře", + "Uploading a new event will overwrite the existing one." : "Nahrání nové události přepíše tu existující.", + "Upload event" : "Nahrát událost", "Availability" : "Dostupnost", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Když sem zadáte svou pracovní dobu, ostatní lidé při rezervování schůzky uvidí, kdy jste mimo kancelář.", "Absence" : "Nepřítomnost", @@ -304,19 +323,8 @@ "Send reminder notifications to calendar sharees as well" : "Poslat připomínky také těm, kteří mají tento sdílený kalendář připojený", "Reminders are always sent to organizers and attendees." : "Připomínky jsou vždy poslány organizátorům a účastníkům.", "Enable notifications for events via push" : "Upozorňovat na události prostřednictvím služby push", - "Cancel" : "Storno", - "Import" : "Naimportovat", - "Error while saving settings" : "Chyba při ukládání nastavení", - "Contact reset successfully" : "Kontakt úspěšně resetován", - "Error while resetting contact" : "Chyba při resetování kontaktu", - "Contact imported successfully" : "Kontakt úspěšně naimportován", - "Error while importing contact" : "Chyba při importování kontaktu", - "Example Content" : "Obsah pro ukázku", - "Set example content to be created on new user first login." : "Nastavit obsah pro ukázku, který vytvořit při prvním přihlášení nového uživatele.", - "Import contact" : "Importovat kontakt", - "Reset to default contact" : "Vrátit na výchozí kontakt", - "Import contacts" : "Importovat kontakty", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Naimportování nového .vcf souboru smaže stávající výchozí kontakt a nahradí ho novým. Chcete pokračovat?", + "Example content" : "Obsah pro ukázku", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Obsah pro ukázku slouží pro předvedení funkcí Nextcloud. Výchozí obsah je dodáván s Nextcloud a je možné ho nahradit uživatelsky určeným.", "There was an error updating your attendance status." : "Vyskytla se chyba při aktualizaci vašeho stavu účasti.", "Please contact the organizer directly." : "Kontaktujte organizátora přímo.", "Are you accepting the invitation?" : "Přijímáte pozvání?", diff --git a/apps/dav/l10n/da.js b/apps/dav/l10n/da.js index 5642533a9bf..782f0a3b21b 100644 --- a/apps/dav/l10n/da.js +++ b/apps/dav/l10n/da.js @@ -290,6 +290,17 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Vælg et starttidspunkt for {dayName}", "Pick a end time for {dayName}" : "Vælg et sluttidspunkt for {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Indstil automatisk brugerstatus til \"Forstyr ikke\" uden for tilgængelighed for at slå alle notifikationer fra.", + "Cancel" : "Annuller", + "Import" : "Importér", + "Error while saving settings" : "Der opstod en fejl under lagring af indstillinger", + "Contact reset successfully" : "Kontakten blev nulstillet", + "Error while resetting contact" : "Fejl under nulstilling af kontakt", + "Contact imported successfully" : "Kontakten blev importeret", + "Error while importing contact" : "Fejl under import af kontakt", + "Import contact" : "Importér kontakt", + "Reset to default" : "Nulstil", + "Import contacts" : "Importér kontakter", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Import af en ny .vcf-fil vil slette den eksisterende standardkontakt og erstatte den med den nye. Vil du fortsætte?", "Availability" : "tilgængelighed", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Hvis du konfigurerer dine arbejdstider, vil andre se, når du er fraværende, når de booker et møde.", "Absence" : "Fravær", @@ -306,19 +317,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Send også påmindelsesmeddelelser til kalenderdelinger", "Reminders are always sent to organizers and attendees." : "Påmindelser sendes altid til arrangører og deltagere.", "Enable notifications for events via push" : "Aktiver notifikationer for begivenheder via push", - "Cancel" : "Annuller", - "Import" : "Importér", - "Error while saving settings" : "Der opstod en fejl under lagring af indstillinger", - "Contact reset successfully" : "Kontakten blev nulstillet", - "Error while resetting contact" : "Fejl under nulstilling af kontakt", - "Contact imported successfully" : "Kontakten blev importeret", - "Error while importing contact" : "Fejl under import af kontakt", - "Example Content" : "Eksempelindhold", - "Set example content to be created on new user first login." : "Indstil eksempel på indhold, der skal oprettes ved ny brugers første login.", - "Import contact" : "Importér kontakt", - "Reset to default contact" : "Nulstil til standardkontakt", - "Import contacts" : "Importér kontakter", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Import af en ny .vcf-fil vil slette den eksisterende standardkontakt og erstatte den med den nye. Vil du fortsætte?", "There was an error updating your attendance status." : "Der opstod en fejl under opdatering af din fremmødestatus.", "Please contact the organizer directly." : "Kontakt venligst arrangøren direkte.", "Are you accepting the invitation?" : "Accepter du invitationen?", diff --git a/apps/dav/l10n/da.json b/apps/dav/l10n/da.json index 5b7367a9dd2..1007a84bb10 100644 --- a/apps/dav/l10n/da.json +++ b/apps/dav/l10n/da.json @@ -288,6 +288,17 @@ "Pick a start time for {dayName}" : "Vælg et starttidspunkt for {dayName}", "Pick a end time for {dayName}" : "Vælg et sluttidspunkt for {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Indstil automatisk brugerstatus til \"Forstyr ikke\" uden for tilgængelighed for at slå alle notifikationer fra.", + "Cancel" : "Annuller", + "Import" : "Importér", + "Error while saving settings" : "Der opstod en fejl under lagring af indstillinger", + "Contact reset successfully" : "Kontakten blev nulstillet", + "Error while resetting contact" : "Fejl under nulstilling af kontakt", + "Contact imported successfully" : "Kontakten blev importeret", + "Error while importing contact" : "Fejl under import af kontakt", + "Import contact" : "Importér kontakt", + "Reset to default" : "Nulstil", + "Import contacts" : "Importér kontakter", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Import af en ny .vcf-fil vil slette den eksisterende standardkontakt og erstatte den med den nye. Vil du fortsætte?", "Availability" : "tilgængelighed", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Hvis du konfigurerer dine arbejdstider, vil andre se, når du er fraværende, når de booker et møde.", "Absence" : "Fravær", @@ -304,19 +315,6 @@ "Send reminder notifications to calendar sharees as well" : "Send også påmindelsesmeddelelser til kalenderdelinger", "Reminders are always sent to organizers and attendees." : "Påmindelser sendes altid til arrangører og deltagere.", "Enable notifications for events via push" : "Aktiver notifikationer for begivenheder via push", - "Cancel" : "Annuller", - "Import" : "Importér", - "Error while saving settings" : "Der opstod en fejl under lagring af indstillinger", - "Contact reset successfully" : "Kontakten blev nulstillet", - "Error while resetting contact" : "Fejl under nulstilling af kontakt", - "Contact imported successfully" : "Kontakten blev importeret", - "Error while importing contact" : "Fejl under import af kontakt", - "Example Content" : "Eksempelindhold", - "Set example content to be created on new user first login." : "Indstil eksempel på indhold, der skal oprettes ved ny brugers første login.", - "Import contact" : "Importér kontakt", - "Reset to default contact" : "Nulstil til standardkontakt", - "Import contacts" : "Importér kontakter", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Import af en ny .vcf-fil vil slette den eksisterende standardkontakt og erstatte den med den nye. Vil du fortsætte?", "There was an error updating your attendance status." : "Der opstod en fejl under opdatering af din fremmødestatus.", "Please contact the organizer directly." : "Kontakt venligst arrangøren direkte.", "Are you accepting the invitation?" : "Accepter du invitationen?", diff --git a/apps/dav/l10n/de.js b/apps/dav/l10n/de.js index 788e1bf2f75..3ba68d336ed 100644 --- a/apps/dav/l10n/de.js +++ b/apps/dav/l10n/de.js @@ -290,6 +290,25 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Eine Startzeit für {dayName} wählen", "Pick a end time for {dayName}" : "Eine Endezeit für {dayName} wählen", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Setze den Benutzerstatus außerhalb deiner Verfügbarkeit automatisch auf \"Nicht stören\", um alle Benachrichtigungen stumm zu schalten.", + "Cancel" : "Abbrechen", + "Import" : "Importieren", + "Error while saving settings" : "Fehler beim Speichern der Einstellungen", + "Contact reset successfully" : "Kontakt zurückgesetzt", + "Error while resetting contact" : "Fehler beim Zurücksetzen des Kontakts", + "Contact imported successfully" : "Kontakt importiert", + "Error while importing contact" : "Fehler beim Import des Kontakts", + "Import contact" : "Kontakt importieren", + "Reset to default" : "Auf Standard zurücksetzen ", + "Import contacts" : "Kontakte importieren", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Durch das Importieren einer neuen VCF-Datei wird der vorhandene Standardkontakt gelöscht und durch den neuen ersetzt. Fortsetzen?", + "Failed to save example event creation setting" : "Einstellung für die Beispiels-Ereigniserstellung konnte nicht gespeichert werden", + "Failed to upload the example event" : "Das Beispielsereignis konnte nicht hochgeladen werden", + "Custom example event was saved successfully" : "Benutzerdefiniertes Beispielereignis gespeichert", + "Failed to delete the custom example event" : "Benutzerdefiniertes Beispielsereignis konnte nicht gelöscht werden", + "Custom example event was deleted successfully" : "Benutzerdefiniertes Beispielsereignis wurde gelöscht", + "Import calendar event" : "Kalenderereignis importieren", + "Uploading a new event will overwrite the existing one." : "Das Hochladen eines neuen Ereignisses wird das bestehende Ereignis überschreiben.", + "Upload event" : "Ereignis hochladen", "Availability" : "Verfügbarkeit", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Wenn du deine Arbeitszeiten angibst, können andere beim Buchen einer Besprechung sehen, wann du nicht im Büro bist.", "Absence" : "Abwesenheit", @@ -306,19 +325,8 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Erinnerungsbenachrichtigungen auch an die freigegebenen Kalender senden", "Reminders are always sent to organizers and attendees." : "Erinnerungen werden immer an Organisatoren und Teilnehmer gesendet.", "Enable notifications for events via push" : "Benachrichtigungen für Termine per Push aktivieren", - "Cancel" : "Abbrechen", - "Import" : "Importieren", - "Error while saving settings" : "Fehler beim Speichern der Einstellungen", - "Contact reset successfully" : "Kontakt zurückgesetzt", - "Error while resetting contact" : "Fehler beim Zurücksetzen des Kontakts", - "Contact imported successfully" : "Kontakt importiert", - "Error while importing contact" : "Fehler beim Import des Kontakts", - "Example Content" : "Beispielinhalt", - "Set example content to be created on new user first login." : "Beispielinhalte festlegen, die bei der ersten Anmeldung eines neuen Benutzers erstellt werden sollen.", - "Import contact" : "Kontakt importieren", - "Reset to default contact" : "Standardkontakt zurücksetzen", - "Import contacts" : "Kontakte importieren", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Durch das Importieren einer neuen VCF-Datei wird der vorhandene Standardkontakt gelöscht und durch den neuen ersetzt. Fortsetzen?", + "Example content" : "Beispielsinhalt", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Beispielinhalte dienen dazu, die Funktionen von Nextcloud vorzustellen. Standardinhalte werden mit Nextcloud ausgeliefert und können durch benutzerdefinierte Inhalte ersetzt werden.", "There was an error updating your attendance status." : "Es ist ein Fehler beim Aktualisieren deines Teilnehmerstatus aufgetreten.", "Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.", "Are you accepting the invitation?" : "Die Einladung annehmen?", diff --git a/apps/dav/l10n/de.json b/apps/dav/l10n/de.json index 32a5497bb4e..c152c3aa8cc 100644 --- a/apps/dav/l10n/de.json +++ b/apps/dav/l10n/de.json @@ -288,6 +288,25 @@ "Pick a start time for {dayName}" : "Eine Startzeit für {dayName} wählen", "Pick a end time for {dayName}" : "Eine Endezeit für {dayName} wählen", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Setze den Benutzerstatus außerhalb deiner Verfügbarkeit automatisch auf \"Nicht stören\", um alle Benachrichtigungen stumm zu schalten.", + "Cancel" : "Abbrechen", + "Import" : "Importieren", + "Error while saving settings" : "Fehler beim Speichern der Einstellungen", + "Contact reset successfully" : "Kontakt zurückgesetzt", + "Error while resetting contact" : "Fehler beim Zurücksetzen des Kontakts", + "Contact imported successfully" : "Kontakt importiert", + "Error while importing contact" : "Fehler beim Import des Kontakts", + "Import contact" : "Kontakt importieren", + "Reset to default" : "Auf Standard zurücksetzen ", + "Import contacts" : "Kontakte importieren", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Durch das Importieren einer neuen VCF-Datei wird der vorhandene Standardkontakt gelöscht und durch den neuen ersetzt. Fortsetzen?", + "Failed to save example event creation setting" : "Einstellung für die Beispiels-Ereigniserstellung konnte nicht gespeichert werden", + "Failed to upload the example event" : "Das Beispielsereignis konnte nicht hochgeladen werden", + "Custom example event was saved successfully" : "Benutzerdefiniertes Beispielereignis gespeichert", + "Failed to delete the custom example event" : "Benutzerdefiniertes Beispielsereignis konnte nicht gelöscht werden", + "Custom example event was deleted successfully" : "Benutzerdefiniertes Beispielsereignis wurde gelöscht", + "Import calendar event" : "Kalenderereignis importieren", + "Uploading a new event will overwrite the existing one." : "Das Hochladen eines neuen Ereignisses wird das bestehende Ereignis überschreiben.", + "Upload event" : "Ereignis hochladen", "Availability" : "Verfügbarkeit", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Wenn du deine Arbeitszeiten angibst, können andere beim Buchen einer Besprechung sehen, wann du nicht im Büro bist.", "Absence" : "Abwesenheit", @@ -304,19 +323,8 @@ "Send reminder notifications to calendar sharees as well" : "Erinnerungsbenachrichtigungen auch an die freigegebenen Kalender senden", "Reminders are always sent to organizers and attendees." : "Erinnerungen werden immer an Organisatoren und Teilnehmer gesendet.", "Enable notifications for events via push" : "Benachrichtigungen für Termine per Push aktivieren", - "Cancel" : "Abbrechen", - "Import" : "Importieren", - "Error while saving settings" : "Fehler beim Speichern der Einstellungen", - "Contact reset successfully" : "Kontakt zurückgesetzt", - "Error while resetting contact" : "Fehler beim Zurücksetzen des Kontakts", - "Contact imported successfully" : "Kontakt importiert", - "Error while importing contact" : "Fehler beim Import des Kontakts", - "Example Content" : "Beispielinhalt", - "Set example content to be created on new user first login." : "Beispielinhalte festlegen, die bei der ersten Anmeldung eines neuen Benutzers erstellt werden sollen.", - "Import contact" : "Kontakt importieren", - "Reset to default contact" : "Standardkontakt zurücksetzen", - "Import contacts" : "Kontakte importieren", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Durch das Importieren einer neuen VCF-Datei wird der vorhandene Standardkontakt gelöscht und durch den neuen ersetzt. Fortsetzen?", + "Example content" : "Beispielsinhalt", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Beispielinhalte dienen dazu, die Funktionen von Nextcloud vorzustellen. Standardinhalte werden mit Nextcloud ausgeliefert und können durch benutzerdefinierte Inhalte ersetzt werden.", "There was an error updating your attendance status." : "Es ist ein Fehler beim Aktualisieren deines Teilnehmerstatus aufgetreten.", "Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.", "Are you accepting the invitation?" : "Die Einladung annehmen?", diff --git a/apps/dav/l10n/de_DE.js b/apps/dav/l10n/de_DE.js index ce9c993e027..efdf32b9c34 100644 --- a/apps/dav/l10n/de_DE.js +++ b/apps/dav/l10n/de_DE.js @@ -290,6 +290,25 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Eine Startzeit für {dayName} wählen", "Pick a end time for {dayName}" : "Eine Endezeit für {dayName} wählen", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Setzen Sie den Benutzerstatus außerhalb Ihrer Verfügbarkeit automatisch auf \"Nicht stören\", um alle Benachrichtigungen stumm zu schalten.", + "Cancel" : "Abbrechen", + "Import" : "Importieren", + "Error while saving settings" : "Fehler beim Speichern der Einstellungen", + "Contact reset successfully" : "Kontakt zurückgesetzt", + "Error while resetting contact" : "Fehler beim Zurücksetzen des Kontakts", + "Contact imported successfully" : "Kontakt importiert", + "Error while importing contact" : "Fehler beim Import des Kontakts", + "Import contact" : "Kontakt importieren", + "Reset to default" : "Auf Standard zurücksetzen ", + "Import contacts" : "Kontakte importieren", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Durch das Importieren einer neuen VCF-Datei wird der vorhandene Standardkontakt gelöscht und durch den neuen ersetzt. Fortsetzen?", + "Failed to save example event creation setting" : "Einstellung für die Beispiels-Terminerstellung konnte nicht gespeichert werden", + "Failed to upload the example event" : "Der Beispieltermin konnte nicht hochgeladen werden", + "Custom example event was saved successfully" : "Benutzerdefinierter Beispieltermin gespeichert", + "Failed to delete the custom example event" : "Benutzerdefinierter Beispieltermin konnte nicht gelöscht werden", + "Custom example event was deleted successfully" : "Benutzerdefinierter Beispieltermin wurde gelöscht", + "Import calendar event" : "Kalendertermin importieren", + "Uploading a new event will overwrite the existing one." : "Das Hochladen eines neuen Termins wird den bestehenden Termin überschreiben.", + "Upload event" : "Termin hochladen", "Availability" : "Verfügbarkeit", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Wenn Sie Ihre Arbeitszeiten angeben, können andere beim Buchen einer Besprechung sehen, wann Sie nicht im Büro sind.", "Absence" : "Abwesenheit", @@ -306,19 +325,8 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Erinnerungsbenachrichtigungen auch an die Kalenderfreigaben senden", "Reminders are always sent to organizers and attendees." : "Erinnerungen werden immer an Organisatoren und Teilnehmer gesendet.", "Enable notifications for events via push" : "Benachrichtigungen für Termine per Push aktivieren", - "Cancel" : "Abbrechen", - "Import" : "Importieren", - "Error while saving settings" : "Fehler beim Speichern der Einstellungen", - "Contact reset successfully" : "Kontakt zurückgesetzt", - "Error while resetting contact" : "Fehler beim Zurücksetzen des Kontakts", - "Contact imported successfully" : "Kontakt importiert", - "Error while importing contact" : "Fehler beim Import des Kontakts", - "Example Content" : "Beispielinhalt", - "Set example content to be created on new user first login." : "Beispielinhalte festlegen, die bei der ersten Anmeldung eines neuen Benutzers erstellt werden sollen.", - "Import contact" : "Kontakt importieren", - "Reset to default contact" : "Standardkontakt zurücksetzen", - "Import contacts" : "Kontakte importieren", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Durch das Importieren einer neuen VCF-Datei wird der vorhandene Standardkontakt gelöscht und durch den neuen ersetzt. Fortsetzen?", + "Example content" : "Beispielsinhalt", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Beispielinhalte dienen dazu, die Funktionen von Nextcloud vorzustellen. Standardinhalte werden mit Nextcloud ausgeliefert und können durch benutzerdefinierte Inhalte ersetzt werden.", "There was an error updating your attendance status." : "Es ist ein Fehler beim Aktualisieren Ihres Teilnehmerstatus aufgetreten.", "Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.", "Are you accepting the invitation?" : "Die Einladung annehmen?", diff --git a/apps/dav/l10n/de_DE.json b/apps/dav/l10n/de_DE.json index 0e903fe8c06..7170849d1a9 100644 --- a/apps/dav/l10n/de_DE.json +++ b/apps/dav/l10n/de_DE.json @@ -288,6 +288,25 @@ "Pick a start time for {dayName}" : "Eine Startzeit für {dayName} wählen", "Pick a end time for {dayName}" : "Eine Endezeit für {dayName} wählen", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Setzen Sie den Benutzerstatus außerhalb Ihrer Verfügbarkeit automatisch auf \"Nicht stören\", um alle Benachrichtigungen stumm zu schalten.", + "Cancel" : "Abbrechen", + "Import" : "Importieren", + "Error while saving settings" : "Fehler beim Speichern der Einstellungen", + "Contact reset successfully" : "Kontakt zurückgesetzt", + "Error while resetting contact" : "Fehler beim Zurücksetzen des Kontakts", + "Contact imported successfully" : "Kontakt importiert", + "Error while importing contact" : "Fehler beim Import des Kontakts", + "Import contact" : "Kontakt importieren", + "Reset to default" : "Auf Standard zurücksetzen ", + "Import contacts" : "Kontakte importieren", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Durch das Importieren einer neuen VCF-Datei wird der vorhandene Standardkontakt gelöscht und durch den neuen ersetzt. Fortsetzen?", + "Failed to save example event creation setting" : "Einstellung für die Beispiels-Terminerstellung konnte nicht gespeichert werden", + "Failed to upload the example event" : "Der Beispieltermin konnte nicht hochgeladen werden", + "Custom example event was saved successfully" : "Benutzerdefinierter Beispieltermin gespeichert", + "Failed to delete the custom example event" : "Benutzerdefinierter Beispieltermin konnte nicht gelöscht werden", + "Custom example event was deleted successfully" : "Benutzerdefinierter Beispieltermin wurde gelöscht", + "Import calendar event" : "Kalendertermin importieren", + "Uploading a new event will overwrite the existing one." : "Das Hochladen eines neuen Termins wird den bestehenden Termin überschreiben.", + "Upload event" : "Termin hochladen", "Availability" : "Verfügbarkeit", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Wenn Sie Ihre Arbeitszeiten angeben, können andere beim Buchen einer Besprechung sehen, wann Sie nicht im Büro sind.", "Absence" : "Abwesenheit", @@ -304,19 +323,8 @@ "Send reminder notifications to calendar sharees as well" : "Erinnerungsbenachrichtigungen auch an die Kalenderfreigaben senden", "Reminders are always sent to organizers and attendees." : "Erinnerungen werden immer an Organisatoren und Teilnehmer gesendet.", "Enable notifications for events via push" : "Benachrichtigungen für Termine per Push aktivieren", - "Cancel" : "Abbrechen", - "Import" : "Importieren", - "Error while saving settings" : "Fehler beim Speichern der Einstellungen", - "Contact reset successfully" : "Kontakt zurückgesetzt", - "Error while resetting contact" : "Fehler beim Zurücksetzen des Kontakts", - "Contact imported successfully" : "Kontakt importiert", - "Error while importing contact" : "Fehler beim Import des Kontakts", - "Example Content" : "Beispielinhalt", - "Set example content to be created on new user first login." : "Beispielinhalte festlegen, die bei der ersten Anmeldung eines neuen Benutzers erstellt werden sollen.", - "Import contact" : "Kontakt importieren", - "Reset to default contact" : "Standardkontakt zurücksetzen", - "Import contacts" : "Kontakte importieren", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Durch das Importieren einer neuen VCF-Datei wird der vorhandene Standardkontakt gelöscht und durch den neuen ersetzt. Fortsetzen?", + "Example content" : "Beispielsinhalt", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Beispielinhalte dienen dazu, die Funktionen von Nextcloud vorzustellen. Standardinhalte werden mit Nextcloud ausgeliefert und können durch benutzerdefinierte Inhalte ersetzt werden.", "There was an error updating your attendance status." : "Es ist ein Fehler beim Aktualisieren Ihres Teilnehmerstatus aufgetreten.", "Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.", "Are you accepting the invitation?" : "Die Einladung annehmen?", diff --git a/apps/dav/l10n/en_GB.js b/apps/dav/l10n/en_GB.js index f0f1d2e41c0..d8b77218a68 100644 --- a/apps/dav/l10n/en_GB.js +++ b/apps/dav/l10n/en_GB.js @@ -290,6 +290,17 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Pick a start time for {dayName}", "Pick a end time for {dayName}" : "Pick a end time for {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications.", + "Cancel" : "Cancel", + "Import" : "Import", + "Error while saving settings" : "Error while saving settings", + "Contact reset successfully" : "Contact reset successfully", + "Error while resetting contact" : "Error while resetting contact", + "Contact imported successfully" : "Contact imported successfully", + "Error while importing contact" : "Error while importing contact", + "Import contact" : "Import contact", + "Reset to default" : "Reset to default", + "Import contacts" : "Import contacts", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?", "Availability" : "Availability", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "If you configure your working hours, other people will see when you are out of office when they book a meeting.", "Absence" : "Absence", @@ -306,19 +317,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Send reminder notifications to calendar sharees as well", "Reminders are always sent to organizers and attendees." : "Reminders are always sent to organisers and attendees.", "Enable notifications for events via push" : "Enable notifications for events via push", - "Cancel" : "Cancel", - "Import" : "Import", - "Error while saving settings" : "Error while saving settings", - "Contact reset successfully" : "Contact reset successfully", - "Error while resetting contact" : "Error while resetting contact", - "Contact imported successfully" : "Contact imported successfully", - "Error while importing contact" : "Error while importing contact", - "Example Content" : "Example Content", - "Set example content to be created on new user first login." : "Set example content to be created on new user first login.", - "Import contact" : "Import contact", - "Reset to default contact" : "Reset to default contact", - "Import contacts" : "Import contacts", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?", "There was an error updating your attendance status." : "There was an error updating your attendance status.", "Please contact the organizer directly." : "Please contact the organiser directly.", "Are you accepting the invitation?" : "Are you accepting the invitation?", diff --git a/apps/dav/l10n/en_GB.json b/apps/dav/l10n/en_GB.json index 3be2ffda8f6..10e37cc1bf9 100644 --- a/apps/dav/l10n/en_GB.json +++ b/apps/dav/l10n/en_GB.json @@ -288,6 +288,17 @@ "Pick a start time for {dayName}" : "Pick a start time for {dayName}", "Pick a end time for {dayName}" : "Pick a end time for {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications.", + "Cancel" : "Cancel", + "Import" : "Import", + "Error while saving settings" : "Error while saving settings", + "Contact reset successfully" : "Contact reset successfully", + "Error while resetting contact" : "Error while resetting contact", + "Contact imported successfully" : "Contact imported successfully", + "Error while importing contact" : "Error while importing contact", + "Import contact" : "Import contact", + "Reset to default" : "Reset to default", + "Import contacts" : "Import contacts", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?", "Availability" : "Availability", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "If you configure your working hours, other people will see when you are out of office when they book a meeting.", "Absence" : "Absence", @@ -304,19 +315,6 @@ "Send reminder notifications to calendar sharees as well" : "Send reminder notifications to calendar sharees as well", "Reminders are always sent to organizers and attendees." : "Reminders are always sent to organisers and attendees.", "Enable notifications for events via push" : "Enable notifications for events via push", - "Cancel" : "Cancel", - "Import" : "Import", - "Error while saving settings" : "Error while saving settings", - "Contact reset successfully" : "Contact reset successfully", - "Error while resetting contact" : "Error while resetting contact", - "Contact imported successfully" : "Contact imported successfully", - "Error while importing contact" : "Error while importing contact", - "Example Content" : "Example Content", - "Set example content to be created on new user first login." : "Set example content to be created on new user first login.", - "Import contact" : "Import contact", - "Reset to default contact" : "Reset to default contact", - "Import contacts" : "Import contacts", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?", "There was an error updating your attendance status." : "There was an error updating your attendance status.", "Please contact the organizer directly." : "Please contact the organiser directly.", "Are you accepting the invitation?" : "Are you accepting the invitation?", diff --git a/apps/dav/l10n/es.js b/apps/dav/l10n/es.js index 9cd488e0d85..22365efe29b 100644 --- a/apps/dav/l10n/es.js +++ b/apps/dav/l10n/es.js @@ -285,6 +285,10 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Elija una hora de inicio para {dayName}", "Pick a end time for {dayName}" : "Elija una hora fin para {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Cambiar automáticamente el estado del usuario a \"No molestar\" cuando no esté disponible para silenciar todas las notificaciones.", + "Cancel" : "Cancelar", + "Import" : "Importar", + "Error while saving settings" : "Error al guardar los ajustes", + "Reset to default" : "Reestablecer a predeterminado", "Availability" : "Disponibilidad", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configura sus horas laborales, otras personas verán cuando está fuera de la oficina cuando agenden una reunión.", "Absence" : "Ausencia", @@ -301,9 +305,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Enviar recordatorio también a los usuarios con los que se comparte el calendario", "Reminders are always sent to organizers and attendees." : "Los recordatorios siempre se envían a los organizadores y asistentes.", "Enable notifications for events via push" : "Activar notificaciones push para eventos", - "Cancel" : "Cancelar", - "Import" : "Importar", - "Error while saving settings" : "Error al guardar los ajustes", "There was an error updating your attendance status." : "Ha habido un error al actualizar tu estado de asistencia.", "Please contact the organizer directly." : "Por favor, contacta directamente con el organizador.", "Are you accepting the invitation?" : "¿Aceptas la invitación?", diff --git a/apps/dav/l10n/es.json b/apps/dav/l10n/es.json index 7a619583b51..bed92b5fd76 100644 --- a/apps/dav/l10n/es.json +++ b/apps/dav/l10n/es.json @@ -283,6 +283,10 @@ "Pick a start time for {dayName}" : "Elija una hora de inicio para {dayName}", "Pick a end time for {dayName}" : "Elija una hora fin para {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Cambiar automáticamente el estado del usuario a \"No molestar\" cuando no esté disponible para silenciar todas las notificaciones.", + "Cancel" : "Cancelar", + "Import" : "Importar", + "Error while saving settings" : "Error al guardar los ajustes", + "Reset to default" : "Reestablecer a predeterminado", "Availability" : "Disponibilidad", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configura sus horas laborales, otras personas verán cuando está fuera de la oficina cuando agenden una reunión.", "Absence" : "Ausencia", @@ -299,9 +303,6 @@ "Send reminder notifications to calendar sharees as well" : "Enviar recordatorio también a los usuarios con los que se comparte el calendario", "Reminders are always sent to organizers and attendees." : "Los recordatorios siempre se envían a los organizadores y asistentes.", "Enable notifications for events via push" : "Activar notificaciones push para eventos", - "Cancel" : "Cancelar", - "Import" : "Importar", - "Error while saving settings" : "Error al guardar los ajustes", "There was an error updating your attendance status." : "Ha habido un error al actualizar tu estado de asistencia.", "Please contact the organizer directly." : "Por favor, contacta directamente con el organizador.", "Are you accepting the invitation?" : "¿Aceptas la invitación?", diff --git a/apps/dav/l10n/es_EC.js b/apps/dav/l10n/es_EC.js index 0410fa088e8..bc36002e1e8 100644 --- a/apps/dav/l10n/es_EC.js +++ b/apps/dav/l10n/es_EC.js @@ -182,6 +182,10 @@ OC.L10N.register( "No working hours set" : "No se han establecido horas de trabajo", "Add slot" : "Agregar ranura", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Configurar automáticamente el estado del usuario como \"No molestar\" fuera de la disponibilidad para silenciar todas las notificaciones.", + "Cancel" : "Cancelar", + "Import" : "Importar", + "Error while saving settings" : "Error al guardar la configuración.", + "Reset to default" : "Restablecer al predeterminado", "Availability" : "Disponibilidad", "Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "También instala la {calendarappstoreopen}aplicación Calendario{linkclose}, o {calendardocopen}conecta tu escritorio y móvil para sincronizar ↗{linkclose}.", "Please make sure to properly set up {emailopen}the email server{linkclose}." : "Asegúrate de configurar correctamente {emailopen}el servidor de correo electrónico{linkclose}.", @@ -195,9 +199,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Enviar recordatorios a los asistentes del calendario también", "Reminders are always sent to organizers and attendees." : "Los recordatorios siempre se envían a los organizadores y asistentes.", "Enable notifications for events via push" : "Habilitar notificaciones para eventos mediante push", - "Cancel" : "Cancelar", - "Import" : "Importar", - "Error while saving settings" : "Error al guardar la configuración.", "There was an error updating your attendance status." : "Hubo un error al actualizar tu estado de asistencia.", "Please contact the organizer directly." : "Por favor, contacta directamente al organizador.", "Are you accepting the invitation?" : "¿Aceptas la invitación?", diff --git a/apps/dav/l10n/es_EC.json b/apps/dav/l10n/es_EC.json index 8f788ebe635..5e04a22c11b 100644 --- a/apps/dav/l10n/es_EC.json +++ b/apps/dav/l10n/es_EC.json @@ -180,6 +180,10 @@ "No working hours set" : "No se han establecido horas de trabajo", "Add slot" : "Agregar ranura", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Configurar automáticamente el estado del usuario como \"No molestar\" fuera de la disponibilidad para silenciar todas las notificaciones.", + "Cancel" : "Cancelar", + "Import" : "Importar", + "Error while saving settings" : "Error al guardar la configuración.", + "Reset to default" : "Restablecer al predeterminado", "Availability" : "Disponibilidad", "Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "También instala la {calendarappstoreopen}aplicación Calendario{linkclose}, o {calendardocopen}conecta tu escritorio y móvil para sincronizar ↗{linkclose}.", "Please make sure to properly set up {emailopen}the email server{linkclose}." : "Asegúrate de configurar correctamente {emailopen}el servidor de correo electrónico{linkclose}.", @@ -193,9 +197,6 @@ "Send reminder notifications to calendar sharees as well" : "Enviar recordatorios a los asistentes del calendario también", "Reminders are always sent to organizers and attendees." : "Los recordatorios siempre se envían a los organizadores y asistentes.", "Enable notifications for events via push" : "Habilitar notificaciones para eventos mediante push", - "Cancel" : "Cancelar", - "Import" : "Importar", - "Error while saving settings" : "Error al guardar la configuración.", "There was an error updating your attendance status." : "Hubo un error al actualizar tu estado de asistencia.", "Please contact the organizer directly." : "Por favor, contacta directamente al organizador.", "Are you accepting the invitation?" : "¿Aceptas la invitación?", diff --git a/apps/dav/l10n/es_MX.js b/apps/dav/l10n/es_MX.js index 49173be4447..4c58640df1a 100644 --- a/apps/dav/l10n/es_MX.js +++ b/apps/dav/l10n/es_MX.js @@ -220,6 +220,10 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Elija una hora de inicio para {dayName}", "Pick a end time for {dayName}" : "Elija una hora fin para {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Establecer automáticamente el estado de usuario como \"No molestar\" fuera de la disponibilidad para silenciar todas las notificaciones.", + "Cancel" : "Cancelar", + "Import" : "Importar", + "Error while saving settings" : "Error al guardar la configuración", + "Reset to default" : "Restablecer al predeterminado", "Availability" : "Disponibilidad", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configura sus horas laborales, otras personas verán cuándo está fuera de la oficina cuando agenden una reunión.", "Absence" : "Ausencia", @@ -236,9 +240,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Enviar recordatorio también a los usuarios con los que se comparte el calendario", "Reminders are always sent to organizers and attendees." : "Los recordatorios se envían siempre a los organizadores y asistentes.", "Enable notifications for events via push" : "Habilitar notificaciones para eventos mediante push", - "Cancel" : "Cancelar", - "Import" : "Importar", - "Error while saving settings" : "Error al guardar la configuración", "There was an error updating your attendance status." : "Ocurrió un error al actualizar su estado de asistencia.", "Please contact the organizer directly." : "Por favor, contacte al organizador directamente.", "Are you accepting the invitation?" : "¿Acepta la invitación?", diff --git a/apps/dav/l10n/es_MX.json b/apps/dav/l10n/es_MX.json index 3286179ba78..646747cfc68 100644 --- a/apps/dav/l10n/es_MX.json +++ b/apps/dav/l10n/es_MX.json @@ -218,6 +218,10 @@ "Pick a start time for {dayName}" : "Elija una hora de inicio para {dayName}", "Pick a end time for {dayName}" : "Elija una hora fin para {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Establecer automáticamente el estado de usuario como \"No molestar\" fuera de la disponibilidad para silenciar todas las notificaciones.", + "Cancel" : "Cancelar", + "Import" : "Importar", + "Error while saving settings" : "Error al guardar la configuración", + "Reset to default" : "Restablecer al predeterminado", "Availability" : "Disponibilidad", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configura sus horas laborales, otras personas verán cuándo está fuera de la oficina cuando agenden una reunión.", "Absence" : "Ausencia", @@ -234,9 +238,6 @@ "Send reminder notifications to calendar sharees as well" : "Enviar recordatorio también a los usuarios con los que se comparte el calendario", "Reminders are always sent to organizers and attendees." : "Los recordatorios se envían siempre a los organizadores y asistentes.", "Enable notifications for events via push" : "Habilitar notificaciones para eventos mediante push", - "Cancel" : "Cancelar", - "Import" : "Importar", - "Error while saving settings" : "Error al guardar la configuración", "There was an error updating your attendance status." : "Ocurrió un error al actualizar su estado de asistencia.", "Please contact the organizer directly." : "Por favor, contacte al organizador directamente.", "Are you accepting the invitation?" : "¿Acepta la invitación?", diff --git a/apps/dav/l10n/et_EE.js b/apps/dav/l10n/et_EE.js index 25cf3b104a1..2e915b6927b 100644 --- a/apps/dav/l10n/et_EE.js +++ b/apps/dav/l10n/et_EE.js @@ -290,6 +290,17 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Vali algusaeg: {dayName}", "Pick a end time for {dayName}" : "Vali lõpuaeg: {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Kõikide teavituste summutamiseks määra automaatselt kasutajale olek „Ära sega“ nendele aegadele, kus ta vaba ei ole.", + "Cancel" : "Tühista", + "Import" : "Impordi", + "Error while saving settings" : "Viga seadistuste salvestamisel", + "Contact reset successfully" : "Kontakti lähtestamine õnnestus", + "Error while resetting contact" : "Viga kontakti lähtestamisel", + "Contact imported successfully" : "Kontakti importimine õnnestus", + "Error while importing contact" : "Viga kontakti importimisel", + "Import contact" : "Impordi kontakt", + "Reset to default" : "Taasta vaikeseadistused", + "Import contacts" : "Impordi kontaktid", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Uue .vcf faili importimisel olemasolev vaikimisi kontakt kustutatakse ja asendatakse uuega. Kas sa soovid jätkata?", "Availability" : "Saadavus", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Kui seadistad oma tööajad, siis teised saavad kohtumise broneerimisel arvestada sellega, millal sind kohal pole.", "Absence" : "Äraolek", @@ -306,19 +317,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Saada meeldetuletused ka neile, kes ürituse on lisanud oma kalendrisse", "Reminders are always sent to organizers and attendees." : "Meeldetuletused on alati saadetud korraldajatele ja osalejatele.", "Enable notifications for events via push" : "Võta kasutusele tõuketeenustepõhised teavitused", - "Cancel" : "Tühista", - "Import" : "Impordi", - "Error while saving settings" : "Viga seadistuste salvestamisel", - "Contact reset successfully" : "Kontakti lähtestamine õnnestus", - "Error while resetting contact" : "Viga kontakti lähtestamisel", - "Contact imported successfully" : "Kontakti importimine õnnestus", - "Error while importing contact" : "Viga kontakti importimisel", - "Example Content" : "Sisunäidis", - "Set example content to be created on new user first login." : "Kirjelda näidissisu, mis uue kasutaja esimesel sisselogimisel luuakse.", - "Import contact" : "Impordi kontakt", - "Reset to default contact" : "Lähtesta vaikimisi kontakstiks", - "Import contacts" : "Impordi kontaktid", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Uue .vcf faili importimisel olemasolev vaikimisi kontakt kustutatakse ja asendatakse uuega. Kas sa soovid jätkata?", "There was an error updating your attendance status." : "Sinu osalemise oleku muutmisel tekkis viga.", "Please contact the organizer directly." : "Palun võta ühendust korraldajaga otse.", "Are you accepting the invitation?" : "Kas sa nõustud kutsega?", diff --git a/apps/dav/l10n/et_EE.json b/apps/dav/l10n/et_EE.json index 72a36787328..c01dc468808 100644 --- a/apps/dav/l10n/et_EE.json +++ b/apps/dav/l10n/et_EE.json @@ -288,6 +288,17 @@ "Pick a start time for {dayName}" : "Vali algusaeg: {dayName}", "Pick a end time for {dayName}" : "Vali lõpuaeg: {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Kõikide teavituste summutamiseks määra automaatselt kasutajale olek „Ära sega“ nendele aegadele, kus ta vaba ei ole.", + "Cancel" : "Tühista", + "Import" : "Impordi", + "Error while saving settings" : "Viga seadistuste salvestamisel", + "Contact reset successfully" : "Kontakti lähtestamine õnnestus", + "Error while resetting contact" : "Viga kontakti lähtestamisel", + "Contact imported successfully" : "Kontakti importimine õnnestus", + "Error while importing contact" : "Viga kontakti importimisel", + "Import contact" : "Impordi kontakt", + "Reset to default" : "Taasta vaikeseadistused", + "Import contacts" : "Impordi kontaktid", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Uue .vcf faili importimisel olemasolev vaikimisi kontakt kustutatakse ja asendatakse uuega. Kas sa soovid jätkata?", "Availability" : "Saadavus", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Kui seadistad oma tööajad, siis teised saavad kohtumise broneerimisel arvestada sellega, millal sind kohal pole.", "Absence" : "Äraolek", @@ -304,19 +315,6 @@ "Send reminder notifications to calendar sharees as well" : "Saada meeldetuletused ka neile, kes ürituse on lisanud oma kalendrisse", "Reminders are always sent to organizers and attendees." : "Meeldetuletused on alati saadetud korraldajatele ja osalejatele.", "Enable notifications for events via push" : "Võta kasutusele tõuketeenustepõhised teavitused", - "Cancel" : "Tühista", - "Import" : "Impordi", - "Error while saving settings" : "Viga seadistuste salvestamisel", - "Contact reset successfully" : "Kontakti lähtestamine õnnestus", - "Error while resetting contact" : "Viga kontakti lähtestamisel", - "Contact imported successfully" : "Kontakti importimine õnnestus", - "Error while importing contact" : "Viga kontakti importimisel", - "Example Content" : "Sisunäidis", - "Set example content to be created on new user first login." : "Kirjelda näidissisu, mis uue kasutaja esimesel sisselogimisel luuakse.", - "Import contact" : "Impordi kontakt", - "Reset to default contact" : "Lähtesta vaikimisi kontakstiks", - "Import contacts" : "Impordi kontaktid", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Uue .vcf faili importimisel olemasolev vaikimisi kontakt kustutatakse ja asendatakse uuega. Kas sa soovid jätkata?", "There was an error updating your attendance status." : "Sinu osalemise oleku muutmisel tekkis viga.", "Please contact the organizer directly." : "Palun võta ühendust korraldajaga otse.", "Are you accepting the invitation?" : "Kas sa nõustud kutsega?", diff --git a/apps/dav/l10n/eu.js b/apps/dav/l10n/eu.js index a40af9f6829..4deb8172bed 100644 --- a/apps/dav/l10n/eu.js +++ b/apps/dav/l10n/eu.js @@ -285,6 +285,10 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Hautatu hasiera ordu bat {dayName}(e)rako", "Pick a end time for {dayName}" : "Hautatu bukaera ordu bat {dayName}(e)rako", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Eskuragarri ez egotean, ezarri automatikoki erabiltzailearen egoera \"Ez molestatu\" moduan jakinarazpen guztiak isilarazteko.", + "Cancel" : "Utzi", + "Import" : "Inportatu", + "Error while saving settings" : "Errorea ezarpenak gordetzean", + "Reset to default" : "Berezarri balio lehenetsira", "Availability" : "Eskuragarritasuna", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Zure lan orduak konfiguratzen badituzu, beste pertsonek bulegotik kanpo zaudela ikusiko dute bilera bat erreserbatzen dutenean.", "Absence" : "Absentzia", @@ -301,9 +305,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Bidali gogorarazpen jakinarazpenak egutegi partekatzea dutenei ere", "Reminders are always sent to organizers and attendees." : "Gogorarazpenak beti bidaltzen zaizkie antolatzaileei eta parte-hartzaileei.", "Enable notifications for events via push" : "Gaitu push bidezko jakinarazpenak gertaerentzat", - "Cancel" : "Utzi", - "Import" : "Inportatu", - "Error while saving settings" : "Errorea ezarpenak gordetzean", "There was an error updating your attendance status." : "Errore bat gertatu da zure parte-hartze egoera eguneratzerakoan.", "Please contact the organizer directly." : "Mesedez jarri harremanetan antolatzailearekin zuzenean.", "Are you accepting the invitation?" : "Gonbidapena onartzen duzu?", diff --git a/apps/dav/l10n/eu.json b/apps/dav/l10n/eu.json index 82648828ae8..ac11ede49c3 100644 --- a/apps/dav/l10n/eu.json +++ b/apps/dav/l10n/eu.json @@ -283,6 +283,10 @@ "Pick a start time for {dayName}" : "Hautatu hasiera ordu bat {dayName}(e)rako", "Pick a end time for {dayName}" : "Hautatu bukaera ordu bat {dayName}(e)rako", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Eskuragarri ez egotean, ezarri automatikoki erabiltzailearen egoera \"Ez molestatu\" moduan jakinarazpen guztiak isilarazteko.", + "Cancel" : "Utzi", + "Import" : "Inportatu", + "Error while saving settings" : "Errorea ezarpenak gordetzean", + "Reset to default" : "Berezarri balio lehenetsira", "Availability" : "Eskuragarritasuna", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Zure lan orduak konfiguratzen badituzu, beste pertsonek bulegotik kanpo zaudela ikusiko dute bilera bat erreserbatzen dutenean.", "Absence" : "Absentzia", @@ -299,9 +303,6 @@ "Send reminder notifications to calendar sharees as well" : "Bidali gogorarazpen jakinarazpenak egutegi partekatzea dutenei ere", "Reminders are always sent to organizers and attendees." : "Gogorarazpenak beti bidaltzen zaizkie antolatzaileei eta parte-hartzaileei.", "Enable notifications for events via push" : "Gaitu push bidezko jakinarazpenak gertaerentzat", - "Cancel" : "Utzi", - "Import" : "Inportatu", - "Error while saving settings" : "Errorea ezarpenak gordetzean", "There was an error updating your attendance status." : "Errore bat gertatu da zure parte-hartze egoera eguneratzerakoan.", "Please contact the organizer directly." : "Mesedez jarri harremanetan antolatzailearekin zuzenean.", "Are you accepting the invitation?" : "Gonbidapena onartzen duzu?", diff --git a/apps/dav/l10n/fa.js b/apps/dav/l10n/fa.js index 692e4fff45e..4ce74a149f2 100644 --- a/apps/dav/l10n/fa.js +++ b/apps/dav/l10n/fa.js @@ -290,6 +290,17 @@ OC.L10N.register( "Pick a start time for {dayName}" : "زمان شروع برای {dayName} را انتخاب کنید", "Pick a end time for {dayName}" : "زمان پایان برای {dayName} را انتخاب کنید", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "وضعیت کاربر بصورت خودکار به \"مزاحم نشوید\" تغییر داده شود تا همه ی اعلان ها خاموش شوند.", + "Cancel" : "لغو", + "Import" : "وارد کردن", + "Error while saving settings" : "خطا هنگام ذخیره تنظیمات", + "Contact reset successfully" : "مخاطب با موفقیت بازنشانی شد", + "Error while resetting contact" : "خطا هنگام بازنشانی مخاطب", + "Contact imported successfully" : "مخاطب با موفقیت وارد شد", + "Error while importing contact" : "خطا هنگام وارد کردن مخاطب", + "Import contact" : "وارد کردن مخاطب", + "Reset to default" : "بازنشانی به پیشگزیده", + "Import contacts" : "وارد کردن مخاطبین", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "وارد کردن یک فایل .vcf جدید، مخاطب پیشفرض موجود را حذف کرده و آن را با مخاطب جدید جایگزین میکند. آیا میخواهید ادامه دهید؟", "Availability" : "در دسترس بودن", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "اگر ساعات کاری خود را پیکربندی کنید، دیگران هنگام رزرو جلسه متوجه خواهند شد که شما در دفتر نیستید.", "Absence" : "غیبت", @@ -306,19 +317,6 @@ 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" : "فعال کردن اعلانها برای رویدادها از طریق پوش", - "Cancel" : "لغو", - "Import" : "وارد کردن", - "Error while saving settings" : "خطا هنگام ذخیره تنظیمات", - "Contact reset successfully" : "مخاطب با موفقیت بازنشانی شد", - "Error while resetting contact" : "خطا هنگام بازنشانی مخاطب", - "Contact imported successfully" : "مخاطب با موفقیت وارد شد", - "Error while importing contact" : "خطا هنگام وارد کردن مخاطب", - "Example Content" : "محتوای نمونه", - "Set example content to be created on new user first login." : "محتوای نمونه را برای ایجاد در اولین ورود کاربر جدید تنظیم کنید.", - "Import contact" : "وارد کردن مخاطب", - "Reset to default contact" : "بازنشانی به مخاطب پیشفرض", - "Import contacts" : "وارد کردن مخاطبین", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "وارد کردن یک فایل .vcf جدید، مخاطب پیشفرض موجود را حذف کرده و آن را با مخاطب جدید جایگزین میکند. آیا میخواهید ادامه دهید؟", "There was an error updating your attendance status." : "خطایی در بهروزرسانی وضعیت حضور شما رخ داد.", "Please contact the organizer directly." : "لطفاً مستقیماً با برگزارکننده تماس بگیرید.", "Are you accepting the invitation?" : "آیا دعوت را میپذیرید؟", diff --git a/apps/dav/l10n/fa.json b/apps/dav/l10n/fa.json index adb640cb47e..ca3b31c1f55 100644 --- a/apps/dav/l10n/fa.json +++ b/apps/dav/l10n/fa.json @@ -288,6 +288,17 @@ "Pick a start time for {dayName}" : "زمان شروع برای {dayName} را انتخاب کنید", "Pick a end time for {dayName}" : "زمان پایان برای {dayName} را انتخاب کنید", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "وضعیت کاربر بصورت خودکار به \"مزاحم نشوید\" تغییر داده شود تا همه ی اعلان ها خاموش شوند.", + "Cancel" : "لغو", + "Import" : "وارد کردن", + "Error while saving settings" : "خطا هنگام ذخیره تنظیمات", + "Contact reset successfully" : "مخاطب با موفقیت بازنشانی شد", + "Error while resetting contact" : "خطا هنگام بازنشانی مخاطب", + "Contact imported successfully" : "مخاطب با موفقیت وارد شد", + "Error while importing contact" : "خطا هنگام وارد کردن مخاطب", + "Import contact" : "وارد کردن مخاطب", + "Reset to default" : "بازنشانی به پیشگزیده", + "Import contacts" : "وارد کردن مخاطبین", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "وارد کردن یک فایل .vcf جدید، مخاطب پیشفرض موجود را حذف کرده و آن را با مخاطب جدید جایگزین میکند. آیا میخواهید ادامه دهید؟", "Availability" : "در دسترس بودن", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "اگر ساعات کاری خود را پیکربندی کنید، دیگران هنگام رزرو جلسه متوجه خواهند شد که شما در دفتر نیستید.", "Absence" : "غیبت", @@ -304,19 +315,6 @@ "Send reminder notifications to calendar sharees as well" : "ارسال اعلانهای یادآوری به اشتراکگذاران تقویم نیز", "Reminders are always sent to organizers and attendees." : "یادآوریها همیشه برای برگزارکنندگان و شرکتکنندگان ارسال میشوند.", "Enable notifications for events via push" : "فعال کردن اعلانها برای رویدادها از طریق پوش", - "Cancel" : "لغو", - "Import" : "وارد کردن", - "Error while saving settings" : "خطا هنگام ذخیره تنظیمات", - "Contact reset successfully" : "مخاطب با موفقیت بازنشانی شد", - "Error while resetting contact" : "خطا هنگام بازنشانی مخاطب", - "Contact imported successfully" : "مخاطب با موفقیت وارد شد", - "Error while importing contact" : "خطا هنگام وارد کردن مخاطب", - "Example Content" : "محتوای نمونه", - "Set example content to be created on new user first login." : "محتوای نمونه را برای ایجاد در اولین ورود کاربر جدید تنظیم کنید.", - "Import contact" : "وارد کردن مخاطب", - "Reset to default contact" : "بازنشانی به مخاطب پیشفرض", - "Import contacts" : "وارد کردن مخاطبین", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "وارد کردن یک فایل .vcf جدید، مخاطب پیشفرض موجود را حذف کرده و آن را با مخاطب جدید جایگزین میکند. آیا میخواهید ادامه دهید؟", "There was an error updating your attendance status." : "خطایی در بهروزرسانی وضعیت حضور شما رخ داد.", "Please contact the organizer directly." : "لطفاً مستقیماً با برگزارکننده تماس بگیرید.", "Are you accepting the invitation?" : "آیا دعوت را میپذیرید؟", diff --git a/apps/dav/l10n/fr.js b/apps/dav/l10n/fr.js index 7934aa2fd72..94949657119 100644 --- a/apps/dav/l10n/fr.js +++ b/apps/dav/l10n/fr.js @@ -264,6 +264,17 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Choisissez une heure de début pour {dayName}", "Pick a end time for {dayName}" : "Choisissez une heure de fin pour {dayName}", "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.", + "Cancel" : "Annuler", + "Import" : "Importation", + "Error while saving settings" : "Erreur lors de l'enregistrement des paramètres", + "Contact reset successfully" : "Contact réinitialisé avec succès", + "Error while resetting contact" : "Erreur lors de la remise à zéro du contact", + "Contact imported successfully" : "Contact importé avec succès", + "Error while importing contact" : "Erreur lors de l'importation du contact", + "Import contact" : "Importer un contact", + "Reset to default" : "Restaurer les valeurs par défaut", + "Import contacts" : "Importer des contacts", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importer un nouveau fichier .vcf supprimera le contact par défaut existant et le remplacera. Voulez-vous continuer ?", "Availability" : "Disponibilités", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si vous configurez vos heures de travail, les autres personnes verront si vous êtes disponible quand ils planifient une réunion.", "Absence" : "Absence", @@ -280,16 +291,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Envoyez également des notifications de rappel aux personnes partageant le calendrier", "Reminders are always sent to organizers and attendees." : "Des rappels sont toujours envoyés aux organisateurs et aux participants.", "Enable notifications for events via push" : "Activer les notifications push pour les évènements", - "Cancel" : "Annuler", - "Import" : "Importation", - "Error while saving settings" : "Erreur lors de l'enregistrement des paramètres", - "Contact reset successfully" : "Contact réinitialisé avec succès", - "Error while resetting contact" : "Erreur lors de la remise à zéro du contact", - "Contact imported successfully" : "Contact importé avec succès", - "Error while importing contact" : "Erreur lors de l'importation du contact", - "Import contact" : "Importer un contact", - "Import contacts" : "Importer des contacts", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importer un nouveau fichier .vcf supprimera le contact par défaut existant et le remplacera. Voulez-vous continuer ?", "There was an error updating your attendance status." : "Une erreur s'est produite lors de la mise à jour de votre statut de présence.", "Please contact the organizer directly." : "Merci de contacter l'organisateur directement.", "Are you accepting the invitation?" : "Acceptez-vous l'invitation ?", diff --git a/apps/dav/l10n/fr.json b/apps/dav/l10n/fr.json index 6180fc9b92a..f64d65ed786 100644 --- a/apps/dav/l10n/fr.json +++ b/apps/dav/l10n/fr.json @@ -262,6 +262,17 @@ "Pick a start time for {dayName}" : "Choisissez une heure de début pour {dayName}", "Pick a end time for {dayName}" : "Choisissez une heure de fin pour {dayName}", "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.", + "Cancel" : "Annuler", + "Import" : "Importation", + "Error while saving settings" : "Erreur lors de l'enregistrement des paramètres", + "Contact reset successfully" : "Contact réinitialisé avec succès", + "Error while resetting contact" : "Erreur lors de la remise à zéro du contact", + "Contact imported successfully" : "Contact importé avec succès", + "Error while importing contact" : "Erreur lors de l'importation du contact", + "Import contact" : "Importer un contact", + "Reset to default" : "Restaurer les valeurs par défaut", + "Import contacts" : "Importer des contacts", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importer un nouveau fichier .vcf supprimera le contact par défaut existant et le remplacera. Voulez-vous continuer ?", "Availability" : "Disponibilités", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si vous configurez vos heures de travail, les autres personnes verront si vous êtes disponible quand ils planifient une réunion.", "Absence" : "Absence", @@ -278,16 +289,6 @@ "Send reminder notifications to calendar sharees as well" : "Envoyez également des notifications de rappel aux personnes partageant le calendrier", "Reminders are always sent to organizers and attendees." : "Des rappels sont toujours envoyés aux organisateurs et aux participants.", "Enable notifications for events via push" : "Activer les notifications push pour les évènements", - "Cancel" : "Annuler", - "Import" : "Importation", - "Error while saving settings" : "Erreur lors de l'enregistrement des paramètres", - "Contact reset successfully" : "Contact réinitialisé avec succès", - "Error while resetting contact" : "Erreur lors de la remise à zéro du contact", - "Contact imported successfully" : "Contact importé avec succès", - "Error while importing contact" : "Erreur lors de l'importation du contact", - "Import contact" : "Importer un contact", - "Import contacts" : "Importer des contacts", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importer un nouveau fichier .vcf supprimera le contact par défaut existant et le remplacera. Voulez-vous continuer ?", "There was an error updating your attendance status." : "Une erreur s'est produite lors de la mise à jour de votre statut de présence.", "Please contact the organizer directly." : "Merci de contacter l'organisateur directement.", "Are you accepting the invitation?" : "Acceptez-vous l'invitation ?", diff --git a/apps/dav/l10n/ga.js b/apps/dav/l10n/ga.js index bc7ce1993cd..f32f66ac342 100644 --- a/apps/dav/l10n/ga.js +++ b/apps/dav/l10n/ga.js @@ -290,6 +290,17 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Roghnaigh am tosaithe le haghaidh {dayName}", "Pick a end time for {dayName}" : "Roghnaigh am críochnaithe le haghaidh {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Socraigh stádas úsáideora go huathoibríoch mar \"Ná cuir isteach\" taobh amuigh den infhaighteacht chun gach fógra a bhalbhú.", + "Cancel" : "Cealaigh", + "Import" : "Iompórtáil", + "Error while saving settings" : "Earráid agus na socruithe á sábháil", + "Contact reset successfully" : "D'éirigh le hathshocrú teagmhála", + "Error while resetting contact" : "Earráid agus an teagmhálaí á athshocrú", + "Contact imported successfully" : "D'éirigh le hiompórtáil an teagmhálaí", + "Error while importing contact" : "Earráid agus an teagmhálaí á iompórtáil", + "Import contact" : "Iompórtáil teagmhála", + "Reset to default" : "Athshocraigh go réamhshocrú", + "Import contacts" : "Teagmhálaithe a allmhairiú", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Má dhéantar comhad .vcf nua a iompórtáil, scriosfar an teagmhálaí réamhshocraithe atá ann cheana féin agus cuirfear an ceann nua ina ionad. Ar mhaith leat leanúint ar aghaidh?", "Availability" : "Infhaighteacht", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Má dhéanann tú do chuid uaireanta oibre a chumrú, feicfidh daoine eile nuair a bhíonn tú as oifig nuair a chuireann siad cruinniú in áirithe.", "Absence" : "Neamhláithreacht", @@ -306,19 +317,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Seol fógraí meabhrúcháin chuig scaireanna féilire freisin", "Reminders are always sent to organizers and attendees." : "Seoltar meabhrúcháin chuig na heagraithe agus an lucht freastail i gcónaí.", "Enable notifications for events via push" : "Cumasaigh fógraí le haghaidh imeachtaí trí bhrú", - "Cancel" : "Cealaigh", - "Import" : "Iompórtáil", - "Error while saving settings" : "Earráid agus na socruithe á sábháil", - "Contact reset successfully" : "D'éirigh le hathshocrú teagmhála", - "Error while resetting contact" : "Earráid agus an teagmhálaí á athshocrú", - "Contact imported successfully" : "D'éirigh le hiompórtáil an teagmhálaí", - "Error while importing contact" : "Earráid agus an teagmhálaí á iompórtáil", - "Example Content" : "Ábhar Samplach", - "Set example content to be created on new user first login." : "Socraigh ábhar samplach le cruthú ar an gcéad logáil isteach úsáideora nua.", - "Import contact" : "Iompórtáil teagmhála", - "Reset to default contact" : "Athshocraigh go teagmhálaí réamhshocraithe", - "Import contacts" : "Teagmhálaithe a allmhairiú", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Má dhéantar comhad .vcf nua a iompórtáil, scriosfar an teagmhálaí réamhshocraithe atá ann cheana féin agus cuirfear an ceann nua ina ionad. Ar mhaith leat leanúint ar aghaidh?", "There was an error updating your attendance status." : "Tharla earráid agus do stádas freastail á nuashonrú.", "Please contact the organizer directly." : "Téigh i dteagmháil leis an eagraí go díreach le do thoil.", "Are you accepting the invitation?" : "An bhfuil tú ag glacadh leis an gcuireadh?", diff --git a/apps/dav/l10n/ga.json b/apps/dav/l10n/ga.json index ddf26142454..29e76c0052f 100644 --- a/apps/dav/l10n/ga.json +++ b/apps/dav/l10n/ga.json @@ -288,6 +288,17 @@ "Pick a start time for {dayName}" : "Roghnaigh am tosaithe le haghaidh {dayName}", "Pick a end time for {dayName}" : "Roghnaigh am críochnaithe le haghaidh {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Socraigh stádas úsáideora go huathoibríoch mar \"Ná cuir isteach\" taobh amuigh den infhaighteacht chun gach fógra a bhalbhú.", + "Cancel" : "Cealaigh", + "Import" : "Iompórtáil", + "Error while saving settings" : "Earráid agus na socruithe á sábháil", + "Contact reset successfully" : "D'éirigh le hathshocrú teagmhála", + "Error while resetting contact" : "Earráid agus an teagmhálaí á athshocrú", + "Contact imported successfully" : "D'éirigh le hiompórtáil an teagmhálaí", + "Error while importing contact" : "Earráid agus an teagmhálaí á iompórtáil", + "Import contact" : "Iompórtáil teagmhála", + "Reset to default" : "Athshocraigh go réamhshocrú", + "Import contacts" : "Teagmhálaithe a allmhairiú", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Má dhéantar comhad .vcf nua a iompórtáil, scriosfar an teagmhálaí réamhshocraithe atá ann cheana féin agus cuirfear an ceann nua ina ionad. Ar mhaith leat leanúint ar aghaidh?", "Availability" : "Infhaighteacht", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Má dhéanann tú do chuid uaireanta oibre a chumrú, feicfidh daoine eile nuair a bhíonn tú as oifig nuair a chuireann siad cruinniú in áirithe.", "Absence" : "Neamhláithreacht", @@ -304,19 +315,6 @@ "Send reminder notifications to calendar sharees as well" : "Seol fógraí meabhrúcháin chuig scaireanna féilire freisin", "Reminders are always sent to organizers and attendees." : "Seoltar meabhrúcháin chuig na heagraithe agus an lucht freastail i gcónaí.", "Enable notifications for events via push" : "Cumasaigh fógraí le haghaidh imeachtaí trí bhrú", - "Cancel" : "Cealaigh", - "Import" : "Iompórtáil", - "Error while saving settings" : "Earráid agus na socruithe á sábháil", - "Contact reset successfully" : "D'éirigh le hathshocrú teagmhála", - "Error while resetting contact" : "Earráid agus an teagmhálaí á athshocrú", - "Contact imported successfully" : "D'éirigh le hiompórtáil an teagmhálaí", - "Error while importing contact" : "Earráid agus an teagmhálaí á iompórtáil", - "Example Content" : "Ábhar Samplach", - "Set example content to be created on new user first login." : "Socraigh ábhar samplach le cruthú ar an gcéad logáil isteach úsáideora nua.", - "Import contact" : "Iompórtáil teagmhála", - "Reset to default contact" : "Athshocraigh go teagmhálaí réamhshocraithe", - "Import contacts" : "Teagmhálaithe a allmhairiú", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Má dhéantar comhad .vcf nua a iompórtáil, scriosfar an teagmhálaí réamhshocraithe atá ann cheana féin agus cuirfear an ceann nua ina ionad. Ar mhaith leat leanúint ar aghaidh?", "There was an error updating your attendance status." : "Tharla earráid agus do stádas freastail á nuashonrú.", "Please contact the organizer directly." : "Téigh i dteagmháil leis an eagraí go díreach le do thoil.", "Are you accepting the invitation?" : "An bhfuil tú ag glacadh leis an gcuireadh?", diff --git a/apps/dav/l10n/gl.js b/apps/dav/l10n/gl.js index dca0a873e50..2dcf4a4d100 100644 --- a/apps/dav/l10n/gl.js +++ b/apps/dav/l10n/gl.js @@ -287,6 +287,10 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Escolla unha hora de inicio para {dayName}", "Pick a end time for {dayName}" : "Escolla unha hora de finalización para {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Definir automaticamente o estado do usuario en «Non molestar» fóra de dispoñibilidade para enmudecer todas as notificacións.", + "Cancel" : "Cancelar", + "Import" : "Importar", + "Error while saving settings" : "Produciuse un erro ao gardar os axustes", + "Reset to default" : "Restabelecer os valores predeterminados", "Availability" : "Dispoñibilidade", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Se configura o seu horario de traballo, outras persoas verán cando está fóra da oficina cando reserven unha xuntanza.", "Absence" : "Ausencia", @@ -303,9 +307,6 @@ OC.L10N.register( "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 emerxentes para eventos", - "Cancel" : "Cancelar", - "Import" : "Importar", - "Error while saving settings" : "Produciuse un erro ao gardar os axustes", "There was an error updating your attendance status." : "Produciuse un erro ao actualizar o seu estado de asistencia.", "Please contact the organizer directly." : "Contacte directamente co organizador.", "Are you accepting the invitation?" : "Acepta Vde. o convite?", diff --git a/apps/dav/l10n/gl.json b/apps/dav/l10n/gl.json index 06d372f0a38..777fd270c00 100644 --- a/apps/dav/l10n/gl.json +++ b/apps/dav/l10n/gl.json @@ -285,6 +285,10 @@ "Pick a start time for {dayName}" : "Escolla unha hora de inicio para {dayName}", "Pick a end time for {dayName}" : "Escolla unha hora de finalización para {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Definir automaticamente o estado do usuario en «Non molestar» fóra de dispoñibilidade para enmudecer todas as notificacións.", + "Cancel" : "Cancelar", + "Import" : "Importar", + "Error while saving settings" : "Produciuse un erro ao gardar os axustes", + "Reset to default" : "Restabelecer os valores predeterminados", "Availability" : "Dispoñibilidade", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Se configura o seu horario de traballo, outras persoas verán cando está fóra da oficina cando reserven unha xuntanza.", "Absence" : "Ausencia", @@ -301,9 +305,6 @@ "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 emerxentes para eventos", - "Cancel" : "Cancelar", - "Import" : "Importar", - "Error while saving settings" : "Produciuse un erro ao gardar os axustes", "There was an error updating your attendance status." : "Produciuse un erro ao actualizar o seu estado de asistencia.", "Please contact the organizer directly." : "Contacte directamente co organizador.", "Are you accepting the invitation?" : "Acepta Vde. o convite?", diff --git a/apps/dav/l10n/hu.js b/apps/dav/l10n/hu.js index c30d82f5b8d..6b3c40357a1 100644 --- a/apps/dav/l10n/hu.js +++ b/apps/dav/l10n/hu.js @@ -244,6 +244,10 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Válassz kezdő dátumot a {dayName}-hoz", "Pick a end time for {dayName}" : "Válassz vége dátumot a {dayName}-hoz", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Az elérhetőségi időn túl, a felhasználói állapot automatikus beállítása „Ne zavarjanak” módba az összes értesítés némításához.", + "Cancel" : "Mégse", + "Import" : "Importálás", + "Error while saving settings" : "Hiba a beállítások mentése során", + "Reset to default" : "Visszaállítás alapértelmezettre", "Availability" : "Elérhetőség", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Ha beállítja a munkaidejét, akkor más emberek a megbeszélések létrehozásakor látni fogják, hogy Ön mikor nem érhető el.", "Absence" : "Távollét", @@ -260,9 +264,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Emlékeztető értesítések küldése azoknak is, akikkel a naptár meg van osztva", "Reminders are always sent to organizers and attendees." : "Az értesítések mindig a szervezőknek és a résztvevőknek lesznek elküldve.", "Enable notifications for events via push" : "Leküldéses értesítések engedélyezése az eseményekhez", - "Cancel" : "Mégse", - "Import" : "Importálás", - "Error while saving settings" : "Hiba a beállítások mentése során", "There was an error updating your attendance status." : "Hiba történt a részvételi állapotának frissítése során.", "Please contact the organizer directly." : "Vegye fel a kapcsolatot közvetlenül a szervezővel.", "Are you accepting the invitation?" : "Elfogadja az meghívást?", diff --git a/apps/dav/l10n/hu.json b/apps/dav/l10n/hu.json index 354e05b1499..08ab94adbdc 100644 --- a/apps/dav/l10n/hu.json +++ b/apps/dav/l10n/hu.json @@ -242,6 +242,10 @@ "Pick a start time for {dayName}" : "Válassz kezdő dátumot a {dayName}-hoz", "Pick a end time for {dayName}" : "Válassz vége dátumot a {dayName}-hoz", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Az elérhetőségi időn túl, a felhasználói állapot automatikus beállítása „Ne zavarjanak” módba az összes értesítés némításához.", + "Cancel" : "Mégse", + "Import" : "Importálás", + "Error while saving settings" : "Hiba a beállítások mentése során", + "Reset to default" : "Visszaállítás alapértelmezettre", "Availability" : "Elérhetőség", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Ha beállítja a munkaidejét, akkor más emberek a megbeszélések létrehozásakor látni fogják, hogy Ön mikor nem érhető el.", "Absence" : "Távollét", @@ -258,9 +262,6 @@ "Send reminder notifications to calendar sharees as well" : "Emlékeztető értesítések küldése azoknak is, akikkel a naptár meg van osztva", "Reminders are always sent to organizers and attendees." : "Az értesítések mindig a szervezőknek és a résztvevőknek lesznek elküldve.", "Enable notifications for events via push" : "Leküldéses értesítések engedélyezése az eseményekhez", - "Cancel" : "Mégse", - "Import" : "Importálás", - "Error while saving settings" : "Hiba a beállítások mentése során", "There was an error updating your attendance status." : "Hiba történt a részvételi állapotának frissítése során.", "Please contact the organizer directly." : "Vegye fel a kapcsolatot közvetlenül a szervezővel.", "Are you accepting the invitation?" : "Elfogadja az meghívást?", diff --git a/apps/dav/l10n/is.js b/apps/dav/l10n/is.js index 9013b38d8b1..80eb90d83db 100644 --- a/apps/dav/l10n/is.js +++ b/apps/dav/l10n/is.js @@ -287,6 +287,10 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Veldu upphafstíma fyrir {dayName}", "Pick a end time for {dayName}" : "Veldu lokatíma fyrir {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Setja stöðu notenda sjálfkrafa á \"Ekki ónáða\" utan þess lausa tíma sem viðkomandi er tiltækur, til að þagga niður í öllum tilkynningum.", + "Cancel" : "Hætta við", + "Import" : "Flytja inn", + "Error while saving settings" : "Villa við að vista stillingar", + "Reset to default" : "Endurstilla á sjálfgefið", "Availability" : "Aðgengileiki", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Ef þú stillir vinnutímana þína, geta aðrir séð hvenær þú sért fjarverandi þegar þeir bóka fundi með þér.", "Absence" : "Fjarverandi", @@ -303,9 +307,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Senda einnig tilkynningar til þeirra sem deila dagatalinu", "Reminders are always sent to organizers and attendees." : "Áminningar eru alltaf sendar til skipuleggjenda og þátttakenda.", "Enable notifications for events via push" : "Senda tilkynningar fyrir atburði sem ýtitilkynningar", - "Cancel" : "Hætta við", - "Import" : "Flytja inn", - "Error while saving settings" : "Villa við að vista stillingar", "There was an error updating your attendance status." : "Það kom upp villa við að uppfæra mætingarstöðu þína.", "Please contact the organizer directly." : "Hafðu samband beint við skipuleggjendurna.", "Are you accepting the invitation?" : "Ætlar þú að samþykkja boðið?", diff --git a/apps/dav/l10n/is.json b/apps/dav/l10n/is.json index 8db2832ed79..a89ef260f36 100644 --- a/apps/dav/l10n/is.json +++ b/apps/dav/l10n/is.json @@ -285,6 +285,10 @@ "Pick a start time for {dayName}" : "Veldu upphafstíma fyrir {dayName}", "Pick a end time for {dayName}" : "Veldu lokatíma fyrir {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Setja stöðu notenda sjálfkrafa á \"Ekki ónáða\" utan þess lausa tíma sem viðkomandi er tiltækur, til að þagga niður í öllum tilkynningum.", + "Cancel" : "Hætta við", + "Import" : "Flytja inn", + "Error while saving settings" : "Villa við að vista stillingar", + "Reset to default" : "Endurstilla á sjálfgefið", "Availability" : "Aðgengileiki", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Ef þú stillir vinnutímana þína, geta aðrir séð hvenær þú sért fjarverandi þegar þeir bóka fundi með þér.", "Absence" : "Fjarverandi", @@ -301,9 +305,6 @@ "Send reminder notifications to calendar sharees as well" : "Senda einnig tilkynningar til þeirra sem deila dagatalinu", "Reminders are always sent to organizers and attendees." : "Áminningar eru alltaf sendar til skipuleggjenda og þátttakenda.", "Enable notifications for events via push" : "Senda tilkynningar fyrir atburði sem ýtitilkynningar", - "Cancel" : "Hætta við", - "Import" : "Flytja inn", - "Error while saving settings" : "Villa við að vista stillingar", "There was an error updating your attendance status." : "Það kom upp villa við að uppfæra mætingarstöðu þína.", "Please contact the organizer directly." : "Hafðu samband beint við skipuleggjendurna.", "Are you accepting the invitation?" : "Ætlar þú að samþykkja boðið?", diff --git a/apps/dav/l10n/it.js b/apps/dav/l10n/it.js index 219b862fb1c..f441b42c3d8 100644 --- a/apps/dav/l10n/it.js +++ b/apps/dav/l10n/it.js @@ -207,6 +207,10 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Scegli un orario di inizio per {dayName}", "Pick a end time for {dayName}" : "Scegli un orario di fine per {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Imposta automaticamente lo stato dell'utente su \"Non disturbare\" al di fuori della disponibilità per disattivare tutte le notifiche.", + "Cancel" : "Annulla", + "Import" : "Importa", + "Error while saving settings" : "Errore durante il salvataggio delle impostazioni", + "Reset to default" : "Ripristina valori predefiniti", "Availability" : "Disponibilità", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Se imposti il tuo orario di lavoro, le altre persone potranno vedere quando non sei in ufficio per organizzare una riunione.", "Absence" : "Assenza", @@ -223,9 +227,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Invia notifiche di promemoria anche ai partecipanti al calendario", "Reminders are always sent to organizers and attendees." : "I promemoria vengono sempre inviati agli organizzatori e ai partecipanti.", "Enable notifications for events via push" : "Abilita notifiche per eventi tramite push", - "Cancel" : "Annulla", - "Import" : "Importa", - "Error while saving settings" : "Errore durante il salvataggio delle impostazioni", "There was an error updating your attendance status." : "Si è verificato un errore durante l'aggiornamento dello stato della tua partecipazione.", "Please contact the organizer directly." : "Contatta direttamente l'amministratore.", "Are you accepting the invitation?" : "Accetti l'invito?", diff --git a/apps/dav/l10n/it.json b/apps/dav/l10n/it.json index 577326b730a..035866d3115 100644 --- a/apps/dav/l10n/it.json +++ b/apps/dav/l10n/it.json @@ -205,6 +205,10 @@ "Pick a start time for {dayName}" : "Scegli un orario di inizio per {dayName}", "Pick a end time for {dayName}" : "Scegli un orario di fine per {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Imposta automaticamente lo stato dell'utente su \"Non disturbare\" al di fuori della disponibilità per disattivare tutte le notifiche.", + "Cancel" : "Annulla", + "Import" : "Importa", + "Error while saving settings" : "Errore durante il salvataggio delle impostazioni", + "Reset to default" : "Ripristina valori predefiniti", "Availability" : "Disponibilità", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Se imposti il tuo orario di lavoro, le altre persone potranno vedere quando non sei in ufficio per organizzare una riunione.", "Absence" : "Assenza", @@ -221,9 +225,6 @@ "Send reminder notifications to calendar sharees as well" : "Invia notifiche di promemoria anche ai partecipanti al calendario", "Reminders are always sent to organizers and attendees." : "I promemoria vengono sempre inviati agli organizzatori e ai partecipanti.", "Enable notifications for events via push" : "Abilita notifiche per eventi tramite push", - "Cancel" : "Annulla", - "Import" : "Importa", - "Error while saving settings" : "Errore durante il salvataggio delle impostazioni", "There was an error updating your attendance status." : "Si è verificato un errore durante l'aggiornamento dello stato della tua partecipazione.", "Please contact the organizer directly." : "Contatta direttamente l'amministratore.", "Are you accepting the invitation?" : "Accetti l'invito?", diff --git a/apps/dav/l10n/ja.js b/apps/dav/l10n/ja.js index 475047a4a28..6a6753c1d35 100644 --- a/apps/dav/l10n/ja.js +++ b/apps/dav/l10n/ja.js @@ -290,6 +290,17 @@ OC.L10N.register( "Pick a start time for {dayName}" : "{dayName} 開始時間を指定してください", "Pick a end time for {dayName}" : "{dayName} の終了時間を指定してください", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "利用時間外は自動的にユーザーステータスを\"非通知\" に設定し、すべての通知をミュートします。", + "Cancel" : "キャンセル", + "Import" : "インポート", + "Error while saving settings" : "設定の保存中にエラーが発生", + "Contact reset successfully" : "連絡先のリセットが正常に完了しました", + "Error while resetting contact" : "連絡先のリセット中にエラーが発生しました", + "Contact imported successfully" : "連絡先のインポートが正常に完了しました", + "Error while importing contact" : "連絡先のインポート中にエラーが発生しました", + "Import contact" : "連絡先のインポート", + "Reset to default" : "デフォルトに戻す", + "Import contacts" : "連絡先のインポート", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "新しい .vcf ファイルをインポートすると、既存のデフォルト連絡先が削除され、新しいものに置き換えられます。続行しますか?", "Availability" : "応対可能日時", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "勤務時間を設定すると、他のユーザが会議を予約する際に、あなたがいつ不在であるかがわかります。", "Absence" : "不在", @@ -306,19 +317,6 @@ 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" : "イベントのプッシュ通知を有効にする", - "Cancel" : "キャンセル", - "Import" : "インポート", - "Error while saving settings" : "設定の保存中にエラーが発生", - "Contact reset successfully" : "連絡先のリセットが正常に完了しました", - "Error while resetting contact" : "連絡先のリセット中にエラーが発生しました", - "Contact imported successfully" : "連絡先のインポートが正常に完了しました", - "Error while importing contact" : "連絡先のインポート中にエラーが発生しました", - "Example Content" : "サンプルコンテンツ", - "Set example content to be created on new user first login." : "新規ユーザの初回ログイン時に作成されるサンプルコンテンツを設定します。", - "Import contact" : "連絡先のインポート", - "Reset to default contact" : "デフォルトの連絡先にリセットする", - "Import contacts" : "連絡先のインポート", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "新しい .vcf ファイルをインポートすると、既存のデフォルト連絡先が削除され、新しいものに置き換えられます。続行しますか?", "There was an error updating your attendance status." : "出席状況の更新中にエラーが発生しました。", "Please contact the organizer directly." : "主催者に直接お問い合わせください。", "Are you accepting the invitation?" : "招待を受け入れていますか?", diff --git a/apps/dav/l10n/ja.json b/apps/dav/l10n/ja.json index e964a890f9b..fdefc04c4c7 100644 --- a/apps/dav/l10n/ja.json +++ b/apps/dav/l10n/ja.json @@ -288,6 +288,17 @@ "Pick a start time for {dayName}" : "{dayName} 開始時間を指定してください", "Pick a end time for {dayName}" : "{dayName} の終了時間を指定してください", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "利用時間外は自動的にユーザーステータスを\"非通知\" に設定し、すべての通知をミュートします。", + "Cancel" : "キャンセル", + "Import" : "インポート", + "Error while saving settings" : "設定の保存中にエラーが発生", + "Contact reset successfully" : "連絡先のリセットが正常に完了しました", + "Error while resetting contact" : "連絡先のリセット中にエラーが発生しました", + "Contact imported successfully" : "連絡先のインポートが正常に完了しました", + "Error while importing contact" : "連絡先のインポート中にエラーが発生しました", + "Import contact" : "連絡先のインポート", + "Reset to default" : "デフォルトに戻す", + "Import contacts" : "連絡先のインポート", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "新しい .vcf ファイルをインポートすると、既存のデフォルト連絡先が削除され、新しいものに置き換えられます。続行しますか?", "Availability" : "応対可能日時", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "勤務時間を設定すると、他のユーザが会議を予約する際に、あなたがいつ不在であるかがわかります。", "Absence" : "不在", @@ -304,19 +315,6 @@ "Send reminder notifications to calendar sharees as well" : "カレンダー共有にもリマインダー通知を送信する", "Reminders are always sent to organizers and attendees." : "リマインダーを常に作成者と出席者に送信します。", "Enable notifications for events via push" : "イベントのプッシュ通知を有効にする", - "Cancel" : "キャンセル", - "Import" : "インポート", - "Error while saving settings" : "設定の保存中にエラーが発生", - "Contact reset successfully" : "連絡先のリセットが正常に完了しました", - "Error while resetting contact" : "連絡先のリセット中にエラーが発生しました", - "Contact imported successfully" : "連絡先のインポートが正常に完了しました", - "Error while importing contact" : "連絡先のインポート中にエラーが発生しました", - "Example Content" : "サンプルコンテンツ", - "Set example content to be created on new user first login." : "新規ユーザの初回ログイン時に作成されるサンプルコンテンツを設定します。", - "Import contact" : "連絡先のインポート", - "Reset to default contact" : "デフォルトの連絡先にリセットする", - "Import contacts" : "連絡先のインポート", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "新しい .vcf ファイルをインポートすると、既存のデフォルト連絡先が削除され、新しいものに置き換えられます。続行しますか?", "There was an error updating your attendance status." : "出席状況の更新中にエラーが発生しました。", "Please contact the organizer directly." : "主催者に直接お問い合わせください。", "Are you accepting the invitation?" : "招待を受け入れていますか?", diff --git a/apps/dav/l10n/ka.js b/apps/dav/l10n/ka.js index c22370798c2..682a8e1d254 100644 --- a/apps/dav/l10n/ka.js +++ b/apps/dav/l10n/ka.js @@ -192,6 +192,10 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Pick a start time for {dayName}", "Pick a end time for {dayName}" : "Pick a end time for {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications.", + "Cancel" : "Cancel", + "Import" : "Import", + "Error while saving settings" : "Error while saving settings", + "Reset to default" : "Reset to default", "Availability" : "Availability", "Absence" : "Absence", "Configure your next absence period." : "Configure your next absence period.", @@ -207,9 +211,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Send reminder notifications to calendar sharees as well", "Reminders are always sent to organizers and attendees." : "Reminders are always sent to organizers and attendees.", "Enable notifications for events via push" : "Enable notifications for events via push", - "Cancel" : "Cancel", - "Import" : "Import", - "Error while saving settings" : "Error while saving settings", "There was an error updating your attendance status." : "There was an error updating your attendance status.", "Please contact the organizer directly." : "Please contact the organizer directly.", "Are you accepting the invitation?" : "Are you accepting the invitation?", diff --git a/apps/dav/l10n/ka.json b/apps/dav/l10n/ka.json index 097e8f0bbdb..3685b1a2173 100644 --- a/apps/dav/l10n/ka.json +++ b/apps/dav/l10n/ka.json @@ -190,6 +190,10 @@ "Pick a start time for {dayName}" : "Pick a start time for {dayName}", "Pick a end time for {dayName}" : "Pick a end time for {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications.", + "Cancel" : "Cancel", + "Import" : "Import", + "Error while saving settings" : "Error while saving settings", + "Reset to default" : "Reset to default", "Availability" : "Availability", "Absence" : "Absence", "Configure your next absence period." : "Configure your next absence period.", @@ -205,9 +209,6 @@ "Send reminder notifications to calendar sharees as well" : "Send reminder notifications to calendar sharees as well", "Reminders are always sent to organizers and attendees." : "Reminders are always sent to organizers and attendees.", "Enable notifications for events via push" : "Enable notifications for events via push", - "Cancel" : "Cancel", - "Import" : "Import", - "Error while saving settings" : "Error while saving settings", "There was an error updating your attendance status." : "There was an error updating your attendance status.", "Please contact the organizer directly." : "Please contact the organizer directly.", "Are you accepting the invitation?" : "Are you accepting the invitation?", diff --git a/apps/dav/l10n/ko.js b/apps/dav/l10n/ko.js index fcf3b384ebb..ae3b8e5908c 100644 --- a/apps/dav/l10n/ko.js +++ b/apps/dav/l10n/ko.js @@ -192,6 +192,10 @@ OC.L10N.register( "Pick a start time for {dayName}" : "{dayName} 시작 시각을 지정하십시오", "Pick a end time for {dayName}" : "{dayName} 종료 시각을 지정하십시오", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "다른 용무 중일 때 자동으로 사용자를 '방해 금지' 모드로 설정해 모든 알림을 음소거합니다.", + "Cancel" : "취소", + "Import" : "가져오기", + "Error while saving settings" : "설정 저장 중 오류 발생", + "Reset to default" : "기본값으로 초기화", "Availability" : "시간 조율", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "업무 시간을 설정하면, 다른 사람이 회의를 예약할 때 내 부재 중 시간을 확인할 수 있습니다.", "Absence" : "부재", @@ -208,9 +212,6 @@ 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" : "일정에 대한 푸시 알림 활성화", - "Cancel" : "취소", - "Import" : "가져오기", - "Error while saving settings" : "설정 저장 중 오류 발생", "There was an error updating your attendance status." : "참석 상태를 업데이트하는 중 오류가 발생했습니다.", "Please contact the organizer directly." : "주최자에게 직접 연락하십시오.", "Are you accepting the invitation?" : "초대를 수락하시겠습니까?", diff --git a/apps/dav/l10n/ko.json b/apps/dav/l10n/ko.json index d908c00b867..50d8fee9c21 100644 --- a/apps/dav/l10n/ko.json +++ b/apps/dav/l10n/ko.json @@ -190,6 +190,10 @@ "Pick a start time for {dayName}" : "{dayName} 시작 시각을 지정하십시오", "Pick a end time for {dayName}" : "{dayName} 종료 시각을 지정하십시오", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "다른 용무 중일 때 자동으로 사용자를 '방해 금지' 모드로 설정해 모든 알림을 음소거합니다.", + "Cancel" : "취소", + "Import" : "가져오기", + "Error while saving settings" : "설정 저장 중 오류 발생", + "Reset to default" : "기본값으로 초기화", "Availability" : "시간 조율", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "업무 시간을 설정하면, 다른 사람이 회의를 예약할 때 내 부재 중 시간을 확인할 수 있습니다.", "Absence" : "부재", @@ -206,9 +210,6 @@ "Send reminder notifications to calendar sharees as well" : "캘린더 공유자에게도 미리 알림 보내기", "Reminders are always sent to organizers and attendees." : "미리 알림은 주최자와 참석자에게 항상 전송됩니다.", "Enable notifications for events via push" : "일정에 대한 푸시 알림 활성화", - "Cancel" : "취소", - "Import" : "가져오기", - "Error while saving settings" : "설정 저장 중 오류 발생", "There was an error updating your attendance status." : "참석 상태를 업데이트하는 중 오류가 발생했습니다.", "Please contact the organizer directly." : "주최자에게 직접 연락하십시오.", "Are you accepting the invitation?" : "초대를 수락하시겠습니까?", diff --git a/apps/dav/l10n/mk.js b/apps/dav/l10n/mk.js index 29dad61fa6f..aee9a41896f 100644 --- a/apps/dav/l10n/mk.js +++ b/apps/dav/l10n/mk.js @@ -181,6 +181,9 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Избери почетно време за {dayName}", "Pick a end time for {dayName}" : "Избери крајно време за {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Автоматско поставување на статус во \"Не вознемирувај\" недостапен за да ги занемите сите известувања.", + "Cancel" : "Откажи", + "Import" : "Увези", + "Reset to default" : "Ресетирај на стандардно", "Availability" : "Достапност", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Ако ги поставите работните часови, другите корисници ќе можат да видат кога сте слободни за да можат да закажат состанок.", "Absence" : "Отсуство", @@ -197,8 +200,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Испратете известувања за потсетници и до споделувањата на календарот", "Reminders are always sent to organizers and attendees." : "Секогаш се испраќаат потсетници до организаторите и до присутните.", "Enable notifications for events via push" : "Овозможи известувања за настани преку push", - "Cancel" : "Откажи", - "Import" : "Увези", "There was an error updating your attendance status." : "Настана грешка при ажурирање на вашето присуство.", "Please contact the organizer directly." : "Контактирајте го организаторот директно.", "Are you accepting the invitation?" : "Дали ја прифаќате поканата?", diff --git a/apps/dav/l10n/mk.json b/apps/dav/l10n/mk.json index 1636bd636cc..50e9e168496 100644 --- a/apps/dav/l10n/mk.json +++ b/apps/dav/l10n/mk.json @@ -179,6 +179,9 @@ "Pick a start time for {dayName}" : "Избери почетно време за {dayName}", "Pick a end time for {dayName}" : "Избери крајно време за {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Автоматско поставување на статус во \"Не вознемирувај\" недостапен за да ги занемите сите известувања.", + "Cancel" : "Откажи", + "Import" : "Увези", + "Reset to default" : "Ресетирај на стандардно", "Availability" : "Достапност", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Ако ги поставите работните часови, другите корисници ќе можат да видат кога сте слободни за да можат да закажат состанок.", "Absence" : "Отсуство", @@ -195,8 +198,6 @@ "Send reminder notifications to calendar sharees as well" : "Испратете известувања за потсетници и до споделувањата на календарот", "Reminders are always sent to organizers and attendees." : "Секогаш се испраќаат потсетници до организаторите и до присутните.", "Enable notifications for events via push" : "Овозможи известувања за настани преку push", - "Cancel" : "Откажи", - "Import" : "Увези", "There was an error updating your attendance status." : "Настана грешка при ажурирање на вашето присуство.", "Please contact the organizer directly." : "Контактирајте го организаторот директно.", "Are you accepting the invitation?" : "Дали ја прифаќате поканата?", diff --git a/apps/dav/l10n/nb.js b/apps/dav/l10n/nb.js index ae05bb0923f..d10ba88149b 100644 --- a/apps/dav/l10n/nb.js +++ b/apps/dav/l10n/nb.js @@ -247,6 +247,10 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Velg et starttidspunkt for {dayName}", "Pick a end time for {dayName}" : "Velg et sluttidspunkt for {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Sett brukerstatus automatisk til «Ikke forstyrr» utenfor arbeidstid for å dempe alle varsler.", + "Cancel" : "Avbryt", + "Import" : "Importer", + "Error while saving settings" : "Feil ved lagring av innstillinger", + "Reset to default" : "Tilbakestill til standard", "Availability" : "Arbeidstid", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Hvis du konfigurerer arbeidstiden din, vil andre personer se når du ikke er på kontoret når de bestiller et møte.", "Absence" : "Fravær", @@ -263,9 +267,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Send påminnelsesvarsler til kalenderdelinger også", "Reminders are always sent to organizers and attendees." : "Reminders are always sent to organizers and attendees.", "Enable notifications for events via push" : "Aktiver varsler for hendelser via push", - "Cancel" : "Avbryt", - "Import" : "Importer", - "Error while saving settings" : "Feil ved lagring av innstillinger", "There was an error updating your attendance status." : "Det oppsto en feil under oppdateringen av oppmøtestatusen din.", "Please contact the organizer directly." : "Ta kontakt med arrangøren direkte.", "Are you accepting the invitation?" : "Aksepterer du invitasjonen?", diff --git a/apps/dav/l10n/nb.json b/apps/dav/l10n/nb.json index c395b3f761f..d33852e0013 100644 --- a/apps/dav/l10n/nb.json +++ b/apps/dav/l10n/nb.json @@ -245,6 +245,10 @@ "Pick a start time for {dayName}" : "Velg et starttidspunkt for {dayName}", "Pick a end time for {dayName}" : "Velg et sluttidspunkt for {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Sett brukerstatus automatisk til «Ikke forstyrr» utenfor arbeidstid for å dempe alle varsler.", + "Cancel" : "Avbryt", + "Import" : "Importer", + "Error while saving settings" : "Feil ved lagring av innstillinger", + "Reset to default" : "Tilbakestill til standard", "Availability" : "Arbeidstid", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Hvis du konfigurerer arbeidstiden din, vil andre personer se når du ikke er på kontoret når de bestiller et møte.", "Absence" : "Fravær", @@ -261,9 +265,6 @@ "Send reminder notifications to calendar sharees as well" : "Send påminnelsesvarsler til kalenderdelinger også", "Reminders are always sent to organizers and attendees." : "Reminders are always sent to organizers and attendees.", "Enable notifications for events via push" : "Aktiver varsler for hendelser via push", - "Cancel" : "Avbryt", - "Import" : "Importer", - "Error while saving settings" : "Feil ved lagring av innstillinger", "There was an error updating your attendance status." : "Det oppsto en feil under oppdateringen av oppmøtestatusen din.", "Please contact the organizer directly." : "Ta kontakt med arrangøren direkte.", "Are you accepting the invitation?" : "Aksepterer du invitasjonen?", diff --git a/apps/dav/l10n/nl.js b/apps/dav/l10n/nl.js index cf2d91fb130..e07dc153418 100644 --- a/apps/dav/l10n/nl.js +++ b/apps/dav/l10n/nl.js @@ -166,6 +166,10 @@ OC.L10N.register( "Add slot" : "Voeg slot toe", "Weekdays" : "Weekdagen", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Stel de gebruikersstatus automatisch in op \"Niet storen\" buiten de beschikbaarheid om alle meldingen te dempen.", + "Cancel" : "Annuleren", + "Import" : "Import", + "Error while saving settings" : "Probleem tijdens het opslaan van instellingen", + "Reset to default" : "Herstellen naar standaard", "Availability" : "Beschikbaarheid", "Absence" : "Afwezigheid", "Configure your next absence period." : "Configureer uw volgende afwezigheidsperiode.", @@ -179,9 +183,6 @@ OC.L10N.register( "Send notifications for events" : "Versturen meldingen voor afspraken", "Notifications are sent via background jobs, so these must occur often enough." : "Meldingen worden via achtergrondtaken verstuurd, dus die moeten vaak genoeg plaatsvinden.", "Enable notifications for events via push" : "Inschakelen push-melding voor afspraken", - "Cancel" : "Annuleren", - "Import" : "Import", - "Error while saving settings" : "Probleem tijdens het opslaan van instellingen", "There was an error updating your attendance status." : "Er trad een fout op bij het bijwerken van je deelnamestatus.", "Please contact the organizer directly." : "Neem rechtstreeks contact op met de organisator.", "Are you accepting the invitation?" : "Neem je de uitnodiging aan?", diff --git a/apps/dav/l10n/nl.json b/apps/dav/l10n/nl.json index b1fa7ba06c5..161b2287d8e 100644 --- a/apps/dav/l10n/nl.json +++ b/apps/dav/l10n/nl.json @@ -164,6 +164,10 @@ "Add slot" : "Voeg slot toe", "Weekdays" : "Weekdagen", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Stel de gebruikersstatus automatisch in op \"Niet storen\" buiten de beschikbaarheid om alle meldingen te dempen.", + "Cancel" : "Annuleren", + "Import" : "Import", + "Error while saving settings" : "Probleem tijdens het opslaan van instellingen", + "Reset to default" : "Herstellen naar standaard", "Availability" : "Beschikbaarheid", "Absence" : "Afwezigheid", "Configure your next absence period." : "Configureer uw volgende afwezigheidsperiode.", @@ -177,9 +181,6 @@ "Send notifications for events" : "Versturen meldingen voor afspraken", "Notifications are sent via background jobs, so these must occur often enough." : "Meldingen worden via achtergrondtaken verstuurd, dus die moeten vaak genoeg plaatsvinden.", "Enable notifications for events via push" : "Inschakelen push-melding voor afspraken", - "Cancel" : "Annuleren", - "Import" : "Import", - "Error while saving settings" : "Probleem tijdens het opslaan van instellingen", "There was an error updating your attendance status." : "Er trad een fout op bij het bijwerken van je deelnamestatus.", "Please contact the organizer directly." : "Neem rechtstreeks contact op met de organisator.", "Are you accepting the invitation?" : "Neem je de uitnodiging aan?", diff --git a/apps/dav/l10n/pl.js b/apps/dav/l10n/pl.js index bd92aa8982d..48b5b484903 100644 --- a/apps/dav/l10n/pl.js +++ b/apps/dav/l10n/pl.js @@ -215,6 +215,10 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Wybierz dzień rozpoczęcia {dayName}", "Pick a end time for {dayName}" : "Wybierz dzień zakończenia {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Automatycznie ustaw status użytkownika na \"Nie przeszkadzać\" poza dostępnością, aby wyciszyć wszystkie powiadomienia.", + "Cancel" : "Anuluj", + "Import" : "Importuj", + "Error while saving settings" : "Błąd podczas zapisywania ustawień", + "Reset to default" : "Przywróć domyślne", "Availability" : "Dostępność", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Jeśli skonfigurujesz godziny pracy, inne osoby będą widzieć, kiedy jesteś poza biurem, rezerwując spotkanie.", "Absence" : "Nieobecność", @@ -231,9 +235,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Wysyłaj przypomnienia również do udostępnionych kalendarzy", "Reminders are always sent to organizers and attendees." : "Przypomnienia są zawsze wysyłane do organizatorów i uczestników.", "Enable notifications for events via push" : "Włącz powiadomienia o zdarzeniach poprzez Push", - "Cancel" : "Anuluj", - "Import" : "Importuj", - "Error while saving settings" : "Błąd podczas zapisywania ustawień", "There was an error updating your attendance status." : "Wystąpił błąd zmiany stanu uczestnictwa", "Please contact the organizer directly." : "Skontaktuj się bezpośrednio z orgnizatorem.", "Are you accepting the invitation?" : "Czy akceptujesz zaproszenie?", diff --git a/apps/dav/l10n/pl.json b/apps/dav/l10n/pl.json index b5a96cf10aa..0404cf1538c 100644 --- a/apps/dav/l10n/pl.json +++ b/apps/dav/l10n/pl.json @@ -213,6 +213,10 @@ "Pick a start time for {dayName}" : "Wybierz dzień rozpoczęcia {dayName}", "Pick a end time for {dayName}" : "Wybierz dzień zakończenia {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Automatycznie ustaw status użytkownika na \"Nie przeszkadzać\" poza dostępnością, aby wyciszyć wszystkie powiadomienia.", + "Cancel" : "Anuluj", + "Import" : "Importuj", + "Error while saving settings" : "Błąd podczas zapisywania ustawień", + "Reset to default" : "Przywróć domyślne", "Availability" : "Dostępność", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Jeśli skonfigurujesz godziny pracy, inne osoby będą widzieć, kiedy jesteś poza biurem, rezerwując spotkanie.", "Absence" : "Nieobecność", @@ -229,9 +233,6 @@ "Send reminder notifications to calendar sharees as well" : "Wysyłaj przypomnienia również do udostępnionych kalendarzy", "Reminders are always sent to organizers and attendees." : "Przypomnienia są zawsze wysyłane do organizatorów i uczestników.", "Enable notifications for events via push" : "Włącz powiadomienia o zdarzeniach poprzez Push", - "Cancel" : "Anuluj", - "Import" : "Importuj", - "Error while saving settings" : "Błąd podczas zapisywania ustawień", "There was an error updating your attendance status." : "Wystąpił błąd zmiany stanu uczestnictwa", "Please contact the organizer directly." : "Skontaktuj się bezpośrednio z orgnizatorem.", "Are you accepting the invitation?" : "Czy akceptujesz zaproszenie?", diff --git a/apps/dav/l10n/pt_BR.js b/apps/dav/l10n/pt_BR.js index 7d9cc7d4524..c3cffa9fb78 100644 --- a/apps/dav/l10n/pt_BR.js +++ b/apps/dav/l10n/pt_BR.js @@ -290,6 +290,25 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Selecione um horário de início para {dayName}", "Pick a end time for {dayName}" : "Selecione um horário de fim para {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Defina automaticamente o status do usuário como \"Não perturbe\" fora de disponibilidade para silenciar todas as notificações.", + "Cancel" : "Cancelar", + "Import" : "Importar", + "Error while saving settings" : "Erro ao salvar as configurações", + "Contact reset successfully" : "O contato foi reiniciado com sucesso", + "Error while resetting contact" : "Erro ao reiniciar o contato", + "Contact imported successfully" : "O contato foi importado com sucesso", + "Error while importing contact" : "Erro ao importar o contato", + "Import contact" : "Importar contato", + "Reset to default" : "Redefinir para o padrão", + "Import contacts" : "Importar contatos", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "A importação de um novo arquivo .vcf excluirá o contato padrão existente e o substituirá pelo novo. Deseja continuar?", + "Failed to save example event creation setting" : "Falha ao salvar a configuração de criação de evento de exemplo", + "Failed to upload the example event" : "Falha ao fazer upload do evento de exemplo", + "Custom example event was saved successfully" : "O evento de exemplo personalizado foi salvo com êxito", + "Failed to delete the custom example event" : "Falha ao excluir o evento de exemplo personalizado", + "Custom example event was deleted successfully" : "O evento de exemplo personalizado foi excluído com êxito", + "Import calendar event" : "Importar evento de calendário", + "Uploading a new event will overwrite the existing one." : "O upload de um novo evento substituirá o existente.", + "Upload event" : "Fazer upload do evento", "Availability" : "Disponibilidade", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Se você configurar seu horário de trabalho, outras pessoas verão quando você estiver ausente quando agendarem uma reunião.", "Absence" : "Ausência", @@ -306,19 +325,8 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Enviar notificações de lembrete também para os compartilhadores de calendário", "Reminders are always sent to organizers and attendees." : "Lembretes são sempre enviados aos organizadores e participantes.", "Enable notifications for events via push" : "Ativar notificações para eventos via push", - "Cancel" : "Cancelar", - "Import" : "Importar", - "Error while saving settings" : "Erro ao salvar as configurações", - "Contact reset successfully" : "O contato foi reiniciado com sucesso", - "Error while resetting contact" : "Erro ao reiniciar o contato", - "Contact imported successfully" : "O contato foi importado com sucesso", - "Error while importing contact" : "Erro ao importar o contato", - "Example Content" : "Exemplo de Conteúdo", - "Set example content to be created on new user first login." : "Defina o exemplo de conteúdo a ser criado no primeiro login do novo usuário.", - "Import contact" : "Importar contato", - "Reset to default contact" : "Redefinir para o contato padrão", - "Import contacts" : "Importar contatos", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "A importação de um novo arquivo .vcf excluirá o contato padrão existente e o substituirá pelo novo. Deseja continuar?", + "Example content" : "Exemplo de conteúdo", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "O conteúdo de exemplo serve para mostrar os recursos do Nextcloud. O conteúdo padrão é fornecido com o Nextcloud e pode ser substituído por conteúdo personalizado.", "There was an error updating your attendance status." : "Houve um erro ao atualizar seu status de participação.", "Please contact the organizer directly." : "Por favor, contate o organizador diretamente.", "Are you accepting the invitation?" : "Você está aceitando o convite?", diff --git a/apps/dav/l10n/pt_BR.json b/apps/dav/l10n/pt_BR.json index c57088cb0ed..cb763ca5e85 100644 --- a/apps/dav/l10n/pt_BR.json +++ b/apps/dav/l10n/pt_BR.json @@ -288,6 +288,25 @@ "Pick a start time for {dayName}" : "Selecione um horário de início para {dayName}", "Pick a end time for {dayName}" : "Selecione um horário de fim para {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Defina automaticamente o status do usuário como \"Não perturbe\" fora de disponibilidade para silenciar todas as notificações.", + "Cancel" : "Cancelar", + "Import" : "Importar", + "Error while saving settings" : "Erro ao salvar as configurações", + "Contact reset successfully" : "O contato foi reiniciado com sucesso", + "Error while resetting contact" : "Erro ao reiniciar o contato", + "Contact imported successfully" : "O contato foi importado com sucesso", + "Error while importing contact" : "Erro ao importar o contato", + "Import contact" : "Importar contato", + "Reset to default" : "Redefinir para o padrão", + "Import contacts" : "Importar contatos", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "A importação de um novo arquivo .vcf excluirá o contato padrão existente e o substituirá pelo novo. Deseja continuar?", + "Failed to save example event creation setting" : "Falha ao salvar a configuração de criação de evento de exemplo", + "Failed to upload the example event" : "Falha ao fazer upload do evento de exemplo", + "Custom example event was saved successfully" : "O evento de exemplo personalizado foi salvo com êxito", + "Failed to delete the custom example event" : "Falha ao excluir o evento de exemplo personalizado", + "Custom example event was deleted successfully" : "O evento de exemplo personalizado foi excluído com êxito", + "Import calendar event" : "Importar evento de calendário", + "Uploading a new event will overwrite the existing one." : "O upload de um novo evento substituirá o existente.", + "Upload event" : "Fazer upload do evento", "Availability" : "Disponibilidade", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Se você configurar seu horário de trabalho, outras pessoas verão quando você estiver ausente quando agendarem uma reunião.", "Absence" : "Ausência", @@ -304,19 +323,8 @@ "Send reminder notifications to calendar sharees as well" : "Enviar notificações de lembrete também para os compartilhadores de calendário", "Reminders are always sent to organizers and attendees." : "Lembretes são sempre enviados aos organizadores e participantes.", "Enable notifications for events via push" : "Ativar notificações para eventos via push", - "Cancel" : "Cancelar", - "Import" : "Importar", - "Error while saving settings" : "Erro ao salvar as configurações", - "Contact reset successfully" : "O contato foi reiniciado com sucesso", - "Error while resetting contact" : "Erro ao reiniciar o contato", - "Contact imported successfully" : "O contato foi importado com sucesso", - "Error while importing contact" : "Erro ao importar o contato", - "Example Content" : "Exemplo de Conteúdo", - "Set example content to be created on new user first login." : "Defina o exemplo de conteúdo a ser criado no primeiro login do novo usuário.", - "Import contact" : "Importar contato", - "Reset to default contact" : "Redefinir para o contato padrão", - "Import contacts" : "Importar contatos", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "A importação de um novo arquivo .vcf excluirá o contato padrão existente e o substituirá pelo novo. Deseja continuar?", + "Example content" : "Exemplo de conteúdo", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "O conteúdo de exemplo serve para mostrar os recursos do Nextcloud. O conteúdo padrão é fornecido com o Nextcloud e pode ser substituído por conteúdo personalizado.", "There was an error updating your attendance status." : "Houve um erro ao atualizar seu status de participação.", "Please contact the organizer directly." : "Por favor, contate o organizador diretamente.", "Are you accepting the invitation?" : "Você está aceitando o convite?", diff --git a/apps/dav/l10n/ru.js b/apps/dav/l10n/ru.js index e7c4a904ccc..e170bb36582 100644 --- a/apps/dav/l10n/ru.js +++ b/apps/dav/l10n/ru.js @@ -72,7 +72,77 @@ OC.L10N.register( "Description: %s" : "Описание: %s", "Where: %s" : "Где: %s", "%1$s via %2$s" : "%1$s через %2$s", + "In the past on %1$s for the entire day" : "В прошлом, %1$s, в течение всего дня", + "_In a minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["Через минуту, %1$s, в течение всего дня","Через %n минуты, %1$s, в течение всего дня","Через %n минут, %1$s, в течение всего дня","Через %n минут, %1$s, в течение всего дня"], + "_In a hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["Через час, %1$s, в течение всего дня","Через %n часа, %1$s, в течение всего дня","Через %n часов, %1$s, в течение всего дня","Через %n часов, %1$s, в течение всего дня"], + "_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["Через день, %1$s, в течение всего дня","Через %n дня, %1$s, в течение всего дня","Через %n дней,%1$s, в течение всего дня","Через %n дней, %1$s, в течение всего дня"], + "_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Через неделю, %1$s, в течение всего дня","Через %n недели, %1$s, в течение всего дня","Через %n недель, %1$s, в течение всего дня","Через %n недель, %1$s, в течение всего дня"], + "_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["Через месяц, %1$s, в течение всего дня","Через %n месяца, %1$s, в течение всего дня","Через %n месяцев, %1$s, в течение всего дня","Через %n месяцев, %1$s, в течение всего дня"], + "_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Через год, %1$s, в течение всего дня","Через %n года, %1$s, в течение всего дня","Через %n лет, %1$s, в течение всего дня","Через %n лет, %1$s, в течение всего дня"], + "In the past on %1$s between %2$s - %3$s" : "В прошлом, %1$s, с %2$s до %3$s", + "_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["Через минуту, %1$s, с %2$s до %3$s","Через %n минуты, %1$s, с %2$s до %3$s","Через %n минут, %1$s, с %2$s до %3$s","Через %n минут, %1$s, с %2$s до %3$s"], + "_In a hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["Через час, %1$s, с %2$s до %3$s","Через %n часа, %1$s, с %2$s до %3$s","Через %n часов, %1$s, с %2$s до %3$s","Через %n часов, %1$s, с %2$s до %3$s"], + "_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["Через день, %1$s, с %2$s до %3$s","Через %n дня %1$s, с %2$s до %3$s","Через %n дней, %1$s, с %2$s до %3$s","Через %n дней, %1$s, с %2$s до %3$s"], + "_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["Через неделю, %1$s, с %2$s до %3$s","Через %n недели, %1$s, с %2$s до %3$s","Через %n недель, %1$s, с %2$s до %3$s","Через %n недель, %1$s, с %2$s до %3$s"], + "_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["Через месяц, %1$s, с %2$s до %3$s","Через %n месяца, %1$s, с %2$s до %3$s","Через %n месяцев, %1$s, с %2$s до %3$s","Через %n месяцев, %1$s, с %2$s до %3$s"], + "_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["Через год, %1$s, с %2$s до %3$s","Через %n года, %1$s, с %2$s до %3$s","Через %n лет, %1$s, с %2$s до %3$s","Через %n лет, %1$s, с %2$s до %3$s"], + "Could not generate when statement" : "Не удалось сгенерировать выражение времени", "Every Day for the entire day" : "Каждый день в течение всего дня", + "Every Day for the entire day until %1$s" : "Каждый день весь день до %1$s", + "Every Day between %1$s - %2$s" : "Каждый день с %1$s по %2$s", + "Every Day between %1$s - %2$s until %3$s" : "Каждый день с %1$s до %2$s до %3$s", + "Every %1$d Days for the entire day" : "Каждые %1$d дней в течение всего дня", + "Every %1$d Days for the entire day until %2$s" : "Каждые %1$d дней в течение всего дня до %2$s", + "Every %1$d Days between %2$s - %3$s" : "Каждые %1$d дней с %2$s до %3$s", + "Every %1$d Days between %2$s - %3$s until %4$s" : "Каждые %1$d дней с %2$s до %3$s до %4$s", + "Could not generate event recurrence statement" : "Не удалось сгенерировать правило повторения события", + "Every Week on %1$s for the entire day" : "Каждую неделю в %1$s в течение всего дня", + "Every Week on %1$s for the entire day until %2$s" : "Каждую неделю по %1$s в течение всего дня до %2$s", + "Every Week on %1$s between %2$s - %3$s" : "Каждую неделю в %1$s с %2$s до %3$s", + "Every Week on %1$s between %2$s - %3$s until %4$s" : "Каждую неделю по %1$s с %2$s до %3$s до %4$s", + "Every %1$d Weeks on %2$s for the entire day" : "Каждые %1$d недель по %2$s в течение всего дня", + "Every %1$d Weeks on %2$s for the entire day until %3$s" : "Каждые %1$d недель по %2$s в течение всего дня до %3$s", + "Every %1$d Weeks on %2$s between %3$s - %4$s" : "Каждые %1$d недель по %2$s с %3$s до %4$s", + "Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Каждые %1$d недель по %2$s с %3$s до %4$s до %5$s", + "Every Month on the %1$s for the entire day" : "Каждый месяц %1$s в течение всего дня", + "Every Month on the %1$s for the entire day until %2$s" : "Каждый месяц %1$s в течение всего дня до %2$s", + "Every Month on the %1$s between %2$s - %3$s" : "Каждый месяц %1$s с %2$s до %3$s", + "Every Month on the %1$s between %2$s - %3$s until %4$s" : "Каждый месяц %1$s с %2$s до %3$s до %4$s", + "Every %1$d Months on the %2$s for the entire day" : "Каждые %1$d месяцев %2$s в течение всего дня", + "Every %1$d Months on the %2$s for the entire day until %3$s" : "Каждые %1$d месяцев %2$s в течение всего дня до %3$s", + "Every %1$d Months on the %2$s between %3$s - %4$s" : "Каждые %1$d месяцев %2$s с %3$s до %4$s", + "Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Каждые %1$d месяцев %2$s с %3$s до %4$s до %5$s", + "Every Year in %1$s on the %2$s for the entire day" : "Каждый год в %1$s %2$s в течение всего дня", + "Every Year in %1$s on the %2$s for the entire day until %3$s" : "Каждый год в %1$s %2$s в течение всего дня до %3$s", + "Every Year in %1$s on the %2$s between %3$s - %4$s" : "Каждый год в %1$s %2$s с %3$s до %4$s", + "Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Каждый год в %1$s %2$s с %3$s до %4$s до %5$s", + "Every %1$d Years in %2$s on the %3$s for the entire day" : "Каждые %1$d лет в %2$s %3$s в течение всего дня", + "Every %1$d Years in %2$s on the %3$s for the entire day until %4$s" : "Каждые %1$d лет в %2$s %3$s в течение всего дня до %4$s", + "Every %1$d Years in %2$s on the %3$s between %4$s - %5$s" : "Каждые %1$d лет в %2$s %3$s с %4$s до %5$s", + "Every %1$d Years in %2$s on the %3$s between %4$s - %5$s until %6$s" : "Каждые %1$d лет в %2$s %3$s с %4$s до %5$s до %6$s", + "On specific dates for the entire day until %1$s" : "В определённые даты, весь день до %1$s", + "On specific dates between %1$s - %2$s until %3$s" : "В определённые даты с %1$s по %2$s до %3$s", + "In the past on %1$s" : "В прошлом, %1$s", + "_In a minute on %1$s_::_In %n minutes on %1$s_" : ["Через минуту, %1$s","Через %n минуты, %1$s","Через %n минут, %1$s","Через %n минут, %1$s"], + "_In a hour on %1$s_::_In %n hours on %1$s_" : ["Через час, %1$s","Через %n часа, %1$s","Через %n часов, %1$s","Через %n часов, %1$s"], + "_In a day on %1$s_::_In %n days on %1$s_" : ["Через день, %1$s","Через %n дня, %1$s","Через %n дней, %1$s","Через %n дней, %1$s"], + "_In a week on %1$s_::_In %n weeks on %1$s_" : ["Через неделю, %1$s","Через %n недели,%1$s","Через %n недель, %1$s","Через %n недель, %1$s"], + "_In a month on %1$s_::_In %n months on %1$s_" : ["Через месяц, %1$s","Через %n месяца, %1$s","Через %n месяцев, %1$s","Через %n месяцев, %1$s"], + "_In a year on %1$s_::_In %n years on %1$s_" : ["Через год, %1$s","Через %n года, %1$s","Через %n лет, %1$s","Через %n лет, %1$s"], + "In the past on %1$s then on %2$s" : "В прошлом, %1$s, затем %2$s", + "_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Через минуту, %1$s, затем %2$s","Через %n минуты, %1$s, затем %2$s","Через %n минут, %1$s, затем %2$s","Через %n минут, %1$s, затем %2$s"], + "_In a hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["Через час, %1$s, затем %2$s","Через %n часа, %1$s, затем %2$s","Через %n часов, %1$s, затем %2$s","Через %n часов, %1$s, затем %2$s"], + "_In a day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["Через день, %1$s, затем %2$s","Через %n дня, %1$s, затем %2$s","Через %n дней, %1$s, затем %2$s","Через %n дней, %1$s, затем %2$s"], + "_In a week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["Через неделю, %1$s, затем %2$s","Через %n недели, %1$s, затем %2$s","Через %n недель, %1$s, затем %2$s","Через %n недель, %1$s, затем %2$s"], + "_In a month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["Через месяц, %1$s, затем %2$s","Через %n месяца, %1$s, затем %2$s","Через %n месяцев, %1$s, затем %2$s","Через %n месяцев, %1$s, затем %2$s"], + "_In a year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["Через год, %1$s, затем %2$s","Через %n года, %1$s, затем %2$s","Через %n лет, %1$s, затем %2$s","Через %n лет, %1$s, затем %2$s"], + "In the past on %1$s then on %2$s and %3$s" : "В прошлом, %1$s, затем %2$s и %3$s", + "_In a minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["Через минуту, %1$s, затем %2$s и %3$s","Через %n минуты, %1$s, затем %2$s и %3$s","Через %n минут, %1$s, затем %2$s и %3$s","Через %n минут, %1$s, затем %2$s и %3$s"], + "_In a hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["Через час, %1$s, затем %2$s и %3$s","Через %n часа, %1$s, затем %2$s и %3$s","Через %n часов, %1$s, затем %2$s и %3$s","Через %n часов, %1$s, затем %2$s и %3$s"], + "_In a day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["Через день, %1$s, затем %2$s и %3$s","Через %n дня, %1$s, затем %2$s и %3$s","Через %n дней, %1$s, затем %2$s и %3$s","Через %n дней, %1$s, затем %2$s и %3$s"], + "_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["Через неделю, %1$s, затем %2$s и %3$s","Через %n недели, %1$s, затем %2$s и %3$s","Через %n недель, %1$s, затем %2$s и %3$s","Через %n недель, %1$s, затем %2$s и %3$s"], + "_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["Через месяц, %1$s, затем %2$s и %3$s","Через %n месяца, %1$s, затем %2$s и %3$s","Через %n месяцев, %1$s, затем %2$s и %3$s","Через %n месяцев, %1$s, затем %2$s и %3$s"], + "_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["Через год, %1$s, затем %2$s и %3$s","Через %n года, %1$s, затем %2$s и %3$s","Через %n лет, %1$s, затем %2$s и %3$s","Через %n лет, %1$s, затем %2$s и %3$s"], "Could not generate next recurrence statement" : "Не удалось сгенерировать следующий оператор повторения", "Cancelled: %1$s" : "Событие отменено: %1$s", "\"%1$s\" has been canceled" : "Событие «%1$s» отменено", @@ -119,10 +189,12 @@ OC.L10N.register( "Second" : "Второй", "Third" : "Третий", "Fourth" : "Четвертый", + "Fifth" : "Пятый", "Last" : "Последний", "Second Last" : "Предпоследний", - "Third Last" : "Третий по счету", - "Fourth Last" : "Четвертый по счету", + "Third Last" : "Третий с конца", + "Fourth Last" : "Четвёртый с конца", + "Fifth Last" : "Пятый с конца", "Contacts" : "Контакты", "{actor} created address book {addressbook}" : "{actor} создал(а) адресную книгу «{addressbook}»", "You created address book {addressbook}" : "Вы создали адресную книгу «{addressbook}»", @@ -178,6 +250,9 @@ OC.L10N.register( "Completed on %s" : "Завершено %s", "Due on %s by %s" : "До %s %s", "Due on %s" : "До %s", + "System Address Book" : "Системная адресная книга", + "The system address book contains contact information for all users in your instance." : "Системная адресная книга содержит контактную информацию всех пользователей в вашем инстансе.", + "Enable System Address Book" : "Включить системную адресную книгу", "DAV system address book" : "Системная адресная книга DAV", "No outstanding DAV system address book sync." : "Синхронизация системной адресной книги DAV выполнена.", "The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "Синхронизация системной адресной книги DAV ещё не запущена, поскольку в этом экземпляре более 1000 пользователей или произошла ошибка. Перезапустите синхронизацию вручную используя команду «occ dav:sync-system-addressbook».", @@ -215,6 +290,25 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Выберите время начала в {dayName}", "Pick a end time for {dayName}" : "Выберите время окончания в {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Автоматически изменять статус на «Не беспокоить» вне интервала доступности для отключения уведомлений.", + "Cancel" : "Отмена", + "Import" : "Импортировать", + "Error while saving settings" : "Ошибка при сохранении параметров", + "Contact reset successfully" : "Контакт успешно сброшен", + "Error while resetting contact" : "Ошибка при сбросе контакта", + "Contact imported successfully" : " Контакт успешно импортирован", + "Error while importing contact" : " Ошибка при импорте контакта", + "Import contact" : "Импортировать контакт", + "Reset to default" : "Сбросить изменения", + "Import contacts" : "Импортировать контакты", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Импорт нового файла .vcf удалит существующий контакт по умолчанию и заменит его новым. Продолжить?", + "Failed to save example event creation setting" : "Не удалось сохранить настройки создания примера события", + "Failed to upload the example event" : "Не удалось загрузить пример события", + "Custom example event was saved successfully" : "Настраиваемый пример события успешно сохранён", + "Failed to delete the custom example event" : "Не удалось удалить настраиваемый пример события", + "Custom example event was deleted successfully" : "Настраиваемый пример события успешно удалён", + "Import calendar event" : "Импортировать событие календаря", + "Uploading a new event will overwrite the existing one." : " Загрузка нового события перезапишет существующее.", + "Upload event" : "Загрузить событие", "Availability" : "Рабочее время", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Если вы настроите свой расписание работы, другие пользователи при планировании встреч смогут видеть, когда вас нет в офисе.", "Absence" : "Отсутствие", @@ -231,9 +325,8 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Отправлять напоминания всем пользователям, имеющим доступ к календарю", "Reminders are always sent to organizers and attendees." : "Организаторам и участникам уведомления отправляются во всех случаях.", "Enable notifications for events via push" : "Включить уведомления о событиях с помощью push", - "Cancel" : "Отмена", - "Import" : "Импортировать", - "Error while saving settings" : "Ошибка при сохранении параметров", + "Example content" : "Пример содержимого", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Пример содержимого демонстрирует возможности Nextcloud. По умолчанию поставляется стандартное содержимое, которое можно заменить настраиваемым.", "There was an error updating your attendance status." : "Ошибка обновления статуса участия.", "Please contact the organizer directly." : "Обратитесь к организатору напрямую.", "Are you accepting the invitation?" : "Принять приглашение?", diff --git a/apps/dav/l10n/ru.json b/apps/dav/l10n/ru.json index 856b9d9fe21..d1da881a4c6 100644 --- a/apps/dav/l10n/ru.json +++ b/apps/dav/l10n/ru.json @@ -70,7 +70,77 @@ "Description: %s" : "Описание: %s", "Where: %s" : "Где: %s", "%1$s via %2$s" : "%1$s через %2$s", + "In the past on %1$s for the entire day" : "В прошлом, %1$s, в течение всего дня", + "_In a minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["Через минуту, %1$s, в течение всего дня","Через %n минуты, %1$s, в течение всего дня","Через %n минут, %1$s, в течение всего дня","Через %n минут, %1$s, в течение всего дня"], + "_In a hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["Через час, %1$s, в течение всего дня","Через %n часа, %1$s, в течение всего дня","Через %n часов, %1$s, в течение всего дня","Через %n часов, %1$s, в течение всего дня"], + "_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["Через день, %1$s, в течение всего дня","Через %n дня, %1$s, в течение всего дня","Через %n дней,%1$s, в течение всего дня","Через %n дней, %1$s, в течение всего дня"], + "_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Через неделю, %1$s, в течение всего дня","Через %n недели, %1$s, в течение всего дня","Через %n недель, %1$s, в течение всего дня","Через %n недель, %1$s, в течение всего дня"], + "_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["Через месяц, %1$s, в течение всего дня","Через %n месяца, %1$s, в течение всего дня","Через %n месяцев, %1$s, в течение всего дня","Через %n месяцев, %1$s, в течение всего дня"], + "_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Через год, %1$s, в течение всего дня","Через %n года, %1$s, в течение всего дня","Через %n лет, %1$s, в течение всего дня","Через %n лет, %1$s, в течение всего дня"], + "In the past on %1$s between %2$s - %3$s" : "В прошлом, %1$s, с %2$s до %3$s", + "_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["Через минуту, %1$s, с %2$s до %3$s","Через %n минуты, %1$s, с %2$s до %3$s","Через %n минут, %1$s, с %2$s до %3$s","Через %n минут, %1$s, с %2$s до %3$s"], + "_In a hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["Через час, %1$s, с %2$s до %3$s","Через %n часа, %1$s, с %2$s до %3$s","Через %n часов, %1$s, с %2$s до %3$s","Через %n часов, %1$s, с %2$s до %3$s"], + "_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["Через день, %1$s, с %2$s до %3$s","Через %n дня %1$s, с %2$s до %3$s","Через %n дней, %1$s, с %2$s до %3$s","Через %n дней, %1$s, с %2$s до %3$s"], + "_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["Через неделю, %1$s, с %2$s до %3$s","Через %n недели, %1$s, с %2$s до %3$s","Через %n недель, %1$s, с %2$s до %3$s","Через %n недель, %1$s, с %2$s до %3$s"], + "_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["Через месяц, %1$s, с %2$s до %3$s","Через %n месяца, %1$s, с %2$s до %3$s","Через %n месяцев, %1$s, с %2$s до %3$s","Через %n месяцев, %1$s, с %2$s до %3$s"], + "_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["Через год, %1$s, с %2$s до %3$s","Через %n года, %1$s, с %2$s до %3$s","Через %n лет, %1$s, с %2$s до %3$s","Через %n лет, %1$s, с %2$s до %3$s"], + "Could not generate when statement" : "Не удалось сгенерировать выражение времени", "Every Day for the entire day" : "Каждый день в течение всего дня", + "Every Day for the entire day until %1$s" : "Каждый день весь день до %1$s", + "Every Day between %1$s - %2$s" : "Каждый день с %1$s по %2$s", + "Every Day between %1$s - %2$s until %3$s" : "Каждый день с %1$s до %2$s до %3$s", + "Every %1$d Days for the entire day" : "Каждые %1$d дней в течение всего дня", + "Every %1$d Days for the entire day until %2$s" : "Каждые %1$d дней в течение всего дня до %2$s", + "Every %1$d Days between %2$s - %3$s" : "Каждые %1$d дней с %2$s до %3$s", + "Every %1$d Days between %2$s - %3$s until %4$s" : "Каждые %1$d дней с %2$s до %3$s до %4$s", + "Could not generate event recurrence statement" : "Не удалось сгенерировать правило повторения события", + "Every Week on %1$s for the entire day" : "Каждую неделю в %1$s в течение всего дня", + "Every Week on %1$s for the entire day until %2$s" : "Каждую неделю по %1$s в течение всего дня до %2$s", + "Every Week on %1$s between %2$s - %3$s" : "Каждую неделю в %1$s с %2$s до %3$s", + "Every Week on %1$s between %2$s - %3$s until %4$s" : "Каждую неделю по %1$s с %2$s до %3$s до %4$s", + "Every %1$d Weeks on %2$s for the entire day" : "Каждые %1$d недель по %2$s в течение всего дня", + "Every %1$d Weeks on %2$s for the entire day until %3$s" : "Каждые %1$d недель по %2$s в течение всего дня до %3$s", + "Every %1$d Weeks on %2$s between %3$s - %4$s" : "Каждые %1$d недель по %2$s с %3$s до %4$s", + "Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Каждые %1$d недель по %2$s с %3$s до %4$s до %5$s", + "Every Month on the %1$s for the entire day" : "Каждый месяц %1$s в течение всего дня", + "Every Month on the %1$s for the entire day until %2$s" : "Каждый месяц %1$s в течение всего дня до %2$s", + "Every Month on the %1$s between %2$s - %3$s" : "Каждый месяц %1$s с %2$s до %3$s", + "Every Month on the %1$s between %2$s - %3$s until %4$s" : "Каждый месяц %1$s с %2$s до %3$s до %4$s", + "Every %1$d Months on the %2$s for the entire day" : "Каждые %1$d месяцев %2$s в течение всего дня", + "Every %1$d Months on the %2$s for the entire day until %3$s" : "Каждые %1$d месяцев %2$s в течение всего дня до %3$s", + "Every %1$d Months on the %2$s between %3$s - %4$s" : "Каждые %1$d месяцев %2$s с %3$s до %4$s", + "Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Каждые %1$d месяцев %2$s с %3$s до %4$s до %5$s", + "Every Year in %1$s on the %2$s for the entire day" : "Каждый год в %1$s %2$s в течение всего дня", + "Every Year in %1$s on the %2$s for the entire day until %3$s" : "Каждый год в %1$s %2$s в течение всего дня до %3$s", + "Every Year in %1$s on the %2$s between %3$s - %4$s" : "Каждый год в %1$s %2$s с %3$s до %4$s", + "Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Каждый год в %1$s %2$s с %3$s до %4$s до %5$s", + "Every %1$d Years in %2$s on the %3$s for the entire day" : "Каждые %1$d лет в %2$s %3$s в течение всего дня", + "Every %1$d Years in %2$s on the %3$s for the entire day until %4$s" : "Каждые %1$d лет в %2$s %3$s в течение всего дня до %4$s", + "Every %1$d Years in %2$s on the %3$s between %4$s - %5$s" : "Каждые %1$d лет в %2$s %3$s с %4$s до %5$s", + "Every %1$d Years in %2$s on the %3$s between %4$s - %5$s until %6$s" : "Каждые %1$d лет в %2$s %3$s с %4$s до %5$s до %6$s", + "On specific dates for the entire day until %1$s" : "В определённые даты, весь день до %1$s", + "On specific dates between %1$s - %2$s until %3$s" : "В определённые даты с %1$s по %2$s до %3$s", + "In the past on %1$s" : "В прошлом, %1$s", + "_In a minute on %1$s_::_In %n minutes on %1$s_" : ["Через минуту, %1$s","Через %n минуты, %1$s","Через %n минут, %1$s","Через %n минут, %1$s"], + "_In a hour on %1$s_::_In %n hours on %1$s_" : ["Через час, %1$s","Через %n часа, %1$s","Через %n часов, %1$s","Через %n часов, %1$s"], + "_In a day on %1$s_::_In %n days on %1$s_" : ["Через день, %1$s","Через %n дня, %1$s","Через %n дней, %1$s","Через %n дней, %1$s"], + "_In a week on %1$s_::_In %n weeks on %1$s_" : ["Через неделю, %1$s","Через %n недели,%1$s","Через %n недель, %1$s","Через %n недель, %1$s"], + "_In a month on %1$s_::_In %n months on %1$s_" : ["Через месяц, %1$s","Через %n месяца, %1$s","Через %n месяцев, %1$s","Через %n месяцев, %1$s"], + "_In a year on %1$s_::_In %n years on %1$s_" : ["Через год, %1$s","Через %n года, %1$s","Через %n лет, %1$s","Через %n лет, %1$s"], + "In the past on %1$s then on %2$s" : "В прошлом, %1$s, затем %2$s", + "_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Через минуту, %1$s, затем %2$s","Через %n минуты, %1$s, затем %2$s","Через %n минут, %1$s, затем %2$s","Через %n минут, %1$s, затем %2$s"], + "_In a hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["Через час, %1$s, затем %2$s","Через %n часа, %1$s, затем %2$s","Через %n часов, %1$s, затем %2$s","Через %n часов, %1$s, затем %2$s"], + "_In a day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["Через день, %1$s, затем %2$s","Через %n дня, %1$s, затем %2$s","Через %n дней, %1$s, затем %2$s","Через %n дней, %1$s, затем %2$s"], + "_In a week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["Через неделю, %1$s, затем %2$s","Через %n недели, %1$s, затем %2$s","Через %n недель, %1$s, затем %2$s","Через %n недель, %1$s, затем %2$s"], + "_In a month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["Через месяц, %1$s, затем %2$s","Через %n месяца, %1$s, затем %2$s","Через %n месяцев, %1$s, затем %2$s","Через %n месяцев, %1$s, затем %2$s"], + "_In a year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["Через год, %1$s, затем %2$s","Через %n года, %1$s, затем %2$s","Через %n лет, %1$s, затем %2$s","Через %n лет, %1$s, затем %2$s"], + "In the past on %1$s then on %2$s and %3$s" : "В прошлом, %1$s, затем %2$s и %3$s", + "_In a minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["Через минуту, %1$s, затем %2$s и %3$s","Через %n минуты, %1$s, затем %2$s и %3$s","Через %n минут, %1$s, затем %2$s и %3$s","Через %n минут, %1$s, затем %2$s и %3$s"], + "_In a hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["Через час, %1$s, затем %2$s и %3$s","Через %n часа, %1$s, затем %2$s и %3$s","Через %n часов, %1$s, затем %2$s и %3$s","Через %n часов, %1$s, затем %2$s и %3$s"], + "_In a day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["Через день, %1$s, затем %2$s и %3$s","Через %n дня, %1$s, затем %2$s и %3$s","Через %n дней, %1$s, затем %2$s и %3$s","Через %n дней, %1$s, затем %2$s и %3$s"], + "_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["Через неделю, %1$s, затем %2$s и %3$s","Через %n недели, %1$s, затем %2$s и %3$s","Через %n недель, %1$s, затем %2$s и %3$s","Через %n недель, %1$s, затем %2$s и %3$s"], + "_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["Через месяц, %1$s, затем %2$s и %3$s","Через %n месяца, %1$s, затем %2$s и %3$s","Через %n месяцев, %1$s, затем %2$s и %3$s","Через %n месяцев, %1$s, затем %2$s и %3$s"], + "_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["Через год, %1$s, затем %2$s и %3$s","Через %n года, %1$s, затем %2$s и %3$s","Через %n лет, %1$s, затем %2$s и %3$s","Через %n лет, %1$s, затем %2$s и %3$s"], "Could not generate next recurrence statement" : "Не удалось сгенерировать следующий оператор повторения", "Cancelled: %1$s" : "Событие отменено: %1$s", "\"%1$s\" has been canceled" : "Событие «%1$s» отменено", @@ -117,10 +187,12 @@ "Second" : "Второй", "Third" : "Третий", "Fourth" : "Четвертый", + "Fifth" : "Пятый", "Last" : "Последний", "Second Last" : "Предпоследний", - "Third Last" : "Третий по счету", - "Fourth Last" : "Четвертый по счету", + "Third Last" : "Третий с конца", + "Fourth Last" : "Четвёртый с конца", + "Fifth Last" : "Пятый с конца", "Contacts" : "Контакты", "{actor} created address book {addressbook}" : "{actor} создал(а) адресную книгу «{addressbook}»", "You created address book {addressbook}" : "Вы создали адресную книгу «{addressbook}»", @@ -176,6 +248,9 @@ "Completed on %s" : "Завершено %s", "Due on %s by %s" : "До %s %s", "Due on %s" : "До %s", + "System Address Book" : "Системная адресная книга", + "The system address book contains contact information for all users in your instance." : "Системная адресная книга содержит контактную информацию всех пользователей в вашем инстансе.", + "Enable System Address Book" : "Включить системную адресную книгу", "DAV system address book" : "Системная адресная книга DAV", "No outstanding DAV system address book sync." : "Синхронизация системной адресной книги DAV выполнена.", "The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "Синхронизация системной адресной книги DAV ещё не запущена, поскольку в этом экземпляре более 1000 пользователей или произошла ошибка. Перезапустите синхронизацию вручную используя команду «occ dav:sync-system-addressbook».", @@ -213,6 +288,25 @@ "Pick a start time for {dayName}" : "Выберите время начала в {dayName}", "Pick a end time for {dayName}" : "Выберите время окончания в {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Автоматически изменять статус на «Не беспокоить» вне интервала доступности для отключения уведомлений.", + "Cancel" : "Отмена", + "Import" : "Импортировать", + "Error while saving settings" : "Ошибка при сохранении параметров", + "Contact reset successfully" : "Контакт успешно сброшен", + "Error while resetting contact" : "Ошибка при сбросе контакта", + "Contact imported successfully" : " Контакт успешно импортирован", + "Error while importing contact" : " Ошибка при импорте контакта", + "Import contact" : "Импортировать контакт", + "Reset to default" : "Сбросить изменения", + "Import contacts" : "Импортировать контакты", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Импорт нового файла .vcf удалит существующий контакт по умолчанию и заменит его новым. Продолжить?", + "Failed to save example event creation setting" : "Не удалось сохранить настройки создания примера события", + "Failed to upload the example event" : "Не удалось загрузить пример события", + "Custom example event was saved successfully" : "Настраиваемый пример события успешно сохранён", + "Failed to delete the custom example event" : "Не удалось удалить настраиваемый пример события", + "Custom example event was deleted successfully" : "Настраиваемый пример события успешно удалён", + "Import calendar event" : "Импортировать событие календаря", + "Uploading a new event will overwrite the existing one." : " Загрузка нового события перезапишет существующее.", + "Upload event" : "Загрузить событие", "Availability" : "Рабочее время", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Если вы настроите свой расписание работы, другие пользователи при планировании встреч смогут видеть, когда вас нет в офисе.", "Absence" : "Отсутствие", @@ -229,9 +323,8 @@ "Send reminder notifications to calendar sharees as well" : "Отправлять напоминания всем пользователям, имеющим доступ к календарю", "Reminders are always sent to organizers and attendees." : "Организаторам и участникам уведомления отправляются во всех случаях.", "Enable notifications for events via push" : "Включить уведомления о событиях с помощью push", - "Cancel" : "Отмена", - "Import" : "Импортировать", - "Error while saving settings" : "Ошибка при сохранении параметров", + "Example content" : "Пример содержимого", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Пример содержимого демонстрирует возможности Nextcloud. По умолчанию поставляется стандартное содержимое, которое можно заменить настраиваемым.", "There was an error updating your attendance status." : "Ошибка обновления статуса участия.", "Please contact the organizer directly." : "Обратитесь к организатору напрямую.", "Are you accepting the invitation?" : "Принять приглашение?", diff --git a/apps/dav/l10n/sk.js b/apps/dav/l10n/sk.js index 4e07e77518b..3282ec3109f 100644 --- a/apps/dav/l10n/sk.js +++ b/apps/dav/l10n/sk.js @@ -290,6 +290,17 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Vyberte začiatočný čas pre {dayName}", "Pick a end time for {dayName}" : "Vyberte koncový čas pre {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Automaticky nastaviť stav používateľa na „Nerušiť“ ak nie ste dostupný, pre stlmenie všetkých upozornení.", + "Cancel" : "Zrušiť", + "Import" : "Import", + "Error while saving settings" : "Chyba pri ukladaní nastavení", + "Contact reset successfully" : "Kontakt bol úspešne resetovaný", + "Error while resetting contact" : "Chyba počas resetovania kontaktu ", + "Contact imported successfully" : "Kontakt bol úspešne importovaný", + "Error while importing contact" : "Chyba pri importovaní kontaktu", + "Import contact" : "Importovať kontakt", + "Reset to default" : "Nastaviť predvolené", + "Import contacts" : "Importovať kontakty", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importovaním nového súboru .vcf sa vymaže existujúci predvolený kontakt a nahradí sa novým. Chcete pokračovať?", "Availability" : "Dostupnosť", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Ak nakonfigurujete svoj pracovný čas, ostatní užívatelia vás uvidia ako neprítomného, keď si rezervujete schôdzku", "Absence" : "Neprítomnosť", @@ -306,19 +317,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Posielať upozornenia na pripomienky aj zdieľaným osobám v kalendári", "Reminders are always sent to organizers and attendees." : "Upozornenia sa vždy posielajú organizátorom a účastníkom.", "Enable notifications for events via push" : "Zapnúť oznámenia o udalostiach prostredníctvom technológie push.", - "Cancel" : "Zrušiť", - "Import" : "Import", - "Error while saving settings" : "Chyba pri ukladaní nastavení", - "Contact reset successfully" : "Kontakt bol úspešne resetovaný", - "Error while resetting contact" : "Chyba počas resetovania kontaktu ", - "Contact imported successfully" : "Kontakt bol úspešne importovaný", - "Error while importing contact" : "Chyba pri importovaní kontaktu", - "Example Content" : "Príklad Obsahu", - "Set example content to be created on new user first login." : "Nastavte vzorový obsah, ktorý sa vytvorí pri prvom prihlásení nového používateľa.", - "Import contact" : "Importovať kontakt", - "Reset to default contact" : "Resetovať na predvolený kontakt", - "Import contacts" : "Importovať kontakty", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importovaním nového súboru .vcf sa vymaže existujúci predvolený kontakt a nahradí sa novým. Chcete pokračovať?", "There was an error updating your attendance status." : "Nastal problém pri aktualizácii Vašej účasti.", "Please contact the organizer directly." : "Prosím kontaktujte priamo organizátora.", "Are you accepting the invitation?" : "Príjmate pozvánku?", diff --git a/apps/dav/l10n/sk.json b/apps/dav/l10n/sk.json index 6a04f7a08b1..a0da2d19cd3 100644 --- a/apps/dav/l10n/sk.json +++ b/apps/dav/l10n/sk.json @@ -288,6 +288,17 @@ "Pick a start time for {dayName}" : "Vyberte začiatočný čas pre {dayName}", "Pick a end time for {dayName}" : "Vyberte koncový čas pre {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Automaticky nastaviť stav používateľa na „Nerušiť“ ak nie ste dostupný, pre stlmenie všetkých upozornení.", + "Cancel" : "Zrušiť", + "Import" : "Import", + "Error while saving settings" : "Chyba pri ukladaní nastavení", + "Contact reset successfully" : "Kontakt bol úspešne resetovaný", + "Error while resetting contact" : "Chyba počas resetovania kontaktu ", + "Contact imported successfully" : "Kontakt bol úspešne importovaný", + "Error while importing contact" : "Chyba pri importovaní kontaktu", + "Import contact" : "Importovať kontakt", + "Reset to default" : "Nastaviť predvolené", + "Import contacts" : "Importovať kontakty", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importovaním nového súboru .vcf sa vymaže existujúci predvolený kontakt a nahradí sa novým. Chcete pokračovať?", "Availability" : "Dostupnosť", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Ak nakonfigurujete svoj pracovný čas, ostatní užívatelia vás uvidia ako neprítomného, keď si rezervujete schôdzku", "Absence" : "Neprítomnosť", @@ -304,19 +315,6 @@ "Send reminder notifications to calendar sharees as well" : "Posielať upozornenia na pripomienky aj zdieľaným osobám v kalendári", "Reminders are always sent to organizers and attendees." : "Upozornenia sa vždy posielajú organizátorom a účastníkom.", "Enable notifications for events via push" : "Zapnúť oznámenia o udalostiach prostredníctvom technológie push.", - "Cancel" : "Zrušiť", - "Import" : "Import", - "Error while saving settings" : "Chyba pri ukladaní nastavení", - "Contact reset successfully" : "Kontakt bol úspešne resetovaný", - "Error while resetting contact" : "Chyba počas resetovania kontaktu ", - "Contact imported successfully" : "Kontakt bol úspešne importovaný", - "Error while importing contact" : "Chyba pri importovaní kontaktu", - "Example Content" : "Príklad Obsahu", - "Set example content to be created on new user first login." : "Nastavte vzorový obsah, ktorý sa vytvorí pri prvom prihlásení nového používateľa.", - "Import contact" : "Importovať kontakt", - "Reset to default contact" : "Resetovať na predvolený kontakt", - "Import contacts" : "Importovať kontakty", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importovaním nového súboru .vcf sa vymaže existujúci predvolený kontakt a nahradí sa novým. Chcete pokračovať?", "There was an error updating your attendance status." : "Nastal problém pri aktualizácii Vašej účasti.", "Please contact the organizer directly." : "Prosím kontaktujte priamo organizátora.", "Are you accepting the invitation?" : "Príjmate pozvánku?", diff --git a/apps/dav/l10n/sl.js b/apps/dav/l10n/sl.js index ebc4713c759..f33a677c95c 100644 --- a/apps/dav/l10n/sl.js +++ b/apps/dav/l10n/sl.js @@ -198,6 +198,10 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Izbor časa začetka za {dayName}", "Pick a end time for {dayName}" : "Izbor časa konca za {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Samodejno nastavi stanje uporabnika na »Ne moti« in zavračaj prikaz obvestil izven časa razpoložljivosti.", + "Cancel" : "Prekliči", + "Import" : "Uvozi", + "Error while saving settings" : "Prišlo je do napake med shranjevanjem nastavitev", + "Reset to default" : "Ponastavi na privzeto", "Availability" : "Razpoložljivost", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Če nastavite delovni čas, bodo drugi uporabniki pri izbiri časa sestanka videli, kdaj ste zasedeni.", "Absence" : "Odsotnost", @@ -214,9 +218,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Pošiljanje opomnikov tudi naročnikom koledarja.", "Reminders are always sent to organizers and attendees." : "Opomniki bodo vedno poslani organizatorjem in udeležencem.", "Enable notifications for events via push" : "Omogoči potisna obvestila za dogodke", - "Cancel" : "Prekliči", - "Import" : "Uvozi", - "Error while saving settings" : "Prišlo je do napake med shranjevanjem nastavitev", "There was an error updating your attendance status." : "Prišlo je do napake med posodabljanjem vaše udeležbe.", "Please contact the organizer directly." : "Z organizatorjem stopite neposredno v stik.", "Are you accepting the invitation?" : "Ali želite sprejeti povabilo?", diff --git a/apps/dav/l10n/sl.json b/apps/dav/l10n/sl.json index 0959ee73b60..423b215a669 100644 --- a/apps/dav/l10n/sl.json +++ b/apps/dav/l10n/sl.json @@ -196,6 +196,10 @@ "Pick a start time for {dayName}" : "Izbor časa začetka za {dayName}", "Pick a end time for {dayName}" : "Izbor časa konca za {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Samodejno nastavi stanje uporabnika na »Ne moti« in zavračaj prikaz obvestil izven časa razpoložljivosti.", + "Cancel" : "Prekliči", + "Import" : "Uvozi", + "Error while saving settings" : "Prišlo je do napake med shranjevanjem nastavitev", + "Reset to default" : "Ponastavi na privzeto", "Availability" : "Razpoložljivost", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Če nastavite delovni čas, bodo drugi uporabniki pri izbiri časa sestanka videli, kdaj ste zasedeni.", "Absence" : "Odsotnost", @@ -212,9 +216,6 @@ "Send reminder notifications to calendar sharees as well" : "Pošiljanje opomnikov tudi naročnikom koledarja.", "Reminders are always sent to organizers and attendees." : "Opomniki bodo vedno poslani organizatorjem in udeležencem.", "Enable notifications for events via push" : "Omogoči potisna obvestila za dogodke", - "Cancel" : "Prekliči", - "Import" : "Uvozi", - "Error while saving settings" : "Prišlo je do napake med shranjevanjem nastavitev", "There was an error updating your attendance status." : "Prišlo je do napake med posodabljanjem vaše udeležbe.", "Please contact the organizer directly." : "Z organizatorjem stopite neposredno v stik.", "Are you accepting the invitation?" : "Ali želite sprejeti povabilo?", diff --git a/apps/dav/l10n/sr.js b/apps/dav/l10n/sr.js index 364fe15483e..c33b7c28923 100644 --- a/apps/dav/l10n/sr.js +++ b/apps/dav/l10n/sr.js @@ -290,6 +290,25 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Изаберите време почетка за {dayName}", "Pick a end time for {dayName}" : "Изаберите време завршетка за {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Аутоматски поставља статус кориниска на „Не узнемиравај” како би се ван доступности пригушила сва обавештења.", + "Cancel" : "Откажи", + "Import" : "Увоз", + "Error while saving settings" : "Грешка приликом чувања подешавања", + "Contact reset successfully" : "Контакт је успешно ресетован", + "Error while resetting contact" : "Грешка приликом ресетовања контакта", + "Contact imported successfully" : "Контакт је успешно увезен", + "Error while importing contact" : "Грешка током увоза контакта", + "Import contact" : "Увези контакт", + "Reset to default" : "Врати на подразумевано", + "Import contacts" : "Увези контакте", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Увоз новог .vcf фајла ће да обрише постојећи подразумевани контакт и замениће га са новим. Желите ли да наставите?", + "Failed to save example event creation setting" : "Није успело чување подешавања креирања догађаја за пример", + "Failed to upload the example event" : "Није успело отпремање догађаја за пример", + "Custom example event was saved successfully" : "Произвољни догађај за пример је успешно сачуван", + "Failed to delete the custom example event" : "Произвољни догађај за пример није могао да се обрише", + "Custom example event was deleted successfully" : "Произвољни догађај за пример је успешно обрисан", + "Import calendar event" : "Увоз догађаја календара", + "Uploading a new event will overwrite the existing one." : "Отпремање новог догађаја ће да препише постојећи.", + "Upload event" : "Отпреми догађај", "Availability" : "Доступност", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Ако подесите своје радне сате, када буду заказивали састанак, други људи ће видети када сте ван канцеларије.", "Absence" : "Одсутност", @@ -306,19 +325,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" : "Укључи обавештења за догађаје преко гурања догађаја", - "Cancel" : "Откажи", - "Import" : "Увоз", - "Error while saving settings" : "Грешка приликом чувања подешавања", - "Contact reset successfully" : "Контакт је успешно ресетован", - "Error while resetting contact" : "Грешка приликом ресетовања контакта", - "Contact imported successfully" : "Контакт је успешно увезен", - "Error while importing contact" : "Грешка током увоза контакта", - "Example Content" : "Пример садржаја", - "Set example content to be created on new user first login." : "Постављање примера садржаја који се креира приликом прве пријаве новог корисника.", - "Import contact" : "Увези контакт", - "Reset to default contact" : "Ресетуј на подразумевани контакт", - "Import contacts" : "Увези контакте", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Увоз новог .vcf фајла ће да обрише постојећи подразумевани контакт и замениће га са новим. Желите ли да наставите?", + "Example content" : "Садржај за пример", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Садржај за пример служи да покаже Nextcloud могућности. Подразумевани садржај се испоручује уз Nextcloud и може да се замени произвољним.", "There was an error updating your attendance status." : "Десила се грешка приликом ажурирања статуса Вашег присуства.", "Please contact the organizer directly." : "Контактирајте директно организатора.", "Are you accepting the invitation?" : "Да ли прихватате позивницу?", diff --git a/apps/dav/l10n/sr.json b/apps/dav/l10n/sr.json index 5bfd35edf76..7df27149b4f 100644 --- a/apps/dav/l10n/sr.json +++ b/apps/dav/l10n/sr.json @@ -288,6 +288,25 @@ "Pick a start time for {dayName}" : "Изаберите време почетка за {dayName}", "Pick a end time for {dayName}" : "Изаберите време завршетка за {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Аутоматски поставља статус кориниска на „Не узнемиравај” како би се ван доступности пригушила сва обавештења.", + "Cancel" : "Откажи", + "Import" : "Увоз", + "Error while saving settings" : "Грешка приликом чувања подешавања", + "Contact reset successfully" : "Контакт је успешно ресетован", + "Error while resetting contact" : "Грешка приликом ресетовања контакта", + "Contact imported successfully" : "Контакт је успешно увезен", + "Error while importing contact" : "Грешка током увоза контакта", + "Import contact" : "Увези контакт", + "Reset to default" : "Врати на подразумевано", + "Import contacts" : "Увези контакте", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Увоз новог .vcf фајла ће да обрише постојећи подразумевани контакт и замениће га са новим. Желите ли да наставите?", + "Failed to save example event creation setting" : "Није успело чување подешавања креирања догађаја за пример", + "Failed to upload the example event" : "Није успело отпремање догађаја за пример", + "Custom example event was saved successfully" : "Произвољни догађај за пример је успешно сачуван", + "Failed to delete the custom example event" : "Произвољни догађај за пример није могао да се обрише", + "Custom example event was deleted successfully" : "Произвољни догађај за пример је успешно обрисан", + "Import calendar event" : "Увоз догађаја календара", + "Uploading a new event will overwrite the existing one." : "Отпремање новог догађаја ће да препише постојећи.", + "Upload event" : "Отпреми догађај", "Availability" : "Доступност", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Ако подесите своје радне сате, када буду заказивали састанак, други људи ће видети када сте ван канцеларије.", "Absence" : "Одсутност", @@ -304,19 +323,8 @@ "Send reminder notifications to calendar sharees as well" : "Пошаљи подсетнике и корисницима којима је календар подељен", "Reminders are always sent to organizers and attendees." : "Подсетници се увек шаљу организаторима и учесницима.", "Enable notifications for events via push" : "Укључи обавештења за догађаје преко гурања догађаја", - "Cancel" : "Откажи", - "Import" : "Увоз", - "Error while saving settings" : "Грешка приликом чувања подешавања", - "Contact reset successfully" : "Контакт је успешно ресетован", - "Error while resetting contact" : "Грешка приликом ресетовања контакта", - "Contact imported successfully" : "Контакт је успешно увезен", - "Error while importing contact" : "Грешка током увоза контакта", - "Example Content" : "Пример садржаја", - "Set example content to be created on new user first login." : "Постављање примера садржаја који се креира приликом прве пријаве новог корисника.", - "Import contact" : "Увези контакт", - "Reset to default contact" : "Ресетуј на подразумевани контакт", - "Import contacts" : "Увези контакте", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Увоз новог .vcf фајла ће да обрише постојећи подразумевани контакт и замениће га са новим. Желите ли да наставите?", + "Example content" : "Садржај за пример", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Садржај за пример служи да покаже Nextcloud могућности. Подразумевани садржај се испоручује уз Nextcloud и може да се замени произвољним.", "There was an error updating your attendance status." : "Десила се грешка приликом ажурирања статуса Вашег присуства.", "Please contact the organizer directly." : "Контактирајте директно организатора.", "Are you accepting the invitation?" : "Да ли прихватате позивницу?", diff --git a/apps/dav/l10n/sv.js b/apps/dav/l10n/sv.js index 8182e00bcca..feb1adde944 100644 --- a/apps/dav/l10n/sv.js +++ b/apps/dav/l10n/sv.js @@ -290,6 +290,25 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Välj en starttid för {dayName}", "Pick a end time for {dayName}" : "Välj en sluttid för {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Sätt automatiskt användarstatus till \"Stör ej\" utanför tillgängliga tider för att tysta alla notifikationer.", + "Cancel" : "Avbryt", + "Import" : "Importera", + "Error while saving settings" : "Fel vid sparande av inställningar", + "Contact reset successfully" : "Kontakten har återställts", + "Error while resetting contact" : "Fel vid återställning av kontakt", + "Contact imported successfully" : "Kontakten har importerats", + "Error while importing contact" : "Fel vid import av kontakt", + "Import contact" : "Importera kontakt", + "Reset to default" : "Återställ till grundinställningar", + "Import contacts" : "Importera kontakter", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Att importera en ny .vcf-fil kommer att radera den befintliga standardkontakten och ersätta den med den nya. Vill du fortsätta?", + "Failed to save example event creation setting" : "Kunde inte spara exemplet för inställning av händelseskapande", + "Failed to upload the example event" : "Kunde inte ladda upp exempelhändelsen", + "Custom example event was saved successfully" : "Anpassad exempelhändelse sparades", + "Failed to delete the custom example event" : "Kunde inte ta bort den anpassade exempelhändelsen", + "Custom example event was deleted successfully" : "Anpassad exempelhändelse har raderats", + "Import calendar event" : "Importera kalenderhändelse", + "Uploading a new event will overwrite the existing one." : "Om du laddar upp en ny händelse kommer den att skriva över den befintliga.", + "Upload event" : "Ladda upp händelse", "Availability" : "Din tillgänglighet", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Om du konfigurerar dina arbetstider kommer andra att se när du är frånvarande när de bokar ett möte.", "Absence" : "Frånvaro", @@ -306,19 +325,8 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Skicka även påminnelser till kalenderdeltagare", "Reminders are always sent to organizers and attendees." : "Påminnelser skickas alltid till arrangörer och deltagare.", "Enable notifications for events via push" : "Aktivera notiser för händelser via push", - "Cancel" : "Avbryt", - "Import" : "Importera", - "Error while saving settings" : "Fel vid sparande av inställningar", - "Contact reset successfully" : "Kontakten har återställts", - "Error while resetting contact" : "Fel vid återställning av kontakt", - "Contact imported successfully" : "Kontakten har importerats", - "Error while importing contact" : "Fel vid import av kontakt", - "Example Content" : "Exempelinnehåll", - "Set example content to be created on new user first login." : "Ställ in exempelinnehåll som ska skapas vid ny användares första inloggning.", - "Import contact" : "Importera kontakt", - "Reset to default contact" : "Återställ till standardkontakt", - "Import contacts" : "Importera kontakter", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Att importera en ny .vcf-fil kommer att radera den befintliga standardkontakten och ersätta den med den nya. Vill du fortsätta?", + "Example content" : "Exempelinnehåll", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Exempelinnehåll används för att visa upp funktionerna i Nextcloud. Standardinnehåll levereras med Nextcloud och kan ersättas med anpassat innehåll.", "There was an error updating your attendance status." : "Ett fel uppstod vid uppdatering av din närvarostatus.", "Please contact the organizer directly." : "Vänligen kontakta arrangören direkt.", "Are you accepting the invitation?" : "Acceptera inbjudan?", diff --git a/apps/dav/l10n/sv.json b/apps/dav/l10n/sv.json index bbaba01edfb..0496461778f 100644 --- a/apps/dav/l10n/sv.json +++ b/apps/dav/l10n/sv.json @@ -288,6 +288,25 @@ "Pick a start time for {dayName}" : "Välj en starttid för {dayName}", "Pick a end time for {dayName}" : "Välj en sluttid för {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Sätt automatiskt användarstatus till \"Stör ej\" utanför tillgängliga tider för att tysta alla notifikationer.", + "Cancel" : "Avbryt", + "Import" : "Importera", + "Error while saving settings" : "Fel vid sparande av inställningar", + "Contact reset successfully" : "Kontakten har återställts", + "Error while resetting contact" : "Fel vid återställning av kontakt", + "Contact imported successfully" : "Kontakten har importerats", + "Error while importing contact" : "Fel vid import av kontakt", + "Import contact" : "Importera kontakt", + "Reset to default" : "Återställ till grundinställningar", + "Import contacts" : "Importera kontakter", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Att importera en ny .vcf-fil kommer att radera den befintliga standardkontakten och ersätta den med den nya. Vill du fortsätta?", + "Failed to save example event creation setting" : "Kunde inte spara exemplet för inställning av händelseskapande", + "Failed to upload the example event" : "Kunde inte ladda upp exempelhändelsen", + "Custom example event was saved successfully" : "Anpassad exempelhändelse sparades", + "Failed to delete the custom example event" : "Kunde inte ta bort den anpassade exempelhändelsen", + "Custom example event was deleted successfully" : "Anpassad exempelhändelse har raderats", + "Import calendar event" : "Importera kalenderhändelse", + "Uploading a new event will overwrite the existing one." : "Om du laddar upp en ny händelse kommer den att skriva över den befintliga.", + "Upload event" : "Ladda upp händelse", "Availability" : "Din tillgänglighet", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Om du konfigurerar dina arbetstider kommer andra att se när du är frånvarande när de bokar ett möte.", "Absence" : "Frånvaro", @@ -304,19 +323,8 @@ "Send reminder notifications to calendar sharees as well" : "Skicka även påminnelser till kalenderdeltagare", "Reminders are always sent to organizers and attendees." : "Påminnelser skickas alltid till arrangörer och deltagare.", "Enable notifications for events via push" : "Aktivera notiser för händelser via push", - "Cancel" : "Avbryt", - "Import" : "Importera", - "Error while saving settings" : "Fel vid sparande av inställningar", - "Contact reset successfully" : "Kontakten har återställts", - "Error while resetting contact" : "Fel vid återställning av kontakt", - "Contact imported successfully" : "Kontakten har importerats", - "Error while importing contact" : "Fel vid import av kontakt", - "Example Content" : "Exempelinnehåll", - "Set example content to be created on new user first login." : "Ställ in exempelinnehåll som ska skapas vid ny användares första inloggning.", - "Import contact" : "Importera kontakt", - "Reset to default contact" : "Återställ till standardkontakt", - "Import contacts" : "Importera kontakter", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Att importera en ny .vcf-fil kommer att radera den befintliga standardkontakten och ersätta den med den nya. Vill du fortsätta?", + "Example content" : "Exempelinnehåll", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Exempelinnehåll används för att visa upp funktionerna i Nextcloud. Standardinnehåll levereras med Nextcloud och kan ersättas med anpassat innehåll.", "There was an error updating your attendance status." : "Ett fel uppstod vid uppdatering av din närvarostatus.", "Please contact the organizer directly." : "Vänligen kontakta arrangören direkt.", "Are you accepting the invitation?" : "Acceptera inbjudan?", diff --git a/apps/dav/l10n/tr.js b/apps/dav/l10n/tr.js index 62ff9546e67..084ea7e103c 100644 --- a/apps/dav/l10n/tr.js +++ b/apps/dav/l10n/tr.js @@ -290,6 +290,17 @@ OC.L10N.register( "Pick a start time for {dayName}" : "{dayName} için başlangıç zamanını seçin", "Pick a end time for {dayName}" : "{dayName} için bitiş zamanını seçin", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Tüm bildirimleri sessize almak için, uygunluk durumu dışında kullanıcı durumu otomatik olarak \"Rahatsız etmeyin\" olarak ayarlanır.", + "Cancel" : "İptal", + "Import" : "İçe aktar", + "Error while saving settings" : "Ayarlar kaydedilirken sorun çıktı", + "Contact reset successfully" : "Kişi sıfırlandı", + "Error while resetting contact" : "Kişi sıfırlanırken sorun çıktı", + "Contact imported successfully" : "Kişi içe aktarıldı", + "Error while importing contact" : "Kişi içe aktarılırken sorun çıktı", + "Import contact" : "Kişiyi içe aktar", + "Reset to default" : "Varsayılanlara dön", + "Import contacts" : "Kişileri içe aktar", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Yeni bir .vcf dosyasını içe aktarmak, var olan varsayılan kişiyi siler ve yenisiyle değiştirir. İlerlemek istiyor musunuz?", "Availability" : "Uygunluk", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Çalışma saatlerinizi ayarlarsanız, diğer kişiler bir toplantı ayarladıklarında ofis dışında olduğunuzu görürler.", "Absence" : "Bulunmama", @@ -306,19 +317,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Takvim paylaşımlarına da hatırlatma bildirimleri gönderilsin", "Reminders are always sent to organizers and attendees." : "Bu seçenek etkinleştirildiğinde, hatırlatıcılar her zaman düzenleyici ve katılımcılara gönderilir.", "Enable notifications for events via push" : "Anında etkinlik bildirimlerini aç", - "Cancel" : "İptal", - "Import" : "İçe aktar", - "Error while saving settings" : "Ayarlar kaydedilirken sorun çıktı", - "Contact reset successfully" : "Kişi sıfırlandı", - "Error while resetting contact" : "Kişi sıfırlanırken sorun çıktı", - "Contact imported successfully" : "Kişi içe aktarıldı", - "Error while importing contact" : "Kişi içe aktarılırken sorun çıktı", - "Example Content" : "Örnek içerik", - "Set example content to be created on new user first login." : "Yeni kullanıcının ilk oturum açmasında oluşturulacak örnek içeriği ayarlayın.", - "Import contact" : "Kişiyi içe aktar", - "Reset to default contact" : "Varsayılan kişiye sıfırla", - "Import contacts" : "Kişileri içe aktar", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Yeni bir .vcf dosyasını içe aktarmak, var olan varsayılan kişiyi siler ve yenisiyle değiştirir. İlerlemek istiyor musunuz?", "There was an error updating your attendance status." : "Katılım durumunuz güncellenirken bir sorun çıktı.", "Please contact the organizer directly." : "Lütfen düzenleyici ile doğrudan görüşün.", "Are you accepting the invitation?" : "Daveti kabul ediyor musunuz?", diff --git a/apps/dav/l10n/tr.json b/apps/dav/l10n/tr.json index dafc8d490e2..9a198ad9ab7 100644 --- a/apps/dav/l10n/tr.json +++ b/apps/dav/l10n/tr.json @@ -288,6 +288,17 @@ "Pick a start time for {dayName}" : "{dayName} için başlangıç zamanını seçin", "Pick a end time for {dayName}" : "{dayName} için bitiş zamanını seçin", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Tüm bildirimleri sessize almak için, uygunluk durumu dışında kullanıcı durumu otomatik olarak \"Rahatsız etmeyin\" olarak ayarlanır.", + "Cancel" : "İptal", + "Import" : "İçe aktar", + "Error while saving settings" : "Ayarlar kaydedilirken sorun çıktı", + "Contact reset successfully" : "Kişi sıfırlandı", + "Error while resetting contact" : "Kişi sıfırlanırken sorun çıktı", + "Contact imported successfully" : "Kişi içe aktarıldı", + "Error while importing contact" : "Kişi içe aktarılırken sorun çıktı", + "Import contact" : "Kişiyi içe aktar", + "Reset to default" : "Varsayılanlara dön", + "Import contacts" : "Kişileri içe aktar", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Yeni bir .vcf dosyasını içe aktarmak, var olan varsayılan kişiyi siler ve yenisiyle değiştirir. İlerlemek istiyor musunuz?", "Availability" : "Uygunluk", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Çalışma saatlerinizi ayarlarsanız, diğer kişiler bir toplantı ayarladıklarında ofis dışında olduğunuzu görürler.", "Absence" : "Bulunmama", @@ -304,19 +315,6 @@ "Send reminder notifications to calendar sharees as well" : "Takvim paylaşımlarına da hatırlatma bildirimleri gönderilsin", "Reminders are always sent to organizers and attendees." : "Bu seçenek etkinleştirildiğinde, hatırlatıcılar her zaman düzenleyici ve katılımcılara gönderilir.", "Enable notifications for events via push" : "Anında etkinlik bildirimlerini aç", - "Cancel" : "İptal", - "Import" : "İçe aktar", - "Error while saving settings" : "Ayarlar kaydedilirken sorun çıktı", - "Contact reset successfully" : "Kişi sıfırlandı", - "Error while resetting contact" : "Kişi sıfırlanırken sorun çıktı", - "Contact imported successfully" : "Kişi içe aktarıldı", - "Error while importing contact" : "Kişi içe aktarılırken sorun çıktı", - "Example Content" : "Örnek içerik", - "Set example content to be created on new user first login." : "Yeni kullanıcının ilk oturum açmasında oluşturulacak örnek içeriği ayarlayın.", - "Import contact" : "Kişiyi içe aktar", - "Reset to default contact" : "Varsayılan kişiye sıfırla", - "Import contacts" : "Kişileri içe aktar", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Yeni bir .vcf dosyasını içe aktarmak, var olan varsayılan kişiyi siler ve yenisiyle değiştirir. İlerlemek istiyor musunuz?", "There was an error updating your attendance status." : "Katılım durumunuz güncellenirken bir sorun çıktı.", "Please contact the organizer directly." : "Lütfen düzenleyici ile doğrudan görüşün.", "Are you accepting the invitation?" : "Daveti kabul ediyor musunuz?", diff --git a/apps/dav/l10n/ug.js b/apps/dav/l10n/ug.js index f5042589ce4..5915a185740 100644 --- a/apps/dav/l10n/ug.js +++ b/apps/dav/l10n/ug.js @@ -239,6 +239,10 @@ OC.L10N.register( "Pick a start time for {dayName}" : "{dayName} نىڭ باشلىنىش ۋاقتىنى تاللاڭ", "Pick a end time for {dayName}" : "{dayName} نىڭ ئاخىرقى ۋاقتىنى تاللاڭ", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "بارلىق ئۇقتۇرۇشلارنى ئاۋازسىز قىلىش ئۈچۈن ئىشلەتكۈچى ھالىتىنى ئاپتوماتىك ھالدا «ئاۋارە قىلماڭ» قىلىپ تەڭشەڭ.", + "Cancel" : "بىكار قىلىش", + "Import" : "ئەكىر", + "Error while saving settings" : "تەڭشەكلەرنى ساقلاش جەريانىدا خاتالىق", + "Reset to default" : "سۈكۈتتىكى ھالىتىگە قايتىڭ", "Availability" : "ئىشلەتكىلى بولىدۇ", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "ئەگەر خىزمەت ۋاقتىڭىزنى تەڭشىسىڭىز ، باشقىلار يىغىن زاكاز قىلغاندا سىزنىڭ ئىشتىن چۈشكەن ۋاقتىڭىزنى كۆرىدۇ.", "Absence" : "يوق", @@ -255,9 +259,6 @@ 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" : "ئىتتىرىش ئارقىلىق ۋەقەلەرگە ئۇقتۇرۇشنى قوزغىتىڭ", - "Cancel" : "بىكار قىلىش", - "Import" : "ئەكىر", - "Error while saving settings" : "تەڭشەكلەرنى ساقلاش جەريانىدا خاتالىق", "There was an error updating your attendance status." : "قاتنىشىش ھالىتىڭىزنى يېڭىلاشتا خاتالىق كۆرۈلدى.", "Please contact the organizer directly." : "تەشكىللىگۈچى بىلەن بىۋاسىتە ئالاقىلىشىڭ.", "Are you accepting the invitation?" : "تەكلىپنى قوبۇل قىلامسىز؟", diff --git a/apps/dav/l10n/ug.json b/apps/dav/l10n/ug.json index c908f61a072..abbbc45161f 100644 --- a/apps/dav/l10n/ug.json +++ b/apps/dav/l10n/ug.json @@ -237,6 +237,10 @@ "Pick a start time for {dayName}" : "{dayName} نىڭ باشلىنىش ۋاقتىنى تاللاڭ", "Pick a end time for {dayName}" : "{dayName} نىڭ ئاخىرقى ۋاقتىنى تاللاڭ", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "بارلىق ئۇقتۇرۇشلارنى ئاۋازسىز قىلىش ئۈچۈن ئىشلەتكۈچى ھالىتىنى ئاپتوماتىك ھالدا «ئاۋارە قىلماڭ» قىلىپ تەڭشەڭ.", + "Cancel" : "بىكار قىلىش", + "Import" : "ئەكىر", + "Error while saving settings" : "تەڭشەكلەرنى ساقلاش جەريانىدا خاتالىق", + "Reset to default" : "سۈكۈتتىكى ھالىتىگە قايتىڭ", "Availability" : "ئىشلەتكىلى بولىدۇ", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "ئەگەر خىزمەت ۋاقتىڭىزنى تەڭشىسىڭىز ، باشقىلار يىغىن زاكاز قىلغاندا سىزنىڭ ئىشتىن چۈشكەن ۋاقتىڭىزنى كۆرىدۇ.", "Absence" : "يوق", @@ -253,9 +257,6 @@ "Send reminder notifications to calendar sharees as well" : "كالېندار ھەمبەھىرلىرىگىمۇ ئەسكەرتىش ئۇقتۇرۇشى ئەۋەتىڭ", "Reminders are always sent to organizers and attendees." : "ئەسكەرتىش ھەمىشە تەشكىللىگۈچىلەر ۋە قاتناشقۇچىلارغا ئەۋەتىلىدۇ.", "Enable notifications for events via push" : "ئىتتىرىش ئارقىلىق ۋەقەلەرگە ئۇقتۇرۇشنى قوزغىتىڭ", - "Cancel" : "بىكار قىلىش", - "Import" : "ئەكىر", - "Error while saving settings" : "تەڭشەكلەرنى ساقلاش جەريانىدا خاتالىق", "There was an error updating your attendance status." : "قاتنىشىش ھالىتىڭىزنى يېڭىلاشتا خاتالىق كۆرۈلدى.", "Please contact the organizer directly." : "تەشكىللىگۈچى بىلەن بىۋاسىتە ئالاقىلىشىڭ.", "Are you accepting the invitation?" : "تەكلىپنى قوبۇل قىلامسىز؟", diff --git a/apps/dav/l10n/uk.js b/apps/dav/l10n/uk.js index 40e933a72a2..c8beb750ce2 100644 --- a/apps/dav/l10n/uk.js +++ b/apps/dav/l10n/uk.js @@ -258,6 +258,12 @@ OC.L10N.register( "Pick a start time for {dayName}" : "Виберіть час початку для {dayName}", "Pick a end time for {dayName}" : "Виберіть час завершення для {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Автоматично встановлювати статус користувача у \"Не турбувати\", коли ви не доступні. В цей проміжок часу ви не отримуватимете сповіщення.", + "Cancel" : "Скасувати", + "Import" : "Імпорт", + "Error while saving settings" : "Помилка під час збереження налаштувань", + "Import contact" : "Імпортувати контакт", + "Reset to default" : "Скинути до типового", + "Import contacts" : "Імпортувати контакти", "Availability" : "Доступність", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Будь ласка, налаштуйте ваші робочі години, щоб інші користувачі могли бачити, коли ви відсутні під час створення зустрічей.", "Absence" : "Відсутність", @@ -274,12 +280,6 @@ OC.L10N.register( "Send reminder notifications to calendar sharees as well" : "Також надсилайте нагадування користувачам вашого спільного календаря", "Reminders are always sent to organizers and attendees." : "Нагадування завжди надсилаються організаторам і учасникам.", "Enable notifications for events via push" : "Увімкнути push-сповіщення для подій", - "Cancel" : "Скасувати", - "Import" : "Імпорт", - "Error while saving settings" : "Помилка під час збереження налаштувань", - "Import contact" : "Імпортувати контакт", - "Reset to default contact" : "Скинути то типового контакту", - "Import contacts" : "Імпортувати контакти", "There was an error updating your attendance status." : "Виникла помилка при оновленні вашого статусу учасника.", "Please contact the organizer directly." : "Будь-ласка повідомте організатора.", "Are you accepting the invitation?" : "Чи приймаєте ви запрошення?", diff --git a/apps/dav/l10n/uk.json b/apps/dav/l10n/uk.json index 8da240553a3..8ac5f933cf6 100644 --- a/apps/dav/l10n/uk.json +++ b/apps/dav/l10n/uk.json @@ -256,6 +256,12 @@ "Pick a start time for {dayName}" : "Виберіть час початку для {dayName}", "Pick a end time for {dayName}" : "Виберіть час завершення для {dayName}", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Автоматично встановлювати статус користувача у \"Не турбувати\", коли ви не доступні. В цей проміжок часу ви не отримуватимете сповіщення.", + "Cancel" : "Скасувати", + "Import" : "Імпорт", + "Error while saving settings" : "Помилка під час збереження налаштувань", + "Import contact" : "Імпортувати контакт", + "Reset to default" : "Скинути до типового", + "Import contacts" : "Імпортувати контакти", "Availability" : "Доступність", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Будь ласка, налаштуйте ваші робочі години, щоб інші користувачі могли бачити, коли ви відсутні під час створення зустрічей.", "Absence" : "Відсутність", @@ -272,12 +278,6 @@ "Send reminder notifications to calendar sharees as well" : "Також надсилайте нагадування користувачам вашого спільного календаря", "Reminders are always sent to organizers and attendees." : "Нагадування завжди надсилаються організаторам і учасникам.", "Enable notifications for events via push" : "Увімкнути push-сповіщення для подій", - "Cancel" : "Скасувати", - "Import" : "Імпорт", - "Error while saving settings" : "Помилка під час збереження налаштувань", - "Import contact" : "Імпортувати контакт", - "Reset to default contact" : "Скинути то типового контакту", - "Import contacts" : "Імпортувати контакти", "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.js b/apps/dav/l10n/zh_CN.js index 8505eff28d4..2a3470f738a 100644 --- a/apps/dav/l10n/zh_CN.js +++ b/apps/dav/l10n/zh_CN.js @@ -290,6 +290,17 @@ OC.L10N.register( "Pick a start time for {dayName}" : "选择 {dayName} 的开始时间", "Pick a end time for {dayName}" : "选择 {dayName} 的结束时间", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "不在工作时间内时,自动将用户状态设置为“勿扰”并静音所有通知。", + "Cancel" : "取消", + "Import" : "导入", + "Error while saving settings" : "保存设置时出错", + "Contact reset successfully" : "联系人重置成功", + "Error while resetting contact" : "重置联系人时出错", + "Contact imported successfully" : "联系人导入成功", + "Error while importing contact" : "导入联系人时出错", + "Import contact" : "导入联系人", + "Reset to default" : "重置为默认设置", + "Import contacts" : "导入联系人", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "导入新的 .vcf 文件将删除现有的默认联系人,并用新联系人替换。是否要继续?", "Availability" : "工作时间", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "如果你配置了工作时间,其他人在预订会议时会看到你何时不在办公室。", "Absence" : "离开", @@ -306,19 +317,6 @@ 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" : "启用推送事件通知", - "Cancel" : "取消", - "Import" : "导入", - "Error while saving settings" : "保存设置时出错", - "Contact reset successfully" : "联系人重置成功", - "Error while resetting contact" : "重置联系人时出错", - "Contact imported successfully" : "联系人导入成功", - "Error while importing contact" : "导入联系人时出错", - "Example Content" : "示例内容", - "Set example content to be created on new user first login." : "设置新用户首次登录时要创建的示例内容。", - "Import contact" : "导入联系人", - "Reset to default contact" : "重置为默认联系人", - "Import contacts" : "导入联系人", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "导入新的 .vcf 文件将删除现有的默认联系人,并用新联系人替换。是否要继续?", "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 989770e5895..1c240fa7585 100644 --- a/apps/dav/l10n/zh_CN.json +++ b/apps/dav/l10n/zh_CN.json @@ -288,6 +288,17 @@ "Pick a start time for {dayName}" : "选择 {dayName} 的开始时间", "Pick a end time for {dayName}" : "选择 {dayName} 的结束时间", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "不在工作时间内时,自动将用户状态设置为“勿扰”并静音所有通知。", + "Cancel" : "取消", + "Import" : "导入", + "Error while saving settings" : "保存设置时出错", + "Contact reset successfully" : "联系人重置成功", + "Error while resetting contact" : "重置联系人时出错", + "Contact imported successfully" : "联系人导入成功", + "Error while importing contact" : "导入联系人时出错", + "Import contact" : "导入联系人", + "Reset to default" : "重置为默认设置", + "Import contacts" : "导入联系人", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "导入新的 .vcf 文件将删除现有的默认联系人,并用新联系人替换。是否要继续?", "Availability" : "工作时间", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "如果你配置了工作时间,其他人在预订会议时会看到你何时不在办公室。", "Absence" : "离开", @@ -304,19 +315,6 @@ "Send reminder notifications to calendar sharees as well" : "同时向日历共享者发送提醒通知", "Reminders are always sent to organizers and attendees." : "始终向组织者和与会者发出提醒。", "Enable notifications for events via push" : "启用推送事件通知", - "Cancel" : "取消", - "Import" : "导入", - "Error while saving settings" : "保存设置时出错", - "Contact reset successfully" : "联系人重置成功", - "Error while resetting contact" : "重置联系人时出错", - "Contact imported successfully" : "联系人导入成功", - "Error while importing contact" : "导入联系人时出错", - "Example Content" : "示例内容", - "Set example content to be created on new user first login." : "设置新用户首次登录时要创建的示例内容。", - "Import contact" : "导入联系人", - "Reset to default contact" : "重置为默认联系人", - "Import contacts" : "导入联系人", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "导入新的 .vcf 文件将删除现有的默认联系人,并用新联系人替换。是否要继续?", "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_HK.js b/apps/dav/l10n/zh_HK.js index 991cf35b8fb..a90bea5c954 100644 --- a/apps/dav/l10n/zh_HK.js +++ b/apps/dav/l10n/zh_HK.js @@ -290,6 +290,17 @@ OC.L10N.register( "Pick a start time for {dayName}" : "為 {dayName} 挑選開始時間", "Pick a end time for {dayName}" : "為 {dayName} 挑選結束時間", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "在忙碌時,自動將用戶狀態設定為「請勿打擾」以靜音所有通知。", + "Cancel" : "取消", + "Import" : "導入", + "Error while saving settings" : "儲存設定時發生錯誤", + "Contact reset successfully" : "聯絡人重設成功", + "Error while resetting contact" : "重設聯絡人時發生錯誤", + "Contact imported successfully" : "成功導入了聯絡人", + "Error while importing contact" : "導入聯絡人時發生錯誤", + "Import contact" : "導入聯絡人", + "Reset to default" : "恢復預設值", + "Import contacts" : "導入聯絡人", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "導入新的 .vcf 檔案將刪除現有的默認聯絡人並將其替換為新的聯絡人。您想繼續嗎?", "Availability" : "空閒時間", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "若您設定了您的工作時間,其他人仕在預約會議時就會知道您何時不在辦公室。", "Absence" : "缺席", @@ -306,19 +317,6 @@ 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" : "啟用推送活動通知", - "Cancel" : "取消", - "Import" : "導入", - "Error while saving settings" : "儲存設定時發生錯誤", - "Contact reset successfully" : "聯絡人重設成功", - "Error while resetting contact" : "重設聯絡人時發生錯誤", - "Contact imported successfully" : "成功導入了聯絡人", - "Error while importing contact" : "導入聯絡人時發生錯誤", - "Example Content" : "範例內容", - "Set example content to be created on new user first login." : "設定新用戶首次登入時所建立的範例內容。", - "Import contact" : "導入聯絡人", - "Reset to default contact" : "重設為默認聯絡人", - "Import contacts" : "導入聯絡人", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "導入新的 .vcf 檔案將刪除現有的默認聯絡人並將其替換為新的聯絡人。您想繼續嗎?", "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_HK.json b/apps/dav/l10n/zh_HK.json index 6effaf8c269..13f69901a7a 100644 --- a/apps/dav/l10n/zh_HK.json +++ b/apps/dav/l10n/zh_HK.json @@ -288,6 +288,17 @@ "Pick a start time for {dayName}" : "為 {dayName} 挑選開始時間", "Pick a end time for {dayName}" : "為 {dayName} 挑選結束時間", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "在忙碌時,自動將用戶狀態設定為「請勿打擾」以靜音所有通知。", + "Cancel" : "取消", + "Import" : "導入", + "Error while saving settings" : "儲存設定時發生錯誤", + "Contact reset successfully" : "聯絡人重設成功", + "Error while resetting contact" : "重設聯絡人時發生錯誤", + "Contact imported successfully" : "成功導入了聯絡人", + "Error while importing contact" : "導入聯絡人時發生錯誤", + "Import contact" : "導入聯絡人", + "Reset to default" : "恢復預設值", + "Import contacts" : "導入聯絡人", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "導入新的 .vcf 檔案將刪除現有的默認聯絡人並將其替換為新的聯絡人。您想繼續嗎?", "Availability" : "空閒時間", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "若您設定了您的工作時間,其他人仕在預約會議時就會知道您何時不在辦公室。", "Absence" : "缺席", @@ -304,19 +315,6 @@ "Send reminder notifications to calendar sharees as well" : "也向共享日曆者傳送提醒通告", "Reminders are always sent to organizers and attendees." : "一律傳送提醒通知給舉辦者與參與者。", "Enable notifications for events via push" : "啟用推送活動通知", - "Cancel" : "取消", - "Import" : "導入", - "Error while saving settings" : "儲存設定時發生錯誤", - "Contact reset successfully" : "聯絡人重設成功", - "Error while resetting contact" : "重設聯絡人時發生錯誤", - "Contact imported successfully" : "成功導入了聯絡人", - "Error while importing contact" : "導入聯絡人時發生錯誤", - "Example Content" : "範例內容", - "Set example content to be created on new user first login." : "設定新用戶首次登入時所建立的範例內容。", - "Import contact" : "導入聯絡人", - "Reset to default contact" : "重設為默認聯絡人", - "Import contacts" : "導入聯絡人", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "導入新的 .vcf 檔案將刪除現有的默認聯絡人並將其替換為新的聯絡人。您想繼續嗎?", "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_TW.js b/apps/dav/l10n/zh_TW.js index fef4d1c9eec..191f6631bbf 100644 --- a/apps/dav/l10n/zh_TW.js +++ b/apps/dav/l10n/zh_TW.js @@ -290,6 +290,25 @@ OC.L10N.register( "Pick a start time for {dayName}" : "為 {dayName} 挑選開始時間", "Pick a end time for {dayName}" : "為 {dayName} 挑選結束時間", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "在空閒時間以外,自動將使用者狀態設定為「請勿打擾」以靜音所有通知。", + "Cancel" : "取消", + "Import" : "匯入", + "Error while saving settings" : "儲存設定時發生錯誤", + "Contact reset successfully" : "成功重設聯絡人", + "Error while resetting contact" : "重設聯絡人時發生錯誤", + "Contact imported successfully" : "成功匯入聯絡人", + "Error while importing contact" : "匯入聯絡人時發生錯誤", + "Import contact" : "匯入聯絡人", + "Reset to default" : "重設為預設值", + "Import contacts" : "匯入聯絡人", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "匯入新的 .vcf 檔案將會刪除現有的預設聯絡人並將其取代為新的聯絡人。您想要繼續嗎?", + "Failed to save example event creation setting" : "儲存範例事件建立設定失敗", + "Failed to upload the example event" : "上傳範例事件失敗", + "Custom example event was saved successfully" : "已成功儲存自訂範例事件", + "Failed to delete the custom example event" : "刪除自訂範例事件失敗", + "Custom example event was deleted successfully" : "已成功刪除自訂範例事件", + "Import calendar event" : "匯入日曆事件", + "Uploading a new event will overwrite the existing one." : "上傳新事件將會覆寫原有的", + "Upload event" : "上傳事件", "Availability" : "空閒時間", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "若您設定了您的工作時間,其他使用者在預約會議時就會知道您何時不在辦公室。", "Absence" : "不在", @@ -306,19 +325,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" : "啟用行程通知推播", - "Cancel" : "取消", - "Import" : "匯入", - "Error while saving settings" : "儲存設定時發生錯誤", - "Contact reset successfully" : "成功重設聯絡人", - "Error while resetting contact" : "重設聯絡人時發生錯誤", - "Contact imported successfully" : "成功匯入聯絡人", - "Error while importing contact" : "匯入聯絡人時發生錯誤", - "Example Content" : "範例內容", - "Set example content to be created on new user first login." : "設定新使用者首次登入時要建立的範例內容。", - "Import contact" : "匯入聯絡人", - "Reset to default contact" : "重設回預設聯絡人", - "Import contacts" : "匯入聯絡人", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "匯入新的 .vcf 檔案將會刪除現有的預設聯絡人並將其取代為新的聯絡人。您想要繼續嗎?", + "Example content" : "範例內容", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "範例內容用來展示 Nextcloud 的功能。Nextcloud 隨附預設內容,可由自訂內容取代。", "There was an error updating your attendance status." : "更新您的參與狀態時發生錯誤。", "Please contact the organizer directly." : "請直接聯絡主辦者。", "Are you accepting the invitation?" : "您要接受邀請嗎?", diff --git a/apps/dav/l10n/zh_TW.json b/apps/dav/l10n/zh_TW.json index 3afaf26a723..53990163a73 100644 --- a/apps/dav/l10n/zh_TW.json +++ b/apps/dav/l10n/zh_TW.json @@ -288,6 +288,25 @@ "Pick a start time for {dayName}" : "為 {dayName} 挑選開始時間", "Pick a end time for {dayName}" : "為 {dayName} 挑選結束時間", "Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "在空閒時間以外,自動將使用者狀態設定為「請勿打擾」以靜音所有通知。", + "Cancel" : "取消", + "Import" : "匯入", + "Error while saving settings" : "儲存設定時發生錯誤", + "Contact reset successfully" : "成功重設聯絡人", + "Error while resetting contact" : "重設聯絡人時發生錯誤", + "Contact imported successfully" : "成功匯入聯絡人", + "Error while importing contact" : "匯入聯絡人時發生錯誤", + "Import contact" : "匯入聯絡人", + "Reset to default" : "重設為預設值", + "Import contacts" : "匯入聯絡人", + "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "匯入新的 .vcf 檔案將會刪除現有的預設聯絡人並將其取代為新的聯絡人。您想要繼續嗎?", + "Failed to save example event creation setting" : "儲存範例事件建立設定失敗", + "Failed to upload the example event" : "上傳範例事件失敗", + "Custom example event was saved successfully" : "已成功儲存自訂範例事件", + "Failed to delete the custom example event" : "刪除自訂範例事件失敗", + "Custom example event was deleted successfully" : "已成功刪除自訂範例事件", + "Import calendar event" : "匯入日曆事件", + "Uploading a new event will overwrite the existing one." : "上傳新事件將會覆寫原有的", + "Upload event" : "上傳事件", "Availability" : "空閒時間", "If you configure your working hours, other people will see when you are out of office when they book a meeting." : "若您設定了您的工作時間,其他使用者在預約會議時就會知道您何時不在辦公室。", "Absence" : "不在", @@ -304,19 +323,8 @@ "Send reminder notifications to calendar sharees as well" : "也向共享行事曆傳送提醒通知", "Reminders are always sent to organizers and attendees." : "一律傳送提醒給主辦者與參與者。", "Enable notifications for events via push" : "啟用行程通知推播", - "Cancel" : "取消", - "Import" : "匯入", - "Error while saving settings" : "儲存設定時發生錯誤", - "Contact reset successfully" : "成功重設聯絡人", - "Error while resetting contact" : "重設聯絡人時發生錯誤", - "Contact imported successfully" : "成功匯入聯絡人", - "Error while importing contact" : "匯入聯絡人時發生錯誤", - "Example Content" : "範例內容", - "Set example content to be created on new user first login." : "設定新使用者首次登入時要建立的範例內容。", - "Import contact" : "匯入聯絡人", - "Reset to default contact" : "重設回預設聯絡人", - "Import contacts" : "匯入聯絡人", - "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "匯入新的 .vcf 檔案將會刪除現有的預設聯絡人並將其取代為新的聯絡人。您想要繼續嗎?", + "Example content" : "範例內容", + "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "範例內容用來展示 Nextcloud 的功能。Nextcloud 隨附預設內容,可由自訂內容取代。", "There was an error updating your attendance status." : "更新您的參與狀態時發生錯誤。", "Please contact the organizer directly." : "請直接聯絡主辦者。", "Are you accepting the invitation?" : "您要接受邀請嗎?", diff --git a/apps/dav/lib/Controller/ExampleContentController.php b/apps/dav/lib/Controller/ExampleContentController.php index 905fd392e6c..e20ee4b7f49 100644 --- a/apps/dav/lib/Controller/ExampleContentController.php +++ b/apps/dav/lib/Controller/ExampleContentController.php @@ -10,6 +10,7 @@ declare(strict_types=1); namespace OCA\DAV\Controller; use OCA\DAV\AppInfo\Application; +use OCA\DAV\Service\ExampleContactService; use OCA\DAV\Service\ExampleEventService; use OCP\AppFramework\ApiController; use OCP\AppFramework\Http; @@ -17,103 +18,50 @@ use OCP\AppFramework\Http\Attribute\FrontpageRoute; use OCP\AppFramework\Http\Attribute\NoCSRFRequired; use OCP\AppFramework\Http\DataDownloadResponse; use OCP\AppFramework\Http\JSONResponse; -use OCP\Files\AppData\IAppDataFactory; -use OCP\Files\IAppData; -use OCP\Files\NotFoundException; -use OCP\IAppConfig; -use OCP\IConfig; use OCP\IRequest; use Psr\Log\LoggerInterface; class ExampleContentController extends ApiController { - private IAppData $appData; - public function __construct( IRequest $request, - private IConfig $config, - private IAppConfig $appConfig, - private IAppDataFactory $appDataFactory, - private LoggerInterface $logger, - private ExampleEventService $exampleEventService, + private readonly LoggerInterface $logger, + private readonly ExampleEventService $exampleEventService, + private readonly ExampleContactService $exampleContactService, ) { parent::__construct(Application::APP_ID, $request); - $this->appData = $this->appDataFactory->get('dav'); } - public function setEnableDefaultContact($allow) { - if ($allow === 'yes' && !$this->defaultContactExists()) { + #[FrontpageRoute(verb: 'PUT', url: '/api/defaultcontact/config')] + public function setEnableDefaultContact(bool $allow): JSONResponse { + if ($allow && !$this->exampleContactService->defaultContactExists()) { try { - $this->setCard(); + $this->exampleContactService->setCard(); } catch (\Exception $e) { $this->logger->error('Could not create default contact', ['exception' => $e]); return new JSONResponse([], Http::STATUS_INTERNAL_SERVER_ERROR); } } - $this->config->setAppValue(Application::APP_ID, 'enableDefaultContact', $allow); + $this->exampleContactService->setDefaultContactEnabled($allow); return new JSONResponse([], Http::STATUS_OK); } #[NoCSRFRequired] + #[FrontpageRoute(verb: 'GET', url: '/api/defaultcontact/contact')] public function getDefaultContact(): DataDownloadResponse { - $cardData = $this->getCard() + $cardData = $this->exampleContactService->getCard() ?? file_get_contents(__DIR__ . '/../ExampleContentFiles/exampleContact.vcf'); return new DataDownloadResponse($cardData, 'example_contact.vcf', 'text/vcard'); } + #[FrontpageRoute(verb: 'PUT', url: '/api/defaultcontact/contact')] public function setDefaultContact(?string $contactData = null) { - if (!$this->config->getAppValue(Application::APP_ID, 'enableDefaultContact', 'yes')) { + if (!$this->exampleContactService->isDefaultContactEnabled()) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } - $this->setCard($contactData); + $this->exampleContactService->setCard($contactData); return new JSONResponse([], Http::STATUS_OK); } - private function getCard(): ?string { - try { - $folder = $this->appData->getFolder('defaultContact'); - } catch (NotFoundException $e) { - return null; - } - - if (!$folder->fileExists('defaultContact.vcf')) { - return null; - } - - return $folder->getFile('defaultContact.vcf')->getContent(); - } - - private function setCard(?string $cardData = null) { - try { - $folder = $this->appData->getFolder('defaultContact'); - } catch (NotFoundException $e) { - $folder = $this->appData->newFolder('defaultContact'); - } - - $isCustom = true; - if (is_null($cardData)) { - $cardData = file_get_contents(__DIR__ . '/../ExampleContentFiles/exampleContact.vcf'); - $isCustom = false; - } - - if (!$cardData) { - throw new \Exception('Could not read exampleContact.vcf'); - } - - $file = (!$folder->fileExists('defaultContact.vcf')) ? $folder->newFile('defaultContact.vcf') : $folder->getFile('defaultContact.vcf'); - $file->putContent($cardData); - - $this->appConfig->setValueBool(Application::APP_ID, 'hasCustomDefaultContact', $isCustom); - } - - private function defaultContactExists(): bool { - try { - $folder = $this->appData->getFolder('defaultContact'); - } catch (NotFoundException $e) { - return false; - } - return $folder->fileExists('defaultContact.vcf'); - } - #[FrontpageRoute(verb: 'POST', url: '/api/exampleEvent/enable')] public function setCreateExampleEvent(bool $enable): JSONResponse { $this->exampleEventService->setCreateExampleEvent($enable); diff --git a/apps/dav/lib/DAV/GroupPrincipalBackend.php b/apps/dav/lib/DAV/GroupPrincipalBackend.php index ddbd64bdda1..70a0099330c 100644 --- a/apps/dav/lib/DAV/GroupPrincipalBackend.php +++ b/apps/dav/lib/DAV/GroupPrincipalBackend.php @@ -188,6 +188,10 @@ class GroupPrincipalBackend implements BackendInterface { $groups = $this->groupManager->search($value, $searchLimit); $results[] = array_reduce($groups, function (array $carry, IGroup $group) use ($restrictGroups) { + if ($group->hideFromCollaboration()) { + return $carry; + } + $gid = $group->getGID(); // is sharing restricted to groups only? if ($restrictGroups !== false) { diff --git a/apps/dav/lib/Listener/UserEventsListener.php b/apps/dav/lib/Listener/UserEventsListener.php index 67cf228515a..c876192d67f 100644 --- a/apps/dav/lib/Listener/UserEventsListener.php +++ b/apps/dav/lib/Listener/UserEventsListener.php @@ -12,7 +12,7 @@ namespace OCA\DAV\Listener; use OCA\DAV\CalDAV\CalDavBackend; use OCA\DAV\CardDAV\CardDavBackend; use OCA\DAV\CardDAV\SyncService; -use OCA\DAV\Service\DefaultContactService; +use OCA\DAV\Service\ExampleContactService; use OCA\DAV\Service\ExampleEventService; use OCP\Accounts\UserUpdatedEvent; use OCP\Defaults; @@ -46,7 +46,7 @@ class UserEventsListener implements IEventListener { private CalDavBackend $calDav, private CardDavBackend $cardDav, private Defaults $themingDefaults, - private DefaultContactService $defaultContactService, + private ExampleContactService $exampleContactService, private ExampleEventService $exampleEventService, private LoggerInterface $logger, ) { @@ -175,7 +175,7 @@ class UserEventsListener implements IEventListener { } } if ($addressBookId) { - $this->defaultContactService->createDefaultContact($addressBookId); + $this->exampleContactService->createDefaultContact($addressBookId); } } } diff --git a/apps/dav/lib/Service/DefaultContactService.php b/apps/dav/lib/Service/DefaultContactService.php deleted file mode 100644 index 24e55ef7b69..00000000000 --- a/apps/dav/lib/Service/DefaultContactService.php +++ /dev/null @@ -1,77 +0,0 @@ -<?php - -declare(strict_types=1); - -/** - * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors - * SPDX-License-Identifier: AGPL-3.0-or-later - */ - -namespace OCA\DAV\Service; - -use OCA\DAV\AppInfo\Application; -use OCA\DAV\CardDAV\CardDavBackend; -use OCP\App\IAppManager; -use OCP\Files\AppData\IAppDataFactory; -use OCP\IAppConfig; -use Psr\Log\LoggerInterface; -use Symfony\Component\Uid\Uuid; - -class DefaultContactService { - public function __construct( - private CardDavBackend $cardDav, - private IAppManager $appManager, - private IAppDataFactory $appDataFactory, - private IAppConfig $config, - private LoggerInterface $logger, - ) { - } - - public function createDefaultContact(int $addressBookId): void { - $enableDefaultContact = $this->config->getValueString(Application::APP_ID, 'enableDefaultContact', 'yes'); - if ($enableDefaultContact !== 'yes') { - return; - } - $appData = $this->appDataFactory->get('dav'); - try { - $folder = $appData->getFolder('defaultContact'); - $defaultContactFile = $folder->getFile('defaultContact.vcf'); - $data = $defaultContactFile->getContent(); - } catch (\Exception $e) { - $this->logger->error('Couldn\'t get default contact file', ['exception' => $e]); - return; - } - - // Make sure the UID is unique - $newUid = Uuid::v4()->toRfc4122(); - $newRev = date('Ymd\THis\Z'); - $vcard = \Sabre\VObject\Reader::read($data, \Sabre\VObject\Reader::OPTION_FORGIVING); - if ($vcard->UID) { - $vcard->UID->setValue($newUid); - } else { - $vcard->add('UID', $newUid); - } - if ($vcard->REV) { - $vcard->REV->setValue($newRev); - } else { - $vcard->add('REV', $newRev); - } - - // Level 3 means that the document is invalid - // https://sabre.io/vobject/vcard/#validating-vcard - $level3Warnings = array_filter($vcard->validate(), function ($warning) { - return $warning['level'] === 3; - }); - - if (!empty($level3Warnings)) { - $this->logger->error('Default contact is invalid', ['warnings' => $level3Warnings]); - return; - } - try { - $this->cardDav->createCard($addressBookId, 'default', $vcard->serialize(), false); - } catch (\Exception $e) { - $this->logger->error($e->getMessage(), ['exception' => $e]); - } - - } -} diff --git a/apps/dav/lib/Service/ExampleContactService.php b/apps/dav/lib/Service/ExampleContactService.php new file mode 100644 index 00000000000..6ed6c66cbb3 --- /dev/null +++ b/apps/dav/lib/Service/ExampleContactService.php @@ -0,0 +1,132 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\DAV\Service; + +use OCA\DAV\AppInfo\Application; +use OCA\DAV\CardDAV\CardDavBackend; +use OCP\AppFramework\Services\IAppConfig; +use OCP\Files\AppData\IAppDataFactory; +use OCP\Files\IAppData; +use OCP\Files\NotFoundException; +use Psr\Log\LoggerInterface; +use Symfony\Component\Uid\Uuid; + +class ExampleContactService { + private readonly IAppData $appData; + + public function __construct( + IAppDataFactory $appDataFactory, + private readonly IAppConfig $appConfig, + private readonly LoggerInterface $logger, + private readonly CardDavBackend $cardDav, + ) { + $this->appData = $appDataFactory->get(Application::APP_ID); + } + + public function isDefaultContactEnabled(): bool { + return $this->appConfig->getAppValueBool('enableDefaultContact', true); + } + + public function setDefaultContactEnabled(bool $value): void { + $this->appConfig->setAppValueBool('enableDefaultContact', $value); + } + + public function getCard(): ?string { + try { + $folder = $this->appData->getFolder('defaultContact'); + } catch (NotFoundException $e) { + return null; + } + + if (!$folder->fileExists('defaultContact.vcf')) { + return null; + } + + return $folder->getFile('defaultContact.vcf')->getContent(); + } + + public function setCard(?string $cardData = null) { + try { + $folder = $this->appData->getFolder('defaultContact'); + } catch (NotFoundException $e) { + $folder = $this->appData->newFolder('defaultContact'); + } + + $isCustom = true; + if (is_null($cardData)) { + $cardData = file_get_contents(__DIR__ . '/../ExampleContentFiles/exampleContact.vcf'); + $isCustom = false; + } + + if (!$cardData) { + throw new \Exception('Could not read exampleContact.vcf'); + } + + $file = (!$folder->fileExists('defaultContact.vcf')) ? $folder->newFile('defaultContact.vcf') : $folder->getFile('defaultContact.vcf'); + $file->putContent($cardData); + + $this->appConfig->setAppValueBool('hasCustomDefaultContact', $isCustom); + } + + public function defaultContactExists(): bool { + try { + $folder = $this->appData->getFolder('defaultContact'); + } catch (NotFoundException $e) { + return false; + } + return $folder->fileExists('defaultContact.vcf'); + } + + public function createDefaultContact(int $addressBookId): void { + if (!$this->isDefaultContactEnabled()) { + return; + } + + try { + $folder = $this->appData->getFolder('defaultContact'); + $defaultContactFile = $folder->getFile('defaultContact.vcf'); + $data = $defaultContactFile->getContent(); + } catch (\Exception $e) { + $this->logger->error('Couldn\'t get default contact file', ['exception' => $e]); + return; + } + + // Make sure the UID is unique + $newUid = Uuid::v4()->toRfc4122(); + $newRev = date('Ymd\THis\Z'); + $vcard = \Sabre\VObject\Reader::read($data, \Sabre\VObject\Reader::OPTION_FORGIVING); + if ($vcard->UID) { + $vcard->UID->setValue($newUid); + } else { + $vcard->add('UID', $newUid); + } + if ($vcard->REV) { + $vcard->REV->setValue($newRev); + } else { + $vcard->add('REV', $newRev); + } + + // Level 3 means that the document is invalid + // https://sabre.io/vobject/vcard/#validating-vcard + $level3Warnings = array_filter($vcard->validate(), static function ($warning) { + return $warning['level'] === 3; + }); + + if (!empty($level3Warnings)) { + $this->logger->error('Default contact is invalid', ['warnings' => $level3Warnings]); + return; + } + try { + $this->cardDav->createCard($addressBookId, 'default', $vcard->serialize(), false); + } catch (\Exception $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + } + } +} diff --git a/apps/dav/lib/Settings/ExampleContentSettings.php b/apps/dav/lib/Settings/ExampleContentSettings.php index fef2d25b8d2..7b6f9b03a3a 100644 --- a/apps/dav/lib/Settings/ExampleContentSettings.php +++ b/apps/dav/lib/Settings/ExampleContentSettings.php @@ -9,21 +9,21 @@ declare(strict_types=1); namespace OCA\DAV\Settings; use OCA\DAV\AppInfo\Application; +use OCA\DAV\Service\ExampleContactService; use OCA\DAV\Service\ExampleEventService; use OCP\App\IAppManager; use OCP\AppFramework\Http\TemplateResponse; +use OCP\AppFramework\Services\IAppConfig; use OCP\AppFramework\Services\IInitialState; -use OCP\IAppConfig; -use OCP\IConfig; use OCP\Settings\ISettings; class ExampleContentSettings implements ISettings { public function __construct( - private readonly IConfig $config, private readonly IAppConfig $appConfig, private readonly IInitialState $initialState, private readonly IAppManager $appManager, private readonly ExampleEventService $exampleEventService, + private readonly ExampleContactService $exampleContactService, ) { } @@ -43,11 +43,13 @@ class ExampleContentSettings implements ISettings { } if ($contactsEnabled) { - $enableDefaultContact = $this->config->getAppValue(Application::APP_ID, 'enableDefaultContact', 'yes'); - $this->initialState->provideInitialState('enableDefaultContact', $enableDefaultContact); + $this->initialState->provideInitialState( + 'enableDefaultContact', + $this->exampleContactService->isDefaultContactEnabled(), + ); $this->initialState->provideInitialState( 'hasCustomDefaultContact', - $this->appConfig->getValueBool(Application::APP_ID, 'hasCustomDefaultContact'), + $this->appConfig->getAppValueBool('hasCustomDefaultContact'), ); } diff --git a/apps/dav/src/components/ExampleContactSettings.vue b/apps/dav/src/components/ExampleContactSettings.vue index 0e34c7a12da..cdfdc130189 100644 --- a/apps/dav/src/components/ExampleContactSettings.vue +++ b/apps/dav/src/components/ExampleContactSettings.vue @@ -63,7 +63,7 @@ import IconCheck from '@mdi/svg/svg/check.svg?raw' import logger from '../service/logger.js' import ExampleContentDownloadButton from './ExampleContentDownloadButton.vue' -const enableDefaultContact = loadState('dav', 'enableDefaultContact') === 'yes' +const enableDefaultContact = loadState('dav', 'enableDefaultContact') const hasCustomDefaultContact = loadState('dav', 'hasCustomDefaultContact') export default { @@ -106,7 +106,7 @@ export default { methods: { updateEnableDefaultContact() { axios.put(generateUrl('apps/dav/api/defaultcontact/config'), { - allow: this.enableDefaultContact ? 'no' : 'yes', + allow: !this.enableDefaultContact, }).then(() => { this.enableDefaultContact = !this.enableDefaultContact }).catch(() => { diff --git a/apps/dav/tests/unit/DAV/Listener/UserEventsListenerTest.php b/apps/dav/tests/unit/DAV/Listener/UserEventsListenerTest.php index f03343af008..40d2fb62431 100644 --- a/apps/dav/tests/unit/DAV/Listener/UserEventsListenerTest.php +++ b/apps/dav/tests/unit/DAV/Listener/UserEventsListenerTest.php @@ -14,7 +14,7 @@ use OCA\DAV\CalDAV\CalDavBackend; use OCA\DAV\CardDAV\CardDavBackend; use OCA\DAV\CardDAV\SyncService; use OCA\DAV\Listener\UserEventsListener; -use OCA\DAV\Service\DefaultContactService; +use OCA\DAV\Service\ExampleContactService; use OCA\DAV\Service\ExampleEventService; use OCP\Defaults; use OCP\IUser; @@ -29,7 +29,7 @@ class UserEventsListenerTest extends TestCase { private CalDavBackend&MockObject $calDavBackend; private CardDavBackend&MockObject $cardDavBackend; private Defaults&MockObject $defaults; - private DefaultContactService&MockObject $defaultContactService; + private ExampleContactService&MockObject $exampleContactService; private ExampleEventService&MockObject $exampleEventService; private LoggerInterface&MockObject $logger; @@ -43,7 +43,7 @@ class UserEventsListenerTest extends TestCase { $this->calDavBackend = $this->createMock(CalDavBackend::class); $this->cardDavBackend = $this->createMock(CardDavBackend::class); $this->defaults = $this->createMock(Defaults::class); - $this->defaultContactService = $this->createMock(DefaultContactService::class); + $this->exampleContactService = $this->createMock(ExampleContactService::class); $this->exampleEventService = $this->createMock(ExampleEventService::class); $this->logger = $this->createMock(LoggerInterface::class); @@ -53,7 +53,7 @@ class UserEventsListenerTest extends TestCase { $this->calDavBackend, $this->cardDavBackend, $this->defaults, - $this->defaultContactService, + $this->exampleContactService, $this->exampleEventService, $this->logger, ); diff --git a/apps/dav/tests/unit/Service/DefaultContactServiceTest.php b/apps/dav/tests/unit/Service/ExampleContactServiceTest.php index 3bd8c9cb6f6..4c8d900ae86 100644 --- a/apps/dav/tests/unit/Service/DefaultContactServiceTest.php +++ b/apps/dav/tests/unit/Service/ExampleContactServiceTest.php @@ -10,56 +10,60 @@ declare(strict_types=1); namespace OCA\DAV\Tests\unit\Service; use OCA\DAV\CardDAV\CardDavBackend; -use OCA\DAV\Service\DefaultContactService; +use OCA\DAV\Service\ExampleContactService; use OCP\App\IAppManager; +use OCP\AppFramework\Services\IAppConfig; use OCP\Files\AppData\IAppDataFactory; use OCP\Files\IAppData; use OCP\Files\NotFoundException; use OCP\Files\SimpleFS\ISimpleFile; use OCP\Files\SimpleFS\ISimpleFolder; -use OCP\IAppConfig; use PHPUnit\Framework\MockObject\MockObject; use Psr\Log\LoggerInterface; use Symfony\Component\Uid\Uuid; use Test\TestCase; -class DefaultContactServiceTest extends TestCase { - protected DefaultContactService $service; +class ExampleContactServiceTest extends TestCase { + protected ExampleContactService $service; protected CardDavBackend&MockObject $cardDav; protected IAppManager&MockObject $appManager; protected IAppDataFactory&MockObject $appDataFactory; protected LoggerInterface&MockObject $logger; - protected IAppConfig&MockObject $config; + protected IAppConfig&MockObject $appConfig; + protected IAppData&MockObject $appData; protected function setUp(): void { parent::setUp(); $this->cardDav = $this->createMock(CardDavBackend::class); - $this->appManager = $this->createMock(IAppManager::class); $this->appDataFactory = $this->createMock(IAppDataFactory::class); $this->logger = $this->createMock(LoggerInterface::class); - $this->config = $this->createMock(IAppConfig::class); + $this->appConfig = $this->createMock(IAppConfig::class); - $this->service = new DefaultContactService( - $this->cardDav, - $this->appManager, + $this->appData = $this->createMock(IAppData::class); + $this->appDataFactory->method('get') + ->with('dav') + ->willReturn($this->appData); + + $this->service = new ExampleContactService( $this->appDataFactory, - $this->config, + $this->appConfig, $this->logger, + $this->cardDav, ); } public function testCreateDefaultContactWithInvalidCard(): void { // Invalid vCard missing required FN property $vcardContent = "BEGIN:VCARD\nVERSION:3.0\nEND:VCARD"; - $this->config->method('getValueString')->willReturn('yes'); - $appData = $this->createMock(IAppData::class); + $this->appConfig->method('getAppValueBool') + ->with('enableDefaultContact', true) + ->willReturn(true); $folder = $this->createMock(ISimpleFolder::class); $file = $this->createMock(ISimpleFile::class); $file->method('getContent')->willReturn($vcardContent); $folder->method('getFile')->willReturn($file); - $appData->method('getFolder')->willReturn($folder); - $this->appDataFactory->method('get')->willReturn($appData); + $this->appData->method('getFolder')->willReturn($folder); $this->logger->expects($this->once()) ->method('error') @@ -76,14 +80,14 @@ class DefaultContactServiceTest extends TestCase { $originalRev = '20200101T000000Z'; $vcardContent = "BEGIN:VCARD\nVERSION:3.0\nFN:Test User\nUID:$originalUid\nREV:$originalRev\nEND:VCARD"; - $this->config->method('getValueString')->willReturn('yes'); - $appData = $this->createMock(IAppData::class); + $this->appConfig->method('getAppValueBool') + ->with('enableDefaultContact', true) + ->willReturn(true); $folder = $this->createMock(ISimpleFolder::class); $file = $this->createMock(ISimpleFile::class); $file->method('getContent')->willReturn($vcardContent); $folder->method('getFile')->willReturn($file); - $appData->method('getFolder')->willReturn($folder); - $this->appDataFactory->method('get')->willReturn($appData); + $this->appData->method('getFolder')->willReturn($folder); $capturedCardData = null; $this->cardDav->expects($this->once()) @@ -107,10 +111,10 @@ class DefaultContactServiceTest extends TestCase { } public function testDefaultContactFileDoesNotExist(): void { - $appData = $this->createMock(IAppData::class); - $this->config->method('getValueString')->willReturn('yes'); - $appData->method('getFolder')->willThrowException(new NotFoundException()); - $this->appDataFactory->method('get')->willReturn($appData); + $this->appConfig->method('getAppValueBool') + ->with('enableDefaultContact', true) + ->willReturn(true); + $this->appData->method('getFolder')->willThrowException(new NotFoundException()); $this->cardDav->expects($this->never()) ->method('createCard'); @@ -121,14 +125,14 @@ class DefaultContactServiceTest extends TestCase { public function testUidAndRevAreAddedIfMissing(): void { $vcardContent = "BEGIN:VCARD\nVERSION:3.0\nFN:Test User\nEND:VCARD"; - $this->config->method('getValueString')->willReturn('yes'); - $appData = $this->createMock(IAppData::class); + $this->appConfig->method('getAppValueBool') + ->with('enableDefaultContact', true) + ->willReturn(true); $folder = $this->createMock(ISimpleFolder::class); $file = $this->createMock(ISimpleFile::class); $file->method('getContent')->willReturn($vcardContent); $folder->method('getFile')->willReturn($file); - $appData->method('getFolder')->willReturn($folder); - $this->appDataFactory->method('get')->willReturn($appData); + $this->appData->method('getFolder')->willReturn($folder); $capturedCardData = 'new-card-data'; @@ -154,7 +158,9 @@ class DefaultContactServiceTest extends TestCase { } public function testDefaultContactIsNotCreatedIfEnabled(): void { - $this->config->method('getValueString')->willReturn('no'); + $this->appConfig->method('getAppValueBool') + ->with('enableDefaultContact', true) + ->willReturn(false); $this->logger->expects($this->never()) ->method('error'); $this->cardDav->expects($this->never()) @@ -162,4 +168,27 @@ class DefaultContactServiceTest extends TestCase { $this->service->createDefaultContact(123); } + + public static function provideDefaultContactEnableData(): array { + return [[true], [false]]; + } + + /** @dataProvider provideDefaultContactEnableData */ + public function testIsDefaultContactEnabled(bool $enabled): void { + $this->appConfig->expects(self::once()) + ->method('getAppValueBool') + ->with('enableDefaultContact', true) + ->willReturn($enabled); + + $this->assertEquals($enabled, $this->service->isDefaultContactEnabled()); + } + + /** @dataProvider provideDefaultContactEnableData */ + public function testSetDefaultContactEnabled(bool $enabled): void { + $this->appConfig->expects(self::once()) + ->method('setAppValueBool') + ->with('enableDefaultContact', $enabled); + + $this->service->setDefaultContactEnabled($enabled); + } } diff --git a/apps/encryption/l10n/et_EE.js b/apps/encryption/l10n/et_EE.js index 1dd886792e6..70de2cc0c46 100644 --- a/apps/encryption/l10n/et_EE.js +++ b/apps/encryption/l10n/et_EE.js @@ -1,46 +1,55 @@ OC.L10N.register( "encryption", { - "Missing recovery key password" : "Muuda taastevõtme parool", - "Please repeat the recovery key password" : "Palun korda uut taastevõtme parooli", - "Repeated recovery key password does not match the provided recovery key password" : "Lahtritesse sisestatud taastevõtme paroolid ei kattu", + "Missing recovery key password" : "Muuda taastevõtme salasõna", + "Please repeat the recovery key password" : "Palun korda uut taastevõtme salasõna", + "Repeated recovery key password does not match the provided recovery key password" : "Sisestatud taastevõtme salasõna ei kattu", "Recovery key successfully enabled" : "Taastevõtme lubamine õnnestus", - "Could not enable recovery key. Please check your recovery key password!" : "Ei suutnud lubada taastevõtit. Palun kontrolli oma taastevõtme parooli!", + "Could not enable recovery key. Please check your recovery key password!" : "Ei suutnud taastevõtit kasutusele võtta. Palun kontrolli oma taastevõtme salasõna!", "Recovery key successfully disabled" : "Taastevõtme keelamine õnnestus", - "Could not disable recovery key. Please check your recovery key password!" : "Ei suuda keelata taastevõtit. Palun kontrolli oma taastevõtme parooli!", + "Could not disable recovery key. Please check your recovery key password!" : "Ei suutnud taastevõtme kasutamist lõpetada. Palun kontrolli oma taastevõtme salasõna!", "Missing parameters" : "Parameetrid puuduvad", "Please provide the old recovery password" : "Palun sisesta vana taastevõtme salasõna", "Please provide a new recovery password" : "Palun sisesta uus taastevõtme salasõna", - "Please repeat the new recovery password" : "Palun korda uut taastevõtme parooli", - "Password successfully changed." : "Parool edukalt vahetatud.", - "Could not change the password. Maybe the old password was not correct." : "Ei suutnud vahetada parooli. Võib-olla on vana parool valesti sisestatud.", + "Please repeat the new recovery password" : "Palun korda uut taastevõtme salasõna", + "Password successfully changed." : "Salasõna vahetamine õnnestus.", + "Could not change the password. Maybe the old password was not correct." : "Ei suutnud muuta salasõna. Võib-olla on vana salasõna valesti sisestatud.", "Recovery Key disabled" : "Taastevõti on välja lülitatud", "Recovery Key enabled" : "Taastevõti on sisse lülitatud", - "Could not update the private key password." : "Ei suutnud uuendada privaatse võtme parooli.", - "The old password was not correct, please try again." : "Vana parool polnud õige, palun proovi uuesti.", - "The current log-in password was not correct, please try again." : "Praeguse sisselogimise parool polnud õige, palun proovi uuesti.", - "Private key password successfully updated." : "Privaatse võtme parool edukalt uuendatud.", + "Could not update the private key password." : "Ei suutnud uuendada privaatvõtme salasõna.", + "The old password was not correct, please try again." : "Vana salasõna polnud õige, palun proovi uuesti.", + "The current log-in password was not correct, please try again." : "Sisselogimise senine salasõna polnud õige, palun proovi uuesti.", + "Private key password successfully updated." : "Privaatvõtme salasõna uuendamine õnnestus.", + "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Krüptimisrakenduse vigane privaatvõti. Taastamaks ligipääsu krüptitud failidele palun uuenda oma isiklikest seadistustest privaatvõtme salasõna.", "Bad Signature" : "Vigane allkiri", "Missing Signature" : "Allkiri puudub", + "one-time password for server-side-encryption" : "ühekordne salasõna serveripoolse krüptimise jaoks", "Encryption password" : "Krüptimise salasõna", "The administration enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>." : "Serveri peakasutaja lülitas sisse serveripoolse krüptimise. Sinu failid on krüptitud salasõnaga <strong>%s</strong>.", "The administration enabled server-side-encryption. Your files were encrypted using the password \"%s\"." : "Serveri peakasutaja lülitas sisse serveripoolse krüptimise. Sinu failid on krüptitud salasõnaga „%s“.", + "Default encryption module" : "Vaikimisi krüptimismoodul", + "Default encryption module for server-side encryption" : "Vaikimisi krüptimismoodul serveripoolse krüptimise jaoks", + "Encrypt the home storage" : "Krüpti ka sisemine andmeruum", + "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Selle valiku kasutamisel krüptitakse failid sisemises ja välises andmeruumis. Vastasel juhul vaid välises andmeruumis.", "Enable recovery key" : "Luba taastevõtme kasutamine", "Disable recovery key" : "Keela taastevõtme kasutamine", - "Recovery key password" : "Taastevõtme parool", - "Repeat recovery key password" : "Korda taastevõtme parooli", - "Change recovery key password:" : "Muuda taastevõtme parooli:", - "Old recovery key password" : "Vana taastevõtme parool", - "New recovery key password" : "Uus taastevõtme parool", - "Repeat new recovery key password" : "Korda uut taastevõtme parooli", - "Change Password" : "Muuda parooli", - "Your private key password no longer matches your log-in password." : "Sinu provaatvõtme parool ei kattu enam sinu sisselogimise parooliga.", - "Set your old private key password to your current log-in password:" : "Pane oma vana privaatvõtme parooliks oma praegune sisselogimise parool.", - "Old log-in password" : "Vana sisselogimise parool", - "Current log-in password" : "Praegune sisselogimise parool", - "Update Private Key Password" : "Uuenda privaatse võtme parooli", - "Enable password recovery:" : "Luba parooli taaste:", - "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Valiku lubamine võimaldab taastada ligipääsu krüpteeritud failidele kui parooli kaotuse puhul", + "The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Taastevõti on täiendav krüptovõti, mida kasutatakse failide krüptimisel. Kui peaksid põhilise salasõna unustama, siis saad seda failide taastamisel kasutada. Salvesta ta turvaliselt digitaalsesse salasõnalaekasse või vana kooli seifi.", + "Recovery key password" : "Taastevõtme salasõna", + "Repeat recovery key password" : "Korda taastevõtme salasõna", + "Change recovery key password:" : "Muuda taastevõtme salasõna:", + "Old recovery key password" : "Vana taastevõtme salasõna", + "New recovery key password" : "Uus taastevõtme salasõna", + "Repeat new recovery key password" : "Korda uut taastevõtme salasõna", + "Change Password" : "Muuda salasõna", + "Basic encryption module" : "Lihtkrüptimise moodul", + "Your private key password no longer matches your log-in password." : "Sinu privaatvõtme salasõna ei kattu enam sinu sisselogimise salasõna.", + "Set your old private key password to your current log-in password:" : "Pane oma vana privaatvõtme salasõnaks oma praegune sisselogimise salasõna.", + "If you do not remember your old password you can ask your administrator to recover your files." : "Kui sa ei mäleta oma vana salasõna, siis palu oma süsteemihalduril taastada ligipääs failidele.", + "Old log-in password" : "Sisselogimise vana salasõna", + "Current log-in password" : "Sisselogimise praegune salasõna", + "Update Private Key Password" : "Uuenda privaatvõtme salasõna", + "Enable password recovery:" : "Luba salasõna taastamine:", + "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Valiku lubamine võimaldab salasõna kaotamise korral taastada ligipääsu krüptitud failidele", "Enabled" : "Sisse lülitatud", "Disabled" : "Välja lülitatud" }, diff --git a/apps/encryption/l10n/et_EE.json b/apps/encryption/l10n/et_EE.json index 1f1cad621d0..bd7a9d32858 100644 --- a/apps/encryption/l10n/et_EE.json +++ b/apps/encryption/l10n/et_EE.json @@ -1,44 +1,53 @@ { "translations": { - "Missing recovery key password" : "Muuda taastevõtme parool", - "Please repeat the recovery key password" : "Palun korda uut taastevõtme parooli", - "Repeated recovery key password does not match the provided recovery key password" : "Lahtritesse sisestatud taastevõtme paroolid ei kattu", + "Missing recovery key password" : "Muuda taastevõtme salasõna", + "Please repeat the recovery key password" : "Palun korda uut taastevõtme salasõna", + "Repeated recovery key password does not match the provided recovery key password" : "Sisestatud taastevõtme salasõna ei kattu", "Recovery key successfully enabled" : "Taastevõtme lubamine õnnestus", - "Could not enable recovery key. Please check your recovery key password!" : "Ei suutnud lubada taastevõtit. Palun kontrolli oma taastevõtme parooli!", + "Could not enable recovery key. Please check your recovery key password!" : "Ei suutnud taastevõtit kasutusele võtta. Palun kontrolli oma taastevõtme salasõna!", "Recovery key successfully disabled" : "Taastevõtme keelamine õnnestus", - "Could not disable recovery key. Please check your recovery key password!" : "Ei suuda keelata taastevõtit. Palun kontrolli oma taastevõtme parooli!", + "Could not disable recovery key. Please check your recovery key password!" : "Ei suutnud taastevõtme kasutamist lõpetada. Palun kontrolli oma taastevõtme salasõna!", "Missing parameters" : "Parameetrid puuduvad", "Please provide the old recovery password" : "Palun sisesta vana taastevõtme salasõna", "Please provide a new recovery password" : "Palun sisesta uus taastevõtme salasõna", - "Please repeat the new recovery password" : "Palun korda uut taastevõtme parooli", - "Password successfully changed." : "Parool edukalt vahetatud.", - "Could not change the password. Maybe the old password was not correct." : "Ei suutnud vahetada parooli. Võib-olla on vana parool valesti sisestatud.", + "Please repeat the new recovery password" : "Palun korda uut taastevõtme salasõna", + "Password successfully changed." : "Salasõna vahetamine õnnestus.", + "Could not change the password. Maybe the old password was not correct." : "Ei suutnud muuta salasõna. Võib-olla on vana salasõna valesti sisestatud.", "Recovery Key disabled" : "Taastevõti on välja lülitatud", "Recovery Key enabled" : "Taastevõti on sisse lülitatud", - "Could not update the private key password." : "Ei suutnud uuendada privaatse võtme parooli.", - "The old password was not correct, please try again." : "Vana parool polnud õige, palun proovi uuesti.", - "The current log-in password was not correct, please try again." : "Praeguse sisselogimise parool polnud õige, palun proovi uuesti.", - "Private key password successfully updated." : "Privaatse võtme parool edukalt uuendatud.", + "Could not update the private key password." : "Ei suutnud uuendada privaatvõtme salasõna.", + "The old password was not correct, please try again." : "Vana salasõna polnud õige, palun proovi uuesti.", + "The current log-in password was not correct, please try again." : "Sisselogimise senine salasõna polnud õige, palun proovi uuesti.", + "Private key password successfully updated." : "Privaatvõtme salasõna uuendamine õnnestus.", + "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Krüptimisrakenduse vigane privaatvõti. Taastamaks ligipääsu krüptitud failidele palun uuenda oma isiklikest seadistustest privaatvõtme salasõna.", "Bad Signature" : "Vigane allkiri", "Missing Signature" : "Allkiri puudub", + "one-time password for server-side-encryption" : "ühekordne salasõna serveripoolse krüptimise jaoks", "Encryption password" : "Krüptimise salasõna", "The administration enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>." : "Serveri peakasutaja lülitas sisse serveripoolse krüptimise. Sinu failid on krüptitud salasõnaga <strong>%s</strong>.", "The administration enabled server-side-encryption. Your files were encrypted using the password \"%s\"." : "Serveri peakasutaja lülitas sisse serveripoolse krüptimise. Sinu failid on krüptitud salasõnaga „%s“.", + "Default encryption module" : "Vaikimisi krüptimismoodul", + "Default encryption module for server-side encryption" : "Vaikimisi krüptimismoodul serveripoolse krüptimise jaoks", + "Encrypt the home storage" : "Krüpti ka sisemine andmeruum", + "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Selle valiku kasutamisel krüptitakse failid sisemises ja välises andmeruumis. Vastasel juhul vaid välises andmeruumis.", "Enable recovery key" : "Luba taastevõtme kasutamine", "Disable recovery key" : "Keela taastevõtme kasutamine", - "Recovery key password" : "Taastevõtme parool", - "Repeat recovery key password" : "Korda taastevõtme parooli", - "Change recovery key password:" : "Muuda taastevõtme parooli:", - "Old recovery key password" : "Vana taastevõtme parool", - "New recovery key password" : "Uus taastevõtme parool", - "Repeat new recovery key password" : "Korda uut taastevõtme parooli", - "Change Password" : "Muuda parooli", - "Your private key password no longer matches your log-in password." : "Sinu provaatvõtme parool ei kattu enam sinu sisselogimise parooliga.", - "Set your old private key password to your current log-in password:" : "Pane oma vana privaatvõtme parooliks oma praegune sisselogimise parool.", - "Old log-in password" : "Vana sisselogimise parool", - "Current log-in password" : "Praegune sisselogimise parool", - "Update Private Key Password" : "Uuenda privaatse võtme parooli", - "Enable password recovery:" : "Luba parooli taaste:", - "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Valiku lubamine võimaldab taastada ligipääsu krüpteeritud failidele kui parooli kaotuse puhul", + "The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Taastevõti on täiendav krüptovõti, mida kasutatakse failide krüptimisel. Kui peaksid põhilise salasõna unustama, siis saad seda failide taastamisel kasutada. Salvesta ta turvaliselt digitaalsesse salasõnalaekasse või vana kooli seifi.", + "Recovery key password" : "Taastevõtme salasõna", + "Repeat recovery key password" : "Korda taastevõtme salasõna", + "Change recovery key password:" : "Muuda taastevõtme salasõna:", + "Old recovery key password" : "Vana taastevõtme salasõna", + "New recovery key password" : "Uus taastevõtme salasõna", + "Repeat new recovery key password" : "Korda uut taastevõtme salasõna", + "Change Password" : "Muuda salasõna", + "Basic encryption module" : "Lihtkrüptimise moodul", + "Your private key password no longer matches your log-in password." : "Sinu privaatvõtme salasõna ei kattu enam sinu sisselogimise salasõna.", + "Set your old private key password to your current log-in password:" : "Pane oma vana privaatvõtme salasõnaks oma praegune sisselogimise salasõna.", + "If you do not remember your old password you can ask your administrator to recover your files." : "Kui sa ei mäleta oma vana salasõna, siis palu oma süsteemihalduril taastada ligipääs failidele.", + "Old log-in password" : "Sisselogimise vana salasõna", + "Current log-in password" : "Sisselogimise praegune salasõna", + "Update Private Key Password" : "Uuenda privaatvõtme salasõna", + "Enable password recovery:" : "Luba salasõna taastamine:", + "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Valiku lubamine võimaldab salasõna kaotamise korral taastada ligipääsu krüptitud failidele", "Enabled" : "Sisse lülitatud", "Disabled" : "Välja lülitatud" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/encryption/lib/AppInfo/Application.php b/apps/encryption/lib/AppInfo/Application.php index a4e9426c3e5..b1bf93b9dea 100644 --- a/apps/encryption/lib/AppInfo/Application.php +++ b/apps/encryption/lib/AppInfo/Application.php @@ -72,7 +72,12 @@ class Application extends App implements IBootstrap { } } - public function registerEventListeners(IConfig $config, IEventDispatcher $eventDispatcher, IManager $encryptionManager): void { + public function registerEventListeners( + IConfig $config, + IEventDispatcher $eventDispatcher, + IManager $encryptionManager, + Util $util, + ): void { if (!$encryptionManager->isEnabled()) { return; } @@ -84,18 +89,23 @@ class Application extends App implements IBootstrap { } // No maintenance so register all events - $eventDispatcher->addServiceListener(UserCreatedEvent::class, UserEventsListener::class); - $eventDispatcher->addServiceListener(UserDeletedEvent::class, UserEventsListener::class); - $eventDispatcher->addServiceListener(BeforePasswordUpdatedEvent::class, UserEventsListener::class); - $eventDispatcher->addServiceListener(PasswordUpdatedEvent::class, UserEventsListener::class); - $eventDispatcher->addServiceListener(BeforePasswordResetEvent::class, UserEventsListener::class); - $eventDispatcher->addServiceListener(PasswordResetEvent::class, UserEventsListener::class); $eventDispatcher->addServiceListener(UserLoggedInEvent::class, UserEventsListener::class); $eventDispatcher->addServiceListener(UserLoggedInWithCookieEvent::class, UserEventsListener::class); $eventDispatcher->addServiceListener(UserLoggedOutEvent::class, UserEventsListener::class); + if (!$util->isMasterKeyEnabled()) { + // Only make sense if no master key is used + $eventDispatcher->addServiceListener(UserCreatedEvent::class, UserEventsListener::class); + $eventDispatcher->addServiceListener(UserDeletedEvent::class, UserEventsListener::class); + $eventDispatcher->addServiceListener(BeforePasswordUpdatedEvent::class, UserEventsListener::class); + $eventDispatcher->addServiceListener(PasswordUpdatedEvent::class, UserEventsListener::class); + $eventDispatcher->addServiceListener(BeforePasswordResetEvent::class, UserEventsListener::class); + $eventDispatcher->addServiceListener(PasswordResetEvent::class, UserEventsListener::class); + } } - public function registerEncryptionModule(IManager $encryptionManager) { + public function registerEncryptionModule( + IManager $encryptionManager, + ) { $container = $this->getContainer(); $encryptionManager->registerEncryptionModule( diff --git a/apps/encryption/lib/Services/PassphraseService.php b/apps/encryption/lib/Services/PassphraseService.php index 0786cd3399a..bdcc3f1108a 100644 --- a/apps/encryption/lib/Services/PassphraseService.php +++ b/apps/encryption/lib/Services/PassphraseService.php @@ -55,6 +55,11 @@ class PassphraseService { return true; } + if ($this->util->isMasterKeyEnabled()) { + $this->logger->error('setPassphraseForUser should never be called when master key is enabled'); + return true; + } + // Check user exists on backend $user = $this->userManager->get($userId); if ($user === null) { diff --git a/apps/federatedfilesharing/l10n/et_EE.js b/apps/federatedfilesharing/l10n/et_EE.js index cc498be6c35..a8d5b5bf547 100644 --- a/apps/federatedfilesharing/l10n/et_EE.js +++ b/apps/federatedfilesharing/l10n/et_EE.js @@ -4,7 +4,7 @@ OC.L10N.register( "Invalid Federated Cloud ID" : "Vigane liitpilve ID", "Server to server sharing is not enabled on this server" : "Serveritevaheline jagamine ei ole selle pilves aktiiveeritud", "Couldn't establish a federated share." : "Liitjagamist ei õnnestunud luua", - "Couldn't establish a federated share, maybe the password was wrong." : "Liitjagamist ei õnnestunud luua, ehk oli parool vale.", + "Couldn't establish a federated share, maybe the password was wrong." : "Liitjagamist ei õnnestunud luua, vast oli salasõna vale.", "Federated Share request sent, you will receive an invitation. Check your notifications." : "Liitjagamise päring edastatud, sulle saadetakse kutse. Kontrolli oma teateid.", "Couldn't establish a federated share, it looks like the server to federate with is too old (Nextcloud <= 9)." : "Liitjagamist ei saanud luua, näib, et liitmiseks mõeldud server on liiga vana (Nextcloud <= 9).", "It is not allowed to send federated group shares from this server." : "Sellest serverist ei ole lubatud liitrühma jagamisi saata.", @@ -65,7 +65,7 @@ OC.L10N.register( "Add remote share" : "Lisa kaugjagamine", "Remote share" : "Kaugjagamine", "Do you want to add the remote share {name} from {owner}@{remote}?" : "Soovid lisada kaugjagamise {name} asukohast {owner}@{remote}?", - "Remote share password" : "Kaugjagamise parool", + "Remote share password" : "Kaugjagamise salasõna", "Incoming share could not be processed" : "Sissetulevat kausta ei saanud töödelda" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/et_EE.json b/apps/federatedfilesharing/l10n/et_EE.json index 81dd979414c..894a5a54dcc 100644 --- a/apps/federatedfilesharing/l10n/et_EE.json +++ b/apps/federatedfilesharing/l10n/et_EE.json @@ -2,7 +2,7 @@ "Invalid Federated Cloud ID" : "Vigane liitpilve ID", "Server to server sharing is not enabled on this server" : "Serveritevaheline jagamine ei ole selle pilves aktiiveeritud", "Couldn't establish a federated share." : "Liitjagamist ei õnnestunud luua", - "Couldn't establish a federated share, maybe the password was wrong." : "Liitjagamist ei õnnestunud luua, ehk oli parool vale.", + "Couldn't establish a federated share, maybe the password was wrong." : "Liitjagamist ei õnnestunud luua, vast oli salasõna vale.", "Federated Share request sent, you will receive an invitation. Check your notifications." : "Liitjagamise päring edastatud, sulle saadetakse kutse. Kontrolli oma teateid.", "Couldn't establish a federated share, it looks like the server to federate with is too old (Nextcloud <= 9)." : "Liitjagamist ei saanud luua, näib, et liitmiseks mõeldud server on liiga vana (Nextcloud <= 9).", "It is not allowed to send federated group shares from this server." : "Sellest serverist ei ole lubatud liitrühma jagamisi saata.", @@ -63,7 +63,7 @@ "Add remote share" : "Lisa kaugjagamine", "Remote share" : "Kaugjagamine", "Do you want to add the remote share {name} from {owner}@{remote}?" : "Soovid lisada kaugjagamise {name} asukohast {owner}@{remote}?", - "Remote share password" : "Kaugjagamise parool", + "Remote share password" : "Kaugjagamise salasõna", "Incoming share could not be processed" : "Sissetulevat kausta ei saanud töödelda" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/ar.js b/apps/files/l10n/ar.js index bbf83d997a4..5a5f4b7fbf8 100644 --- a/apps/files/l10n/ar.js +++ b/apps/files/l10n/ar.js @@ -120,7 +120,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "ترويسات الأعمدة ذات الأزرار قابلة للترتيب.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "لم يتم عرض هذه القائمة بالكامل لأسباب تتعلق بالأداء. سيتم عرض الملفات تباعاً أثناء التنقل عبر القائمة.", "File not found" : "تعذر العثور على الملف", - "{count} selected" : "{count} تم تحديده", + "_{count} selected_::_{count} selected_" : ["{count} تمّ تحديده","{count} تمّ تحديده","{count} تمّ تحديده","{count} تمّ تحديده","{count} تمّ تحديده","{count} تمّ تحديده"], "{usedQuotaByte} used" : "{usedQuotaByte} مستخدمة", "{used} of {quota} used" : "{used} من {quota} مستخدم", "{relative}% used" : "{relative}% مستخدمة", diff --git a/apps/files/l10n/ar.json b/apps/files/l10n/ar.json index ba86b8a249b..53f25349af8 100644 --- a/apps/files/l10n/ar.json +++ b/apps/files/l10n/ar.json @@ -118,7 +118,7 @@ "Column headers with buttons are sortable." : "ترويسات الأعمدة ذات الأزرار قابلة للترتيب.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "لم يتم عرض هذه القائمة بالكامل لأسباب تتعلق بالأداء. سيتم عرض الملفات تباعاً أثناء التنقل عبر القائمة.", "File not found" : "تعذر العثور على الملف", - "{count} selected" : "{count} تم تحديده", + "_{count} selected_::_{count} selected_" : ["{count} تمّ تحديده","{count} تمّ تحديده","{count} تمّ تحديده","{count} تمّ تحديده","{count} تمّ تحديده","{count} تمّ تحديده"], "{usedQuotaByte} used" : "{usedQuotaByte} مستخدمة", "{used} of {quota} used" : "{used} من {quota} مستخدم", "{relative}% used" : "{relative}% مستخدمة", diff --git a/apps/files/l10n/ast.js b/apps/files/l10n/ast.js index d9bdbf9b621..9c28dace36c 100644 --- a/apps/files/l10n/ast.js +++ b/apps/files/l10n/ast.js @@ -90,7 +90,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Les testeres de les columnes con botones puen ordenase.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Esta llista nun ta completa por motivos de rindimientu. Los ficheros van apaecer a midida que navegues pela llista.", "File not found" : "Nun s'atopó'l ficheru", - "{count} selected" : "{count} na seleición", "{usedQuotaByte} used" : "{usedQuotaByte} n'usu", "{used} of {quota} used" : "{used} de {quota} n'usu", "{relative}% used" : "{relative}% n'usu", diff --git a/apps/files/l10n/ast.json b/apps/files/l10n/ast.json index 3ccfed40a0c..dc64011f531 100644 --- a/apps/files/l10n/ast.json +++ b/apps/files/l10n/ast.json @@ -88,7 +88,6 @@ "Column headers with buttons are sortable." : "Les testeres de les columnes con botones puen ordenase.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Esta llista nun ta completa por motivos de rindimientu. Los ficheros van apaecer a midida que navegues pela llista.", "File not found" : "Nun s'atopó'l ficheru", - "{count} selected" : "{count} na seleición", "{usedQuotaByte} used" : "{usedQuotaByte} n'usu", "{used} of {quota} used" : "{used} de {quota} n'usu", "{relative}% used" : "{relative}% n'usu", diff --git a/apps/files/l10n/bg.js b/apps/files/l10n/bg.js index bb32646437a..92a891ee965 100644 --- a/apps/files/l10n/bg.js +++ b/apps/files/l10n/bg.js @@ -13,6 +13,7 @@ OC.L10N.register( "Restored by {user}" : "Възстановен от {user}", "Renamed by {user}" : "Преименуван от {user}", "Moved by {user}" : "Преместен от {user}", + "\"remote account\"" : "\"профил за отдалечен достъп\"", "You created {file}" : "Създадохте {file}", "You created an encrypted file in {file}" : "Създадохте криптиран файл в {file}", "{user} created {file}" : "{user} създаде {file}", @@ -77,6 +78,7 @@ OC.L10N.register( "\"{displayName}\" action failed" : "Действието „{displayName}“ е неуспешно", "Actions" : "Действия", "File not found" : "Файлът не е намерен", + "_{count} selected_::_{count} selected_" : ["{count} избрани","{count} избрани"], "{usedQuotaByte} used" : "{usedQuotaByte} използвано", "{used} of {quota} used" : "{used} от {quota} използвани", "{relative}% used" : "{relative}% използвано", @@ -136,6 +138,9 @@ OC.L10N.register( "Pick a template for {name}" : "Избор на шаблон за {name}", "Create a new file with the selected template" : "Създаване на нов файл с избрания шаблон", "Creating file" : "Създаване на файл ", + "_One file successfully converted_::_%n files successfully converted_" : ["Един файл е успешно преобразуван","%nфайловете са успешно преобразувани"], + "Files successfully converted" : "Файловете са успешно преобразувани", + "File successfully converted" : "Файлът е успешно преобразуван", "Disconnect storage" : "Извади хранилището", "Delete permanently" : "Изтрий завинаги", "Delete file" : "Изтриване на файлове", @@ -162,7 +167,10 @@ OC.L10N.register( "Unable to initialize the templates directory" : "Неуспешно инициализиране на директорията с шаблони", "Templates" : "Шаблони", "Search in folder: {folder}" : "Търси в папка: {folder}", + "Files uploaded successfully" : "Файловете са качени успешно", "Some files could not be moved" : "Някои файлове не могат да бъдат преместени", + "Files copied successfully" : "Файловете са успешно копирани", + "Files moved successfully" : "Файловете са преместени успешно", "This operation is forbidden" : "Операцията е забранена", "This directory is unavailable, please check the logs or contact the administrator" : "Директорията не е налична. Проверете журнала или се свържете с администратора", "Storage is temporarily not available" : "Временно хранилището не е налично", @@ -248,13 +256,16 @@ OC.L10N.register( "External storage \"{mountPoint}\" is almost full ({usedSpacePercent}%)." : "Външното хранилище е \"{mountPoint}“ е почти пълно ({usedSpacePercent}%).", "Your storage is almost full ({usedSpacePercent}%)." : "Вашето хранилище е почти запълнено ({usedSpacePercent}%).", "_matches \"{filter}\"_::_match \"{filter}\"_" : ["съвпада с \"{filter}\"","съвпада с \"{filter}\""], + "Direct link was copied (only works for people who have access to this file/folder)" : "Директната връзка е копирана (ще работи само за хора, които имат достъп до този файл/папка)", "Path" : "Път", "_%n byte_::_%n bytes_" : ["%n байт","%n байта"], + "Copy direct link (only works for people who have access to this file/folder)" : "Копирай директна връзка (работи само за хора, които имат достъп до този файл/папка)", "Upload file" : "Качи файл", "An error occurred while trying to update the tags" : "Възникна грешка при опита за промяна на етикети", "Upload (max. %s)" : "Качи (макс. %s)", "Personal Files" : "Лични файлове", "Text file" : "Текстов файл", - "New text file.txt" : "Текстов файл.txt" + "New text file.txt" : "Текстов файл.txt", + "{count} files successfully converted" : "{count}файловете са успешно преобразувани" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/bg.json b/apps/files/l10n/bg.json index 40caf936430..2d3f7428d95 100644 --- a/apps/files/l10n/bg.json +++ b/apps/files/l10n/bg.json @@ -11,6 +11,7 @@ "Restored by {user}" : "Възстановен от {user}", "Renamed by {user}" : "Преименуван от {user}", "Moved by {user}" : "Преместен от {user}", + "\"remote account\"" : "\"профил за отдалечен достъп\"", "You created {file}" : "Създадохте {file}", "You created an encrypted file in {file}" : "Създадохте криптиран файл в {file}", "{user} created {file}" : "{user} създаде {file}", @@ -75,6 +76,7 @@ "\"{displayName}\" action failed" : "Действието „{displayName}“ е неуспешно", "Actions" : "Действия", "File not found" : "Файлът не е намерен", + "_{count} selected_::_{count} selected_" : ["{count} избрани","{count} избрани"], "{usedQuotaByte} used" : "{usedQuotaByte} използвано", "{used} of {quota} used" : "{used} от {quota} използвани", "{relative}% used" : "{relative}% използвано", @@ -134,6 +136,9 @@ "Pick a template for {name}" : "Избор на шаблон за {name}", "Create a new file with the selected template" : "Създаване на нов файл с избрания шаблон", "Creating file" : "Създаване на файл ", + "_One file successfully converted_::_%n files successfully converted_" : ["Един файл е успешно преобразуван","%nфайловете са успешно преобразувани"], + "Files successfully converted" : "Файловете са успешно преобразувани", + "File successfully converted" : "Файлът е успешно преобразуван", "Disconnect storage" : "Извади хранилището", "Delete permanently" : "Изтрий завинаги", "Delete file" : "Изтриване на файлове", @@ -160,7 +165,10 @@ "Unable to initialize the templates directory" : "Неуспешно инициализиране на директорията с шаблони", "Templates" : "Шаблони", "Search in folder: {folder}" : "Търси в папка: {folder}", + "Files uploaded successfully" : "Файловете са качени успешно", "Some files could not be moved" : "Някои файлове не могат да бъдат преместени", + "Files copied successfully" : "Файловете са успешно копирани", + "Files moved successfully" : "Файловете са преместени успешно", "This operation is forbidden" : "Операцията е забранена", "This directory is unavailable, please check the logs or contact the administrator" : "Директорията не е налична. Проверете журнала или се свържете с администратора", "Storage is temporarily not available" : "Временно хранилището не е налично", @@ -246,13 +254,16 @@ "External storage \"{mountPoint}\" is almost full ({usedSpacePercent}%)." : "Външното хранилище е \"{mountPoint}“ е почти пълно ({usedSpacePercent}%).", "Your storage is almost full ({usedSpacePercent}%)." : "Вашето хранилище е почти запълнено ({usedSpacePercent}%).", "_matches \"{filter}\"_::_match \"{filter}\"_" : ["съвпада с \"{filter}\"","съвпада с \"{filter}\""], + "Direct link was copied (only works for people who have access to this file/folder)" : "Директната връзка е копирана (ще работи само за хора, които имат достъп до този файл/папка)", "Path" : "Път", "_%n byte_::_%n bytes_" : ["%n байт","%n байта"], + "Copy direct link (only works for people who have access to this file/folder)" : "Копирай директна връзка (работи само за хора, които имат достъп до този файл/папка)", "Upload file" : "Качи файл", "An error occurred while trying to update the tags" : "Възникна грешка при опита за промяна на етикети", "Upload (max. %s)" : "Качи (макс. %s)", "Personal Files" : "Лични файлове", "Text file" : "Текстов файл", - "New text file.txt" : "Текстов файл.txt" + "New text file.txt" : "Текстов файл.txt", + "{count} files successfully converted" : "{count}файловете са успешно преобразувани" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/ca.js b/apps/files/l10n/ca.js index 165d9f4db58..b2450f96782 100644 --- a/apps/files/l10n/ca.js +++ b/apps/files/l10n/ca.js @@ -116,7 +116,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Les capçaleres de columna amb botons es poder ordenar.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Aquesta llista no es mostra completament per raons de rendiment. Es mostraran els fitxers a mesura que navegueu per la llista.", "File not found" : "No s'ha trobat el fitxer", - "{count} selected" : "Selecció: {count}", "{usedQuotaByte} used" : "{usedQuotaByte} en ús", "{used} of {quota} used" : "{used} de {quota} en ús", "{relative}% used" : "{relative}% en ús", diff --git a/apps/files/l10n/ca.json b/apps/files/l10n/ca.json index 785f02ffb75..7d468051d24 100644 --- a/apps/files/l10n/ca.json +++ b/apps/files/l10n/ca.json @@ -114,7 +114,6 @@ "Column headers with buttons are sortable." : "Les capçaleres de columna amb botons es poder ordenar.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Aquesta llista no es mostra completament per raons de rendiment. Es mostraran els fitxers a mesura que navegueu per la llista.", "File not found" : "No s'ha trobat el fitxer", - "{count} selected" : "Selecció: {count}", "{usedQuotaByte} used" : "{usedQuotaByte} en ús", "{used} of {quota} used" : "{used} de {quota} en ús", "{relative}% used" : "{relative}% en ús", diff --git a/apps/files/l10n/cs.js b/apps/files/l10n/cs.js index e3739719ee2..a1718de5911 100644 --- a/apps/files/l10n/cs.js +++ b/apps/files/l10n/cs.js @@ -124,7 +124,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Podle těch sloupců, které mají v záhlaví tlačítko, je možné řadit.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Seznam není vykreslen celý z důvodu nároků na výkon. Soubory budou dokreslovány, jak se budete posouvat seznamem.", "File not found" : "Soubor nenalezen", - "{count} selected" : "vybráno {count}", + "_{count} selected_::_{count} selected_" : ["vybráno {count}","vybráno {count}","vybráno {count}","vybráno {count}"], "{usedQuotaByte} used" : "{usedQuotaByte} využito", "{used} of {quota} used" : "Využito {used} z {quota} ", "{relative}% used" : "{relative}% využito", diff --git a/apps/files/l10n/cs.json b/apps/files/l10n/cs.json index 1f5d8646df1..9ebd45561e0 100644 --- a/apps/files/l10n/cs.json +++ b/apps/files/l10n/cs.json @@ -122,7 +122,7 @@ "Column headers with buttons are sortable." : "Podle těch sloupců, které mají v záhlaví tlačítko, je možné řadit.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Seznam není vykreslen celý z důvodu nároků na výkon. Soubory budou dokreslovány, jak se budete posouvat seznamem.", "File not found" : "Soubor nenalezen", - "{count} selected" : "vybráno {count}", + "_{count} selected_::_{count} selected_" : ["vybráno {count}","vybráno {count}","vybráno {count}","vybráno {count}"], "{usedQuotaByte} used" : "{usedQuotaByte} využito", "{used} of {quota} used" : "Využito {used} z {quota} ", "{relative}% used" : "{relative}% využito", diff --git a/apps/files/l10n/da.js b/apps/files/l10n/da.js index 1bd3dad4599..3cd40d2a95d 100644 --- a/apps/files/l10n/da.js +++ b/apps/files/l10n/da.js @@ -116,7 +116,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Kolonneoverskrifter med knapper er sorterbare.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Hele listen er ikke hentet, af hensyn til størrelsen. Listen vil blive hentet løbende som du kører igennem listen.", "File not found" : "Filen blev ikke fundet", - "{count} selected" : "{count} valgt", "{usedQuotaByte} used" : "{usedQuotaByte} brugt", "{used} of {quota} used" : "{used} af {quota} brugt", "{relative}% used" : "{relative}% brugt", diff --git a/apps/files/l10n/da.json b/apps/files/l10n/da.json index cce400a7144..5089b66dcc9 100644 --- a/apps/files/l10n/da.json +++ b/apps/files/l10n/da.json @@ -114,7 +114,6 @@ "Column headers with buttons are sortable." : "Kolonneoverskrifter med knapper er sorterbare.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Hele listen er ikke hentet, af hensyn til størrelsen. Listen vil blive hentet løbende som du kører igennem listen.", "File not found" : "Filen blev ikke fundet", - "{count} selected" : "{count} valgt", "{usedQuotaByte} used" : "{usedQuotaByte} brugt", "{used} of {quota} used" : "{used} af {quota} brugt", "{relative}% used" : "{relative}% brugt", diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js index 7d0d105072c..3e6ad8bf9aa 100644 --- a/apps/files/l10n/de.js +++ b/apps/files/l10n/de.js @@ -124,7 +124,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Spaltenüberschriften mit Schaltflächen sind sortierbar.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Diese Liste wird aus Performance-Gründen nicht vollständig angezeigt. Die Dateien werden angezeigt, wenn du durch die Liste navigierst.", "File not found" : "Datei nicht gefunden", - "{count} selected" : "{count} ausgewählt", + "_{count} selected_::_{count} selected_" : ["{count} ausgewählt","{count} ausgewählt"], "{usedQuotaByte} used" : "{usedQuotaByte} verwendet", "{used} of {quota} used" : "{used} von {quota} verwendet", "{relative}% used" : "{relative} % verwendet", diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json index 7dca82a027c..709464ad3be 100644 --- a/apps/files/l10n/de.json +++ b/apps/files/l10n/de.json @@ -122,7 +122,7 @@ "Column headers with buttons are sortable." : "Spaltenüberschriften mit Schaltflächen sind sortierbar.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Diese Liste wird aus Performance-Gründen nicht vollständig angezeigt. Die Dateien werden angezeigt, wenn du durch die Liste navigierst.", "File not found" : "Datei nicht gefunden", - "{count} selected" : "{count} ausgewählt", + "_{count} selected_::_{count} selected_" : ["{count} ausgewählt","{count} ausgewählt"], "{usedQuotaByte} used" : "{usedQuotaByte} verwendet", "{used} of {quota} used" : "{used} von {quota} verwendet", "{relative}% used" : "{relative} % verwendet", diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js index c0f58b2e1eb..63cf2a969c9 100644 --- a/apps/files/l10n/de_DE.js +++ b/apps/files/l10n/de_DE.js @@ -124,7 +124,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Spaltenüberschriften mit Schaltflächen sind sortierbar.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Diese Liste ist aus Performance-Gründen nicht vollständig gerendert. Die Dateien werden gerendert, wenn Sie durch die Liste navigieren.", "File not found" : "Datei nicht gefunden", - "{count} selected" : "{count} ausgewählt", + "_{count} selected_::_{count} selected_" : ["{count} ausgewählt","{count} ausgewählt"], "{usedQuotaByte} used" : "{usedQuotaByte} verwendet", "{used} of {quota} used" : "{used} von {quota} verwendet", "{relative}% used" : "{relative} % verwendet", diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json index 5f3c56b5943..ee85f6a1860 100644 --- a/apps/files/l10n/de_DE.json +++ b/apps/files/l10n/de_DE.json @@ -122,7 +122,7 @@ "Column headers with buttons are sortable." : "Spaltenüberschriften mit Schaltflächen sind sortierbar.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Diese Liste ist aus Performance-Gründen nicht vollständig gerendert. Die Dateien werden gerendert, wenn Sie durch die Liste navigieren.", "File not found" : "Datei nicht gefunden", - "{count} selected" : "{count} ausgewählt", + "_{count} selected_::_{count} selected_" : ["{count} ausgewählt","{count} ausgewählt"], "{usedQuotaByte} used" : "{usedQuotaByte} verwendet", "{used} of {quota} used" : "{used} von {quota} verwendet", "{relative}% used" : "{relative} % verwendet", diff --git a/apps/files/l10n/el.js b/apps/files/l10n/el.js index b80ca51fce8..8e9d8cfe461 100644 --- a/apps/files/l10n/el.js +++ b/apps/files/l10n/el.js @@ -96,7 +96,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Οι επικεφαλίδες στηλών με κουμπιά είναι ταξινομήσιμες.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Η λίστα αυτή δεν εμφανίζεται πλήρως για λόγους απόδοσης. Τα αρχεία θα εμφανίζονται καθώς πλοηγείστε στη λίστα.", "File not found" : "Δε βρέθηκε το αρχείο", - "{count} selected" : "{count} έχουν επιλεγεί", "{usedQuotaByte} used" : "{usedQuotaByte} χρησιμοποιείται", "{used} of {quota} used" : "Χρήση {used} από {quota} ", "{relative}% used" : "{relative}% χρησιμοποιείται", diff --git a/apps/files/l10n/el.json b/apps/files/l10n/el.json index 517397b07c1..dfb52e9e725 100644 --- a/apps/files/l10n/el.json +++ b/apps/files/l10n/el.json @@ -94,7 +94,6 @@ "Column headers with buttons are sortable." : "Οι επικεφαλίδες στηλών με κουμπιά είναι ταξινομήσιμες.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Η λίστα αυτή δεν εμφανίζεται πλήρως για λόγους απόδοσης. Τα αρχεία θα εμφανίζονται καθώς πλοηγείστε στη λίστα.", "File not found" : "Δε βρέθηκε το αρχείο", - "{count} selected" : "{count} έχουν επιλεγεί", "{usedQuotaByte} used" : "{usedQuotaByte} χρησιμοποιείται", "{used} of {quota} used" : "Χρήση {used} από {quota} ", "{relative}% used" : "{relative}% χρησιμοποιείται", diff --git a/apps/files/l10n/en_GB.js b/apps/files/l10n/en_GB.js index 8c048258500..9321bed70a9 100644 --- a/apps/files/l10n/en_GB.js +++ b/apps/files/l10n/en_GB.js @@ -124,7 +124,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Column headers with buttons are sortable.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list.", "File not found" : "File not found", - "{count} selected" : "{count} selected", + "_{count} selected_::_{count} selected_" : ["{count} selected","{count} selected"], "{usedQuotaByte} used" : "{usedQuotaByte} used", "{used} of {quota} used" : "{used} of {quota} used", "{relative}% used" : "{relative}% used", diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json index 111c36b99b0..ad4a1a6e0ed 100644 --- a/apps/files/l10n/en_GB.json +++ b/apps/files/l10n/en_GB.json @@ -122,7 +122,7 @@ "Column headers with buttons are sortable." : "Column headers with buttons are sortable.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list.", "File not found" : "File not found", - "{count} selected" : "{count} selected", + "_{count} selected_::_{count} selected_" : ["{count} selected","{count} selected"], "{usedQuotaByte} used" : "{usedQuotaByte} used", "{used} of {quota} used" : "{used} of {quota} used", "{relative}% used" : "{relative}% used", diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js index 052bcaa2aa0..b20e2be9964 100644 --- a/apps/files/l10n/es.js +++ b/apps/files/l10n/es.js @@ -117,7 +117,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Las columnas con botones en la cabecera son ordenables.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Esta lista no se muestra completamente por motivos de rendimiento. Los archivos se mostrarán a medida que navega por la lista.", "File not found" : "No se ha encontrado el archivo", - "{count} selected" : "{count} seleccionados", + "_{count} selected_::_{count} selected_" : ["{count}seleccionado","{count} seleccionados","{count} seleccionados"], "{usedQuotaByte} used" : "{usedQuotaByte} utilizados", "{used} of {quota} used" : "{used} usados de {quota}", "{relative}% used" : "{relative}% utilizado", diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json index 3a9fa3af3e5..c34b3f7281b 100644 --- a/apps/files/l10n/es.json +++ b/apps/files/l10n/es.json @@ -115,7 +115,7 @@ "Column headers with buttons are sortable." : "Las columnas con botones en la cabecera son ordenables.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Esta lista no se muestra completamente por motivos de rendimiento. Los archivos se mostrarán a medida que navega por la lista.", "File not found" : "No se ha encontrado el archivo", - "{count} selected" : "{count} seleccionados", + "_{count} selected_::_{count} selected_" : ["{count}seleccionado","{count} seleccionados","{count} seleccionados"], "{usedQuotaByte} used" : "{usedQuotaByte} utilizados", "{used} of {quota} used" : "{used} usados de {quota}", "{relative}% used" : "{relative}% utilizado", diff --git a/apps/files/l10n/es_EC.js b/apps/files/l10n/es_EC.js index 2e937b91fae..0702df37a2c 100644 --- a/apps/files/l10n/es_EC.js +++ b/apps/files/l10n/es_EC.js @@ -78,6 +78,7 @@ OC.L10N.register( "\"{displayName}\" action failed" : "La acción \"{displayName}\" falló.", "Actions" : "Acciones", "List of files and folders." : "Lista de archivos y carpetas. ", + "_{count} selected_::_{count} selected_" : ["{count} seleccionado","{count} seleccionados","{count} seleccionado"], "{usedQuotaByte} used" : "{usedQuotaByte} usados.", "{used} of {quota} used" : "{used} de {quota} usados", "{relative}% used" : "{relative}% usados.", diff --git a/apps/files/l10n/es_EC.json b/apps/files/l10n/es_EC.json index ce46795a8ae..321328d7be4 100644 --- a/apps/files/l10n/es_EC.json +++ b/apps/files/l10n/es_EC.json @@ -76,6 +76,7 @@ "\"{displayName}\" action failed" : "La acción \"{displayName}\" falló.", "Actions" : "Acciones", "List of files and folders." : "Lista de archivos y carpetas. ", + "_{count} selected_::_{count} selected_" : ["{count} seleccionado","{count} seleccionados","{count} seleccionado"], "{usedQuotaByte} used" : "{usedQuotaByte} usados.", "{used} of {quota} used" : "{used} de {quota} usados", "{relative}% used" : "{relative}% usados.", diff --git a/apps/files/l10n/es_MX.js b/apps/files/l10n/es_MX.js index 7ad14b22bbb..086d9e0fdd0 100644 --- a/apps/files/l10n/es_MX.js +++ b/apps/files/l10n/es_MX.js @@ -106,7 +106,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Las columnas con botones en la cabecera son ordenables.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Esta lista no se muestra completamente por motivos de rendimiento. Los archivos se mostrarán a medida que navega por la lista.", "File not found" : "Archivo no encontrado", - "{count} selected" : "{count} seleccionados", "{usedQuotaByte} used" : "{usedQuotaByte} utilizados", "{used} of {quota} used" : "{used} de {quota} usados", "{relative}% used" : "{relative}% utilizado", diff --git a/apps/files/l10n/es_MX.json b/apps/files/l10n/es_MX.json index 93aee529828..b126e689477 100644 --- a/apps/files/l10n/es_MX.json +++ b/apps/files/l10n/es_MX.json @@ -104,7 +104,6 @@ "Column headers with buttons are sortable." : "Las columnas con botones en la cabecera son ordenables.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Esta lista no se muestra completamente por motivos de rendimiento. Los archivos se mostrarán a medida que navega por la lista.", "File not found" : "Archivo no encontrado", - "{count} selected" : "{count} seleccionados", "{usedQuotaByte} used" : "{usedQuotaByte} utilizados", "{used} of {quota} used" : "{used} de {quota} usados", "{relative}% used" : "{relative}% utilizado", diff --git a/apps/files/l10n/et_EE.js b/apps/files/l10n/et_EE.js index cd54b2acf33..4b6f263c9a0 100644 --- a/apps/files/l10n/et_EE.js +++ b/apps/files/l10n/et_EE.js @@ -124,7 +124,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Võid kasutada nuppudega veerupäised järjestamiseks.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Jõudluse mõttes ei ole kogu loend esimesel hetkel tervikuna nähtav. Uued failid lisanduvad sedamööda, kuid sa loendis edasi liigud.", "File not found" : "Faili ei leitud", - "{count} selected" : "{count} valitud", + "_{count} selected_::_{count} selected_" : ["{count} valitud","{count} valitud"], "{usedQuotaByte} used" : "{usedQuotaByte} kasutusel", "{used} of {quota} used" : "{used} / {quota} kasutusel", "{relative}% used" : "{relative}% kasutusel", diff --git a/apps/files/l10n/et_EE.json b/apps/files/l10n/et_EE.json index b8052a14b64..1ff383d06c7 100644 --- a/apps/files/l10n/et_EE.json +++ b/apps/files/l10n/et_EE.json @@ -122,7 +122,7 @@ "Column headers with buttons are sortable." : "Võid kasutada nuppudega veerupäised järjestamiseks.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Jõudluse mõttes ei ole kogu loend esimesel hetkel tervikuna nähtav. Uued failid lisanduvad sedamööda, kuid sa loendis edasi liigud.", "File not found" : "Faili ei leitud", - "{count} selected" : "{count} valitud", + "_{count} selected_::_{count} selected_" : ["{count} valitud","{count} valitud"], "{usedQuotaByte} used" : "{usedQuotaByte} kasutusel", "{used} of {quota} used" : "{used} / {quota} kasutusel", "{relative}% used" : "{relative}% kasutusel", diff --git a/apps/files/l10n/eu.js b/apps/files/l10n/eu.js index 51ed660a406..d5b58dc1124 100644 --- a/apps/files/l10n/eu.js +++ b/apps/files/l10n/eu.js @@ -111,7 +111,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Botoiak dituzten zutabeen goiburuak ordena daitezke.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Zerrenda hau ez da guztiz ikusten errendimendu arrazoiengatik. Fitxategiak zerrendan zehar nabigatzen duten heinean bistaratuko dira.", "File not found" : "Ez da fitxategia aurkitu", - "{count} selected" : "{count} hautatuta", + "_{count} selected_::_{count} selected_" : ["{count} hautatuta","{count} hautatuta"], "{usedQuotaByte} used" : "{usedQuotaByte} erabilita", "{used} of {quota} used" : "{used} / {quota} erabilita", "{relative}% used" : "%{relative} erabilita", diff --git a/apps/files/l10n/eu.json b/apps/files/l10n/eu.json index f050ebc9124..07818c85564 100644 --- a/apps/files/l10n/eu.json +++ b/apps/files/l10n/eu.json @@ -109,7 +109,7 @@ "Column headers with buttons are sortable." : "Botoiak dituzten zutabeen goiburuak ordena daitezke.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Zerrenda hau ez da guztiz ikusten errendimendu arrazoiengatik. Fitxategiak zerrendan zehar nabigatzen duten heinean bistaratuko dira.", "File not found" : "Ez da fitxategia aurkitu", - "{count} selected" : "{count} hautatuta", + "_{count} selected_::_{count} selected_" : ["{count} hautatuta","{count} hautatuta"], "{usedQuotaByte} used" : "{usedQuotaByte} erabilita", "{used} of {quota} used" : "{used} / {quota} erabilita", "{relative}% used" : "%{relative} erabilita", diff --git a/apps/files/l10n/fa.js b/apps/files/l10n/fa.js index 38d47a69821..64dcbc55580 100644 --- a/apps/files/l10n/fa.js +++ b/apps/files/l10n/fa.js @@ -124,7 +124,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Column headers with buttons are sortable.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "این لیست به دلایل عملکرد به طور کامل ارائه نشده است. در حین حرکت در لیست، فایل ها ارائه می شوند.", "File not found" : "فایل یافت نشد", - "{count} selected" : "{count} selected", "{usedQuotaByte} used" : "{usedQuotaByte} استفاده شده است", "{used} of {quota} used" : "{used} از {quota} استفاده شده", "{relative}% used" : "{relative}% used", diff --git a/apps/files/l10n/fa.json b/apps/files/l10n/fa.json index d4cca468374..e652c77538b 100644 --- a/apps/files/l10n/fa.json +++ b/apps/files/l10n/fa.json @@ -122,7 +122,6 @@ "Column headers with buttons are sortable." : "Column headers with buttons are sortable.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "این لیست به دلایل عملکرد به طور کامل ارائه نشده است. در حین حرکت در لیست، فایل ها ارائه می شوند.", "File not found" : "فایل یافت نشد", - "{count} selected" : "{count} selected", "{usedQuotaByte} used" : "{usedQuotaByte} استفاده شده است", "{used} of {quota} used" : "{used} از {quota} استفاده شده", "{relative}% used" : "{relative}% used", diff --git a/apps/files/l10n/fi.js b/apps/files/l10n/fi.js index 91ff67eb0e2..35958eb8d83 100644 --- a/apps/files/l10n/fi.js +++ b/apps/files/l10n/fi.js @@ -110,7 +110,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Painikkeilla varustetut sarakeotsikot ovat järjestettävissä.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Tätä luetteloa ei ole esitetty täysin suorituskykyyn liittyvistä syistä. Tiedostot esitetään sitä mukaa, kun selaat luetteloa.", "File not found" : "Tiedostoa ei löytynyt", - "{count} selected" : "{count} valittu", "{usedQuotaByte} used" : "{usedQuotaByte} käytetty", "{used} of {quota} used" : "{used}/{quota} käytetty", "{relative}% used" : "{relative} % käytetty", diff --git a/apps/files/l10n/fi.json b/apps/files/l10n/fi.json index 86e0f1dd414..8f1db629e08 100644 --- a/apps/files/l10n/fi.json +++ b/apps/files/l10n/fi.json @@ -108,7 +108,6 @@ "Column headers with buttons are sortable." : "Painikkeilla varustetut sarakeotsikot ovat järjestettävissä.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Tätä luetteloa ei ole esitetty täysin suorituskykyyn liittyvistä syistä. Tiedostot esitetään sitä mukaa, kun selaat luetteloa.", "File not found" : "Tiedostoa ei löytynyt", - "{count} selected" : "{count} valittu", "{usedQuotaByte} used" : "{usedQuotaByte} käytetty", "{used} of {quota} used" : "{used}/{quota} käytetty", "{relative}% used" : "{relative} % käytetty", diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js index 7a03d199e85..4616c9f75a4 100644 --- a/apps/files/l10n/fr.js +++ b/apps/files/l10n/fr.js @@ -124,7 +124,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "L'entête des colonnes avec des boutons sont triables.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Cette liste n'est pas entièrement affichée pour des raisons de performances. Les fichiers seront affichés au fur et à mesure que vous naviguerez dans la liste.", "File not found" : "Fichier non trouvé", - "{count} selected" : "{count} sélectionné(s)", + "_{count} selected_::_{count} selected_" : ["{count} sélectionné","{count} sélectionné(s)","{count} sélectionné(s)"], "{usedQuotaByte} used" : "{usedQuotaByte} utilisés", "{used} of {quota} used" : "{used} utilisés sur {quota}", "{relative}% used" : "{relative}% utilisés", diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json index 7485b1c5749..ef55859018e 100644 --- a/apps/files/l10n/fr.json +++ b/apps/files/l10n/fr.json @@ -122,7 +122,7 @@ "Column headers with buttons are sortable." : "L'entête des colonnes avec des boutons sont triables.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Cette liste n'est pas entièrement affichée pour des raisons de performances. Les fichiers seront affichés au fur et à mesure que vous naviguerez dans la liste.", "File not found" : "Fichier non trouvé", - "{count} selected" : "{count} sélectionné(s)", + "_{count} selected_::_{count} selected_" : ["{count} sélectionné","{count} sélectionné(s)","{count} sélectionné(s)"], "{usedQuotaByte} used" : "{usedQuotaByte} utilisés", "{used} of {quota} used" : "{used} utilisés sur {quota}", "{relative}% used" : "{relative}% utilisés", diff --git a/apps/files/l10n/ga.js b/apps/files/l10n/ga.js index 0aca93f958f..fa6b5d48918 100644 --- a/apps/files/l10n/ga.js +++ b/apps/files/l10n/ga.js @@ -124,7 +124,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Is féidir ceanntásca colún le cnaipí a shórtáil.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Níl an liosta seo le fáil go hiomlán ar chúiseanna feidhmíochta. Déanfar na comhaid a rindreáil agus tú ag dul tríd an liosta.", "File not found" : "Comhad gan aimsiú", - "{count} selected" : "{count} roghnaithe", + "_{count} selected_::_{count} selected_" : ["{count} roghnaithe","{count} roghnaithe","{count} roghnaithe","{count} roghnaithe","{count} roghnaithe"], "{usedQuotaByte} used" : "{usedQuotaByte} úsáidte", "{used} of {quota} used" : "{used} de {quota} in úsáid", "{relative}% used" : "{relative}% in úsáid", diff --git a/apps/files/l10n/ga.json b/apps/files/l10n/ga.json index d8fa2048c0a..00896df6386 100644 --- a/apps/files/l10n/ga.json +++ b/apps/files/l10n/ga.json @@ -122,7 +122,7 @@ "Column headers with buttons are sortable." : "Is féidir ceanntásca colún le cnaipí a shórtáil.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Níl an liosta seo le fáil go hiomlán ar chúiseanna feidhmíochta. Déanfar na comhaid a rindreáil agus tú ag dul tríd an liosta.", "File not found" : "Comhad gan aimsiú", - "{count} selected" : "{count} roghnaithe", + "_{count} selected_::_{count} selected_" : ["{count} roghnaithe","{count} roghnaithe","{count} roghnaithe","{count} roghnaithe","{count} roghnaithe"], "{usedQuotaByte} used" : "{usedQuotaByte} úsáidte", "{used} of {quota} used" : "{used} de {quota} in úsáid", "{relative}% used" : "{relative}% in úsáid", diff --git a/apps/files/l10n/gl.js b/apps/files/l10n/gl.js index bcd590765b6..cf0db39da34 100644 --- a/apps/files/l10n/gl.js +++ b/apps/files/l10n/gl.js @@ -116,7 +116,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "As cabeceiras das columnas con botóns pódense ordenar.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Esta lista non se representa de xeito completo por mor do rendemento. Os ficheiros represéntanse mentres se despraza pola lista.", "File not found" : "Non se atopou o ficheiro", - "{count} selected" : "{count} seleccionados", + "_{count} selected_::_{count} selected_" : ["{count} seleccionado","{count} seleccionados"], "{usedQuotaByte} used" : "{usedQuotaByte} usado", "{used} of {quota} used" : "Usados {used} de {quota}", "{relative}% used" : "{relative}% usado", @@ -152,7 +152,7 @@ OC.L10N.register( "Adding the file extension \"{new}\" may render the file unreadable." : "Engadir a extensión de ficheiro «{new}» pode facer que o ficheiro sexa ilexíbel.", "Do not show this dialog again." : "Non volver amosar este diálogo", "Select file or folder to link to" : "Seleccione o ficheiro ou cartafol ao que ligar", - "Choose {file}" : "Escoller {file}", + "Choose {file}" : "Escoller {file}", "Share" : "Compartir", "Shared by link" : "Compartido por ligazón", "Shared" : "Compartido", diff --git a/apps/files/l10n/gl.json b/apps/files/l10n/gl.json index bcb6369d52d..6e37d23adad 100644 --- a/apps/files/l10n/gl.json +++ b/apps/files/l10n/gl.json @@ -114,7 +114,7 @@ "Column headers with buttons are sortable." : "As cabeceiras das columnas con botóns pódense ordenar.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Esta lista non se representa de xeito completo por mor do rendemento. Os ficheiros represéntanse mentres se despraza pola lista.", "File not found" : "Non se atopou o ficheiro", - "{count} selected" : "{count} seleccionados", + "_{count} selected_::_{count} selected_" : ["{count} seleccionado","{count} seleccionados"], "{usedQuotaByte} used" : "{usedQuotaByte} usado", "{used} of {quota} used" : "Usados {used} de {quota}", "{relative}% used" : "{relative}% usado", @@ -150,7 +150,7 @@ "Adding the file extension \"{new}\" may render the file unreadable." : "Engadir a extensión de ficheiro «{new}» pode facer que o ficheiro sexa ilexíbel.", "Do not show this dialog again." : "Non volver amosar este diálogo", "Select file or folder to link to" : "Seleccione o ficheiro ou cartafol ao que ligar", - "Choose {file}" : "Escoller {file}", + "Choose {file}" : "Escoller {file}", "Share" : "Compartir", "Shared by link" : "Compartido por ligazón", "Shared" : "Compartido", diff --git a/apps/files/l10n/hu.js b/apps/files/l10n/hu.js index eaed162caac..5c783906ce7 100644 --- a/apps/files/l10n/hu.js +++ b/apps/files/l10n/hu.js @@ -114,7 +114,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "A gombot tartalmazó oszlopfejlécek rendezhetők.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Ez a lista teljesítménybeli okokból nincs teljes egészében megjelenítve. A fájlok a listában navigálás során jelennek meg.", "File not found" : "A fájl nem található", - "{count} selected" : "{count}kiválasztva", "{usedQuotaByte} used" : "{usedQuotaByte} felhasználva", "{used} of {quota} used" : "{used} / {quota} felhasználva", "{relative}% used" : "{relative}% felhasználva", diff --git a/apps/files/l10n/hu.json b/apps/files/l10n/hu.json index f00a3f35eb3..4cc4b9e4a4d 100644 --- a/apps/files/l10n/hu.json +++ b/apps/files/l10n/hu.json @@ -112,7 +112,6 @@ "Column headers with buttons are sortable." : "A gombot tartalmazó oszlopfejlécek rendezhetők.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Ez a lista teljesítménybeli okokból nincs teljes egészében megjelenítve. A fájlok a listában navigálás során jelennek meg.", "File not found" : "A fájl nem található", - "{count} selected" : "{count}kiválasztva", "{usedQuotaByte} used" : "{usedQuotaByte} felhasználva", "{used} of {quota} used" : "{used} / {quota} felhasználva", "{relative}% used" : "{relative}% felhasználva", diff --git a/apps/files/l10n/id.js b/apps/files/l10n/id.js index 2be51a48924..8bdd866a8dc 100644 --- a/apps/files/l10n/id.js +++ b/apps/files/l10n/id.js @@ -69,6 +69,7 @@ OC.L10N.register( "Size" : "Ukuran", "Actions" : "Tindakan", "File not found" : "Berkas tidak ditemukan", + "_{count} selected_::_{count} selected_" : ["{count} dipilih"], "{usedQuotaByte} used" : "{usedQuotaByte} digunakan", "{used} of {quota} used" : "{used} dari {quota} terpakai", "{relative}% used" : "{relative}% digunakan", diff --git a/apps/files/l10n/id.json b/apps/files/l10n/id.json index d9c47f1600b..0dd90d46f7e 100644 --- a/apps/files/l10n/id.json +++ b/apps/files/l10n/id.json @@ -67,6 +67,7 @@ "Size" : "Ukuran", "Actions" : "Tindakan", "File not found" : "Berkas tidak ditemukan", + "_{count} selected_::_{count} selected_" : ["{count} dipilih"], "{usedQuotaByte} used" : "{usedQuotaByte} digunakan", "{used} of {quota} used" : "{used} dari {quota} terpakai", "{relative}% used" : "{relative}% digunakan", diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js index 75cccd78118..5eb9a5c9d03 100644 --- a/apps/files/l10n/is.js +++ b/apps/files/l10n/is.js @@ -114,7 +114,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Dálkfyrirsagnir með hnöppum eru raðanlegar", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Til að halda sem bestum afköstum er þessi listi ekki myndgerður að fullu. Skrárnar munu birtast eftir því sem farið er í gegnum listann.", "File not found" : "Skrá finnst ekki", - "{count} selected" : "{count} valið", "{usedQuotaByte} used" : "{usedQuotaByte} notað", "{used} of {quota} used" : "{used} af {quota} notað", "{relative}% used" : "{relative}% notað", diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json index 0dcd0432f49..19d99ddf893 100644 --- a/apps/files/l10n/is.json +++ b/apps/files/l10n/is.json @@ -112,7 +112,6 @@ "Column headers with buttons are sortable." : "Dálkfyrirsagnir með hnöppum eru raðanlegar", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Til að halda sem bestum afköstum er þessi listi ekki myndgerður að fullu. Skrárnar munu birtast eftir því sem farið er í gegnum listann.", "File not found" : "Skrá finnst ekki", - "{count} selected" : "{count} valið", "{usedQuotaByte} used" : "{usedQuotaByte} notað", "{used} of {quota} used" : "{used} af {quota} notað", "{relative}% used" : "{relative}% notað", diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js index 04252175d75..e212852abaa 100644 --- a/apps/files/l10n/it.js +++ b/apps/files/l10n/it.js @@ -124,7 +124,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Le intestazioni di colonna con pulsanti sono ordinabili.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Questa lista non è stata mostrata completamente per ragioni di prestazioni. I file verranno mostrati durante la navigazione della lista.", "File not found" : "File non trovato", - "{count} selected" : "{count} selezionati", + "_{count} selected_::_{count} selected_" : ["{count} selezionato","{count} selezionati","{count} selezionati"], "{usedQuotaByte} used" : "{usedQuotaByte} usato", "{used} of {quota} used" : "{used} di {quota} utilizzati", "{relative}% used" : "{relative}% usato", @@ -455,6 +455,7 @@ OC.L10N.register( "New text file.txt" : "Nuovo file di testo.txt", "%1$s (renamed)" : "%1$s (rinominato)", "renamed file" : "file rinominato", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Dopo aver abilitato i nomi file compatibili con Windows, i file esistenti non potranno più essere modificati, ma potranno essere rinominati con nuovi nomi validi dal rispettivo proprietario.", "{count} files could not be converted" : "{count} file non possono essere convertiti", "{count} files successfully converted" : "{count} file convertiti con successo" }, diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json index 0c71fc93b41..c75a3e590ae 100644 --- a/apps/files/l10n/it.json +++ b/apps/files/l10n/it.json @@ -122,7 +122,7 @@ "Column headers with buttons are sortable." : "Le intestazioni di colonna con pulsanti sono ordinabili.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Questa lista non è stata mostrata completamente per ragioni di prestazioni. I file verranno mostrati durante la navigazione della lista.", "File not found" : "File non trovato", - "{count} selected" : "{count} selezionati", + "_{count} selected_::_{count} selected_" : ["{count} selezionato","{count} selezionati","{count} selezionati"], "{usedQuotaByte} used" : "{usedQuotaByte} usato", "{used} of {quota} used" : "{used} di {quota} utilizzati", "{relative}% used" : "{relative}% usato", @@ -453,6 +453,7 @@ "New text file.txt" : "Nuovo file di testo.txt", "%1$s (renamed)" : "%1$s (rinominato)", "renamed file" : "file rinominato", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Dopo aver abilitato i nomi file compatibili con Windows, i file esistenti non potranno più essere modificati, ma potranno essere rinominati con nuovi nomi validi dal rispettivo proprietario.", "{count} files could not be converted" : "{count} file non possono essere convertiti", "{count} files successfully converted" : "{count} file convertiti con successo" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js index 5e262b4f8cd..4ec8e70aa85 100644 --- a/apps/files/l10n/ja.js +++ b/apps/files/l10n/ja.js @@ -124,7 +124,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "ボタン付きの列ヘッダはソート可能です。", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "このリストはパフォーマンスの都合上、すべてレンダリングされているわけではありません。リスト内を移動すると、ファイルが次々と表示されていきます。", "File not found" : "ファイルが見つかりません", - "{count} selected" : "{count} 選択", "{usedQuotaByte} used" : "{usedQuotaByte} 使用されています", "{used} of {quota} used" : "{used} / {quota} 使用中", "{relative}% used" : "{relative}% 使用されています", diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json index 3b07da7e45e..db2d6694bd0 100644 --- a/apps/files/l10n/ja.json +++ b/apps/files/l10n/ja.json @@ -122,7 +122,6 @@ "Column headers with buttons are sortable." : "ボタン付きの列ヘッダはソート可能です。", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "このリストはパフォーマンスの都合上、すべてレンダリングされているわけではありません。リスト内を移動すると、ファイルが次々と表示されていきます。", "File not found" : "ファイルが見つかりません", - "{count} selected" : "{count} 選択", "{usedQuotaByte} used" : "{usedQuotaByte} 使用されています", "{used} of {quota} used" : "{used} / {quota} 使用中", "{relative}% used" : "{relative}% 使用されています", diff --git a/apps/files/l10n/ka.js b/apps/files/l10n/ka.js index 550819832fc..648dd9e0cd0 100644 --- a/apps/files/l10n/ka.js +++ b/apps/files/l10n/ka.js @@ -85,6 +85,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Column headers with buttons are sortable.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list.", "File not found" : "File not found", + "_{count} selected_::_{count} selected_" : ["{count} selected","{count} selected"], "{usedQuotaByte} used" : "{usedQuotaByte} used", "{used} of {quota} used" : "{used} of {quota} used", "{relative}% used" : "{relative}% used", diff --git a/apps/files/l10n/ka.json b/apps/files/l10n/ka.json index b9120314895..2f2017ccc82 100644 --- a/apps/files/l10n/ka.json +++ b/apps/files/l10n/ka.json @@ -83,6 +83,7 @@ "Column headers with buttons are sortable." : "Column headers with buttons are sortable.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list.", "File not found" : "File not found", + "_{count} selected_::_{count} selected_" : ["{count} selected","{count} selected"], "{usedQuotaByte} used" : "{usedQuotaByte} used", "{used} of {quota} used" : "{used} of {quota} used", "{relative}% used" : "{relative}% used", diff --git a/apps/files/l10n/ko.js b/apps/files/l10n/ko.js index 927f765b6f6..c275c4fc723 100644 --- a/apps/files/l10n/ko.js +++ b/apps/files/l10n/ko.js @@ -116,7 +116,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "버튼이 있는 열 머리글은 정렬할 수 있습니다.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "성능 상의 이유로 목록을 전부 표시하지 않았습니다. 목록을 탐색하면 파일들이 표시됩니다.", "File not found" : "파일을 찾을 수 없음", - "{count} selected" : "{count}개 선택됨", "{usedQuotaByte} used" : "{usedQuotaByte} 사용", "{used} of {quota} used" : "{quota} 중 {used} 사용함", "{relative}% used" : "{relative}% 사용", diff --git a/apps/files/l10n/ko.json b/apps/files/l10n/ko.json index 1d8f34484ef..161fcf36443 100644 --- a/apps/files/l10n/ko.json +++ b/apps/files/l10n/ko.json @@ -114,7 +114,6 @@ "Column headers with buttons are sortable." : "버튼이 있는 열 머리글은 정렬할 수 있습니다.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "성능 상의 이유로 목록을 전부 표시하지 않았습니다. 목록을 탐색하면 파일들이 표시됩니다.", "File not found" : "파일을 찾을 수 없음", - "{count} selected" : "{count}개 선택됨", "{usedQuotaByte} used" : "{usedQuotaByte} 사용", "{used} of {quota} used" : "{quota} 중 {used} 사용함", "{relative}% used" : "{relative}% 사용", diff --git a/apps/files/l10n/lt_LT.js b/apps/files/l10n/lt_LT.js index e977378b33b..2adddf95db7 100644 --- a/apps/files/l10n/lt_LT.js +++ b/apps/files/l10n/lt_LT.js @@ -88,7 +88,6 @@ OC.L10N.register( "Actions" : "Veiksmai", "List of files and folders." : "Failų ir aplankų sąrašas.", "File not found" : "Failas nerastas", - "{count} selected" : "Pažymėta {count}", "{usedQuotaByte} used" : "Naudojama {usedQuotaByte}", "{used} of {quota} used" : "panaudota {used} iš {quota}", "{relative}% used" : "Naudojama {relative}", diff --git a/apps/files/l10n/lt_LT.json b/apps/files/l10n/lt_LT.json index a2495e4f0f5..8bd48c833b8 100644 --- a/apps/files/l10n/lt_LT.json +++ b/apps/files/l10n/lt_LT.json @@ -86,7 +86,6 @@ "Actions" : "Veiksmai", "List of files and folders." : "Failų ir aplankų sąrašas.", "File not found" : "Failas nerastas", - "{count} selected" : "Pažymėta {count}", "{usedQuotaByte} used" : "Naudojama {usedQuotaByte}", "{used} of {quota} used" : "panaudota {used} iš {quota}", "{relative}% used" : "Naudojama {relative}", diff --git a/apps/files/l10n/mk.js b/apps/files/l10n/mk.js index fa58071b8c6..6e9fa1dbd38 100644 --- a/apps/files/l10n/mk.js +++ b/apps/files/l10n/mk.js @@ -99,7 +99,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Насловите на колоните со копчиња се сортираат.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Оваа листа не е целосно прикажана поради заштеда на перформанси. Датотеките ќе се прикажуваат додека се движите низ листата.", "File not found" : "Датотеката не е пронајдена", - "{count} selected" : "{count} селектирани", "{usedQuotaByte} used" : "искористено {usedQuotaByte}", "{used} of {quota} used" : "Искористени {used} од {quota}", "{relative}% used" : "искористено {relative}% ", diff --git a/apps/files/l10n/mk.json b/apps/files/l10n/mk.json index a1ded352961..e4c8680b27a 100644 --- a/apps/files/l10n/mk.json +++ b/apps/files/l10n/mk.json @@ -97,7 +97,6 @@ "Column headers with buttons are sortable." : "Насловите на колоните со копчиња се сортираат.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Оваа листа не е целосно прикажана поради заштеда на перформанси. Датотеките ќе се прикажуваат додека се движите низ листата.", "File not found" : "Датотеката не е пронајдена", - "{count} selected" : "{count} селектирани", "{usedQuotaByte} used" : "искористено {usedQuotaByte}", "{used} of {quota} used" : "Искористени {used} од {quota}", "{relative}% used" : "искористено {relative}% ", diff --git a/apps/files/l10n/nb.js b/apps/files/l10n/nb.js index eb260daa93b..75932ece0ae 100644 --- a/apps/files/l10n/nb.js +++ b/apps/files/l10n/nb.js @@ -112,7 +112,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Kolonneoverskrifter med knapper kan sorteres.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Denne listen er ikke fullstendig gjengitt av ytelsesgrunner. Filene gjengis når du navigerer gjennom listen.", "File not found" : "Finner ikke filen", - "{count} selected" : "{count} valgt", "{usedQuotaByte} used" : "{usedQuotaByte} brukt", "{used} of {quota} used" : "{used} av {quota} brukt", "{relative}% used" : "{relative}% brukt", diff --git a/apps/files/l10n/nb.json b/apps/files/l10n/nb.json index f92fd8a93d2..68b4f5caba4 100644 --- a/apps/files/l10n/nb.json +++ b/apps/files/l10n/nb.json @@ -110,7 +110,6 @@ "Column headers with buttons are sortable." : "Kolonneoverskrifter med knapper kan sorteres.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Denne listen er ikke fullstendig gjengitt av ytelsesgrunner. Filene gjengis når du navigerer gjennom listen.", "File not found" : "Finner ikke filen", - "{count} selected" : "{count} valgt", "{usedQuotaByte} used" : "{usedQuotaByte} brukt", "{used} of {quota} used" : "{used} av {quota} brukt", "{relative}% used" : "{relative}% brukt", diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js index 0aa38b97286..672161ab12a 100644 --- a/apps/files/l10n/nl.js +++ b/apps/files/l10n/nl.js @@ -95,6 +95,11 @@ OC.L10N.register( "Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" hernoemd naar \"{newName}\"", "Rename file" : "Bestand hernoemen", "Folder" : "Map", + "Unknown file type" : "Onbekend bestandstype", + "{ext} image" : "{ext} afbeelding", + "{ext} video" : "{ext} video", + "{ext} audio" : "{ext} audio", + "{ext} text" : "{ext} tekst", "Pending" : "In behandeling", "Unknown date" : "Onbekende datum", "Clear filter" : "Filter leegmaken", @@ -105,6 +110,7 @@ OC.L10N.register( "Total rows summary" : "Aantal rijen samenvatting", "Toggle selection for all files and folders" : "Wijzig selectie voor alle bestanden en mappen", "Name" : "Naam", + "File type" : "Bestandstype", "Size" : "Grootte", "\"{displayName}\" failed on some elements" : "“{displayName}” mislukt op sommige elementen", "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" batchactie succesvol uitgevoerd", @@ -116,7 +122,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Kolomkoppen met knoppen zijn sorteerbaar", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "De lijst is niet volledig verwerkt om de prestatie niet te beperken. De bestanden worden verder verwerkt als je door de lijst navigeert.", "File not found" : "Bestand niet gevonden", - "{count} selected" : "{count} geselecteerd", "{usedQuotaByte} used" : "{usedQuotaByte} gebruikt", "{used} of {quota} used" : "{used} van {quota} gebruikt", "{relative}% used" : "{relative}% gebruikt", @@ -183,6 +188,7 @@ OC.L10N.register( "Sort favorites first" : "Sorteer eerst favorieten", "Sort folders before files" : "Sorteer mappen voor bestanden", "Show hidden files" : "Toon verborgen bestanden", + "Show file type column" : "Toon bestandstypekolom", "Crop image previews" : "Snij afbeeldingvoorbeelden bij", "Enable the grid view" : "Roosterweergave inschakelen", "Enable folder tree" : "Mappenboom inschakelen", @@ -235,6 +241,7 @@ OC.L10N.register( "Failed to convert files: {message}" : "Conversie van bestanden mislukt: {message} ", "All files failed to be converted" : "De conversie van alle bestanden is mislukt", "One file could not be converted: {message}" : "Een bestand kon niet worden geconverteerd: {message}", + "_One file could not be converted_::_%n files could not be converted_" : ["Een bestand kon niet geconverteerd worden","%n bestanden konden niet geconverteerd worden"], "Files successfully converted" : "Bestanden succesvol geconverteerd", "Failed to convert files" : "Conversie van bestanden mislukt", "Converting file …" : "Bestand converteren ...", @@ -326,6 +333,7 @@ OC.L10N.register( "Unexpected error: {error}" : "Onverwachte fout: {error}", "_%n file_::_%n files_" : ["%n bestand","%n bestanden"], "_%n folder_::_%n folders_" : ["%n map","%n mappen"], + "_%n hidden_::_%n hidden_" : ["%n onzichtbaar","%n onzichtbaar"], "Filename must not be empty." : "Bestandsnaam mag niet leeg zijn", "\"{char}\" is not allowed inside a filename." : "\"{char}\"is niet toegestaan in een bestandsnaam", "\"{segment}\" is a reserved name and not allowed for filenames." : "\"{segment}\" is een greserveerde naam en niet toegestaan voor bestandsnamen", @@ -441,6 +449,7 @@ OC.L10N.register( "Personal Files" : "Persoonlijke bestanden", "Text file" : "Tekstbestand", "New text file.txt" : "Nieuw tekstbestand.txt", + "renamed file" : "bestand hernoemd", "{count} files could not be converted" : "{count} bestanden konden niet worden geconverteerd", "{count} files successfully converted" : "{count} bestanden succesvol geconverteerd" }, diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json index 5ac658a7454..b81ab06b1ec 100644 --- a/apps/files/l10n/nl.json +++ b/apps/files/l10n/nl.json @@ -93,6 +93,11 @@ "Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" hernoemd naar \"{newName}\"", "Rename file" : "Bestand hernoemen", "Folder" : "Map", + "Unknown file type" : "Onbekend bestandstype", + "{ext} image" : "{ext} afbeelding", + "{ext} video" : "{ext} video", + "{ext} audio" : "{ext} audio", + "{ext} text" : "{ext} tekst", "Pending" : "In behandeling", "Unknown date" : "Onbekende datum", "Clear filter" : "Filter leegmaken", @@ -103,6 +108,7 @@ "Total rows summary" : "Aantal rijen samenvatting", "Toggle selection for all files and folders" : "Wijzig selectie voor alle bestanden en mappen", "Name" : "Naam", + "File type" : "Bestandstype", "Size" : "Grootte", "\"{displayName}\" failed on some elements" : "“{displayName}” mislukt op sommige elementen", "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" batchactie succesvol uitgevoerd", @@ -114,7 +120,6 @@ "Column headers with buttons are sortable." : "Kolomkoppen met knoppen zijn sorteerbaar", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "De lijst is niet volledig verwerkt om de prestatie niet te beperken. De bestanden worden verder verwerkt als je door de lijst navigeert.", "File not found" : "Bestand niet gevonden", - "{count} selected" : "{count} geselecteerd", "{usedQuotaByte} used" : "{usedQuotaByte} gebruikt", "{used} of {quota} used" : "{used} van {quota} gebruikt", "{relative}% used" : "{relative}% gebruikt", @@ -181,6 +186,7 @@ "Sort favorites first" : "Sorteer eerst favorieten", "Sort folders before files" : "Sorteer mappen voor bestanden", "Show hidden files" : "Toon verborgen bestanden", + "Show file type column" : "Toon bestandstypekolom", "Crop image previews" : "Snij afbeeldingvoorbeelden bij", "Enable the grid view" : "Roosterweergave inschakelen", "Enable folder tree" : "Mappenboom inschakelen", @@ -233,6 +239,7 @@ "Failed to convert files: {message}" : "Conversie van bestanden mislukt: {message} ", "All files failed to be converted" : "De conversie van alle bestanden is mislukt", "One file could not be converted: {message}" : "Een bestand kon niet worden geconverteerd: {message}", + "_One file could not be converted_::_%n files could not be converted_" : ["Een bestand kon niet geconverteerd worden","%n bestanden konden niet geconverteerd worden"], "Files successfully converted" : "Bestanden succesvol geconverteerd", "Failed to convert files" : "Conversie van bestanden mislukt", "Converting file …" : "Bestand converteren ...", @@ -324,6 +331,7 @@ "Unexpected error: {error}" : "Onverwachte fout: {error}", "_%n file_::_%n files_" : ["%n bestand","%n bestanden"], "_%n folder_::_%n folders_" : ["%n map","%n mappen"], + "_%n hidden_::_%n hidden_" : ["%n onzichtbaar","%n onzichtbaar"], "Filename must not be empty." : "Bestandsnaam mag niet leeg zijn", "\"{char}\" is not allowed inside a filename." : "\"{char}\"is niet toegestaan in een bestandsnaam", "\"{segment}\" is a reserved name and not allowed for filenames." : "\"{segment}\" is een greserveerde naam en niet toegestaan voor bestandsnamen", @@ -439,6 +447,7 @@ "Personal Files" : "Persoonlijke bestanden", "Text file" : "Tekstbestand", "New text file.txt" : "Nieuw tekstbestand.txt", + "renamed file" : "bestand hernoemd", "{count} files could not be converted" : "{count} bestanden konden niet worden geconverteerd", "{count} files successfully converted" : "{count} bestanden succesvol geconverteerd" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js index dc0e482ea90..8013e28dd28 100644 --- a/apps/files/l10n/pl.js +++ b/apps/files/l10n/pl.js @@ -124,7 +124,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Nagłówki kolumn z przyciskami są sortowalne.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Ta lista nie jest w pełni renderowana ze względu na wydajność. Pliki będą renderowane podczas poruszania się po liście.", "File not found" : "Nie odnaleziono pliku", - "{count} selected" : "wybrano {count}", "{usedQuotaByte} used" : "Wykorzystano {usedQuotaByte}", "{used} of {quota} used" : "Wykorzystane {used} z {quota}", "{relative}% used" : "Wykorzystano {relative}%", diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json index e1c31eb98d0..424f6dc6399 100644 --- a/apps/files/l10n/pl.json +++ b/apps/files/l10n/pl.json @@ -122,7 +122,6 @@ "Column headers with buttons are sortable." : "Nagłówki kolumn z przyciskami są sortowalne.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Ta lista nie jest w pełni renderowana ze względu na wydajność. Pliki będą renderowane podczas poruszania się po liście.", "File not found" : "Nie odnaleziono pliku", - "{count} selected" : "wybrano {count}", "{usedQuotaByte} used" : "Wykorzystano {usedQuotaByte}", "{used} of {quota} used" : "Wykorzystane {used} z {quota}", "{relative}% used" : "Wykorzystano {relative}%", diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js index 4fbf806e50f..f91a54ae351 100644 --- a/apps/files/l10n/pt_BR.js +++ b/apps/files/l10n/pt_BR.js @@ -124,7 +124,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Os cabeçalhos de coluna com botões podem ser ordenados.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Esta lista não é totalmente renderizada por motivos de desempenho. Os arquivos serão renderizados à medida que você navegar pela lista.", "File not found" : "Arquivo não encontrado", - "{count} selected" : "{count} selecionados", + "_{count} selected_::_{count} selected_" : ["{count} selecionado","{count} selecionados","{count} selecionados"], "{usedQuotaByte} used" : "{usedQuotaByte} usado", "{used} of {quota} used" : "{used} de {quota} usados", "{relative}% used" : "{relative}% usado", diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json index 26407bec6c5..f7b9e8a7b55 100644 --- a/apps/files/l10n/pt_BR.json +++ b/apps/files/l10n/pt_BR.json @@ -122,7 +122,7 @@ "Column headers with buttons are sortable." : "Os cabeçalhos de coluna com botões podem ser ordenados.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Esta lista não é totalmente renderizada por motivos de desempenho. Os arquivos serão renderizados à medida que você navegar pela lista.", "File not found" : "Arquivo não encontrado", - "{count} selected" : "{count} selecionados", + "_{count} selected_::_{count} selected_" : ["{count} selecionado","{count} selecionados","{count} selecionados"], "{usedQuotaByte} used" : "{usedQuotaByte} usado", "{used} of {quota} used" : "{used} de {quota} usados", "{relative}% used" : "{relative}% usado", diff --git a/apps/files/l10n/pt_PT.js b/apps/files/l10n/pt_PT.js index f7ee81df2ff..a5832ddbc58 100644 --- a/apps/files/l10n/pt_PT.js +++ b/apps/files/l10n/pt_PT.js @@ -105,7 +105,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Os cabeçalhos das colunas com botões são ordenáveis", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Por motivos de desempenho, esta lista não é totalmente processada. Os ficheiros serão processados à medida que navega na lista.", "File not found" : "Ficheiro não encontrado", - "{count} selected" : "{count} selecionado ", + "_{count} selected_::_{count} selected_" : ["{count} selecionado","{count} selecionado","{count} selecionado"], "{usedQuotaByte} used" : "{usedQuotaByte} usado", "{used} of {quota} used" : "utilizado {used} de {quota}", "{relative}% used" : "{relative}% usado", diff --git a/apps/files/l10n/pt_PT.json b/apps/files/l10n/pt_PT.json index 87045e72815..d65768f0290 100644 --- a/apps/files/l10n/pt_PT.json +++ b/apps/files/l10n/pt_PT.json @@ -103,7 +103,7 @@ "Column headers with buttons are sortable." : "Os cabeçalhos das colunas com botões são ordenáveis", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Por motivos de desempenho, esta lista não é totalmente processada. Os ficheiros serão processados à medida que navega na lista.", "File not found" : "Ficheiro não encontrado", - "{count} selected" : "{count} selecionado ", + "_{count} selected_::_{count} selected_" : ["{count} selecionado","{count} selecionado","{count} selecionado"], "{usedQuotaByte} used" : "{usedQuotaByte} usado", "{used} of {quota} used" : "utilizado {used} de {quota}", "{relative}% used" : "{relative}% usado", diff --git a/apps/files/l10n/ro.js b/apps/files/l10n/ro.js index 8ad80762a2b..bdfc25f6d8d 100644 --- a/apps/files/l10n/ro.js +++ b/apps/files/l10n/ro.js @@ -82,6 +82,7 @@ OC.L10N.register( "List of files and folders." : "Listă fișiere și foldere", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Această lista este incomplet afișată din motive de performanță. Fișierele vor fi afișate pe măsură ce navigați prin listă.", "File not found" : "Fișierul nu a fost găsit", + "_{count} selected_::_{count} selected_" : ["{count}selectat","{count}selectate","{count}selectate"], "{usedQuotaByte} used" : "{usedQuotaByte} utilizați", "{used} of {quota} used" : "{used} din {quota} folosiți", "{relative}% used" : "{relative}% utilizat", diff --git a/apps/files/l10n/ro.json b/apps/files/l10n/ro.json index d9c1484484c..7b8d2223910 100644 --- a/apps/files/l10n/ro.json +++ b/apps/files/l10n/ro.json @@ -80,6 +80,7 @@ "List of files and folders." : "Listă fișiere și foldere", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Această lista este incomplet afișată din motive de performanță. Fișierele vor fi afișate pe măsură ce navigați prin listă.", "File not found" : "Fișierul nu a fost găsit", + "_{count} selected_::_{count} selected_" : ["{count}selectat","{count}selectate","{count}selectate"], "{usedQuotaByte} used" : "{usedQuotaByte} utilizați", "{used} of {quota} used" : "{used} din {quota} folosiți", "{relative}% used" : "{relative}% utilizat", diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js index 324ea82e228..6bcef9a52d3 100644 --- a/apps/files/l10n/ru.js +++ b/apps/files/l10n/ru.js @@ -124,7 +124,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Заголовки столбцов с кнопками можно сортировать.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Этот список отображается не полностью из соображений производительности. Файлы будут отображаться по мере перемещения по списку.", "File not found" : "Файл не найден", - "{count} selected" : "{count} выбрано", "{usedQuotaByte} used" : "Использовано {usedQuotaByte}", "{used} of {quota} used" : "использовано {used} из {quota}", "{relative}% used" : "Использовано {relative}%", diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json index 73cb009e141..609359c71c4 100644 --- a/apps/files/l10n/ru.json +++ b/apps/files/l10n/ru.json @@ -122,7 +122,6 @@ "Column headers with buttons are sortable." : "Заголовки столбцов с кнопками можно сортировать.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Этот список отображается не полностью из соображений производительности. Файлы будут отображаться по мере перемещения по списку.", "File not found" : "Файл не найден", - "{count} selected" : "{count} выбрано", "{usedQuotaByte} used" : "Использовано {usedQuotaByte}", "{used} of {quota} used" : "использовано {used} из {quota}", "{relative}% used" : "Использовано {relative}%", diff --git a/apps/files/l10n/sc.js b/apps/files/l10n/sc.js index 90722be0e4c..d5d2d3bd1b0 100644 --- a/apps/files/l10n/sc.js +++ b/apps/files/l10n/sc.js @@ -76,7 +76,6 @@ OC.L10N.register( "(selected)" : "(seletzionados)", "List of files and folders." : "Lista de archìvios e cartellas.", "File not found" : "Archìviu no agatadu", - "{count} selected" : "seletzionados: {count}", "{usedQuotaByte} used" : "{usedQuotaByte} impreadu", "{used} of {quota} used" : "{used} de {quota} impreadu", "{relative}% used" : "{relative}% impreadu", diff --git a/apps/files/l10n/sc.json b/apps/files/l10n/sc.json index 0bdada5e8a7..d0213890843 100644 --- a/apps/files/l10n/sc.json +++ b/apps/files/l10n/sc.json @@ -74,7 +74,6 @@ "(selected)" : "(seletzionados)", "List of files and folders." : "Lista de archìvios e cartellas.", "File not found" : "Archìviu no agatadu", - "{count} selected" : "seletzionados: {count}", "{usedQuotaByte} used" : "{usedQuotaByte} impreadu", "{used} of {quota} used" : "{used} de {quota} impreadu", "{relative}% used" : "{relative}% impreadu", diff --git a/apps/files/l10n/sk.js b/apps/files/l10n/sk.js index b4f176d76f9..cab8dc7bf62 100644 --- a/apps/files/l10n/sk.js +++ b/apps/files/l10n/sk.js @@ -116,7 +116,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Stĺpce hlavičiek s tlačidlami sú triediteľné.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Tento zoznam nie je úplne vykreslený z dôvodov výkonu. Súbory budú vykreslené, keď budete prechádzať zoznamom.", "File not found" : "Súbor nenájdený", - "{count} selected" : "{count} vybraných", + "_{count} selected_::_{count} selected_" : ["{count} vybraný","{count} vybrané","{count} vybraných","{count} vybraných"], "{usedQuotaByte} used" : "{usedQuotaByte} použitých", "{used} of {quota} used" : "použitých {used} z {quota}", "{relative}% used" : "{relative}% použitých", diff --git a/apps/files/l10n/sk.json b/apps/files/l10n/sk.json index 00da3b734a4..f3f95fa723d 100644 --- a/apps/files/l10n/sk.json +++ b/apps/files/l10n/sk.json @@ -114,7 +114,7 @@ "Column headers with buttons are sortable." : "Stĺpce hlavičiek s tlačidlami sú triediteľné.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Tento zoznam nie je úplne vykreslený z dôvodov výkonu. Súbory budú vykreslené, keď budete prechádzať zoznamom.", "File not found" : "Súbor nenájdený", - "{count} selected" : "{count} vybraných", + "_{count} selected_::_{count} selected_" : ["{count} vybraný","{count} vybrané","{count} vybraných","{count} vybraných"], "{usedQuotaByte} used" : "{usedQuotaByte} použitých", "{used} of {quota} used" : "použitých {used} z {quota}", "{relative}% used" : "{relative}% použitých", diff --git a/apps/files/l10n/sl.js b/apps/files/l10n/sl.js index 19893245a4a..eaf19443be1 100644 --- a/apps/files/l10n/sl.js +++ b/apps/files/l10n/sl.js @@ -118,7 +118,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Naslove stolpcev z gumbi je mogoče sortirati.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Seznam datotek ni v celoti izpisan zaradi zagotavljanja hitrosti in odzivnosti sistema. Predmeti se bodo dopolnjevali med brskanjem.", "File not found" : "Datoteke ni mogoče najti", - "{count} selected" : "{count} izbranih", "{usedQuotaByte} used" : "Zasedeno {usedQuotaByte}", "{used} of {quota} used" : "V uporabi je {used} od {quota}", "{relative}% used" : "Zasedeno {relative} %", diff --git a/apps/files/l10n/sl.json b/apps/files/l10n/sl.json index f738ccdfba6..7766e6a7014 100644 --- a/apps/files/l10n/sl.json +++ b/apps/files/l10n/sl.json @@ -116,7 +116,6 @@ "Column headers with buttons are sortable." : "Naslove stolpcev z gumbi je mogoče sortirati.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Seznam datotek ni v celoti izpisan zaradi zagotavljanja hitrosti in odzivnosti sistema. Predmeti se bodo dopolnjevali med brskanjem.", "File not found" : "Datoteke ni mogoče najti", - "{count} selected" : "{count} izbranih", "{usedQuotaByte} used" : "Zasedeno {usedQuotaByte}", "{used} of {quota} used" : "V uporabi je {used} od {quota}", "{relative}% used" : "Zasedeno {relative} %", diff --git a/apps/files/l10n/sr.js b/apps/files/l10n/sr.js index 1462028efbd..d6db57e6761 100644 --- a/apps/files/l10n/sr.js +++ b/apps/files/l10n/sr.js @@ -124,7 +124,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Заглавља колона са дугмићима могу да се соритрају.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Ова листа није у потпуности приказана из разлога перформанси. Фајлови ће се приказивати како се крећете кроз листу.", "File not found" : "Фајл није нађен", - "{count} selected" : "{count} изабрано", + "_{count} selected_::_{count} selected_" : ["изабран је {count}","изабрана су {count}","изабрано је {count}"], "{usedQuotaByte} used" : "{usedQuotaByte} искоришћено", "{used} of {quota} used" : "{used} од {quota} искоришћено", "{relative}% used" : "{relative}% искоришћено", diff --git a/apps/files/l10n/sr.json b/apps/files/l10n/sr.json index e4cfab160f8..234cec9924a 100644 --- a/apps/files/l10n/sr.json +++ b/apps/files/l10n/sr.json @@ -122,7 +122,7 @@ "Column headers with buttons are sortable." : "Заглавља колона са дугмићима могу да се соритрају.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Ова листа није у потпуности приказана из разлога перформанси. Фајлови ће се приказивати како се крећете кроз листу.", "File not found" : "Фајл није нађен", - "{count} selected" : "{count} изабрано", + "_{count} selected_::_{count} selected_" : ["изабран је {count}","изабрана су {count}","изабрано је {count}"], "{usedQuotaByte} used" : "{usedQuotaByte} искоришћено", "{used} of {quota} used" : "{used} од {quota} искоришћено", "{relative}% used" : "{relative}% искоришћено", diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js index bb758578e22..6553841455e 100644 --- a/apps/files/l10n/sv.js +++ b/apps/files/l10n/sv.js @@ -124,7 +124,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Kolumnrubriker med knappar är sorterbara.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Denna lista är inte helt återgiven av prestandaskäl. Filerna kommer att renderas när du navigerar genom listan.", "File not found" : "Filen kunde inte hittas", - "{count} selected" : "{count} valda", + "_{count} selected_::_{count} selected_" : ["{count} vald","{count} valda"], "{usedQuotaByte} used" : "{usedQuotaByte} använt", "{used} of {quota} used" : "{used} av {quota} använt", "{relative}% used" : "{relative}% använt", diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json index e0ac773057c..f412c03a05a 100644 --- a/apps/files/l10n/sv.json +++ b/apps/files/l10n/sv.json @@ -122,7 +122,7 @@ "Column headers with buttons are sortable." : "Kolumnrubriker med knappar är sorterbara.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Denna lista är inte helt återgiven av prestandaskäl. Filerna kommer att renderas när du navigerar genom listan.", "File not found" : "Filen kunde inte hittas", - "{count} selected" : "{count} valda", + "_{count} selected_::_{count} selected_" : ["{count} vald","{count} valda"], "{usedQuotaByte} used" : "{usedQuotaByte} använt", "{used} of {quota} used" : "{used} av {quota} använt", "{relative}% used" : "{relative}% använt", diff --git a/apps/files/l10n/sw.js b/apps/files/l10n/sw.js new file mode 100644 index 00000000000..4cbe3219c2f --- /dev/null +++ b/apps/files/l10n/sw.js @@ -0,0 +1,462 @@ +OC.L10N.register( + "files", + { + "Added to favorites" : "Imeongezwa kwa vipendwa", + "Removed from favorites" : "Imeondolewa kutoka vipendwa", + "You added {file} to your favorites" : "Umeongeza {file}kwa vipendwa vyako", + "You removed {file} from your favorites" : "Umeondoa {file}kwenye vipendwa vyako", + "Favorites" : "Vinavyopendwa", + "File changes" : "Mabadiliko ya faili", + "Created by {user}" : "Imetengenezwa na {user}", + "Changed by {user}" : "Imebadilishwa na {user}", + "Deleted by {user}" : "Imefutwa na {user}", + "Restored by {user}" : "Imehifadhiwa na {user}", + "Renamed by {user}" : "Imepewa jina upya na {user}", + "Moved by {user}" : "Imesogezwa na {user}", + "\"remote account\"" : "\"akaunti ya mbali\"", + "You created {file}" : "Umetengeneza {file}", + "You created an encrypted file in {file}" : "Umeunda faili iliyosimbwa kwa njia fiche katika {file}", + "{user} created {file}" : "{user} ameunda {file}", + "{user} created an encrypted file in {file}" : "{user}ameunda faili iliyosimbwa kwa njia fiche katika {file}", + "{file} was created in a public folder" : "{file}ilitengenezwa katika kisanduku cha umma", + "You changed {file}" : "Umebadilisha {file}", + "You changed an encrypted file in {file}" : "Umebadilisha faili iliyosimbwa kwa njia fiche katika {file}", + "{user} changed {file}" : "{user} amebadili {file}", + "{user} changed an encrypted file in {file}" : "{user}amebadili faili iliyosimbwa kwa njia fiche katika {file}", + "You deleted {file}" : "Umefuta {file}", + "You deleted an encrypted file in {file}" : "Umefuta faili iliyosimbwa kwa njia fiche katika {file}", + "{user} deleted {file}" : "{user} amefuta {file}", + "{user} deleted an encrypted file in {file}" : "{user} amefuta faili iliyosimbwa kwa njia fiche katika {file}", + "You restored {file}" : "Umehifadhi upya {file}", + "{user} restored {file}" : "{user} amehifadhi upya {file}", + "You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Umeita jina upya {oldfile}(iliyofichwa)kwenda {newfile} (iliyofichwa)", + "You renamed {oldfile} (hidden) to {newfile}" : "Umeita jina upya {oldfile}(iliyofichwa)kwenda{newfile}", + "You renamed {oldfile} to {newfile} (hidden)" : "Umeita jina upya {oldfile}kwenda{newfile}(iliyofichwa)", + "You renamed {oldfile} to {newfile}" : "Umeita jina upya {oldfile}hadi{newfile}", + "{user} renamed {oldfile} (hidden) to {newfile} (hidden)" : "{user}ameita jina upya{oldfile}(iliyofichwa) hadi {newfile} (iliyofichwa)", + "{user} renamed {oldfile} (hidden) to {newfile}" : "{user}ameita jina upya{oldfile}(iliyofichwa) hadi{newfile}", + "{user} renamed {oldfile} to {newfile} (hidden)" : "{user}ameita jina upya{oldfile}hadi{newfile}(iliyofichwa)", + "{user} renamed {oldfile} to {newfile}" : "{user}ameita jina upya {oldfile}hadi{newfile}", + "You moved {oldfile} to {newfile}" : "Umeondoa {oldfile}hadi{newfile}", + "{user} moved {oldfile} to {newfile}" : "{user}amesogeza {oldfile}hadi{newfile}", + "A file has been added to or removed from your <strong>favorites</strong>" : "Faili limeongezwa kwenye au limeondolewa kutoka <strong>vipendwa</strong>", + "Files" : "Mafaili", + "A file or folder has been <strong>changed</strong>" : "Faili au kisanduku kime<strong>badilishwa</strong>", + "A favorite file or folder has been <strong>changed</strong>" : "Faili pendwa au kisanduku kime<strong>badilishwa</strong>", + "Failed to authorize" : "Imeshindwa kuidhinisha", + "Invalid folder path" : "Njia ya kisanduku si halali", + "Folder not found" : "Kisanduku hakipatikani", + "The file cannot be found" : "Faili haliwezi kupatikana", + "The destination path does not exist: %1$s" : "Njia lengwa haipo %1$s", + "You do not have permission to create a file at the specified location" : "Huna ruhusa kuunda faili katika eneo lililobainishwa", + "The file could not be converted." : "Faili halikuweza kubadilishwa", + "Could not get relative path to converted file" : "Haikuweza kupata njia sawia ya faili lililobadilishwa", + "Favorite files" : "Faili pendwa", + "No favorites" : "Hakuna vipendwa", + "More favorites" : "Vipendwa zaidi", + "Accept" : "Kubali", + "Reject" : "Kataa", + "Incoming ownership transfer from {user}" : "Uhamisho wa umiliki unaoingia kutoka {user}", + "Do you want to accept {path}?\n\nNote: The transfer process after accepting may take up to 1 hour." : "Je unataka kukubali {path}?\n\nKubmbuka: Mchakato wa uhamisho baada ya kukubali unaweza kuchukua mpaka saa 1", + "Ownership transfer denied" : "Uhamisho wa umiliki umekataliwa", + "Your ownership transfer of {path} was denied by {user}." : "Uhamisho wa umiliki wako wa {path}umekataliwa na {user}", + "Ownership transfer failed" : "Uhamisho wa umiliki umeshindikana", + "Your ownership transfer of {path} to {user} failed." : "Uhamisho wa umiliki wako wa {path}kwenda {user}umeshindikana", + "The ownership transfer of {path} from {user} failed." : "Uhamisho wa umiliki wa {path}kutoka {user}umeshindikana", + "Ownership transfer done" : "Uhamisho wa umiliki umefanyika", + "Your ownership transfer of {path} to {user} has completed." : "Uhamisho wako wa umiliki wa {path}kwenda {user}umekamilika", + "The ownership transfer of {path} from {user} has completed." : "Uhamisho wa umiliki wa {path}kutoka{user}umekamilika", + "in %s" : "Katika %s", + "Transferred from %1$s on %2$s" : "Imehamishwa kutoka %1$skatika%2$s", + "Files compatibility" : "Utengamano wa faili", + "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Ruhusu kuzuia majina ya faili ili kuhakikisha kuwa faili zinaweza kusawazishwa na wateja wote. Kwa chaguo-msingi, majina yote ya faili ni halali katika POSIX (e.g. Linux or macOS) zinaruhusiwa.", + "After enabling the Windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Baada ya kuruhusu majina ya faili yanayooana na Windows, faili zilizopo haziwezi kubadilishwa tena lakini zinaweza kubadilishwa kuwa majina mapya halali na mmiliki wao.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Pia inawezekana kuhamisha faili kiotomatiki baada ya kuwezesha mpangilio huu, tafadhali rejelea hati kuhusu amri ya occ.", + "Enforce Windows compatibility" : "Tekeleza utangamano wa windows", + "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Hii itazuia majina ya faili ambayo si halali kwenye mifumo ya Windows, kama vile kutumia majina yaliyohifadhiwa au herufi maalum. Lakini hii haitatekeleza utangamano wa unyeti wa kesi.", + "File Management" : "Usimamizi wa faili", + "Home" : "Nyumbani", + "Target folder does not exist any more" : "Kisanduku kilicholengwa hakipo tena", + "Reload current directory" : "Pakia upya kitabu cha orodha ya sasa", + "Go to the \"{dir}\" directory" : "Nenda kwenye {dir}kitabu cha orodha", + "Current directory path" : "Njia ya kitabu cha orodha ya sasa", + "Your have used your space quota and cannot upload files anymore" : "Umetumia nafasi yako kwa upendeleo na huwezi kupakia faili zaidi", + "You do not have permission to upload or create files here." : "Huna ruhusa kupakia au kutengeneza faili hapa", + "Drag and drop files here to upload" : "Sogeza na udondoshe faili hapa ili upakie", + "Favorite" : "Kipendwa", + "Back" : "Rudi", + "Toggle selection for file \"{displayName}\"" : "Geuza uteuzi wa faili \"{displayName}\"", + "Toggle selection for folder \"{displayName}\"" : "Geuza uteuzi wa kisanduku \"{displayName}\"", + "File is loading" : "Faili inapakia", + "Folder is loading" : "Kisanduku kinapakia", + "Filename" : "Jina la faili", + "Folder name" : "Jina la kisanduku", + "This node is unavailable" : "Nodi hii haipatikani", + "Another entry with the same name already exists." : "Ingizo lingine lenye jina sawasawa lipo tayari", + "Invalid filename." : "Majina ya faili si sahihi", + "Renamed \"{oldName}\" to \"{newName}\"" : "Imebadili jina \"{oldName}\" mpaka \"{newName}\"", + "Rename file" : "Badili jina la faili", + "Folder" : "Kisanduku", + "Unknown file type" : "Aina ya faili isiyojulikana", + "{ext} image" : "{ext}picha", + "{ext} video" : "{ext}picha mjongeo", + "{ext} audio" : "{ext}sauti", + "{ext} text" : "{ext}maandishi", + "Pending" : "Inasubiri", + "Unknown date" : "Tarehe isiyojulikana", + "Clear filter" : "Futa kichujio", + "Modified" : "Iliyoboreshwa", + "Type" : "Aina", + "Active filters" : "Vichujio vinavyotumika", + "Remove filter" : "Ondoa kichujio", + "Total rows summary" : "Muhtasari wa jumla ya safu mlalo", + "Toggle selection for all files and folders" : "Geuza uteuzi wa faili na visanduku vyote", + "Name" : "Jina", + "File type" : "Aina ya faili", + "Size" : "Ukubwa", + "\"{displayName}\" failed on some elements" : "\"{displayName} imeshindwa katika vipengele kadhaa", + "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" kitendo cha kundi kimetekelezwa kwa mafanikio", + "\"{displayName}\" action failed" : "\"{displayName}\" matendo yameshindwa", + "Actions" : "Utendekaji", + "(selected)" : "(iliyochaguliwa)", + "List of files and folders." : "Orodha ya faili na visanduku", + "You have used your space quota and cannot upload files anymore." : "Umetumia mgao wako wa nafasi na huwezi kupakia faili tena.", + "Column headers with buttons are sortable." : "Vichwa vya safu wima vilivyo na vifungo vinaweza kupangwa.\n ", + "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Orodha hii haijatolewa kikamilifu kwa sababu za utendaji. Faili zitatolewa unapopitia orodha.", + "File not found" : "Faili halipatikani", + "_{count} selected_::_{count} selected_" : ["{count} selected","{count} iliyochaguliwa"], + "{usedQuotaByte} used" : "{usedQuotaByte}imetumika", + "{used} of {quota} used" : "{used} ya {quota}imetumika", + "{relative}% used" : "{relative}% imetumika", + "Could not refresh storage stats" : "Haikuweza kuonesha upya takwimu za hifadhi", + "Your storage is full, files can not be updated or synced anymore!" : "Hifadhi yako imejaa, faili haziwezi kusasishwa au kusawazishwa tena!\n ", + "Storage information" : "Taarifa za uhifadhi", + "Storage quota" : "Kiasi cha uhifadhi", + "New folder" : "Kisanduku kipya", + "Create new folder" : "Tengeneza kisanduku kipya", + "This name is already in use." : "Jina hili liko katika matumizi tayari", + "Create" : "Tengeneza", + "Fill template fields" : "Jaza sehemu za violezo", + "Submitting fields …" : "Inawasilisha violezo", + "Submit" : "Wasilisha", + "Choose a file or folder to transfer" : "Chagua faili au kisanduku cha kuhamisha", + "Transfer" : "Hamisha", + "Transfer {path} to {userid}" : "Hamisha {path}mpaka {userid}", + "Invalid path selected" : "Njia iliyochaguliwa si halali", + "Unknown error" : "Hitilafu isiyojulikana", + "Ownership transfer request sent" : "Ombi la uhamisho wa umiliki limetumwa", + "Cannot transfer ownership of a file or folder you do not own" : "Haiwezi kuhamisha umiliki wa faili au kisanduku usichomiliki", + "Transfer ownership of a file or folder" : "Hamisha umiliki wa faili au kisanduku", + "Choose file or folder to transfer" : "Chagua faili au kisanduku cha kuhamisha", + "Change" : "Badili", + "New owner" : "Mmiliki mpya", + "Keep {old}" : "Weka {old}", + "Keep without extension" : "Weka bila ongezeko", + "Use {new}" : "Tumia {new}", + "Remove extension" : "Ondoa ongezeko", + "Change file extension" : "Badili ongezeko la faili", + "Changing the file extension from \"{old}\" to \"{new}\" may render the file unreadable." : "Kubadilisha kiendelezi cha faili kutoka \"{{old}}\" hadi \"{new}\" kunaweza kufanya faili isisomeke.", + "Removing the file extension \"{old}\" may render the file unreadable." : "Kuondoa kiendelezi cha faili \"{old}\" kunaweza kufanya faili isisomeke.", + "Adding the file extension \"{new}\" may render the file unreadable." : "Kuongeza kiendelezi cha faili \"{new}\" kunaweza kufanya faili isisomeke.", + "Do not show this dialog again." : "Usioneshe mazungumzo haya tena", + "Select file or folder to link to" : "Chagua faili au kisanduku cha kuunga kwa", + "Choose {file}" : "Chagua {file}", + "Share" : "Shirikisha", + "Shared by link" : "Imeshirikishwa na kiungio", + "Shared" : "Shirikisha", + "Switch to list view" : "Badili hadi mwonekano wa orodha", + "Switch to grid view" : "Badili hadi mwonekano wa gridi", + "The file could not be found" : "Faili halikupatikana", + "Upload was cancelled by user" : "Upakiaji ulisitishwa na mtumiaji", + "Not enough free space" : "Hakuna eneo huru la kutosha", + "Operation is blocked by access control" : "Uendeshaji umezuiwa na udhibiti wa ufikiaji", + "Error during upload: {message}" : "Hitilafu wakati wa kupakia: {message}", + "Error during upload, status code {status}" : "Hitilafu wakati wa kupakia, msimbo wa hali {status}", + "Unknown error during upload" : "Hitilafu isiyojulikana wakati wa kupakia", + "\"{displayName}\" action executed successfully" : "\"{displayName}\" kitendo kimetekelezwa kwa mafanikio", + "Loading current folder" : "Inapakia faili ya sasa", + "Retry" : "Jaribu tene", + "No files in here" : "Hakuna faili hapa", + "Upload some content or sync with your devices!" : "Pakia baadhi ya maudhui au usawazishe na vifaa vyako!", + "Go back" : "Rudi nyuma", + "Filter file names …" : "Chuja majina ya faili...", + "Views" : "Mionekano", + "Files settings" : "Mipangilio ya faili", + "Your files" : "Mafaili yako", + "Open in files" : "Fungua ndani ya faili", + "File cannot be accessed" : "Faili haliwezi kufikika", + "The file could not be found or you do not have permissions to view it. Ask the sender to share it." : "Faili haikupatikana au huna ruhusa ya kuitazama. Uliza mtumaji kuishirikisha.", + "Clipboard is not available" : "Ubao wa kunakili haupatikani", + "WebDAV URL copied to clipboard" : "WavutiDAV URL umenakiliwa kwenye ubao wa kunakili", + "Sort favorites first" : "Chagua za upendeleo kwanza", + "Sort folders before files" : "Chagua vikasha kabla ya mafaili", + "Show hidden files" : "Onesha mafaili yaliyofichwa", + "Show file type column" : "Onyesha safu wima ya aina ya faili\n ", + "Crop image previews" : "Punguza onyesho la kukagua picha", + "Enable the grid view" : "Wezesha mwonekano wa gridi", + "Enable folder tree" : "Wezesha faili la tatu", + "Additional settings" : "Mipangilio ya nyongeza", + "WebDAV" : "WavutiDAV", + "WebDAV URL" : "WavutiDAV URL", + "Copy to clipboard" : "Nakili kwenye ubao wa kunakili", + "Use this address to access your Files via WebDAV" : "Tumia anwani hii kufikia Faili zako kupitia WavutiDAV", + "If you have enabled 2FA, you must create and use a new app password by clicking here." : "Ikiwa umewasha 2FA, lazima uunde na utumie nenosiri jipya la programu kwa kubofya hapa", + "Warnings" : "Maonyo", + "Prevent warning dialogs from open or reenable them." : "Zuia mazungumzo ya onyo yasifunguliwe au uwashe upya.\n ", + "Show a warning dialog when changing a file extension." : "Onyesha mazungumzo ya onyo unapobadilisha kiendelezi cha faili.", + "Keyboard shortcuts" : "Mikato ya keyboard", + "Speed up your Files experience with these quick shortcuts." : "Ongeza kasi ya utumiaji wa Faili zako kwa njia hizi za mkato za haraka.", + "Open the actions menu for a file" : "Fungua menyu ya vitendo kwa faili", + "Rename a file" : "Ita faili jina jipya", + "Delete a file" : "Futa faili", + "Favorite or remove a file from favorites" : "Pendwa au ondoa faili kutoka pendwa", + "Manage tags for a file" : "simamia maoni kwa faili", + "Selection" : "Machaguo", + "Select all files" : "Chagua faili zote", + "Deselect all files" : "Usichague faili zote", + "Select or deselect a file" : "Chagua au usichague faili", + "Select a range of files" : "Chagua anuwai ya faili", + "Navigation" : "Uendeshaji", + "Navigate to the parent folder" : "Nenda kwenye kisanduku kikuu", + "Navigate to the file above" : "Sogea kwenye faili la juu", + "Navigate to the file below" : "Sogea kwenye faili la chini", + "Navigate to the file on the left (in grid mode)" : "Sogea kwenye faili la kushoto (in grid mode)", + "Navigate to the file on the right (in grid mode)" : "Sogea kwenye faili la kulia ( in grid mode)", + "View" : "Angalia", + "Toggle the grid view" : "Geuza mwonekano wa gridi\n ", + "Open the sidebar for a file" : "Fungua utepe kwa faili", + "Show those shortcuts" : "Onesha mikato hiyo", + "You" : "Wewe", + "Shared multiple times with different people" : "Shared multiple times with different people", + "Error while loading the file data" : "Hitilafu wakati wa kupakia data za faili", + "Owner" : "Mmiliki", + "Remove from favorites" : "Ondoa kutoka katika pendwa", + "Add to favorites" : "Ongeza kwenye pendwa", + "Tags" : "Maoni", + "Blank" : "Mabano", + "Unable to create new file from template" : "Imeshindwa kutengeneza faili jipya kutoka kwenye sampuli/kiolezo", + "Pick a template for {name}" : "Chagua sampuli/kiolezo kwa {name}", + "Create a new file with the selected template" : "Tengeneza faili jipya na kiolezo/sampuli iliyochaguliwa", + "Creating file" : "Inatengeneza faili", + "Save as {displayName}" : "Hifadhi kama {displayName}", + "Save as …" : "Hifadhi kama", + "Converting files …" : "Inageuza mafaili", + "Failed to convert files: {message}" : "Imeshindwa kugeuza faili {message}", + "All files failed to be converted" : "Faili zote zimeshindwa kugeuzwa", + "One file could not be converted: {message}" : "Faili moja isingeweza kugeuzwa {message}", + "_One file could not be converted_::_%n files could not be converted_" : ["One file could not be converted","%n faili zisingeweza kugeuzwa"], + "_One file successfully converted_::_%n files successfully converted_" : ["One file successfully converted","%n faili zimegeuzwa kikamilifu"], + "Files successfully converted" : "Faili zimegeuzwa kikamilifu", + "Failed to convert files" : "Imeshindwa kugeuza faili", + "Converting file …" : "Inageuza faili", + "File successfully converted" : "Faili imegeuzwa kikamilifu", + "Failed to convert file: {message}" : "Imeshindwa kugeuza faili {message}", + "Failed to convert file" : "Imeshindwa kugeuza faili", + "Deletion cancelled" : "Ufutaji umesitishwa", + "Leave this share" : "Ondoa ushirikishaji huu", + "Leave these shares" : "Ondoa shiriki hizi", + "Disconnect storage" : "Achanisha uhifadhi", + "Disconnect storages" : "Achanisha hifadhi", + "Delete permanently" : "Futa moja kwa moja", + "Delete and unshare" : "Futa na usishirikishe", + "Delete file" : "Futa faili", + "Delete files" : "Futa faili", + "Delete folder" : "Futa kisanduku", + "Delete folders" : "Futa visanduku", + "Delete" : "Futa", + "_You are about to permanently delete {count} item_::_You are about to permanently delete {count} items_" : ["You are about to permanently delete {count} item","Unakaribia kufuta vipengee {count}kabisa"], + "_You are about to delete {count} item_::_You are about to delete {count} items_" : ["You are about to delete {count} item","Unakaribia kufuta vipengee{count}"], + "Confirm deletion" : "Thibitisha ufutaji", + "Cancel" : "Sitisha", + "Moving \"{source}\" to \"{destination}\" …" : "Sogeza \"{source}\" mpaka \"{destination}\"", + "Copying \"{source}\" to \"{destination}\" …" : "Inanakili \"{source}\" hadi \"{destination}\" ...", + "You cannot move a file/folder onto itself or into a subfolder of itself" : "Huwezi kuhamisha faili/folda kwenye yenyewe au kwenye folda yenyewe", + "(copy)" : "(nakili)", + "(copy %n)" : "(nakili %n)", + "Move cancelled" : "Uhamishaji umeghairishwa", + "A file or folder with that name already exists in this folder" : "Faili au kisanduku chenye jina hilo tayari kipo katika kisanduku hiki", + "The files are locked" : "Faili zimezuiliwa", + "The file does not exist anymore" : "Faili halipo tena", + "Choose destination" : "Chagua eneo lengwa", + "Copy to {target}" : "Nakili kwenda {target}", + "Copy" : "Nakili", + "Move to {target}" : "Hamishia {target}", + "Move" : "Hamisha", + "Move or copy operation failed" : "Operesheni ya kuhamisha au kunakili imeshindikana", + "Move or copy" : "Hamisha au nakili", + "Cancelled move or copy of \"{filename}\"." : "Imesitisha uhamishaji au unakili wa \"{filename}\"", + "Cancelled move or copy operation" : "Imesitisha operesheni ya uhamishaji au unakili", + "Open folder {displayName}" : "Fungua kisanduku {displayName}", + "Open in Files" : "Fungua ndani ya faili", + "Open locally" : "Fungua kikawaida", + "Failed to redirect to client" : "Imeshindwa kuielekeza kwa mteja", + "Open file locally" : "Fungua faili kikawaida", + "The file should now open on your device. If it doesn't, please check that you have the desktop app installed." : "Sasa faili inapaswa kufunguliwa kwenye kifaa chako. Ikiwa sivyo, tafadhali hakikisha kuwa umesakinisha programu ya eneo-kazi.", + "Retry and close" : "Jaribu upya kisha funga", + "Open online" : "Fungua mtandaoni", + "Rename" : "Ipe jina jipya", + "Open details" : "Fungua maelezo", + "View in folder" : "Angalia ndani ya kisanduku", + "Today" : "Leo", + "Last 7 days" : "Siku 7 zilizopita", + "Last 30 days" : "Siku 30 zilizopita", + "This year ({year})" : "Mwaka huu {year}", + "Last year ({year})" : "Mwaka uliopita {year}", + "Documents" : "Nyaraka", + "Spreadsheets" : "Lahajedwali", + "Presentations" : "Uwasilishaji", + "PDFs" : "PDFs", + "Folders" : "Visanduku", + "Audio" : "Sauti", + "Photos and images" : "Picha na taswira", + "Videos" : "Picha mjongeo", + "New folder creation cancelled" : "Utengenezaji wa kisanduku kipya umesitishwa", + "Created new folder \"{name}\"" : "Imetengeneza kisanduku kipya \"{name}\"", + "Unable to initialize the templates directory" : "Haikuweza kuanzisha saraka ya violezo", + "Create templates folder" : "Imetengeneza kisanduku cha violezo", + "Templates" : "Violezo", + "New template folder" : "Kisanduku kipya cha violezo", + "In folder" : "Ndani ya kisanduku", + "Search in folder: {folder}" : "Tafuta katika kisanduku {folder}", + "One of the dropped files could not be processed" : "Moja ya faili zilizodondoshwa isingeweza kuchakatwa", + "Your browser does not support the Filesystem API. Directories will not be uploaded" : "Kivinjari chako hakitumii API ya mfumo wa faili. Orodha hazitapakiwa\n ", + "No files to upload" : "Hakuna faili la kupakia", + "Unable to create the directory {directory}" : "Haiwezi kutengeneza orodha {directory}", + "Some files could not be uploaded" : "Faili kadhaa zisingeweza kupakiwa", + "Files uploaded successfully" : "Faili zimepakiwa kikamilifu", + "No files to process" : "Hakuna faili la kuchakata", + "Some files could not be copied" : "Faili baadhi zisingeweza kunakiliwa", + "Some files could not be moved" : "Faili baadhi zisingeweza kuhamishwa", + "Files copied successfully" : "Faili limenakiliwa kikamilifu", + "Files moved successfully" : "Faili limeondolewa kikamilifu", + "Conflicts resolution skipped" : "Utatuzi wa migogoro ulirukwa", + "Upload cancelled" : "Upakiaji umesitishwa", + "This operation is forbidden" : "Opereshini hii imezuiwa", + "This directory is unavailable, please check the logs or contact the administrator" : "Orodha haipatikani, tafadhali angalia uingiaji au wasiliana na msimamizi", + "Storage is temporarily not available" : "Uhifadhi haupo kwa muda", + "Unexpected error: {error}" : "Hitilafu isiyotarajiwa {error}", + "_%n file_::_%n files_" : ["%n file","%n faili"], + "_%n folder_::_%n folders_" : ["%n folder","%n visanduku/vikasha"], + "_%n hidden_::_%n hidden_" : ["%n hidden","%n imefichwa"], + "Filename must not be empty." : "Jina la faili halipaswi kuwa tupu", + "\"{char}\" is not allowed inside a filename." : "\"{char}\" hairuhusiwi ndani ya jina la faili", + "\"{segment}\" is a reserved name and not allowed for filenames." : "\"{segment}\" ni jina la akiba na haliruhusiwi kwa majina ya faili", + "\"{extension}\" is not an allowed filetype." : "\"{extension}\" si aina ya faili inayoruhusiwa", + "Filenames must not end with \"{extension}\"." : "Majina ya faili hayapaswi kuishia na \"{extension}\"", + "List of favorite files and folders." : "Orodha ya faili na visanduku vinanyopendwa", + "No favorites yet" : "Bado hakuna vinavyopendwa", + "Files and folders you mark as favorite will show up here" : "Faili na visunduku ulivyoweka alama kama vipendwa vitaonekana hapa", + "All files" : "Faili zote", + "List of your files and folders." : "Orodha ya faili na vikasha vyako", + "All folders" : "Vikasha vyote", + "Personal files" : "Faili binafsi", + "List of your files and folders that are not shared." : "Orodha ya faili na vikasha ambavyo havijashirikishwa", + "No personal files found" : "Hakuna faili binafsi zilizopatikana", + "Files that are not shared will show up here." : "Faili ambazo hazija shirikishwa zitaonekana hapa", + "Recent" : "Hivi karibuni", + "List of recently modified files and folders." : "Orodha ya faili na vikasha vilivyoboreshwa hivi karibuni", + "No recently modified files" : "Hakuna faili zilizoboreshwa hivi karibuni", + "Files and folders you recently modified will show up here." : "Faili na vikasha ulivyoboresha hivi karibuni vitaonekana hapa", + "No entries found in this folder" : "Hakuna maingizo yaliyopatikana katika kasha hili", + "Select all" : "Chagua zote", + "Upload too large" : "Upakiaji mkubwa mno", + "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Faili unazojaribu kupakia zinazidi ukubwa wa juu zaidi wa upakiaji wa faili kwenye seva hii.", + "File could not be found" : "Faili isingeweza kupatikana", + "Download" : "Pakua", + "Show list view" : "Onesha mwonekeno wa orodha", + "Show grid view" : "Onesha mwonekano wa mstariramani", + "Close" : "Funga", + "Could not create folder \"{dir}\"" : "Isingeweza kutengeneza kasha \"{dir}\"", + "This will stop your current uploads." : "Hii itasimamisha ukakiaji wako wa sasa", + "Upload cancelled." : "Upakiaji umesitishwa ", + "Processing files …" : "Faili zinazochakatwa", + "…" : "...", + "Unable to upload {filename} as it is a directory or has 0 bytes" : "Haiwezi kupakia {filename} kama ilivyo orodha au ina baiti 0", + "Not enough free space, you are uploading {size1} but only {size2} is left" : "Hakuna nafasi ya kutosha, unapakia {size1} lakini imesalia {size2} pekee", + "Target folder \"{dir}\" does not exist any more" : "Kasha lengwa \"{dir}\" halipatikani tena", + "An unknown error has occurred" : "Hitilafu isiyojulikana imetokea", + "File could not be uploaded" : "Faili isingeweza kupakia", + "Uploading …" : "Inapakia", + "{remainingTime} ({currentNumber}/{total})" : "{remainingTime}({currentNumber}/{total})", + "Uploading … ({currentNumber}/{total})" : "Inapakia... ({currentNumber}/{total})", + "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} ya {totalSize} ({bitrate})", + "Uploading that item is not supported" : "Upakiaji wa kipengele hicho hauwezeshwi", + "Error when assembling chunks, status code {status}" : "Hitilafu wakakti wa kukusanya vipande, nambari ya hali {status}", + "Choose target folder" : "Chagua kasha lililolengwa", + "Set reminder" : "Weka ukumbusho", + "Edit locally" : "Hariri kikawaida", + "Open" : "Fungua", + "Could not load info for file \"{file}\"" : "Isingeweza kupakia taarifa kwa faili \"{file}\"", + "Details" : "Maelezo ya kina", + "Please select tag(s) to add to the selection" : "Tafadhali chagua lebo za kuongeza kwenye uteuzi", + "Apply tag(s) to selection" : "Omba lebo kwenye uteuzi", + "Select directory \"{dirName}\"" : "Teua orodha \"{dirName}\"", + "Select file \"{fileName}\"" : "Teua faili \"{fileName}\"", + "Unable to determine date" : "Haiwezi kuamua tarehe", + "Could not move \"{file}\", target exists" : "Haikuweza kuhamisha \"{file}\" lengo lililopo", + "Could not move \"{file}\"" : "Haiwezi kuhamisha \"{file}\"", + "copy" : "Nakili", + "Could not copy \"{file}\", target exists" : "Haiwezi kunakili \"{file}\" lengo lililopo", + "Could not copy \"{file}\"" : "Haikuweza kunakili {file}", + "Copied {origin} inside {destination}" : "Imenakili {origin} ndani ya {destination}", + "Copied {origin} and {nbfiles} other files inside {destination}" : "Imenakili {origin} na {nbfiles} faili zingine ndani ya {destination}", + "{newName} already exists" : "{newName} lipo tayari", + "Could not rename \"{fileName}\", it does not exist any more" : "Haikuweza kuita jina jipya \"{fileName}\", halipo tena", + "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Jina \"{targetName}\" tayari linatumika katika kisanduku \"{dir}\". Tafadhali chagua jina tofauti", + "Could not rename \"{fileName}\"" : "Haikuweza kuita jina jipya \"{fileName}\"", + "Could not create file \"{file}\"" : "Haikuweza kutengeneza faili \"{file}\"", + "Could not create file \"{file}\" because it already exists" : "Haikuweza kuteengeneza faili \"{file}\" kwa sababu lipo tayari", + "Could not create folder \"{dir}\" because it already exists" : "Haikuweza kutengeneza kisanduku \"{dir}\" kwa sababu kipo tayari", + "Could not fetch file details \"{file}\"" : "Haikuleta maelezo ya faili \"{file}\"", + "Error deleting file \"{fileName}\"." : "Hitilafu kufuta faili \"{fileName}\"", + "No search results in other folders for {tag}{filter}{endtag}" : "Hakuna matokeo ya utafutaji ndani ya masanduku mengine {tag}{filter}{endtag}", + "Enter more than two characters to search in other folders" : "Ingiza wahusika zaidi ya wawili kutafuta ndani ya masanduku mengine", + "{dirs} and {files}" : "{dirs} na {files}", + "_including %n hidden_::_including %n hidden_" : ["including %n hidden","inajumuisha %n iliyofichwa"], + "You do not have permission to upload or create files here" : "Huna ruhusa ya kupakia au kutengeneza faili hapa", + "_Uploading %n file_::_Uploading %n files_" : ["Uploading %n file","Inapakia faili %n"], + "New" : "Mpya", + "New file/folder menu" : "Faili mpya/ menyu ya kisanduku", + "Select file range" : "Chagua safu ya faili", + "{used}%" : "{used} %", + "{used} used" : "{used}imetumika", + "\"{name}\" is an invalid file name." : "\"{name}\" ni jina la faili lisilo halali", + "File name cannot be empty." : "Jina la faili haliwezi kawa tupu", + "\"/\" is not allowed inside a file name." : "\"/\" hairuhusiwi ndani ya jina la faili", + "\"{name}\" is not an allowed filetype" : "\"{name}\" si aina ya faili iliyoruhusiwa", + "Storage of {owner} is full, files cannot be updated or synced anymore!" : "Uhifadhi wa {owner} umejaa, faili haziwezi kusasishwa au kusawazishwa zaidi", + "Group folder \"{mountPoint}\" is full, files cannot be updated or synced anymore!" : "Kundi la vikasha \"{mountPoint}\" limejaa, faili haziwezi kusasishwa au kusawazishwa zaidi", + "External storage \"{mountPoint}\" is full, files cannot be updated or synced anymore!" : "Uhifadhi wa nje \"{mountPoint}\" umejaa, faili haziwezi kusasishwa au kusawazishwa zaidi", + "Your storage is full, files cannot be updated or synced anymore!" : "Uhifadhi wako umejaa, faili haziwezi kusasishwa au kusawazishwa zaidi", + "Storage of {owner} is almost full ({usedSpacePercent}%)." : "Uhafidhi wa {owner} unakaribia kujaa ({usedSpacePercent}%)", + "Group folder \"{mountPoint}\" is almost full ({usedSpacePercent}%)." : "Kundi la vikasha \"{mountPoint}linakaribia kujaa ({usedSpacePercent}%)", + "External storage \"{mountPoint}\" is almost full ({usedSpacePercent}%)." : "Uhifadhi wa nje \"{mountPoint}\" unakaribia kujaa ({usedSpacePercent}%)", + "Your storage is almost full ({usedSpacePercent}%)." : "Uhafadhi wako unakaribia kujaa ({usedSpacePercent}%).", + "_matches \"{filter}\"_::_match \"{filter}\"_" : ["matches \"{filter}\"","linganisha \"{filter}\""], + "Direct link was copied (only works for people who have access to this file/folder)" : "Kiungo cha moja kwa moja kilinakiliwa (hufanya kazi tu kwa watu wanaoweza kufikia faili/kikasha hiki)", + "Path" : "Njia", + "_%n byte_::_%n bytes_" : ["%n byte","%n baiti"], + "Favored" : "Imependelewa", + "Favor" : "Upendeleo", + "Copy direct link (only works for people who have access to this file/folder)" : "Nakili kiungo cha moja kwa moja (inafanya kazi tu kwa watu wanaoweza kufikia faili/folda hii)", + "Upload file" : "Pakia faili", + "Not favored" : "Haikupendwa", + "An error occurred while trying to update the tags" : "Hitilafu imetokea wakati ikijaribu kusasisha lebo", + "Upload (max. %s)" : "Pakia (kiwango cha juu. %s)", + "Submitting fields…" : "Inawasilisha migunda", + "Filter filenames…" : "Chuja majina ya faili", + "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} folder","Visandiku {folderCount} "], + "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} file","Faili {fileCount} "], + "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 file and {folderCount} folder","Faili 1 na {folderCount} makasha"], + "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} file and 1 folder","{fileCount} faili na kasha 1"], + "{fileCount} files and {folderCount} folders" : "{fileCount} faili na {folderCount}makasha", + "Personal Files" : "Faili binafsi", + "Text file" : "Faili ya maandishi", + "New text file.txt" : "Faili mpya ya maandishi.txt", + "%1$s (renamed)" : "%1$s (iliyopew jina jipya)", + "renamed file" : "Faili iliyopewa jina jipya", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Baada ya kuwezesha majina ya windows ya faili yanayooana, faili zilizopo haziwezi kurekebishwa tena lakini zinaweza kubadilishwa kuwa majina mapya halali na mmiliki wao.", + "{count} files could not be converted" : "{count} files could not be converted", + "{count} files successfully converted" : "{count} files successfully converted" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/sw.json b/apps/files/l10n/sw.json new file mode 100644 index 00000000000..3142db10ae0 --- /dev/null +++ b/apps/files/l10n/sw.json @@ -0,0 +1,460 @@ +{ "translations": { + "Added to favorites" : "Imeongezwa kwa vipendwa", + "Removed from favorites" : "Imeondolewa kutoka vipendwa", + "You added {file} to your favorites" : "Umeongeza {file}kwa vipendwa vyako", + "You removed {file} from your favorites" : "Umeondoa {file}kwenye vipendwa vyako", + "Favorites" : "Vinavyopendwa", + "File changes" : "Mabadiliko ya faili", + "Created by {user}" : "Imetengenezwa na {user}", + "Changed by {user}" : "Imebadilishwa na {user}", + "Deleted by {user}" : "Imefutwa na {user}", + "Restored by {user}" : "Imehifadhiwa na {user}", + "Renamed by {user}" : "Imepewa jina upya na {user}", + "Moved by {user}" : "Imesogezwa na {user}", + "\"remote account\"" : "\"akaunti ya mbali\"", + "You created {file}" : "Umetengeneza {file}", + "You created an encrypted file in {file}" : "Umeunda faili iliyosimbwa kwa njia fiche katika {file}", + "{user} created {file}" : "{user} ameunda {file}", + "{user} created an encrypted file in {file}" : "{user}ameunda faili iliyosimbwa kwa njia fiche katika {file}", + "{file} was created in a public folder" : "{file}ilitengenezwa katika kisanduku cha umma", + "You changed {file}" : "Umebadilisha {file}", + "You changed an encrypted file in {file}" : "Umebadilisha faili iliyosimbwa kwa njia fiche katika {file}", + "{user} changed {file}" : "{user} amebadili {file}", + "{user} changed an encrypted file in {file}" : "{user}amebadili faili iliyosimbwa kwa njia fiche katika {file}", + "You deleted {file}" : "Umefuta {file}", + "You deleted an encrypted file in {file}" : "Umefuta faili iliyosimbwa kwa njia fiche katika {file}", + "{user} deleted {file}" : "{user} amefuta {file}", + "{user} deleted an encrypted file in {file}" : "{user} amefuta faili iliyosimbwa kwa njia fiche katika {file}", + "You restored {file}" : "Umehifadhi upya {file}", + "{user} restored {file}" : "{user} amehifadhi upya {file}", + "You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Umeita jina upya {oldfile}(iliyofichwa)kwenda {newfile} (iliyofichwa)", + "You renamed {oldfile} (hidden) to {newfile}" : "Umeita jina upya {oldfile}(iliyofichwa)kwenda{newfile}", + "You renamed {oldfile} to {newfile} (hidden)" : "Umeita jina upya {oldfile}kwenda{newfile}(iliyofichwa)", + "You renamed {oldfile} to {newfile}" : "Umeita jina upya {oldfile}hadi{newfile}", + "{user} renamed {oldfile} (hidden) to {newfile} (hidden)" : "{user}ameita jina upya{oldfile}(iliyofichwa) hadi {newfile} (iliyofichwa)", + "{user} renamed {oldfile} (hidden) to {newfile}" : "{user}ameita jina upya{oldfile}(iliyofichwa) hadi{newfile}", + "{user} renamed {oldfile} to {newfile} (hidden)" : "{user}ameita jina upya{oldfile}hadi{newfile}(iliyofichwa)", + "{user} renamed {oldfile} to {newfile}" : "{user}ameita jina upya {oldfile}hadi{newfile}", + "You moved {oldfile} to {newfile}" : "Umeondoa {oldfile}hadi{newfile}", + "{user} moved {oldfile} to {newfile}" : "{user}amesogeza {oldfile}hadi{newfile}", + "A file has been added to or removed from your <strong>favorites</strong>" : "Faili limeongezwa kwenye au limeondolewa kutoka <strong>vipendwa</strong>", + "Files" : "Mafaili", + "A file or folder has been <strong>changed</strong>" : "Faili au kisanduku kime<strong>badilishwa</strong>", + "A favorite file or folder has been <strong>changed</strong>" : "Faili pendwa au kisanduku kime<strong>badilishwa</strong>", + "Failed to authorize" : "Imeshindwa kuidhinisha", + "Invalid folder path" : "Njia ya kisanduku si halali", + "Folder not found" : "Kisanduku hakipatikani", + "The file cannot be found" : "Faili haliwezi kupatikana", + "The destination path does not exist: %1$s" : "Njia lengwa haipo %1$s", + "You do not have permission to create a file at the specified location" : "Huna ruhusa kuunda faili katika eneo lililobainishwa", + "The file could not be converted." : "Faili halikuweza kubadilishwa", + "Could not get relative path to converted file" : "Haikuweza kupata njia sawia ya faili lililobadilishwa", + "Favorite files" : "Faili pendwa", + "No favorites" : "Hakuna vipendwa", + "More favorites" : "Vipendwa zaidi", + "Accept" : "Kubali", + "Reject" : "Kataa", + "Incoming ownership transfer from {user}" : "Uhamisho wa umiliki unaoingia kutoka {user}", + "Do you want to accept {path}?\n\nNote: The transfer process after accepting may take up to 1 hour." : "Je unataka kukubali {path}?\n\nKubmbuka: Mchakato wa uhamisho baada ya kukubali unaweza kuchukua mpaka saa 1", + "Ownership transfer denied" : "Uhamisho wa umiliki umekataliwa", + "Your ownership transfer of {path} was denied by {user}." : "Uhamisho wa umiliki wako wa {path}umekataliwa na {user}", + "Ownership transfer failed" : "Uhamisho wa umiliki umeshindikana", + "Your ownership transfer of {path} to {user} failed." : "Uhamisho wa umiliki wako wa {path}kwenda {user}umeshindikana", + "The ownership transfer of {path} from {user} failed." : "Uhamisho wa umiliki wa {path}kutoka {user}umeshindikana", + "Ownership transfer done" : "Uhamisho wa umiliki umefanyika", + "Your ownership transfer of {path} to {user} has completed." : "Uhamisho wako wa umiliki wa {path}kwenda {user}umekamilika", + "The ownership transfer of {path} from {user} has completed." : "Uhamisho wa umiliki wa {path}kutoka{user}umekamilika", + "in %s" : "Katika %s", + "Transferred from %1$s on %2$s" : "Imehamishwa kutoka %1$skatika%2$s", + "Files compatibility" : "Utengamano wa faili", + "Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Ruhusu kuzuia majina ya faili ili kuhakikisha kuwa faili zinaweza kusawazishwa na wateja wote. Kwa chaguo-msingi, majina yote ya faili ni halali katika POSIX (e.g. Linux or macOS) zinaruhusiwa.", + "After enabling the Windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Baada ya kuruhusu majina ya faili yanayooana na Windows, faili zilizopo haziwezi kubadilishwa tena lakini zinaweza kubadilishwa kuwa majina mapya halali na mmiliki wao.", + "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Pia inawezekana kuhamisha faili kiotomatiki baada ya kuwezesha mpangilio huu, tafadhali rejelea hati kuhusu amri ya occ.", + "Enforce Windows compatibility" : "Tekeleza utangamano wa windows", + "This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Hii itazuia majina ya faili ambayo si halali kwenye mifumo ya Windows, kama vile kutumia majina yaliyohifadhiwa au herufi maalum. Lakini hii haitatekeleza utangamano wa unyeti wa kesi.", + "File Management" : "Usimamizi wa faili", + "Home" : "Nyumbani", + "Target folder does not exist any more" : "Kisanduku kilicholengwa hakipo tena", + "Reload current directory" : "Pakia upya kitabu cha orodha ya sasa", + "Go to the \"{dir}\" directory" : "Nenda kwenye {dir}kitabu cha orodha", + "Current directory path" : "Njia ya kitabu cha orodha ya sasa", + "Your have used your space quota and cannot upload files anymore" : "Umetumia nafasi yako kwa upendeleo na huwezi kupakia faili zaidi", + "You do not have permission to upload or create files here." : "Huna ruhusa kupakia au kutengeneza faili hapa", + "Drag and drop files here to upload" : "Sogeza na udondoshe faili hapa ili upakie", + "Favorite" : "Kipendwa", + "Back" : "Rudi", + "Toggle selection for file \"{displayName}\"" : "Geuza uteuzi wa faili \"{displayName}\"", + "Toggle selection for folder \"{displayName}\"" : "Geuza uteuzi wa kisanduku \"{displayName}\"", + "File is loading" : "Faili inapakia", + "Folder is loading" : "Kisanduku kinapakia", + "Filename" : "Jina la faili", + "Folder name" : "Jina la kisanduku", + "This node is unavailable" : "Nodi hii haipatikani", + "Another entry with the same name already exists." : "Ingizo lingine lenye jina sawasawa lipo tayari", + "Invalid filename." : "Majina ya faili si sahihi", + "Renamed \"{oldName}\" to \"{newName}\"" : "Imebadili jina \"{oldName}\" mpaka \"{newName}\"", + "Rename file" : "Badili jina la faili", + "Folder" : "Kisanduku", + "Unknown file type" : "Aina ya faili isiyojulikana", + "{ext} image" : "{ext}picha", + "{ext} video" : "{ext}picha mjongeo", + "{ext} audio" : "{ext}sauti", + "{ext} text" : "{ext}maandishi", + "Pending" : "Inasubiri", + "Unknown date" : "Tarehe isiyojulikana", + "Clear filter" : "Futa kichujio", + "Modified" : "Iliyoboreshwa", + "Type" : "Aina", + "Active filters" : "Vichujio vinavyotumika", + "Remove filter" : "Ondoa kichujio", + "Total rows summary" : "Muhtasari wa jumla ya safu mlalo", + "Toggle selection for all files and folders" : "Geuza uteuzi wa faili na visanduku vyote", + "Name" : "Jina", + "File type" : "Aina ya faili", + "Size" : "Ukubwa", + "\"{displayName}\" failed on some elements" : "\"{displayName} imeshindwa katika vipengele kadhaa", + "\"{displayName}\" batch action executed successfully" : "\"{displayName}\" kitendo cha kundi kimetekelezwa kwa mafanikio", + "\"{displayName}\" action failed" : "\"{displayName}\" matendo yameshindwa", + "Actions" : "Utendekaji", + "(selected)" : "(iliyochaguliwa)", + "List of files and folders." : "Orodha ya faili na visanduku", + "You have used your space quota and cannot upload files anymore." : "Umetumia mgao wako wa nafasi na huwezi kupakia faili tena.", + "Column headers with buttons are sortable." : "Vichwa vya safu wima vilivyo na vifungo vinaweza kupangwa.\n ", + "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Orodha hii haijatolewa kikamilifu kwa sababu za utendaji. Faili zitatolewa unapopitia orodha.", + "File not found" : "Faili halipatikani", + "_{count} selected_::_{count} selected_" : ["{count} selected","{count} iliyochaguliwa"], + "{usedQuotaByte} used" : "{usedQuotaByte}imetumika", + "{used} of {quota} used" : "{used} ya {quota}imetumika", + "{relative}% used" : "{relative}% imetumika", + "Could not refresh storage stats" : "Haikuweza kuonesha upya takwimu za hifadhi", + "Your storage is full, files can not be updated or synced anymore!" : "Hifadhi yako imejaa, faili haziwezi kusasishwa au kusawazishwa tena!\n ", + "Storage information" : "Taarifa za uhifadhi", + "Storage quota" : "Kiasi cha uhifadhi", + "New folder" : "Kisanduku kipya", + "Create new folder" : "Tengeneza kisanduku kipya", + "This name is already in use." : "Jina hili liko katika matumizi tayari", + "Create" : "Tengeneza", + "Fill template fields" : "Jaza sehemu za violezo", + "Submitting fields …" : "Inawasilisha violezo", + "Submit" : "Wasilisha", + "Choose a file or folder to transfer" : "Chagua faili au kisanduku cha kuhamisha", + "Transfer" : "Hamisha", + "Transfer {path} to {userid}" : "Hamisha {path}mpaka {userid}", + "Invalid path selected" : "Njia iliyochaguliwa si halali", + "Unknown error" : "Hitilafu isiyojulikana", + "Ownership transfer request sent" : "Ombi la uhamisho wa umiliki limetumwa", + "Cannot transfer ownership of a file or folder you do not own" : "Haiwezi kuhamisha umiliki wa faili au kisanduku usichomiliki", + "Transfer ownership of a file or folder" : "Hamisha umiliki wa faili au kisanduku", + "Choose file or folder to transfer" : "Chagua faili au kisanduku cha kuhamisha", + "Change" : "Badili", + "New owner" : "Mmiliki mpya", + "Keep {old}" : "Weka {old}", + "Keep without extension" : "Weka bila ongezeko", + "Use {new}" : "Tumia {new}", + "Remove extension" : "Ondoa ongezeko", + "Change file extension" : "Badili ongezeko la faili", + "Changing the file extension from \"{old}\" to \"{new}\" may render the file unreadable." : "Kubadilisha kiendelezi cha faili kutoka \"{{old}}\" hadi \"{new}\" kunaweza kufanya faili isisomeke.", + "Removing the file extension \"{old}\" may render the file unreadable." : "Kuondoa kiendelezi cha faili \"{old}\" kunaweza kufanya faili isisomeke.", + "Adding the file extension \"{new}\" may render the file unreadable." : "Kuongeza kiendelezi cha faili \"{new}\" kunaweza kufanya faili isisomeke.", + "Do not show this dialog again." : "Usioneshe mazungumzo haya tena", + "Select file or folder to link to" : "Chagua faili au kisanduku cha kuunga kwa", + "Choose {file}" : "Chagua {file}", + "Share" : "Shirikisha", + "Shared by link" : "Imeshirikishwa na kiungio", + "Shared" : "Shirikisha", + "Switch to list view" : "Badili hadi mwonekano wa orodha", + "Switch to grid view" : "Badili hadi mwonekano wa gridi", + "The file could not be found" : "Faili halikupatikana", + "Upload was cancelled by user" : "Upakiaji ulisitishwa na mtumiaji", + "Not enough free space" : "Hakuna eneo huru la kutosha", + "Operation is blocked by access control" : "Uendeshaji umezuiwa na udhibiti wa ufikiaji", + "Error during upload: {message}" : "Hitilafu wakati wa kupakia: {message}", + "Error during upload, status code {status}" : "Hitilafu wakati wa kupakia, msimbo wa hali {status}", + "Unknown error during upload" : "Hitilafu isiyojulikana wakati wa kupakia", + "\"{displayName}\" action executed successfully" : "\"{displayName}\" kitendo kimetekelezwa kwa mafanikio", + "Loading current folder" : "Inapakia faili ya sasa", + "Retry" : "Jaribu tene", + "No files in here" : "Hakuna faili hapa", + "Upload some content or sync with your devices!" : "Pakia baadhi ya maudhui au usawazishe na vifaa vyako!", + "Go back" : "Rudi nyuma", + "Filter file names …" : "Chuja majina ya faili...", + "Views" : "Mionekano", + "Files settings" : "Mipangilio ya faili", + "Your files" : "Mafaili yako", + "Open in files" : "Fungua ndani ya faili", + "File cannot be accessed" : "Faili haliwezi kufikika", + "The file could not be found or you do not have permissions to view it. Ask the sender to share it." : "Faili haikupatikana au huna ruhusa ya kuitazama. Uliza mtumaji kuishirikisha.", + "Clipboard is not available" : "Ubao wa kunakili haupatikani", + "WebDAV URL copied to clipboard" : "WavutiDAV URL umenakiliwa kwenye ubao wa kunakili", + "Sort favorites first" : "Chagua za upendeleo kwanza", + "Sort folders before files" : "Chagua vikasha kabla ya mafaili", + "Show hidden files" : "Onesha mafaili yaliyofichwa", + "Show file type column" : "Onyesha safu wima ya aina ya faili\n ", + "Crop image previews" : "Punguza onyesho la kukagua picha", + "Enable the grid view" : "Wezesha mwonekano wa gridi", + "Enable folder tree" : "Wezesha faili la tatu", + "Additional settings" : "Mipangilio ya nyongeza", + "WebDAV" : "WavutiDAV", + "WebDAV URL" : "WavutiDAV URL", + "Copy to clipboard" : "Nakili kwenye ubao wa kunakili", + "Use this address to access your Files via WebDAV" : "Tumia anwani hii kufikia Faili zako kupitia WavutiDAV", + "If you have enabled 2FA, you must create and use a new app password by clicking here." : "Ikiwa umewasha 2FA, lazima uunde na utumie nenosiri jipya la programu kwa kubofya hapa", + "Warnings" : "Maonyo", + "Prevent warning dialogs from open or reenable them." : "Zuia mazungumzo ya onyo yasifunguliwe au uwashe upya.\n ", + "Show a warning dialog when changing a file extension." : "Onyesha mazungumzo ya onyo unapobadilisha kiendelezi cha faili.", + "Keyboard shortcuts" : "Mikato ya keyboard", + "Speed up your Files experience with these quick shortcuts." : "Ongeza kasi ya utumiaji wa Faili zako kwa njia hizi za mkato za haraka.", + "Open the actions menu for a file" : "Fungua menyu ya vitendo kwa faili", + "Rename a file" : "Ita faili jina jipya", + "Delete a file" : "Futa faili", + "Favorite or remove a file from favorites" : "Pendwa au ondoa faili kutoka pendwa", + "Manage tags for a file" : "simamia maoni kwa faili", + "Selection" : "Machaguo", + "Select all files" : "Chagua faili zote", + "Deselect all files" : "Usichague faili zote", + "Select or deselect a file" : "Chagua au usichague faili", + "Select a range of files" : "Chagua anuwai ya faili", + "Navigation" : "Uendeshaji", + "Navigate to the parent folder" : "Nenda kwenye kisanduku kikuu", + "Navigate to the file above" : "Sogea kwenye faili la juu", + "Navigate to the file below" : "Sogea kwenye faili la chini", + "Navigate to the file on the left (in grid mode)" : "Sogea kwenye faili la kushoto (in grid mode)", + "Navigate to the file on the right (in grid mode)" : "Sogea kwenye faili la kulia ( in grid mode)", + "View" : "Angalia", + "Toggle the grid view" : "Geuza mwonekano wa gridi\n ", + "Open the sidebar for a file" : "Fungua utepe kwa faili", + "Show those shortcuts" : "Onesha mikato hiyo", + "You" : "Wewe", + "Shared multiple times with different people" : "Shared multiple times with different people", + "Error while loading the file data" : "Hitilafu wakati wa kupakia data za faili", + "Owner" : "Mmiliki", + "Remove from favorites" : "Ondoa kutoka katika pendwa", + "Add to favorites" : "Ongeza kwenye pendwa", + "Tags" : "Maoni", + "Blank" : "Mabano", + "Unable to create new file from template" : "Imeshindwa kutengeneza faili jipya kutoka kwenye sampuli/kiolezo", + "Pick a template for {name}" : "Chagua sampuli/kiolezo kwa {name}", + "Create a new file with the selected template" : "Tengeneza faili jipya na kiolezo/sampuli iliyochaguliwa", + "Creating file" : "Inatengeneza faili", + "Save as {displayName}" : "Hifadhi kama {displayName}", + "Save as …" : "Hifadhi kama", + "Converting files …" : "Inageuza mafaili", + "Failed to convert files: {message}" : "Imeshindwa kugeuza faili {message}", + "All files failed to be converted" : "Faili zote zimeshindwa kugeuzwa", + "One file could not be converted: {message}" : "Faili moja isingeweza kugeuzwa {message}", + "_One file could not be converted_::_%n files could not be converted_" : ["One file could not be converted","%n faili zisingeweza kugeuzwa"], + "_One file successfully converted_::_%n files successfully converted_" : ["One file successfully converted","%n faili zimegeuzwa kikamilifu"], + "Files successfully converted" : "Faili zimegeuzwa kikamilifu", + "Failed to convert files" : "Imeshindwa kugeuza faili", + "Converting file …" : "Inageuza faili", + "File successfully converted" : "Faili imegeuzwa kikamilifu", + "Failed to convert file: {message}" : "Imeshindwa kugeuza faili {message}", + "Failed to convert file" : "Imeshindwa kugeuza faili", + "Deletion cancelled" : "Ufutaji umesitishwa", + "Leave this share" : "Ondoa ushirikishaji huu", + "Leave these shares" : "Ondoa shiriki hizi", + "Disconnect storage" : "Achanisha uhifadhi", + "Disconnect storages" : "Achanisha hifadhi", + "Delete permanently" : "Futa moja kwa moja", + "Delete and unshare" : "Futa na usishirikishe", + "Delete file" : "Futa faili", + "Delete files" : "Futa faili", + "Delete folder" : "Futa kisanduku", + "Delete folders" : "Futa visanduku", + "Delete" : "Futa", + "_You are about to permanently delete {count} item_::_You are about to permanently delete {count} items_" : ["You are about to permanently delete {count} item","Unakaribia kufuta vipengee {count}kabisa"], + "_You are about to delete {count} item_::_You are about to delete {count} items_" : ["You are about to delete {count} item","Unakaribia kufuta vipengee{count}"], + "Confirm deletion" : "Thibitisha ufutaji", + "Cancel" : "Sitisha", + "Moving \"{source}\" to \"{destination}\" …" : "Sogeza \"{source}\" mpaka \"{destination}\"", + "Copying \"{source}\" to \"{destination}\" …" : "Inanakili \"{source}\" hadi \"{destination}\" ...", + "You cannot move a file/folder onto itself or into a subfolder of itself" : "Huwezi kuhamisha faili/folda kwenye yenyewe au kwenye folda yenyewe", + "(copy)" : "(nakili)", + "(copy %n)" : "(nakili %n)", + "Move cancelled" : "Uhamishaji umeghairishwa", + "A file or folder with that name already exists in this folder" : "Faili au kisanduku chenye jina hilo tayari kipo katika kisanduku hiki", + "The files are locked" : "Faili zimezuiliwa", + "The file does not exist anymore" : "Faili halipo tena", + "Choose destination" : "Chagua eneo lengwa", + "Copy to {target}" : "Nakili kwenda {target}", + "Copy" : "Nakili", + "Move to {target}" : "Hamishia {target}", + "Move" : "Hamisha", + "Move or copy operation failed" : "Operesheni ya kuhamisha au kunakili imeshindikana", + "Move or copy" : "Hamisha au nakili", + "Cancelled move or copy of \"{filename}\"." : "Imesitisha uhamishaji au unakili wa \"{filename}\"", + "Cancelled move or copy operation" : "Imesitisha operesheni ya uhamishaji au unakili", + "Open folder {displayName}" : "Fungua kisanduku {displayName}", + "Open in Files" : "Fungua ndani ya faili", + "Open locally" : "Fungua kikawaida", + "Failed to redirect to client" : "Imeshindwa kuielekeza kwa mteja", + "Open file locally" : "Fungua faili kikawaida", + "The file should now open on your device. If it doesn't, please check that you have the desktop app installed." : "Sasa faili inapaswa kufunguliwa kwenye kifaa chako. Ikiwa sivyo, tafadhali hakikisha kuwa umesakinisha programu ya eneo-kazi.", + "Retry and close" : "Jaribu upya kisha funga", + "Open online" : "Fungua mtandaoni", + "Rename" : "Ipe jina jipya", + "Open details" : "Fungua maelezo", + "View in folder" : "Angalia ndani ya kisanduku", + "Today" : "Leo", + "Last 7 days" : "Siku 7 zilizopita", + "Last 30 days" : "Siku 30 zilizopita", + "This year ({year})" : "Mwaka huu {year}", + "Last year ({year})" : "Mwaka uliopita {year}", + "Documents" : "Nyaraka", + "Spreadsheets" : "Lahajedwali", + "Presentations" : "Uwasilishaji", + "PDFs" : "PDFs", + "Folders" : "Visanduku", + "Audio" : "Sauti", + "Photos and images" : "Picha na taswira", + "Videos" : "Picha mjongeo", + "New folder creation cancelled" : "Utengenezaji wa kisanduku kipya umesitishwa", + "Created new folder \"{name}\"" : "Imetengeneza kisanduku kipya \"{name}\"", + "Unable to initialize the templates directory" : "Haikuweza kuanzisha saraka ya violezo", + "Create templates folder" : "Imetengeneza kisanduku cha violezo", + "Templates" : "Violezo", + "New template folder" : "Kisanduku kipya cha violezo", + "In folder" : "Ndani ya kisanduku", + "Search in folder: {folder}" : "Tafuta katika kisanduku {folder}", + "One of the dropped files could not be processed" : "Moja ya faili zilizodondoshwa isingeweza kuchakatwa", + "Your browser does not support the Filesystem API. Directories will not be uploaded" : "Kivinjari chako hakitumii API ya mfumo wa faili. Orodha hazitapakiwa\n ", + "No files to upload" : "Hakuna faili la kupakia", + "Unable to create the directory {directory}" : "Haiwezi kutengeneza orodha {directory}", + "Some files could not be uploaded" : "Faili kadhaa zisingeweza kupakiwa", + "Files uploaded successfully" : "Faili zimepakiwa kikamilifu", + "No files to process" : "Hakuna faili la kuchakata", + "Some files could not be copied" : "Faili baadhi zisingeweza kunakiliwa", + "Some files could not be moved" : "Faili baadhi zisingeweza kuhamishwa", + "Files copied successfully" : "Faili limenakiliwa kikamilifu", + "Files moved successfully" : "Faili limeondolewa kikamilifu", + "Conflicts resolution skipped" : "Utatuzi wa migogoro ulirukwa", + "Upload cancelled" : "Upakiaji umesitishwa", + "This operation is forbidden" : "Opereshini hii imezuiwa", + "This directory is unavailable, please check the logs or contact the administrator" : "Orodha haipatikani, tafadhali angalia uingiaji au wasiliana na msimamizi", + "Storage is temporarily not available" : "Uhifadhi haupo kwa muda", + "Unexpected error: {error}" : "Hitilafu isiyotarajiwa {error}", + "_%n file_::_%n files_" : ["%n file","%n faili"], + "_%n folder_::_%n folders_" : ["%n folder","%n visanduku/vikasha"], + "_%n hidden_::_%n hidden_" : ["%n hidden","%n imefichwa"], + "Filename must not be empty." : "Jina la faili halipaswi kuwa tupu", + "\"{char}\" is not allowed inside a filename." : "\"{char}\" hairuhusiwi ndani ya jina la faili", + "\"{segment}\" is a reserved name and not allowed for filenames." : "\"{segment}\" ni jina la akiba na haliruhusiwi kwa majina ya faili", + "\"{extension}\" is not an allowed filetype." : "\"{extension}\" si aina ya faili inayoruhusiwa", + "Filenames must not end with \"{extension}\"." : "Majina ya faili hayapaswi kuishia na \"{extension}\"", + "List of favorite files and folders." : "Orodha ya faili na visanduku vinanyopendwa", + "No favorites yet" : "Bado hakuna vinavyopendwa", + "Files and folders you mark as favorite will show up here" : "Faili na visunduku ulivyoweka alama kama vipendwa vitaonekana hapa", + "All files" : "Faili zote", + "List of your files and folders." : "Orodha ya faili na vikasha vyako", + "All folders" : "Vikasha vyote", + "Personal files" : "Faili binafsi", + "List of your files and folders that are not shared." : "Orodha ya faili na vikasha ambavyo havijashirikishwa", + "No personal files found" : "Hakuna faili binafsi zilizopatikana", + "Files that are not shared will show up here." : "Faili ambazo hazija shirikishwa zitaonekana hapa", + "Recent" : "Hivi karibuni", + "List of recently modified files and folders." : "Orodha ya faili na vikasha vilivyoboreshwa hivi karibuni", + "No recently modified files" : "Hakuna faili zilizoboreshwa hivi karibuni", + "Files and folders you recently modified will show up here." : "Faili na vikasha ulivyoboresha hivi karibuni vitaonekana hapa", + "No entries found in this folder" : "Hakuna maingizo yaliyopatikana katika kasha hili", + "Select all" : "Chagua zote", + "Upload too large" : "Upakiaji mkubwa mno", + "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Faili unazojaribu kupakia zinazidi ukubwa wa juu zaidi wa upakiaji wa faili kwenye seva hii.", + "File could not be found" : "Faili isingeweza kupatikana", + "Download" : "Pakua", + "Show list view" : "Onesha mwonekeno wa orodha", + "Show grid view" : "Onesha mwonekano wa mstariramani", + "Close" : "Funga", + "Could not create folder \"{dir}\"" : "Isingeweza kutengeneza kasha \"{dir}\"", + "This will stop your current uploads." : "Hii itasimamisha ukakiaji wako wa sasa", + "Upload cancelled." : "Upakiaji umesitishwa ", + "Processing files …" : "Faili zinazochakatwa", + "…" : "...", + "Unable to upload {filename} as it is a directory or has 0 bytes" : "Haiwezi kupakia {filename} kama ilivyo orodha au ina baiti 0", + "Not enough free space, you are uploading {size1} but only {size2} is left" : "Hakuna nafasi ya kutosha, unapakia {size1} lakini imesalia {size2} pekee", + "Target folder \"{dir}\" does not exist any more" : "Kasha lengwa \"{dir}\" halipatikani tena", + "An unknown error has occurred" : "Hitilafu isiyojulikana imetokea", + "File could not be uploaded" : "Faili isingeweza kupakia", + "Uploading …" : "Inapakia", + "{remainingTime} ({currentNumber}/{total})" : "{remainingTime}({currentNumber}/{total})", + "Uploading … ({currentNumber}/{total})" : "Inapakia... ({currentNumber}/{total})", + "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} ya {totalSize} ({bitrate})", + "Uploading that item is not supported" : "Upakiaji wa kipengele hicho hauwezeshwi", + "Error when assembling chunks, status code {status}" : "Hitilafu wakakti wa kukusanya vipande, nambari ya hali {status}", + "Choose target folder" : "Chagua kasha lililolengwa", + "Set reminder" : "Weka ukumbusho", + "Edit locally" : "Hariri kikawaida", + "Open" : "Fungua", + "Could not load info for file \"{file}\"" : "Isingeweza kupakia taarifa kwa faili \"{file}\"", + "Details" : "Maelezo ya kina", + "Please select tag(s) to add to the selection" : "Tafadhali chagua lebo za kuongeza kwenye uteuzi", + "Apply tag(s) to selection" : "Omba lebo kwenye uteuzi", + "Select directory \"{dirName}\"" : "Teua orodha \"{dirName}\"", + "Select file \"{fileName}\"" : "Teua faili \"{fileName}\"", + "Unable to determine date" : "Haiwezi kuamua tarehe", + "Could not move \"{file}\", target exists" : "Haikuweza kuhamisha \"{file}\" lengo lililopo", + "Could not move \"{file}\"" : "Haiwezi kuhamisha \"{file}\"", + "copy" : "Nakili", + "Could not copy \"{file}\", target exists" : "Haiwezi kunakili \"{file}\" lengo lililopo", + "Could not copy \"{file}\"" : "Haikuweza kunakili {file}", + "Copied {origin} inside {destination}" : "Imenakili {origin} ndani ya {destination}", + "Copied {origin} and {nbfiles} other files inside {destination}" : "Imenakili {origin} na {nbfiles} faili zingine ndani ya {destination}", + "{newName} already exists" : "{newName} lipo tayari", + "Could not rename \"{fileName}\", it does not exist any more" : "Haikuweza kuita jina jipya \"{fileName}\", halipo tena", + "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Jina \"{targetName}\" tayari linatumika katika kisanduku \"{dir}\". Tafadhali chagua jina tofauti", + "Could not rename \"{fileName}\"" : "Haikuweza kuita jina jipya \"{fileName}\"", + "Could not create file \"{file}\"" : "Haikuweza kutengeneza faili \"{file}\"", + "Could not create file \"{file}\" because it already exists" : "Haikuweza kuteengeneza faili \"{file}\" kwa sababu lipo tayari", + "Could not create folder \"{dir}\" because it already exists" : "Haikuweza kutengeneza kisanduku \"{dir}\" kwa sababu kipo tayari", + "Could not fetch file details \"{file}\"" : "Haikuleta maelezo ya faili \"{file}\"", + "Error deleting file \"{fileName}\"." : "Hitilafu kufuta faili \"{fileName}\"", + "No search results in other folders for {tag}{filter}{endtag}" : "Hakuna matokeo ya utafutaji ndani ya masanduku mengine {tag}{filter}{endtag}", + "Enter more than two characters to search in other folders" : "Ingiza wahusika zaidi ya wawili kutafuta ndani ya masanduku mengine", + "{dirs} and {files}" : "{dirs} na {files}", + "_including %n hidden_::_including %n hidden_" : ["including %n hidden","inajumuisha %n iliyofichwa"], + "You do not have permission to upload or create files here" : "Huna ruhusa ya kupakia au kutengeneza faili hapa", + "_Uploading %n file_::_Uploading %n files_" : ["Uploading %n file","Inapakia faili %n"], + "New" : "Mpya", + "New file/folder menu" : "Faili mpya/ menyu ya kisanduku", + "Select file range" : "Chagua safu ya faili", + "{used}%" : "{used} %", + "{used} used" : "{used}imetumika", + "\"{name}\" is an invalid file name." : "\"{name}\" ni jina la faili lisilo halali", + "File name cannot be empty." : "Jina la faili haliwezi kawa tupu", + "\"/\" is not allowed inside a file name." : "\"/\" hairuhusiwi ndani ya jina la faili", + "\"{name}\" is not an allowed filetype" : "\"{name}\" si aina ya faili iliyoruhusiwa", + "Storage of {owner} is full, files cannot be updated or synced anymore!" : "Uhifadhi wa {owner} umejaa, faili haziwezi kusasishwa au kusawazishwa zaidi", + "Group folder \"{mountPoint}\" is full, files cannot be updated or synced anymore!" : "Kundi la vikasha \"{mountPoint}\" limejaa, faili haziwezi kusasishwa au kusawazishwa zaidi", + "External storage \"{mountPoint}\" is full, files cannot be updated or synced anymore!" : "Uhifadhi wa nje \"{mountPoint}\" umejaa, faili haziwezi kusasishwa au kusawazishwa zaidi", + "Your storage is full, files cannot be updated or synced anymore!" : "Uhifadhi wako umejaa, faili haziwezi kusasishwa au kusawazishwa zaidi", + "Storage of {owner} is almost full ({usedSpacePercent}%)." : "Uhafidhi wa {owner} unakaribia kujaa ({usedSpacePercent}%)", + "Group folder \"{mountPoint}\" is almost full ({usedSpacePercent}%)." : "Kundi la vikasha \"{mountPoint}linakaribia kujaa ({usedSpacePercent}%)", + "External storage \"{mountPoint}\" is almost full ({usedSpacePercent}%)." : "Uhifadhi wa nje \"{mountPoint}\" unakaribia kujaa ({usedSpacePercent}%)", + "Your storage is almost full ({usedSpacePercent}%)." : "Uhafadhi wako unakaribia kujaa ({usedSpacePercent}%).", + "_matches \"{filter}\"_::_match \"{filter}\"_" : ["matches \"{filter}\"","linganisha \"{filter}\""], + "Direct link was copied (only works for people who have access to this file/folder)" : "Kiungo cha moja kwa moja kilinakiliwa (hufanya kazi tu kwa watu wanaoweza kufikia faili/kikasha hiki)", + "Path" : "Njia", + "_%n byte_::_%n bytes_" : ["%n byte","%n baiti"], + "Favored" : "Imependelewa", + "Favor" : "Upendeleo", + "Copy direct link (only works for people who have access to this file/folder)" : "Nakili kiungo cha moja kwa moja (inafanya kazi tu kwa watu wanaoweza kufikia faili/folda hii)", + "Upload file" : "Pakia faili", + "Not favored" : "Haikupendwa", + "An error occurred while trying to update the tags" : "Hitilafu imetokea wakati ikijaribu kusasisha lebo", + "Upload (max. %s)" : "Pakia (kiwango cha juu. %s)", + "Submitting fields…" : "Inawasilisha migunda", + "Filter filenames…" : "Chuja majina ya faili", + "_{folderCount} folder_::_{folderCount} folders_" : ["{folderCount} folder","Visandiku {folderCount} "], + "_{fileCount} file_::_{fileCount} files_" : ["{fileCount} file","Faili {fileCount} "], + "_1 file and {folderCount} folder_::_1 file and {folderCount} folders_" : ["1 file and {folderCount} folder","Faili 1 na {folderCount} makasha"], + "_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} file and 1 folder","{fileCount} faili na kasha 1"], + "{fileCount} files and {folderCount} folders" : "{fileCount} faili na {folderCount}makasha", + "Personal Files" : "Faili binafsi", + "Text file" : "Faili ya maandishi", + "New text file.txt" : "Faili mpya ya maandishi.txt", + "%1$s (renamed)" : "%1$s (iliyopew jina jipya)", + "renamed file" : "Faili iliyopewa jina jipya", + "After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Baada ya kuwezesha majina ya windows ya faili yanayooana, faili zilizopo haziwezi kurekebishwa tena lakini zinaweza kubadilishwa kuwa majina mapya halali na mmiliki wao.", + "{count} files could not be converted" : "{count} files could not be converted", + "{count} files successfully converted" : "{count} files successfully converted" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/files/l10n/th.js b/apps/files/l10n/th.js index 5b51231ceb2..2a340d22504 100644 --- a/apps/files/l10n/th.js +++ b/apps/files/l10n/th.js @@ -69,6 +69,7 @@ OC.L10N.register( "Size" : "ขนาด", "Actions" : "การกระทำ", "File not found" : "ไม่พบไฟล์", + "_{count} selected_::_{count} selected_" : ["เลือก {count} รายการ"], "{usedQuotaByte} used" : "ใช้ไป {usedQuotaByte}", "{used} of {quota} used" : "ใช้ไป {used} จาก {quota}", "{relative}% used" : "ใช้ไป {relative}%", diff --git a/apps/files/l10n/th.json b/apps/files/l10n/th.json index bdde1cf0d06..2d0a94b0afb 100644 --- a/apps/files/l10n/th.json +++ b/apps/files/l10n/th.json @@ -67,6 +67,7 @@ "Size" : "ขนาด", "Actions" : "การกระทำ", "File not found" : "ไม่พบไฟล์", + "_{count} selected_::_{count} selected_" : ["เลือก {count} รายการ"], "{usedQuotaByte} used" : "ใช้ไป {usedQuotaByte}", "{used} of {quota} used" : "ใช้ไป {used} จาก {quota}", "{relative}% used" : "ใช้ไป {relative}%", diff --git a/apps/files/l10n/tr.js b/apps/files/l10n/tr.js index 129a6d4f178..f3643d4c5b0 100644 --- a/apps/files/l10n/tr.js +++ b/apps/files/l10n/tr.js @@ -116,7 +116,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Düğmeler olan sütunlar sıralanabilir.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Başarımı olumsuz etkilememek için listenin tümü görüntülenmiyor. Listede ilerledikçe dosyalar görüntülenecek.", "File not found" : "Dosya bulunamadı", - "{count} selected" : "{count} seçilmiş", + "_{count} selected_::_{count} selected_" : ["{count} seçilmiş","{count} seçilmiş"], "{usedQuotaByte} used" : "{usedQuotaByte} kullanılmış", "{used} of {quota} used" : "{used} / {quota} kullanılmış", "{relative}% used" : "%{relative} kullanılmış", diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json index f20a43de5ba..65abc77e66d 100644 --- a/apps/files/l10n/tr.json +++ b/apps/files/l10n/tr.json @@ -114,7 +114,7 @@ "Column headers with buttons are sortable." : "Düğmeler olan sütunlar sıralanabilir.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Başarımı olumsuz etkilememek için listenin tümü görüntülenmiyor. Listede ilerledikçe dosyalar görüntülenecek.", "File not found" : "Dosya bulunamadı", - "{count} selected" : "{count} seçilmiş", + "_{count} selected_::_{count} selected_" : ["{count} seçilmiş","{count} seçilmiş"], "{usedQuotaByte} used" : "{usedQuotaByte} kullanılmış", "{used} of {quota} used" : "{used} / {quota} kullanılmış", "{relative}% used" : "%{relative} kullanılmış", diff --git a/apps/files/l10n/ug.js b/apps/files/l10n/ug.js index b277568a525..b2dbc4b6b44 100644 --- a/apps/files/l10n/ug.js +++ b/apps/files/l10n/ug.js @@ -104,7 +104,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "كۇنۇپكىلار بار ئىستون ماۋزۇلىرى تەرتىپلىك.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "بۇ تىزىملىك ئىقتىدار سەۋەبىدىن تولۇق كۆرسىتىلمىگەن. ھۆججەتلەر تىزىملىكتىن ئۆتكەندە كۆرسىتىلىدۇ.", "File not found" : "ھۆججەت تېپىلمىدى", - "{count} selected" : "{count} تاللانغان", "{usedQuotaByte} used" : "{usedQuotaByte} ئىشلىتىلگەن", "{used} of {quota} used" : "{used} {quota} ئىشلىتىلگەن", "{relative}% used" : "{relative}% ئىشلىتىلگەن", diff --git a/apps/files/l10n/ug.json b/apps/files/l10n/ug.json index 518c039bbce..d51f6ab4258 100644 --- a/apps/files/l10n/ug.json +++ b/apps/files/l10n/ug.json @@ -102,7 +102,6 @@ "Column headers with buttons are sortable." : "كۇنۇپكىلار بار ئىستون ماۋزۇلىرى تەرتىپلىك.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "بۇ تىزىملىك ئىقتىدار سەۋەبىدىن تولۇق كۆرسىتىلمىگەن. ھۆججەتلەر تىزىملىكتىن ئۆتكەندە كۆرسىتىلىدۇ.", "File not found" : "ھۆججەت تېپىلمىدى", - "{count} selected" : "{count} تاللانغان", "{usedQuotaByte} used" : "{usedQuotaByte} ئىشلىتىلگەن", "{used} of {quota} used" : "{used} {quota} ئىشلىتىلگەن", "{relative}% used" : "{relative}% ئىشلىتىلگەن", diff --git a/apps/files/l10n/uk.js b/apps/files/l10n/uk.js index a800b46858d..f471afe54e7 100644 --- a/apps/files/l10n/uk.js +++ b/apps/files/l10n/uk.js @@ -124,7 +124,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Назви стовпців з кнопками можна впорядковувати", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Список не подається повністю з міркувань обчислювальних потужностей. Файли показуватимуться під час прокручування списку.", "File not found" : "Файл не знайдено", - "{count} selected" : "{count} вибрано", + "_{count} selected_::_{count} selected_" : ["Вибрано {count}","Вибрано {count}","Вибрано {count} ","Вибрано {count} "], "{usedQuotaByte} used" : "{usedQuotaByte} використано", "{used} of {quota} used" : "Використано {used} із {quota}", "{relative}% used" : "{relative}% використано", diff --git a/apps/files/l10n/uk.json b/apps/files/l10n/uk.json index 0e58cbd39aa..f44dd661ca8 100644 --- a/apps/files/l10n/uk.json +++ b/apps/files/l10n/uk.json @@ -122,7 +122,7 @@ "Column headers with buttons are sortable." : "Назви стовпців з кнопками можна впорядковувати", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Список не подається повністю з міркувань обчислювальних потужностей. Файли показуватимуться під час прокручування списку.", "File not found" : "Файл не знайдено", - "{count} selected" : "{count} вибрано", + "_{count} selected_::_{count} selected_" : ["Вибрано {count}","Вибрано {count}","Вибрано {count} ","Вибрано {count} "], "{usedQuotaByte} used" : "{usedQuotaByte} використано", "{used} of {quota} used" : "Використано {used} із {quota}", "{relative}% used" : "{relative}% використано", diff --git a/apps/files/l10n/vi.js b/apps/files/l10n/vi.js index c7730a797e1..f2dcda9a650 100644 --- a/apps/files/l10n/vi.js +++ b/apps/files/l10n/vi.js @@ -105,7 +105,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "Tiêu đề cột có thể sắp xếp được.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Danh sách này không được hiển thị đầy đủ để tăng hiệu năng. Các tập tin sẽ được hiển thị khi bạn điều hướng qua danh sách.", "File not found" : "Không tìm thấy tập tin", - "{count} selected" : "đã chọn {count} ", "{usedQuotaByte} used" : "{usedQuotaByte} đã được sử dụng", "{used} of {quota} used" : "{used} trong {quota} đã được sử dụng", "{relative}% used" : "đã sử dụng {relative}%", diff --git a/apps/files/l10n/vi.json b/apps/files/l10n/vi.json index ebb4a3ae9e1..4cabf258101 100644 --- a/apps/files/l10n/vi.json +++ b/apps/files/l10n/vi.json @@ -103,7 +103,6 @@ "Column headers with buttons are sortable." : "Tiêu đề cột có thể sắp xếp được.", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Danh sách này không được hiển thị đầy đủ để tăng hiệu năng. Các tập tin sẽ được hiển thị khi bạn điều hướng qua danh sách.", "File not found" : "Không tìm thấy tập tin", - "{count} selected" : "đã chọn {count} ", "{usedQuotaByte} used" : "{usedQuotaByte} đã được sử dụng", "{used} of {quota} used" : "{used} trong {quota} đã được sử dụng", "{relative}% used" : "đã sử dụng {relative}%", diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js index 66cd6bc7bdd..a6e951b09d9 100644 --- a/apps/files/l10n/zh_CN.js +++ b/apps/files/l10n/zh_CN.js @@ -124,7 +124,6 @@ OC.L10N.register( "Column headers with buttons are sortable." : "带有按钮的列标题可进行排序。", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "出于性能考虑,此列表未完全呈现。文件将在您浏览列表时呈现。", "File not found" : "文件未找到", - "{count} selected" : "已选中 {count}", "{usedQuotaByte} used" : "{usedQuotaByte} 已使用", "{used} of {quota} used" : "已使用 {used} / {quota}", "{relative}% used" : "{relative}% 已使用", diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json index 7fa07ebcbcf..b19f085b8cf 100644 --- a/apps/files/l10n/zh_CN.json +++ b/apps/files/l10n/zh_CN.json @@ -122,7 +122,6 @@ "Column headers with buttons are sortable." : "带有按钮的列标题可进行排序。", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "出于性能考虑,此列表未完全呈现。文件将在您浏览列表时呈现。", "File not found" : "文件未找到", - "{count} selected" : "已选中 {count}", "{usedQuotaByte} used" : "{usedQuotaByte} 已使用", "{used} of {quota} used" : "已使用 {used} / {quota}", "{relative}% used" : "{relative}% 已使用", diff --git a/apps/files/l10n/zh_HK.js b/apps/files/l10n/zh_HK.js index 650ec7a5511..1ed2bb1cb4f 100644 --- a/apps/files/l10n/zh_HK.js +++ b/apps/files/l10n/zh_HK.js @@ -124,7 +124,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "具有按鈕的縱列標題可排序。", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "出於性能考慮,此清單未完全呈現。檔案將在您瀏覽清單時呈現。", "File not found" : "找不到檔案", - "{count} selected" : "已選擇 {count} 項", + "_{count} selected_::_{count} selected_" : ["已選擇 {count} 項"], "{usedQuotaByte} used" : "已使用 {usedQuotaByte} ", "{used} of {quota} used" : "已使用 {quota} 當中的 {used}", "{relative}% used" : "已使用 {relative}%", diff --git a/apps/files/l10n/zh_HK.json b/apps/files/l10n/zh_HK.json index 60bfa5bab26..b02c2d70d50 100644 --- a/apps/files/l10n/zh_HK.json +++ b/apps/files/l10n/zh_HK.json @@ -122,7 +122,7 @@ "Column headers with buttons are sortable." : "具有按鈕的縱列標題可排序。", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "出於性能考慮,此清單未完全呈現。檔案將在您瀏覽清單時呈現。", "File not found" : "找不到檔案", - "{count} selected" : "已選擇 {count} 項", + "_{count} selected_::_{count} selected_" : ["已選擇 {count} 項"], "{usedQuotaByte} used" : "已使用 {usedQuotaByte} ", "{used} of {quota} used" : "已使用 {quota} 當中的 {used}", "{relative}% used" : "已使用 {relative}%", diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js index 960e6ec7a8c..9ada2759aa1 100644 --- a/apps/files/l10n/zh_TW.js +++ b/apps/files/l10n/zh_TW.js @@ -124,7 +124,7 @@ OC.L10N.register( "Column headers with buttons are sortable." : "帶有按鈕的欄位標頭為可排序。", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "出於效能考量,此清單未完全呈現。檔案將在您瀏覽清單時呈現。", "File not found" : "找不到檔案", - "{count} selected" : "已選取 {count} 個", + "_{count} selected_::_{count} selected_" : ["已選取 {count} 個"], "{usedQuotaByte} used" : "已使用 {usedQuotaByte}", "{used} of {quota} used" : "已使用 {used},共 {quota}", "{relative}% used" : "已使用 {relative}%", diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json index a331632097a..4524c884385 100644 --- a/apps/files/l10n/zh_TW.json +++ b/apps/files/l10n/zh_TW.json @@ -122,7 +122,7 @@ "Column headers with buttons are sortable." : "帶有按鈕的欄位標頭為可排序。", "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "出於效能考量,此清單未完全呈現。檔案將在您瀏覽清單時呈現。", "File not found" : "找不到檔案", - "{count} selected" : "已選取 {count} 個", + "_{count} selected_::_{count} selected_" : ["已選取 {count} 個"], "{usedQuotaByte} used" : "已使用 {usedQuotaByte}", "{used} of {quota} used" : "已使用 {used},共 {quota}", "{relative}% used" : "已使用 {relative}%", diff --git a/apps/files/src/components/FilesListVirtual.vue b/apps/files/src/components/FilesListVirtual.vue index 8fdc87b154c..feb4b61c53e 100644 --- a/apps/files/src/components/FilesListVirtual.vue +++ b/apps/files/src/components/FilesListVirtual.vue @@ -21,7 +21,9 @@ </template> <template v-if="!isNoneSelected" #header-overlay> - <span class="files-list__selected">{{ t('files', '{count} selected', { count: selectedNodes.length }) }}</span> + <span class="files-list__selected"> + {{ n('files', '{count} selected', '{count} selected', selectedNodes.length, { count: selectedNodes.length }) }} + </span> <FilesListTableHeaderActions :current-view="currentView" :selected-nodes="selectedNodes" /> </template> @@ -68,7 +70,7 @@ import type { Location } from 'vue-router' import { Folder, Permission, View, getFileActions, FileType } from '@nextcloud/files' import { showError } from '@nextcloud/dialogs' import { subscribe, unsubscribe } from '@nextcloud/event-bus' -import { translate as t } from '@nextcloud/l10n' +import { n, t } from '@nextcloud/l10n' import { useHotKey } from '@nextcloud/vue/composables/useHotKey' import { defineComponent } from 'vue' @@ -140,6 +142,7 @@ export default defineComponent({ selectionStore, userConfigStore, + n, t, } }, diff --git a/apps/files/src/views/FilesList.vue b/apps/files/src/views/FilesList.vue index b335737c4dd..60791a2b527 100644 --- a/apps/files/src/views/FilesList.vue +++ b/apps/files/src/views/FilesList.vue @@ -483,13 +483,6 @@ export default defineComponent({ watch: { /** - * Update the window title to match the page heading - */ - pageHeading() { - document.title = `${this.pageHeading} - ${getCapabilities().theming?.name ?? 'Nextcloud'}` - }, - - /** * Handle rendering the custom empty view * @param show The current state if the custom empty view should be rendered */ diff --git a/apps/files/src/views/TemplatePicker.vue b/apps/files/src/views/TemplatePicker.vue index 2682570bd5d..cddacc863e1 100644 --- a/apps/files/src/views/TemplatePicker.vue +++ b/apps/files/src/views/TemplatePicker.vue @@ -275,7 +275,13 @@ export default defineComponent({ async onSubmit() { const fileId = this.selectedTemplate?.fileid - const fields = await getTemplateFields(fileId) + + // Only request field extraction if there is a valid template + // selected and it's not the blank template + let fields = [] + if (fileId && fileId !== this.emptyTemplate.fileid) { + fields = await getTemplateFields(fileId) + } if (fields.length > 0) { spawnDialog(TemplateFiller, { diff --git a/apps/files_external/l10n/pt_BR.js b/apps/files_external/l10n/pt_BR.js index 233814a6abc..c1f7cff9a1d 100644 --- a/apps/files_external/l10n/pt_BR.js +++ b/apps/files_external/l10n/pt_BR.js @@ -52,7 +52,7 @@ OC.L10N.register( "RSA private key" : "Chave privada RSA", "Private key" : "Chave privada", "Kerberos default realm, defaults to \"WORKGROUP\"" : "Reino padrão do Kerberos, o padrão é \"WORKGROUP\"", - "Kerberos ticket Apache mode" : "Modo Apache de Ticket Kerberos", + "Kerberos ticket Apache mode" : "Modo Apache de ticket Kerberos", "Kerberos ticket" : "Ticket Kerberos", "Amazon S3" : "Amazon S3", "Bucket" : "Cesta", @@ -82,9 +82,9 @@ OC.L10N.register( "Share" : "Compartilhar", "Show hidden files" : "Mostrar arquivos ocultos", "Case sensitive file system" : "Sistema de arquivos diferenciando maiúsculas/minúsculas", - "Disabling it will allow to use a case insensitive file system, but comes with a performance penalty" : "Desativá-lo permitirá usar um sistema de arquivos que não diferencia maiúsculas de minúsculas, mas acarretará uma penalidade de desempenho", + "Disabling it will allow to use a case insensitive file system, but comes with a performance penalty" : "Desativar está opção permitirá usar um sistema de arquivos que não diferencia maiúsculas de minúsculas, mas acarretará uma penalidade de desempenho", "Verify ACL access when listing files" : "Verifique o acesso da ACL ao listar arquivos", - "Check the ACL's of each file or folder inside a directory to filter out items where the account has no read permissions, comes with a performance penalty" : "Verifique as ACLs de cada arquivo ou pasta dentro de um diretório para filtrar itens onde a conta não tem permissões de leitura, o que acarreta uma penalidade de desempenho", + "Check the ACL's of each file or folder inside a directory to filter out items where the account has no read permissions, comes with a performance penalty" : "Verificar as ACLs de cada arquivo ou pasta dentro de um diretório para filtrar itens onde a conta não tem permissões de leitura, tem uma penalidade de desempenho", "Timeout" : "Tempo limite", "SMB/CIFS using OC login" : "SMB/CIFS usando login OC", "Login as share" : "Faça login como compartilhamento", @@ -97,7 +97,7 @@ OC.L10N.register( "External storage" : "Armazenamento Externo", "External storage support" : "Suporte a armazenamento externo", "Adds basic external storage support" : "Adiciona suporte básico para armazenamento externo", - "This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, other Nextcloud servers, WebDAV servers, and more. Administration can choose which types of storage to enable and can mount these storage locations for an account, a group, or the entire system. Users will see a new folder appear in their root Nextcloud directory, which they can access and use like any other Nextcloud folder. External storage also allows people to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file.\n\nExternal storage can be configured using the GUI or at the command line. This second option provides the administration with more flexibility for configuring bulk external storage mounts and setting mount priorities. More information is available in the external storage GUI documentation and the external storage Configuration File documentation." : "Este aplicativo permite que os administradores configurem conexões com provedores de armazenamento externos, como servidores FTP, armazenamentos de objetos S3 ou SWIFT, outros servidores Nextcloud, servidores WebDAV e muito mais. A administração pode escolher quais tipos de armazenamento ativar e pode montar esses locais de armazenamento para uma conta, um grupo ou todo o sistema. Os usuários verão uma nova pasta aparecer em seu diretório raiz Nextcloud, que eles podem acessar e usar como qualquer outra pasta Nextcloud. O armazenamento externo também permite que as pessoas compartilhem arquivos armazenados nesses locais externos. Nesses casos, as credenciais do proprietário do arquivo são usadas quando o destinatário solicita o arquivo do armazenamento externo, garantindo assim que o destinatário possa acessar o arquivo compartilhado. \n\nO armazenamento externo pode ser configurado usando a GUI ou na linha de comando. Esta segunda opção fornece à administração mais flexibilidade para configurar montagens de armazenamento externo em massa e definir prioridades de montagem. Mais informações estão disponíveis na documentação da GUI de armazenamento externo e na documentação do arquivo de configuração de armazenamento externo.", + "This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, other Nextcloud servers, WebDAV servers, and more. Administration can choose which types of storage to enable and can mount these storage locations for an account, a group, or the entire system. Users will see a new folder appear in their root Nextcloud directory, which they can access and use like any other Nextcloud folder. External storage also allows people to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file.\n\nExternal storage can be configured using the GUI or at the command line. This second option provides the administration with more flexibility for configuring bulk external storage mounts and setting mount priorities. More information is available in the external storage GUI documentation and the external storage Configuration File documentation." : "Este aplicativo permite que os administradores configurem conexões com provedores de armazenamento externos, como servidores FTP, armazenamentos de objetos S3 ou SWIFT, outros servidores Nextcloud, servidores WebDAV e muito mais. A administração pode escolher quais tipos de armazenamento a serem ativados e pode montar estes locais de armazenamento para uma conta, um grupo ou todo o sistema. Os usuários verão uma nova pasta aparecer em seu diretório raiz Nextcloud, que eles podem acessar e usar como qualquer outra pasta do Nextcloud. O armazenamento externo também permite que as pessoas compartilhem arquivos armazenados nestes locais externos. Nesses casos, as credenciais do proprietário do arquivo são usadas quando o destinatário solicita o arquivo do armazenamento externo, garantindo assim que o destinatário possa acessar o arquivo compartilhado. \n\nO armazenamento externo pode ser configurado usando a GUI ou na linha de comando. Esta segunda opção fornece à administração mais flexibilidade para configurar montagens de armazenamento externo em massa e definir prioridades de montagem. Mais informações estão disponíveis na documentação da GUI de armazenamento externo e na documentação do arquivo de configuração de armazenamento externo.", "Confirm" : "Confirmar", "Storage credentials" : "Credenciais de armazenamento", "To access the storage, you need to provide the authentication credentials." : "Para acessar o armazenamento, você precisa fornecer as credenciais de autenticação.", diff --git a/apps/files_external/l10n/pt_BR.json b/apps/files_external/l10n/pt_BR.json index 6002404e464..d4110a66176 100644 --- a/apps/files_external/l10n/pt_BR.json +++ b/apps/files_external/l10n/pt_BR.json @@ -50,7 +50,7 @@ "RSA private key" : "Chave privada RSA", "Private key" : "Chave privada", "Kerberos default realm, defaults to \"WORKGROUP\"" : "Reino padrão do Kerberos, o padrão é \"WORKGROUP\"", - "Kerberos ticket Apache mode" : "Modo Apache de Ticket Kerberos", + "Kerberos ticket Apache mode" : "Modo Apache de ticket Kerberos", "Kerberos ticket" : "Ticket Kerberos", "Amazon S3" : "Amazon S3", "Bucket" : "Cesta", @@ -80,9 +80,9 @@ "Share" : "Compartilhar", "Show hidden files" : "Mostrar arquivos ocultos", "Case sensitive file system" : "Sistema de arquivos diferenciando maiúsculas/minúsculas", - "Disabling it will allow to use a case insensitive file system, but comes with a performance penalty" : "Desativá-lo permitirá usar um sistema de arquivos que não diferencia maiúsculas de minúsculas, mas acarretará uma penalidade de desempenho", + "Disabling it will allow to use a case insensitive file system, but comes with a performance penalty" : "Desativar está opção permitirá usar um sistema de arquivos que não diferencia maiúsculas de minúsculas, mas acarretará uma penalidade de desempenho", "Verify ACL access when listing files" : "Verifique o acesso da ACL ao listar arquivos", - "Check the ACL's of each file or folder inside a directory to filter out items where the account has no read permissions, comes with a performance penalty" : "Verifique as ACLs de cada arquivo ou pasta dentro de um diretório para filtrar itens onde a conta não tem permissões de leitura, o que acarreta uma penalidade de desempenho", + "Check the ACL's of each file or folder inside a directory to filter out items where the account has no read permissions, comes with a performance penalty" : "Verificar as ACLs de cada arquivo ou pasta dentro de um diretório para filtrar itens onde a conta não tem permissões de leitura, tem uma penalidade de desempenho", "Timeout" : "Tempo limite", "SMB/CIFS using OC login" : "SMB/CIFS usando login OC", "Login as share" : "Faça login como compartilhamento", @@ -95,7 +95,7 @@ "External storage" : "Armazenamento Externo", "External storage support" : "Suporte a armazenamento externo", "Adds basic external storage support" : "Adiciona suporte básico para armazenamento externo", - "This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, other Nextcloud servers, WebDAV servers, and more. Administration can choose which types of storage to enable and can mount these storage locations for an account, a group, or the entire system. Users will see a new folder appear in their root Nextcloud directory, which they can access and use like any other Nextcloud folder. External storage also allows people to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file.\n\nExternal storage can be configured using the GUI or at the command line. This second option provides the administration with more flexibility for configuring bulk external storage mounts and setting mount priorities. More information is available in the external storage GUI documentation and the external storage Configuration File documentation." : "Este aplicativo permite que os administradores configurem conexões com provedores de armazenamento externos, como servidores FTP, armazenamentos de objetos S3 ou SWIFT, outros servidores Nextcloud, servidores WebDAV e muito mais. A administração pode escolher quais tipos de armazenamento ativar e pode montar esses locais de armazenamento para uma conta, um grupo ou todo o sistema. Os usuários verão uma nova pasta aparecer em seu diretório raiz Nextcloud, que eles podem acessar e usar como qualquer outra pasta Nextcloud. O armazenamento externo também permite que as pessoas compartilhem arquivos armazenados nesses locais externos. Nesses casos, as credenciais do proprietário do arquivo são usadas quando o destinatário solicita o arquivo do armazenamento externo, garantindo assim que o destinatário possa acessar o arquivo compartilhado. \n\nO armazenamento externo pode ser configurado usando a GUI ou na linha de comando. Esta segunda opção fornece à administração mais flexibilidade para configurar montagens de armazenamento externo em massa e definir prioridades de montagem. Mais informações estão disponíveis na documentação da GUI de armazenamento externo e na documentação do arquivo de configuração de armazenamento externo.", + "This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, other Nextcloud servers, WebDAV servers, and more. Administration can choose which types of storage to enable and can mount these storage locations for an account, a group, or the entire system. Users will see a new folder appear in their root Nextcloud directory, which they can access and use like any other Nextcloud folder. External storage also allows people to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file.\n\nExternal storage can be configured using the GUI or at the command line. This second option provides the administration with more flexibility for configuring bulk external storage mounts and setting mount priorities. More information is available in the external storage GUI documentation and the external storage Configuration File documentation." : "Este aplicativo permite que os administradores configurem conexões com provedores de armazenamento externos, como servidores FTP, armazenamentos de objetos S3 ou SWIFT, outros servidores Nextcloud, servidores WebDAV e muito mais. A administração pode escolher quais tipos de armazenamento a serem ativados e pode montar estes locais de armazenamento para uma conta, um grupo ou todo o sistema. Os usuários verão uma nova pasta aparecer em seu diretório raiz Nextcloud, que eles podem acessar e usar como qualquer outra pasta do Nextcloud. O armazenamento externo também permite que as pessoas compartilhem arquivos armazenados nestes locais externos. Nesses casos, as credenciais do proprietário do arquivo são usadas quando o destinatário solicita o arquivo do armazenamento externo, garantindo assim que o destinatário possa acessar o arquivo compartilhado. \n\nO armazenamento externo pode ser configurado usando a GUI ou na linha de comando. Esta segunda opção fornece à administração mais flexibilidade para configurar montagens de armazenamento externo em massa e definir prioridades de montagem. Mais informações estão disponíveis na documentação da GUI de armazenamento externo e na documentação do arquivo de configuração de armazenamento externo.", "Confirm" : "Confirmar", "Storage credentials" : "Credenciais de armazenamento", "To access the storage, you need to provide the authentication credentials." : "Para acessar o armazenamento, você precisa fornecer as credenciais de autenticação.", diff --git a/apps/files_external/lib/Lib/Storage/SMB.php b/apps/files_external/lib/Lib/Storage/SMB.php index fc1f9b9ecd1..fe5f3adb25e 100644 --- a/apps/files_external/lib/Lib/Storage/SMB.php +++ b/apps/files_external/lib/Lib/Storage/SMB.php @@ -198,7 +198,7 @@ class SMB extends Common implements INotifyStorage { try { $acls = $file->getAcls(); } catch (Exception $e) { - $this->logger->error('Error while getting file acls', ['exception' => $e]); + $this->logger->warning('Error while getting file acls', ['exception' => $e]); return null; } foreach ($acls as $user => $acl) { @@ -426,6 +426,7 @@ class SMB extends Common implements INotifyStorage { case 'r': case 'rb': if (!$this->file_exists($path)) { + $this->logger->warning('Failed to open ' . $path . ' on ' . $this->getId() . ', file doesn\'t exist.'); return false; } return $this->share->read($fullPath); @@ -453,11 +454,13 @@ class SMB extends Common implements INotifyStorage { } if ($this->file_exists($path)) { if (!$this->isUpdatable($path)) { + $this->logger->warning('Failed to open ' . $path . ' on ' . $this->getId() . ', file not updatable.'); return false; } $tmpFile = $this->getCachedFile($path); } else { if (!$this->isCreatable(dirname($path))) { + $this->logger->warning('Failed to open ' . $path . ' on ' . $this->getId() . ', parent directory not writable.'); return false; } $tmpFile = \OCP\Server::get(ITempManager::class)->getTemporaryFile($ext); @@ -472,13 +475,16 @@ class SMB extends Common implements INotifyStorage { } return false; } catch (NotFoundException $e) { + $this->logger->warning('Failed to open ' . $path . ' on ' . $this->getId() . ', not found.', ['exception' => $e]); return false; } catch (ForbiddenException $e) { + $this->logger->warning('Failed to open ' . $path . ' on ' . $this->getId() . ', forbidden.', ['exception' => $e]); return false; } catch (OutOfSpaceException $e) { + $this->logger->warning('Failed to open ' . $path . ' on ' . $this->getId() . ', out of space.', ['exception' => $e]); throw new EntityTooLargeException('not enough available space to create file', 0, $e); } catch (ConnectException $e) { - $this->logger->error('Error while opening file', ['exception' => $e]); + $this->logger->error('Error while opening file ' . $path . ' on ' . $this->getId(), ['exception' => $e]); throw new StorageNotAvailableException($e->getMessage(), (int)$e->getCode(), $e); } } diff --git a/apps/files_sharing/l10n/ar.js b/apps/files_sharing/l10n/ar.js index 22a83237be9..508fe55aa0a 100644 --- a/apps/files_sharing/l10n/ar.js +++ b/apps/files_sharing/l10n/ar.js @@ -185,7 +185,6 @@ OC.L10N.register( "Set default folder for accepted shares" : "تعيين المجلد الافتراضي للمشاركات المقبولة", "Reset" : "إعادة تعيين", "Reset folder to system default" : "إعادة تعيين المجلد إلى افتراضات النظام", - "Share expiration: " : "تاريخ انتهاء صلاحية المشاركة:", "Share Expiration" : "تاريخ انتهاء صلاحية المشاركة", "group" : "مجموعة", "conversation" : "محادثة", diff --git a/apps/files_sharing/l10n/ar.json b/apps/files_sharing/l10n/ar.json index 1a83b1816d2..540daa96c91 100644 --- a/apps/files_sharing/l10n/ar.json +++ b/apps/files_sharing/l10n/ar.json @@ -183,7 +183,6 @@ "Set default folder for accepted shares" : "تعيين المجلد الافتراضي للمشاركات المقبولة", "Reset" : "إعادة تعيين", "Reset folder to system default" : "إعادة تعيين المجلد إلى افتراضات النظام", - "Share expiration: " : "تاريخ انتهاء صلاحية المشاركة:", "Share Expiration" : "تاريخ انتهاء صلاحية المشاركة", "group" : "مجموعة", "conversation" : "محادثة", diff --git a/apps/files_sharing/l10n/ca.js b/apps/files_sharing/l10n/ca.js index 0726c8ee694..a8c78dd12c3 100644 --- a/apps/files_sharing/l10n/ca.js +++ b/apps/files_sharing/l10n/ca.js @@ -185,7 +185,6 @@ OC.L10N.register( "Set default folder for accepted shares" : "Estableix la carpeta per defecte per als elements compartits acceptats", "Reset" : "Reinicialitza", "Reset folder to system default" : "Reinicialitza la carpeta per defecte del sistema", - "Share expiration: " : "Fi de compartició:", "Share Expiration" : "Fi de compartició", "group" : "grup", "conversation" : "conversa", diff --git a/apps/files_sharing/l10n/ca.json b/apps/files_sharing/l10n/ca.json index a74a8ff8d2b..dd6b9279650 100644 --- a/apps/files_sharing/l10n/ca.json +++ b/apps/files_sharing/l10n/ca.json @@ -183,7 +183,6 @@ "Set default folder for accepted shares" : "Estableix la carpeta per defecte per als elements compartits acceptats", "Reset" : "Reinicialitza", "Reset folder to system default" : "Reinicialitza la carpeta per defecte del sistema", - "Share expiration: " : "Fi de compartició:", "Share Expiration" : "Fi de compartició", "group" : "grup", "conversation" : "conversa", diff --git a/apps/files_sharing/l10n/cs.js b/apps/files_sharing/l10n/cs.js index 831d2bfb086..8753dc54d64 100644 --- a/apps/files_sharing/l10n/cs.js +++ b/apps/files_sharing/l10n/cs.js @@ -185,7 +185,7 @@ OC.L10N.register( "Set default folder for accepted shares" : "Nastavit výchozí složku pro přijatá sdílení", "Reset" : "Vrátit na výchozí hodnoty", "Reset folder to system default" : "Resetovat složku na systémovou výchozí", - "Share expiration: " : "Skončení platnosti sdílení:", + "Share expiration: {date}" : "Skončení platnosti sdílení: {date}", "Share Expiration" : "Skončení platnosti sdílení", "group" : "skupina", "conversation" : "konverzace", @@ -310,6 +310,7 @@ OC.L10N.register( "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Sdílení, která nejsou součástí interních nebo externích sdílení. Toto mohou být sdílení z aplikací nebo jiných zdrojů.", "Share with accounts, teams, federated cloud IDs" : "Nasdílejte účtům, týmům, identifikátorům v rámci federovaného cloudu", "Share with accounts and teams" : "Nasdílet účtům a týmům", + "Federated cloud ID" : "Identifikátor v rámci federovaného cloudu", "Email, federated cloud ID" : "E-mail, identif. federovaného cloudu", "Unable to load the shares list" : "Nedaří se načíst seznam sdílení", "Expires {relativetime}" : "Platnost končí {relativetime}", diff --git a/apps/files_sharing/l10n/cs.json b/apps/files_sharing/l10n/cs.json index 4dd4be7d9a1..50059aea129 100644 --- a/apps/files_sharing/l10n/cs.json +++ b/apps/files_sharing/l10n/cs.json @@ -183,7 +183,7 @@ "Set default folder for accepted shares" : "Nastavit výchozí složku pro přijatá sdílení", "Reset" : "Vrátit na výchozí hodnoty", "Reset folder to system default" : "Resetovat složku na systémovou výchozí", - "Share expiration: " : "Skončení platnosti sdílení:", + "Share expiration: {date}" : "Skončení platnosti sdílení: {date}", "Share Expiration" : "Skončení platnosti sdílení", "group" : "skupina", "conversation" : "konverzace", @@ -308,6 +308,7 @@ "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Sdílení, která nejsou součástí interních nebo externích sdílení. Toto mohou být sdílení z aplikací nebo jiných zdrojů.", "Share with accounts, teams, federated cloud IDs" : "Nasdílejte účtům, týmům, identifikátorům v rámci federovaného cloudu", "Share with accounts and teams" : "Nasdílet účtům a týmům", + "Federated cloud ID" : "Identifikátor v rámci federovaného cloudu", "Email, federated cloud ID" : "E-mail, identif. federovaného cloudu", "Unable to load the shares list" : "Nedaří se načíst seznam sdílení", "Expires {relativetime}" : "Platnost končí {relativetime}", diff --git a/apps/files_sharing/l10n/da.js b/apps/files_sharing/l10n/da.js index 95b5cc4a936..ca9f27e3db3 100644 --- a/apps/files_sharing/l10n/da.js +++ b/apps/files_sharing/l10n/da.js @@ -185,7 +185,6 @@ OC.L10N.register( "Set default folder for accepted shares" : "Angiv standard mappe for accepterede delinger", "Reset" : "Nulstil", "Reset folder to system default" : "Nulstil mappe til systemstandard", - "Share expiration: " : "Delings udløb:", "Share Expiration" : "Delings Udløb", "group" : "gruppe", "conversation" : "samtale", diff --git a/apps/files_sharing/l10n/da.json b/apps/files_sharing/l10n/da.json index 7f3d99e325c..af4be1e8560 100644 --- a/apps/files_sharing/l10n/da.json +++ b/apps/files_sharing/l10n/da.json @@ -183,7 +183,6 @@ "Set default folder for accepted shares" : "Angiv standard mappe for accepterede delinger", "Reset" : "Nulstil", "Reset folder to system default" : "Nulstil mappe til systemstandard", - "Share expiration: " : "Delings udløb:", "Share Expiration" : "Delings Udløb", "group" : "gruppe", "conversation" : "samtale", diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js index 9ddb00040ab..0373e006838 100644 --- a/apps/files_sharing/l10n/de.js +++ b/apps/files_sharing/l10n/de.js @@ -185,7 +185,7 @@ OC.L10N.register( "Set default folder for accepted shares" : "Standardordner für angenommene Freigaben", "Reset" : "Zurücksetzen", "Reset folder to system default" : "Ordner auf Systemstandard zurücksetzen", - "Share expiration: " : "Freigabe-Ablaufdatum:", + "Share expiration: {date}" : "Freigabe-Ablaufdatum: {date}", "Share Expiration" : "Freigabe-Ablaufdatum", "group" : "Gruppe", "conversation" : "Unterhaltung", @@ -310,6 +310,7 @@ OC.L10N.register( "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Freigaben, die nicht zu internen oder externen Freigaben gehören. Dies können Freigaben von Apps oder anderen Quellen sein.", "Share with accounts, teams, federated cloud IDs" : "Teilen mit Konten, Teams, Federated-Cloud-IDs", "Share with accounts and teams" : "Teile mit Konten und Teams", + "Federated cloud ID" : "Federated-Cloud-ID", "Email, federated cloud ID" : "Name, Federated-Cloud-ID", "Unable to load the shares list" : "Liste der Freigaben konnte nicht geladen werden", "Expires {relativetime}" : "Läuft {relativetime} ab", diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json index 21355f65b7d..056ae0275de 100644 --- a/apps/files_sharing/l10n/de.json +++ b/apps/files_sharing/l10n/de.json @@ -183,7 +183,7 @@ "Set default folder for accepted shares" : "Standardordner für angenommene Freigaben", "Reset" : "Zurücksetzen", "Reset folder to system default" : "Ordner auf Systemstandard zurücksetzen", - "Share expiration: " : "Freigabe-Ablaufdatum:", + "Share expiration: {date}" : "Freigabe-Ablaufdatum: {date}", "Share Expiration" : "Freigabe-Ablaufdatum", "group" : "Gruppe", "conversation" : "Unterhaltung", @@ -308,6 +308,7 @@ "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Freigaben, die nicht zu internen oder externen Freigaben gehören. Dies können Freigaben von Apps oder anderen Quellen sein.", "Share with accounts, teams, federated cloud IDs" : "Teilen mit Konten, Teams, Federated-Cloud-IDs", "Share with accounts and teams" : "Teile mit Konten und Teams", + "Federated cloud ID" : "Federated-Cloud-ID", "Email, federated cloud ID" : "Name, Federated-Cloud-ID", "Unable to load the shares list" : "Liste der Freigaben konnte nicht geladen werden", "Expires {relativetime}" : "Läuft {relativetime} ab", diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js index 49c47b3bb3f..f20c9209224 100644 --- a/apps/files_sharing/l10n/de_DE.js +++ b/apps/files_sharing/l10n/de_DE.js @@ -185,7 +185,7 @@ OC.L10N.register( "Set default folder for accepted shares" : "Standardordner für angenommene Freigaben", "Reset" : "Zurücksetzen", "Reset folder to system default" : "Ordner auf Systemstandard zurücksetzen", - "Share expiration: " : "Freigabe-Ablaufdatum:", + "Share expiration: {date}" : "Freigabe-Ablaufdatum: {date}", "Share Expiration" : "Freigabe-Ablaufdatum", "group" : "Gruppe", "conversation" : "Unterhaltung", @@ -310,6 +310,7 @@ OC.L10N.register( "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Freigaben, die nicht zu internen oder externen Freigaben gehören. Dies können Freigaben von Apps oder anderen Quellen sein.", "Share with accounts, teams, federated cloud IDs" : "Teilen mit Konten, Teams, Federated-Cloud-IDs", "Share with accounts and teams" : "Teile mit Konten und Teams", + "Federated cloud ID" : "Federated-Cloud-ID", "Email, federated cloud ID" : "Name, Federated-Cloud-ID", "Unable to load the shares list" : "Liste der Freigaben kann nicht geladen werden", "Expires {relativetime}" : "Läuft {relativetime} ab", diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json index 5807acc7d27..14112761270 100644 --- a/apps/files_sharing/l10n/de_DE.json +++ b/apps/files_sharing/l10n/de_DE.json @@ -183,7 +183,7 @@ "Set default folder for accepted shares" : "Standardordner für angenommene Freigaben", "Reset" : "Zurücksetzen", "Reset folder to system default" : "Ordner auf Systemstandard zurücksetzen", - "Share expiration: " : "Freigabe-Ablaufdatum:", + "Share expiration: {date}" : "Freigabe-Ablaufdatum: {date}", "Share Expiration" : "Freigabe-Ablaufdatum", "group" : "Gruppe", "conversation" : "Unterhaltung", @@ -308,6 +308,7 @@ "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Freigaben, die nicht zu internen oder externen Freigaben gehören. Dies können Freigaben von Apps oder anderen Quellen sein.", "Share with accounts, teams, federated cloud IDs" : "Teilen mit Konten, Teams, Federated-Cloud-IDs", "Share with accounts and teams" : "Teile mit Konten und Teams", + "Federated cloud ID" : "Federated-Cloud-ID", "Email, federated cloud ID" : "Name, Federated-Cloud-ID", "Unable to load the shares list" : "Liste der Freigaben kann nicht geladen werden", "Expires {relativetime}" : "Läuft {relativetime} ab", diff --git a/apps/files_sharing/l10n/en_GB.js b/apps/files_sharing/l10n/en_GB.js index 52957724966..e598696c8f7 100644 --- a/apps/files_sharing/l10n/en_GB.js +++ b/apps/files_sharing/l10n/en_GB.js @@ -185,7 +185,6 @@ OC.L10N.register( "Set default folder for accepted shares" : "Set default folder for accepted shares", "Reset" : "Reset", "Reset folder to system default" : "Reset folder to system default", - "Share expiration: " : "Share expiration: ", "Share Expiration" : "Share Expiration", "group" : "group", "conversation" : "conversation", diff --git a/apps/files_sharing/l10n/en_GB.json b/apps/files_sharing/l10n/en_GB.json index 7ef21230f77..9381de9ee74 100644 --- a/apps/files_sharing/l10n/en_GB.json +++ b/apps/files_sharing/l10n/en_GB.json @@ -183,7 +183,6 @@ "Set default folder for accepted shares" : "Set default folder for accepted shares", "Reset" : "Reset", "Reset folder to system default" : "Reset folder to system default", - "Share expiration: " : "Share expiration: ", "Share Expiration" : "Share Expiration", "group" : "group", "conversation" : "conversation", diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js index 575f801d8d8..5cfc57ba88b 100644 --- a/apps/files_sharing/l10n/es.js +++ b/apps/files_sharing/l10n/es.js @@ -185,7 +185,6 @@ OC.L10N.register( "Set default folder for accepted shares" : "Establecer la carpeta por defecto para los recursos compartidos aceptados", "Reset" : "Restaurar", "Reset folder to system default" : "Restaurar la carpeta por defecto del sistema", - "Share expiration: " : "El recurso compartido caduca:", "Share Expiration" : "Caducidad del recurso compartido", "group" : "grupo", "conversation" : "conversación", diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json index ad393fad4b8..976f817256b 100644 --- a/apps/files_sharing/l10n/es.json +++ b/apps/files_sharing/l10n/es.json @@ -183,7 +183,6 @@ "Set default folder for accepted shares" : "Establecer la carpeta por defecto para los recursos compartidos aceptados", "Reset" : "Restaurar", "Reset folder to system default" : "Restaurar la carpeta por defecto del sistema", - "Share expiration: " : "El recurso compartido caduca:", "Share Expiration" : "Caducidad del recurso compartido", "group" : "grupo", "conversation" : "conversación", diff --git a/apps/files_sharing/l10n/et_EE.js b/apps/files_sharing/l10n/et_EE.js index a3bad56072c..b2840f2179b 100644 --- a/apps/files_sharing/l10n/et_EE.js +++ b/apps/files_sharing/l10n/et_EE.js @@ -185,7 +185,7 @@ OC.L10N.register( "Set default folder for accepted shares" : "Määra vastuvõetava jaosmeedia jaoks vaikimisi kaust", "Reset" : "Lähtesta", "Reset folder to system default" : "Kasuta süsteemi vaikimisi kausta", - "Share expiration: " : "Jagamise aegumine:", + "Share expiration: {date}" : "Jagamise aegumine: {date}", "Share Expiration" : "Jagamise aegumine", "group" : "grupp", "conversation" : "vestlus", @@ -310,6 +310,7 @@ OC.L10N.register( "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Jaosmeedia, mis pole sisemise või välise jagamise osa. Näiteks jagamine rakendustest või muudest allikatest.", "Share with accounts, teams, federated cloud IDs" : "Jaga kasutajatega, tiimidega ja liitpilves osalejatega", "Share with accounts and teams" : "Jaga kasutajate ja tiimidega", + "Federated cloud ID" : "Liitpilve tunnus", "Email, federated cloud ID" : "E-posti aadress, liitpilve kasutajatunnus", "Unable to load the shares list" : "Jaosmeedia loendi laadimine ei õnnestu", "Expires {relativetime}" : "Aegub {relativetime}", diff --git a/apps/files_sharing/l10n/et_EE.json b/apps/files_sharing/l10n/et_EE.json index cdefcb9ec02..a8ba5ef57bb 100644 --- a/apps/files_sharing/l10n/et_EE.json +++ b/apps/files_sharing/l10n/et_EE.json @@ -183,7 +183,7 @@ "Set default folder for accepted shares" : "Määra vastuvõetava jaosmeedia jaoks vaikimisi kaust", "Reset" : "Lähtesta", "Reset folder to system default" : "Kasuta süsteemi vaikimisi kausta", - "Share expiration: " : "Jagamise aegumine:", + "Share expiration: {date}" : "Jagamise aegumine: {date}", "Share Expiration" : "Jagamise aegumine", "group" : "grupp", "conversation" : "vestlus", @@ -308,6 +308,7 @@ "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Jaosmeedia, mis pole sisemise või välise jagamise osa. Näiteks jagamine rakendustest või muudest allikatest.", "Share with accounts, teams, federated cloud IDs" : "Jaga kasutajatega, tiimidega ja liitpilves osalejatega", "Share with accounts and teams" : "Jaga kasutajate ja tiimidega", + "Federated cloud ID" : "Liitpilve tunnus", "Email, federated cloud ID" : "E-posti aadress, liitpilve kasutajatunnus", "Unable to load the shares list" : "Jaosmeedia loendi laadimine ei õnnestu", "Expires {relativetime}" : "Aegub {relativetime}", diff --git a/apps/files_sharing/l10n/eu.js b/apps/files_sharing/l10n/eu.js index f3fcb491f2e..c0e6e505efe 100644 --- a/apps/files_sharing/l10n/eu.js +++ b/apps/files_sharing/l10n/eu.js @@ -185,7 +185,6 @@ OC.L10N.register( "Set default folder for accepted shares" : "Ezarri onartutako partekatzeen karpeta lehenetsia", "Reset" : "Berrezarri", "Reset folder to system default" : "Berrezarri karpeta sistemaren balio lehenetsietara", - "Share expiration: " : "Partekatzearen iraungitze-data:", "Share Expiration" : "Partekatzearen iraungitze-data", "group" : "taldea", "conversation" : "elkarrizketa", diff --git a/apps/files_sharing/l10n/eu.json b/apps/files_sharing/l10n/eu.json index c4241ff78f2..d7ab8940a59 100644 --- a/apps/files_sharing/l10n/eu.json +++ b/apps/files_sharing/l10n/eu.json @@ -183,7 +183,6 @@ "Set default folder for accepted shares" : "Ezarri onartutako partekatzeen karpeta lehenetsia", "Reset" : "Berrezarri", "Reset folder to system default" : "Berrezarri karpeta sistemaren balio lehenetsietara", - "Share expiration: " : "Partekatzearen iraungitze-data:", "Share Expiration" : "Partekatzearen iraungitze-data", "group" : "taldea", "conversation" : "elkarrizketa", diff --git a/apps/files_sharing/l10n/fi.js b/apps/files_sharing/l10n/fi.js index c0e070c4834..034c4783428 100644 --- a/apps/files_sharing/l10n/fi.js +++ b/apps/files_sharing/l10n/fi.js @@ -130,7 +130,6 @@ OC.L10N.register( "Set default folder for accepted shares" : "Aseta oletuskansio hyväksytyille jaoille", "Reset" : "Palauta", "Reset folder to system default" : "Palauta kansio järjestelmän oletukseksi", - "Share expiration: " : "Jaon vanhentuminen:", "group" : "ryhmä", "conversation" : "keskustelu", "remote" : "etä", diff --git a/apps/files_sharing/l10n/fi.json b/apps/files_sharing/l10n/fi.json index 98d430eaf3e..f4929f0f06c 100644 --- a/apps/files_sharing/l10n/fi.json +++ b/apps/files_sharing/l10n/fi.json @@ -128,7 +128,6 @@ "Set default folder for accepted shares" : "Aseta oletuskansio hyväksytyille jaoille", "Reset" : "Palauta", "Reset folder to system default" : "Palauta kansio järjestelmän oletukseksi", - "Share expiration: " : "Jaon vanhentuminen:", "group" : "ryhmä", "conversation" : "keskustelu", "remote" : "etä", diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js index 9cf134c583d..81da9461517 100644 --- a/apps/files_sharing/l10n/fr.js +++ b/apps/files_sharing/l10n/fr.js @@ -185,7 +185,6 @@ OC.L10N.register( "Set default folder for accepted shares" : "Définir le dossier par défaut pour les partages acceptés", "Reset" : "Réinitialiser", "Reset folder to system default" : "Réinitialiser le dossier par défaut du système", - "Share expiration: " : "Expiration du partage :", "Share Expiration" : "Expiration du partage", "group" : "groupe", "conversation" : "conversation", diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json index b0fef1cd268..790bf11c931 100644 --- a/apps/files_sharing/l10n/fr.json +++ b/apps/files_sharing/l10n/fr.json @@ -183,7 +183,6 @@ "Set default folder for accepted shares" : "Définir le dossier par défaut pour les partages acceptés", "Reset" : "Réinitialiser", "Reset folder to system default" : "Réinitialiser le dossier par défaut du système", - "Share expiration: " : "Expiration du partage :", "Share Expiration" : "Expiration du partage", "group" : "groupe", "conversation" : "conversation", diff --git a/apps/files_sharing/l10n/ga.js b/apps/files_sharing/l10n/ga.js index 9f05c5c3d42..370c11fb16b 100644 --- a/apps/files_sharing/l10n/ga.js +++ b/apps/files_sharing/l10n/ga.js @@ -185,7 +185,6 @@ OC.L10N.register( "Set default folder for accepted shares" : "Socraigh fillteán réamhshocraithe le haghaidh scaireanna glactha", "Reset" : "Athshocraigh", "Reset folder to system default" : "Athshocraigh an fillteán go réamhshocrú an chórais", - "Share expiration: " : "Éaga scaireanna:", "Share Expiration" : "Comhroinn Éaga", "group" : "grúpa", "conversation" : "comhrá", @@ -379,8 +378,11 @@ OC.L10N.register( "Share note for recipient saved" : "Comhroinn nóta don fhaighteoir sábháilte", "Share password saved" : "Comhroinn pasfhocal sábháilte", "Share permissions saved" : "Sábháladh ceadanna comhroinnte", + "To upload files to {folder}, you need to provide your name first." : "Chun comhaid a uaslódáil chuig {folder}, ní mór duit d'ainm a sholáthar ar dtús.", "Upload files to {folder}" : "Uaslódáil comhaid go {folder}", + "Please confirm your name to upload files to {folder}" : "Deimhnigh d'ainm le do thoil chun comhaid a uaslódáil chuig {folder}", "{ownerDisplayName} shared a folder with you." : "Roinn {ownerDisplayName} fillteán leat.", + "Names must not be empty." : "Ní féidir ainmneacha a bheith folamh.", "Names must not start with a dot." : "Ní mór ainmneacha a bheith ag tosú le ponc.", "\"{char}\" is not allowed inside a name." : "Ní cheadaítear \"{char}\" laistigh d'ainm.", "\"{segment}\" is a reserved name and not allowed." : "Is ainm curtha in áirithe é \"{segment}\" agus ní cheadaítear é.", diff --git a/apps/files_sharing/l10n/ga.json b/apps/files_sharing/l10n/ga.json index 585399cc9fc..f2d50ca88b2 100644 --- a/apps/files_sharing/l10n/ga.json +++ b/apps/files_sharing/l10n/ga.json @@ -183,7 +183,6 @@ "Set default folder for accepted shares" : "Socraigh fillteán réamhshocraithe le haghaidh scaireanna glactha", "Reset" : "Athshocraigh", "Reset folder to system default" : "Athshocraigh an fillteán go réamhshocrú an chórais", - "Share expiration: " : "Éaga scaireanna:", "Share Expiration" : "Comhroinn Éaga", "group" : "grúpa", "conversation" : "comhrá", @@ -377,8 +376,11 @@ "Share note for recipient saved" : "Comhroinn nóta don fhaighteoir sábháilte", "Share password saved" : "Comhroinn pasfhocal sábháilte", "Share permissions saved" : "Sábháladh ceadanna comhroinnte", + "To upload files to {folder}, you need to provide your name first." : "Chun comhaid a uaslódáil chuig {folder}, ní mór duit d'ainm a sholáthar ar dtús.", "Upload files to {folder}" : "Uaslódáil comhaid go {folder}", + "Please confirm your name to upload files to {folder}" : "Deimhnigh d'ainm le do thoil chun comhaid a uaslódáil chuig {folder}", "{ownerDisplayName} shared a folder with you." : "Roinn {ownerDisplayName} fillteán leat.", + "Names must not be empty." : "Ní féidir ainmneacha a bheith folamh.", "Names must not start with a dot." : "Ní mór ainmneacha a bheith ag tosú le ponc.", "\"{char}\" is not allowed inside a name." : "Ní cheadaítear \"{char}\" laistigh d'ainm.", "\"{segment}\" is a reserved name and not allowed." : "Is ainm curtha in áirithe é \"{segment}\" agus ní cheadaítear é.", diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js index c9f59f71283..ade501b3d13 100644 --- a/apps/files_sharing/l10n/it.js +++ b/apps/files_sharing/l10n/it.js @@ -185,7 +185,7 @@ OC.L10N.register( "Set default folder for accepted shares" : "Imposta cartella predefinita per condivisioni accettate", "Reset" : "Ripristina", "Reset folder to system default" : "Ripristina la cartella alla predefinita di sistema", - "Share expiration: " : "Scadenza condivisione:", + "Share expiration: {date}" : "Scadenza condivisione: {date}", "Share Expiration" : "Scadenza Condivisione", "group" : "gruppo", "conversation" : "conversazione", @@ -310,6 +310,7 @@ OC.L10N.register( "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Condivisioni che non fanno parte delle condivisioni interne o esterne. Possono essere condivisioni da app o altre fonti.", "Share with accounts, teams, federated cloud IDs" : "Condividi con account, team, ID cloud federati", "Share with accounts and teams" : "Condividi con account e team", + "Federated cloud ID" : "ID cloud federato", "Email, federated cloud ID" : "E-mail, ID cloud federato", "Unable to load the shares list" : "Impossibile caricare l'elenco delle condivisioni", "Expires {relativetime}" : "Scade il {relativetime}", diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json index 7aef2f2a78c..f87b0a5cd74 100644 --- a/apps/files_sharing/l10n/it.json +++ b/apps/files_sharing/l10n/it.json @@ -183,7 +183,7 @@ "Set default folder for accepted shares" : "Imposta cartella predefinita per condivisioni accettate", "Reset" : "Ripristina", "Reset folder to system default" : "Ripristina la cartella alla predefinita di sistema", - "Share expiration: " : "Scadenza condivisione:", + "Share expiration: {date}" : "Scadenza condivisione: {date}", "Share Expiration" : "Scadenza Condivisione", "group" : "gruppo", "conversation" : "conversazione", @@ -308,6 +308,7 @@ "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Condivisioni che non fanno parte delle condivisioni interne o esterne. Possono essere condivisioni da app o altre fonti.", "Share with accounts, teams, federated cloud IDs" : "Condividi con account, team, ID cloud federati", "Share with accounts and teams" : "Condividi con account e team", + "Federated cloud ID" : "ID cloud federato", "Email, federated cloud ID" : "E-mail, ID cloud federato", "Unable to load the shares list" : "Impossibile caricare l'elenco delle condivisioni", "Expires {relativetime}" : "Scade il {relativetime}", diff --git a/apps/files_sharing/l10n/ja.js b/apps/files_sharing/l10n/ja.js index 2b7a4b1d1d6..b7ed30670d3 100644 --- a/apps/files_sharing/l10n/ja.js +++ b/apps/files_sharing/l10n/ja.js @@ -185,7 +185,6 @@ OC.L10N.register( "Set default folder for accepted shares" : "共有を受け入れるためのデフォルトフォルダーを指定", "Reset" : "リセット", "Reset folder to system default" : "フォルダをシステムのデフォルトに戻す", - "Share expiration: " : "共有期限:", "Share Expiration" : "共有期限", "group" : "グループ", "conversation" : "会話", diff --git a/apps/files_sharing/l10n/ja.json b/apps/files_sharing/l10n/ja.json index 5e030d4eeef..3d2037833ae 100644 --- a/apps/files_sharing/l10n/ja.json +++ b/apps/files_sharing/l10n/ja.json @@ -183,7 +183,6 @@ "Set default folder for accepted shares" : "共有を受け入れるためのデフォルトフォルダーを指定", "Reset" : "リセット", "Reset folder to system default" : "フォルダをシステムのデフォルトに戻す", - "Share expiration: " : "共有期限:", "Share Expiration" : "共有期限", "group" : "グループ", "conversation" : "会話", diff --git a/apps/files_sharing/l10n/ko.js b/apps/files_sharing/l10n/ko.js index 513e4d4cd36..d5d2d8a81d3 100644 --- a/apps/files_sharing/l10n/ko.js +++ b/apps/files_sharing/l10n/ko.js @@ -185,7 +185,6 @@ OC.L10N.register( "Set default folder for accepted shares" : "허용한 공유의 기본 경로 설정", "Reset" : "초기화", "Reset folder to system default" : "폴더를 시스템 기본값으로 재설정", - "Share expiration: " : "공유 만료:", "Share Expiration" : "공유 만료", "group" : "그룹", "conversation" : "대화", diff --git a/apps/files_sharing/l10n/ko.json b/apps/files_sharing/l10n/ko.json index 12e47fcdf6a..162ac564766 100644 --- a/apps/files_sharing/l10n/ko.json +++ b/apps/files_sharing/l10n/ko.json @@ -183,7 +183,6 @@ "Set default folder for accepted shares" : "허용한 공유의 기본 경로 설정", "Reset" : "초기화", "Reset folder to system default" : "폴더를 시스템 기본값으로 재설정", - "Share expiration: " : "공유 만료:", "Share Expiration" : "공유 만료", "group" : "그룹", "conversation" : "대화", diff --git a/apps/files_sharing/l10n/pl.js b/apps/files_sharing/l10n/pl.js index 3fa686d7b6c..cf3e53b0bc9 100644 --- a/apps/files_sharing/l10n/pl.js +++ b/apps/files_sharing/l10n/pl.js @@ -185,7 +185,6 @@ OC.L10N.register( "Set default folder for accepted shares" : "Ustaw domyślny katalog dla zaakceptowanych udostępnień", "Reset" : "Resetuj", "Reset folder to system default" : "Zresetuj katalog do domyślnych ustawień systemu", - "Share expiration: " : "Wygaśnięcie udostępnienia:", "Share Expiration" : "Wygaśnięcie udostępnienia", "group" : "grupa", "conversation" : "rozmowa", @@ -257,6 +256,7 @@ OC.L10N.register( "File drop" : "Upuść plik", "Upload files to {foldername}." : "Prześlij pliki do {foldername}.", "By uploading files, you agree to the terms of service." : "Przesyłając pliki, wyrażasz zgodę na warunki korzystania z usługi.", + "Successfully uploaded files" : "Pomyślnie przesłano pliki", "View terms of service" : "Zobacz warunki korzystania z usługi", "Terms of service" : "Warunki usługi", "Share with {userName}" : "Podziel się z {userName}", @@ -307,7 +307,9 @@ OC.L10N.register( "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Użyj tej metody, aby udostępniać pliki osobom lub zespołom w swojej organizacji. Jeśli odbiorca ma już dostęp do udostępnionego pliku, ale nie może go zlokalizować, możesz wysłać mu wewnętrzny link do udostępniania, aby ułatwić dostęp.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Użyj tej metody, aby udostępniać pliki osobom lub organizacjom spoza Twojej organizacji. Pliki i katalogi można udostępniać za pośrednictwem publicznych linków udostępniania i adresów e-mail. Możesz również udostępniać pliki innym kontom Nextcloud hostowanym na różnych instancjach, używając ich identyfikatora Chmury Federacyjnej.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Udostępnienia, które nie są częścią udostępnień wewnętrznych lub zewnętrznych. Mogą to być udostępnienia z aplikacji lub innych źródeł.", + "Share with accounts, teams, federated cloud IDs" : "Udostępnij kontom, zespołom, federacyjnym identyfikatorom chmury", "Share with accounts and teams" : "Udostępnij kontom i zespołom", + "Email, federated cloud ID" : "E-mail, federacyjny identyfikator chmury", "Unable to load the shares list" : "Nie można pobrać listy udostępnień", "Expires {relativetime}" : "Wygasa {relativetime}", "this share just expired." : "te udostępnienie właśnie wygasło.", @@ -376,8 +378,17 @@ OC.L10N.register( "Share note for recipient saved" : "Zapisano udostępnianą notatkę dla odbiorcy", "Share password saved" : "Hasło udostępnienia zapisane", "Share permissions saved" : "Zapisano uprawnienia udostępniania", + "To upload files to {folder}, you need to provide your name first." : "Aby przesłać pliki do {folder}, musisz najpierw podać swoje imię.", "Upload files to {folder}" : "Prześlij pliki do {folder}", + "Please confirm your name to upload files to {folder}" : "Proszę potwierdź swoje imię, aby przesłać pliki do {folder}", "{ownerDisplayName} shared a folder with you." : "{ownerDisplayName} udostępnił Ci katalog.", + "Names must not be empty." : "Imię nie może być puste.", + "Names must not start with a dot." : "Imię nie może zaczynać się od kropki.", + "\"{char}\" is not allowed inside a name." : "Znak \"{char}\" nie jest dozwolony w nazwie.", + "\"{segment}\" is a reserved name and not allowed." : "\"{segment}\" jest nazwą zastrzeżoną i nie jest dozwolona.", + "\"{extension}\" is not an allowed name." : "\"{extension}\" nie jest dozwoloną nazwą.", + "Names must not end with \"{extension}\"." : "Nazwy nie mogą kończyć się na \"{extension}\".", + "Invalid name." : "Nieprawidłowa nazwa.", "Shared by" : "Udostępnione przez", "Shared with" : "Udostępnione", "Password created successfully" : "Hasło utworzone pomyślnie", diff --git a/apps/files_sharing/l10n/pl.json b/apps/files_sharing/l10n/pl.json index 845c5d58740..8b1d20a441d 100644 --- a/apps/files_sharing/l10n/pl.json +++ b/apps/files_sharing/l10n/pl.json @@ -183,7 +183,6 @@ "Set default folder for accepted shares" : "Ustaw domyślny katalog dla zaakceptowanych udostępnień", "Reset" : "Resetuj", "Reset folder to system default" : "Zresetuj katalog do domyślnych ustawień systemu", - "Share expiration: " : "Wygaśnięcie udostępnienia:", "Share Expiration" : "Wygaśnięcie udostępnienia", "group" : "grupa", "conversation" : "rozmowa", @@ -255,6 +254,7 @@ "File drop" : "Upuść plik", "Upload files to {foldername}." : "Prześlij pliki do {foldername}.", "By uploading files, you agree to the terms of service." : "Przesyłając pliki, wyrażasz zgodę na warunki korzystania z usługi.", + "Successfully uploaded files" : "Pomyślnie przesłano pliki", "View terms of service" : "Zobacz warunki korzystania z usługi", "Terms of service" : "Warunki usługi", "Share with {userName}" : "Podziel się z {userName}", @@ -305,7 +305,9 @@ "Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "Użyj tej metody, aby udostępniać pliki osobom lub zespołom w swojej organizacji. Jeśli odbiorca ma już dostęp do udostępnionego pliku, ale nie może go zlokalizować, możesz wysłać mu wewnętrzny link do udostępniania, aby ułatwić dostęp.", "Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "Użyj tej metody, aby udostępniać pliki osobom lub organizacjom spoza Twojej organizacji. Pliki i katalogi można udostępniać za pośrednictwem publicznych linków udostępniania i adresów e-mail. Możesz również udostępniać pliki innym kontom Nextcloud hostowanym na różnych instancjach, używając ich identyfikatora Chmury Federacyjnej.", "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Udostępnienia, które nie są częścią udostępnień wewnętrznych lub zewnętrznych. Mogą to być udostępnienia z aplikacji lub innych źródeł.", + "Share with accounts, teams, federated cloud IDs" : "Udostępnij kontom, zespołom, federacyjnym identyfikatorom chmury", "Share with accounts and teams" : "Udostępnij kontom i zespołom", + "Email, federated cloud ID" : "E-mail, federacyjny identyfikator chmury", "Unable to load the shares list" : "Nie można pobrać listy udostępnień", "Expires {relativetime}" : "Wygasa {relativetime}", "this share just expired." : "te udostępnienie właśnie wygasło.", @@ -374,8 +376,17 @@ "Share note for recipient saved" : "Zapisano udostępnianą notatkę dla odbiorcy", "Share password saved" : "Hasło udostępnienia zapisane", "Share permissions saved" : "Zapisano uprawnienia udostępniania", + "To upload files to {folder}, you need to provide your name first." : "Aby przesłać pliki do {folder}, musisz najpierw podać swoje imię.", "Upload files to {folder}" : "Prześlij pliki do {folder}", + "Please confirm your name to upload files to {folder}" : "Proszę potwierdź swoje imię, aby przesłać pliki do {folder}", "{ownerDisplayName} shared a folder with you." : "{ownerDisplayName} udostępnił Ci katalog.", + "Names must not be empty." : "Imię nie może być puste.", + "Names must not start with a dot." : "Imię nie może zaczynać się od kropki.", + "\"{char}\" is not allowed inside a name." : "Znak \"{char}\" nie jest dozwolony w nazwie.", + "\"{segment}\" is a reserved name and not allowed." : "\"{segment}\" jest nazwą zastrzeżoną i nie jest dozwolona.", + "\"{extension}\" is not an allowed name." : "\"{extension}\" nie jest dozwoloną nazwą.", + "Names must not end with \"{extension}\"." : "Nazwy nie mogą kończyć się na \"{extension}\".", + "Invalid name." : "Nieprawidłowa nazwa.", "Shared by" : "Udostępnione przez", "Shared with" : "Udostępnione", "Password created successfully" : "Hasło utworzone pomyślnie", diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js index 19f7907553c..42ac50b6a5a 100644 --- a/apps/files_sharing/l10n/pt_BR.js +++ b/apps/files_sharing/l10n/pt_BR.js @@ -185,7 +185,6 @@ OC.L10N.register( "Set default folder for accepted shares" : "Definir pasta padrão para compartilhamentos aceitos", "Reset" : "Redefinir", "Reset folder to system default" : "Redefinir pasta para o padrão do sistema", - "Share expiration: " : "Expiração do compartilhamento:", "Share Expiration" : "Expiração do Compartilhamento", "group" : "grupo", "conversation" : "conversa", diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json index 81e8adcf34d..907acae7f31 100644 --- a/apps/files_sharing/l10n/pt_BR.json +++ b/apps/files_sharing/l10n/pt_BR.json @@ -183,7 +183,6 @@ "Set default folder for accepted shares" : "Definir pasta padrão para compartilhamentos aceitos", "Reset" : "Redefinir", "Reset folder to system default" : "Redefinir pasta para o padrão do sistema", - "Share expiration: " : "Expiração do compartilhamento:", "Share Expiration" : "Expiração do Compartilhamento", "group" : "grupo", "conversation" : "conversa", diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js index 2da7d326673..7567511b268 100644 --- a/apps/files_sharing/l10n/ru.js +++ b/apps/files_sharing/l10n/ru.js @@ -137,7 +137,9 @@ OC.L10N.register( "Link copied to clipboard" : "Ссылка скопирована в буфер обмена", "Email already added" : "Адрес электронной почты уже добавлен", "Invalid email address" : "Неверный адрес электронной почты", + "_The following email address is not valid: {emails}_::_The following email addresses are not valid: {emails}_" : ["Следующий адрес электронной почты недействителен: {emails}","Следующие адреса электронной почты недействительны: {emails}","Следующие адреса электронной почты недействительны: {emails}","Следующие адреса электронной почты недействительны: {emails}"], "_{count} email address already added_::_{count} email addresses already added_" : [" {count} e-mail адрес уже добавлен"," {count} e-mail адреса уже добавлено"," {count} e-mail адресов уже добавлены","{count} e-mail адресов уже добавлены"], + "_{count} email address added_::_{count} email addresses added_" : ["Добавлен {count} адрес электронной почты","Добавлено {count} адреса электронной почты","Добавлено {count} адресов электронной почты","Добавлено {count} адресов электронной почты"], "You can now share the link below to allow people to upload files to your directory." : "Теперь вы можете поделиться приведенной ниже ссылкой, чтобы люди могли загружать файлы в ваш каталог.", "Share link" : "Общий доступ по ссылке", "Copy to clipboard" : "Копировать в буфер обмена", @@ -158,8 +160,10 @@ OC.L10N.register( "Add a note to help people understand what you are requesting." : "Добавьте примечание, чтобы помочь людям понять, о чем вы просите.", "You can add links, date or any other information that will help the recipient understand what you are requesting." : "Вы можете добавить ссылки, дату или любую другую информацию, которая поможет получателю понять, что вы запрашиваете.", "Close" : "Закрыть", + "_Send email and close_::_Send {count} emails and close_" : ["Отправить письмо и закрыть","Отправить {count} письма и закрыть","Отправить {count} писем и закрыть","Отправить {count} писем и закрыть"], "Please select a folder, you cannot share the root directory." : "Пожалуйста, выберите папку, вы не можете предоставить общий доступ к корневому каталогу.", "File request created" : "Создан запрос на файл", + "_File request created and email sent_::_File request created and {count} emails sent_" : ["Создан запрос файла и отправлено письмо","Создан запрос файла и отправлено {count} письма","Создан запрос файла и отправлено {count} писем","Создан запрос файла и отправлено {count} писем"], "Error creating the share: {errorMessage}" : "Не удалось создать общий ресурс: {errorMessage}", "Error creating the share" : "Ошибка создания общего доступа", "Error sending emails: {errorMessage}" : "Ошибка при отправке электронных писем: {errorMessage}", @@ -181,6 +185,8 @@ OC.L10N.register( "Set default folder for accepted shares" : "Задать папку для принятых опубликованных ресурсов", "Reset" : "Сброс", "Reset folder to system default" : "Сбросить папку к значениям по умолчанию", + "Share expiration: {date}" : "Срок действия общего ресурса: {date}", + "Share Expiration" : "Срок действия общего ресурса", "group" : "группа", "conversation" : "беседа", "remote" : "на другом сервере", @@ -244,11 +250,14 @@ OC.L10N.register( "Deck board" : "Доска", "ScienceMesh" : "ScienceMesh", "on {server}" : "на {server}", + "Enter external recipients" : "Введите внешних получателей", + "Search for internal recipients" : "Поиск внутренних получателей", "Note from" : "Примечание от", "Note:" : "Примечание:", "File drop" : "Приём файлов", "Upload files to {foldername}." : "Загрузка файлов в {foldername}.", "By uploading files, you agree to the terms of service." : "Загружая файлы, вы соглашаетесь с условиями обслуживания.", + "Successfully uploaded files" : "Файлы успешно загружены", "View terms of service" : "Ознакомиться с условиями предоставления услуг", "Terms of service" : "Условия использования", "Share with {userName}" : "Поделиться с {userName}", @@ -265,6 +274,7 @@ OC.L10N.register( "Edit" : "Редактировать", "Share" : "Поделиться", "Delete" : "Удалить", + "Password field cannot be empty" : "Поле пароля не может быть пустым", "Replace current password" : "Заменить текущий пароль", "Failed to generate a new token" : "Не удалось сгенерировать новый токен", "Allow upload and editing" : "Разрешить приём и редактирование", @@ -272,6 +282,10 @@ OC.L10N.register( "Upload only" : "Только загружать", "Advanced settings" : "Расширенные параметры", "Share label" : "Метка общего доступа", + "Share link token" : "Токен ссылки на общий ресурс", + "Set the public share link token to something easy to remember or generate a new token. It is not recommended to use a guessable token for shares which contain sensitive information." : "Установите простой для запоминания токен ссылки на общий ресурс или сгенерируйте новый. Не рекомендуется использовать легко угадываемые токены для общих ресурсов с конфиденциальной информацией.", + "Generating…" : "Создание…", + "Generate new token" : "Создать новый токен", "Set password" : "Задать пароль", "Password expires {passwordExpirationTime}" : "Срок действия пароля истекает {passwordExpirationTime}", "Password expired" : "Срок действия пароля истёк", @@ -282,6 +296,7 @@ OC.L10N.register( "Allow download and sync" : "Разрешить загрузку и синхронизацию", "Note to recipient" : "Примечание для получателя", "Enter a note for the share recipient" : "Введите примечание для получателя", + "Show files in grid view" : "Показать файлы в виде сетки", "Delete share" : "Удалить общий ресурс", "Others with access" : "Другие пользователи, имеющие доступ", "No other accounts with access found" : "Других учетных записей с доступом не найдено", @@ -295,13 +310,18 @@ OC.L10N.register( "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Ссылки, которые не являются частью внутренних или внешних ссылок. Это могут быть ссылки из приложений или других источников.", "Share with accounts, teams, federated cloud IDs" : "Поделиться с учетными записями, командами, идентификаторами федеративного облака", "Share with accounts and teams" : "Поделиться с аккаунтами и командами", + "Federated cloud ID" : "Федеративный облачный ID", + "Email, federated cloud ID" : "Электронная почта, федеративный облачный ID", "Unable to load the shares list" : "Невозможно загрузить список общих ресурсов", "Expires {relativetime}" : "Истекает {relativetime}", "this share just expired." : "срок действия этого общего ресурса только что истёк.", "Shared with you by {owner}" : "{owner} предоставил(а) Вам доступ", "Internal shares" : "Внутренние ссылки", + "Internal shares explanation" : "Пояснение к внутренним общим ресурсам", "External shares" : "Внешние ссылки", + "External shares explanation" : "Пояснение к внешним общим ресурсам", "Additional shares" : "Дополнительные ссылки", + "Additional shares explanation" : "Пояснение к дополнительным общим ресурсам", "Link to a file" : "Ссылка на файл", "_Accept share_::_Accept shares_" : ["Принять общий ресурс","Принять общие ресурсы","Принять общие ресурсы","Принять общие ресурсы"], "Open in Files" : "Открыть в Файлах", @@ -357,10 +377,20 @@ OC.L10N.register( "Share expiry date saved" : "Дата истечения срока общего доступа сохранена", "Share hide-download state saved" : "Скрытая загрузка ссылки общего доступа сохранено", "Share label saved" : "Метка общего доступа сохранена", + "Share note for recipient saved" : "Примечание к общему ресурсу для получателя сохранено", "Share password saved" : "Пароль общего доступа сохранен", "Share permissions saved" : "Разрешения общего доступа сохранены", + "To upload files to {folder}, you need to provide your name first." : "Чтобы загрузить файлы в {folder}, сначала укажите своё имя.", "Upload files to {folder}" : "Загрузка файлов в {folder}", + "Please confirm your name to upload files to {folder}" : "Пожалуйста, подтвердите своё имя для загрузки файлов в {folder}", "{ownerDisplayName} shared a folder with you." : "{ownerDisplayName} поделился с вами папкой.", + "Names must not be empty." : "Имя не может быть пустым.", + "Names must not start with a dot." : "Имя не должно начинаться с точки.", + "\"{char}\" is not allowed inside a name." : "Символ «{char}» не допускается в имени.", + "\"{segment}\" is a reserved name and not allowed." : "«{segment}» — зарезервированное имя и не может быть использовано.", + "\"{extension}\" is not an allowed name." : "«{extension}» — недопустимое имя.", + "Names must not end with \"{extension}\"." : "Имя не должно оканчиваться на «{extension}».", + "Invalid name." : "Недопустимое имя.", "Shared by" : "Поделился", "Shared with" : "Общий доступ", "Password created successfully" : "Пароль создан", @@ -393,6 +423,8 @@ OC.L10N.register( "Failed to add the public link to your Nextcloud" : "Не удалось создать общедоступную ссылку", "You are not allowed to edit link shares that you don't own" : "Вам не разрешается редактировать ссылки, которыми вы не владеете", "Download all files" : "Скачать все файлы", + "_1 email address already added_::_{count} email addresses already added_" : ["Уже добавлен 1 адрес электронной почты","Уже добавлено {count} адреса электронной почты","Уже добавлено {count} адресов электронной почты","Уже добавлено {count} адресов электронной почты"], + "_1 email address added_::_{count} email addresses added_" : ["Добавлен 1 адрес электронной почты","Добавлено {count} адреса электронной почты","Добавлено {count} адресов электронной почты","Добавлено {count} адресов электронной почты"], "Search for share recipients" : "Найти больше получателей общего ресурса", "No recommendations. Start typing." : "Рекомендации отсутствуют, начните вводить символы", "To upload files, you need to provide your name first." : "Чтобы загрузить файлы, вам необходимо сначала указать свое имя.", diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json index 2179703dd71..a84dbdd18ab 100644 --- a/apps/files_sharing/l10n/ru.json +++ b/apps/files_sharing/l10n/ru.json @@ -135,7 +135,9 @@ "Link copied to clipboard" : "Ссылка скопирована в буфер обмена", "Email already added" : "Адрес электронной почты уже добавлен", "Invalid email address" : "Неверный адрес электронной почты", + "_The following email address is not valid: {emails}_::_The following email addresses are not valid: {emails}_" : ["Следующий адрес электронной почты недействителен: {emails}","Следующие адреса электронной почты недействительны: {emails}","Следующие адреса электронной почты недействительны: {emails}","Следующие адреса электронной почты недействительны: {emails}"], "_{count} email address already added_::_{count} email addresses already added_" : [" {count} e-mail адрес уже добавлен"," {count} e-mail адреса уже добавлено"," {count} e-mail адресов уже добавлены","{count} e-mail адресов уже добавлены"], + "_{count} email address added_::_{count} email addresses added_" : ["Добавлен {count} адрес электронной почты","Добавлено {count} адреса электронной почты","Добавлено {count} адресов электронной почты","Добавлено {count} адресов электронной почты"], "You can now share the link below to allow people to upload files to your directory." : "Теперь вы можете поделиться приведенной ниже ссылкой, чтобы люди могли загружать файлы в ваш каталог.", "Share link" : "Общий доступ по ссылке", "Copy to clipboard" : "Копировать в буфер обмена", @@ -156,8 +158,10 @@ "Add a note to help people understand what you are requesting." : "Добавьте примечание, чтобы помочь людям понять, о чем вы просите.", "You can add links, date or any other information that will help the recipient understand what you are requesting." : "Вы можете добавить ссылки, дату или любую другую информацию, которая поможет получателю понять, что вы запрашиваете.", "Close" : "Закрыть", + "_Send email and close_::_Send {count} emails and close_" : ["Отправить письмо и закрыть","Отправить {count} письма и закрыть","Отправить {count} писем и закрыть","Отправить {count} писем и закрыть"], "Please select a folder, you cannot share the root directory." : "Пожалуйста, выберите папку, вы не можете предоставить общий доступ к корневому каталогу.", "File request created" : "Создан запрос на файл", + "_File request created and email sent_::_File request created and {count} emails sent_" : ["Создан запрос файла и отправлено письмо","Создан запрос файла и отправлено {count} письма","Создан запрос файла и отправлено {count} писем","Создан запрос файла и отправлено {count} писем"], "Error creating the share: {errorMessage}" : "Не удалось создать общий ресурс: {errorMessage}", "Error creating the share" : "Ошибка создания общего доступа", "Error sending emails: {errorMessage}" : "Ошибка при отправке электронных писем: {errorMessage}", @@ -179,6 +183,8 @@ "Set default folder for accepted shares" : "Задать папку для принятых опубликованных ресурсов", "Reset" : "Сброс", "Reset folder to system default" : "Сбросить папку к значениям по умолчанию", + "Share expiration: {date}" : "Срок действия общего ресурса: {date}", + "Share Expiration" : "Срок действия общего ресурса", "group" : "группа", "conversation" : "беседа", "remote" : "на другом сервере", @@ -242,11 +248,14 @@ "Deck board" : "Доска", "ScienceMesh" : "ScienceMesh", "on {server}" : "на {server}", + "Enter external recipients" : "Введите внешних получателей", + "Search for internal recipients" : "Поиск внутренних получателей", "Note from" : "Примечание от", "Note:" : "Примечание:", "File drop" : "Приём файлов", "Upload files to {foldername}." : "Загрузка файлов в {foldername}.", "By uploading files, you agree to the terms of service." : "Загружая файлы, вы соглашаетесь с условиями обслуживания.", + "Successfully uploaded files" : "Файлы успешно загружены", "View terms of service" : "Ознакомиться с условиями предоставления услуг", "Terms of service" : "Условия использования", "Share with {userName}" : "Поделиться с {userName}", @@ -263,6 +272,7 @@ "Edit" : "Редактировать", "Share" : "Поделиться", "Delete" : "Удалить", + "Password field cannot be empty" : "Поле пароля не может быть пустым", "Replace current password" : "Заменить текущий пароль", "Failed to generate a new token" : "Не удалось сгенерировать новый токен", "Allow upload and editing" : "Разрешить приём и редактирование", @@ -270,6 +280,10 @@ "Upload only" : "Только загружать", "Advanced settings" : "Расширенные параметры", "Share label" : "Метка общего доступа", + "Share link token" : "Токен ссылки на общий ресурс", + "Set the public share link token to something easy to remember or generate a new token. It is not recommended to use a guessable token for shares which contain sensitive information." : "Установите простой для запоминания токен ссылки на общий ресурс или сгенерируйте новый. Не рекомендуется использовать легко угадываемые токены для общих ресурсов с конфиденциальной информацией.", + "Generating…" : "Создание…", + "Generate new token" : "Создать новый токен", "Set password" : "Задать пароль", "Password expires {passwordExpirationTime}" : "Срок действия пароля истекает {passwordExpirationTime}", "Password expired" : "Срок действия пароля истёк", @@ -280,6 +294,7 @@ "Allow download and sync" : "Разрешить загрузку и синхронизацию", "Note to recipient" : "Примечание для получателя", "Enter a note for the share recipient" : "Введите примечание для получателя", + "Show files in grid view" : "Показать файлы в виде сетки", "Delete share" : "Удалить общий ресурс", "Others with access" : "Другие пользователи, имеющие доступ", "No other accounts with access found" : "Других учетных записей с доступом не найдено", @@ -293,13 +308,18 @@ "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Ссылки, которые не являются частью внутренних или внешних ссылок. Это могут быть ссылки из приложений или других источников.", "Share with accounts, teams, federated cloud IDs" : "Поделиться с учетными записями, командами, идентификаторами федеративного облака", "Share with accounts and teams" : "Поделиться с аккаунтами и командами", + "Federated cloud ID" : "Федеративный облачный ID", + "Email, federated cloud ID" : "Электронная почта, федеративный облачный ID", "Unable to load the shares list" : "Невозможно загрузить список общих ресурсов", "Expires {relativetime}" : "Истекает {relativetime}", "this share just expired." : "срок действия этого общего ресурса только что истёк.", "Shared with you by {owner}" : "{owner} предоставил(а) Вам доступ", "Internal shares" : "Внутренние ссылки", + "Internal shares explanation" : "Пояснение к внутренним общим ресурсам", "External shares" : "Внешние ссылки", + "External shares explanation" : "Пояснение к внешним общим ресурсам", "Additional shares" : "Дополнительные ссылки", + "Additional shares explanation" : "Пояснение к дополнительным общим ресурсам", "Link to a file" : "Ссылка на файл", "_Accept share_::_Accept shares_" : ["Принять общий ресурс","Принять общие ресурсы","Принять общие ресурсы","Принять общие ресурсы"], "Open in Files" : "Открыть в Файлах", @@ -355,10 +375,20 @@ "Share expiry date saved" : "Дата истечения срока общего доступа сохранена", "Share hide-download state saved" : "Скрытая загрузка ссылки общего доступа сохранено", "Share label saved" : "Метка общего доступа сохранена", + "Share note for recipient saved" : "Примечание к общему ресурсу для получателя сохранено", "Share password saved" : "Пароль общего доступа сохранен", "Share permissions saved" : "Разрешения общего доступа сохранены", + "To upload files to {folder}, you need to provide your name first." : "Чтобы загрузить файлы в {folder}, сначала укажите своё имя.", "Upload files to {folder}" : "Загрузка файлов в {folder}", + "Please confirm your name to upload files to {folder}" : "Пожалуйста, подтвердите своё имя для загрузки файлов в {folder}", "{ownerDisplayName} shared a folder with you." : "{ownerDisplayName} поделился с вами папкой.", + "Names must not be empty." : "Имя не может быть пустым.", + "Names must not start with a dot." : "Имя не должно начинаться с точки.", + "\"{char}\" is not allowed inside a name." : "Символ «{char}» не допускается в имени.", + "\"{segment}\" is a reserved name and not allowed." : "«{segment}» — зарезервированное имя и не может быть использовано.", + "\"{extension}\" is not an allowed name." : "«{extension}» — недопустимое имя.", + "Names must not end with \"{extension}\"." : "Имя не должно оканчиваться на «{extension}».", + "Invalid name." : "Недопустимое имя.", "Shared by" : "Поделился", "Shared with" : "Общий доступ", "Password created successfully" : "Пароль создан", @@ -391,6 +421,8 @@ "Failed to add the public link to your Nextcloud" : "Не удалось создать общедоступную ссылку", "You are not allowed to edit link shares that you don't own" : "Вам не разрешается редактировать ссылки, которыми вы не владеете", "Download all files" : "Скачать все файлы", + "_1 email address already added_::_{count} email addresses already added_" : ["Уже добавлен 1 адрес электронной почты","Уже добавлено {count} адреса электронной почты","Уже добавлено {count} адресов электронной почты","Уже добавлено {count} адресов электронной почты"], + "_1 email address added_::_{count} email addresses added_" : ["Добавлен 1 адрес электронной почты","Добавлено {count} адреса электронной почты","Добавлено {count} адресов электронной почты","Добавлено {count} адресов электронной почты"], "Search for share recipients" : "Найти больше получателей общего ресурса", "No recommendations. Start typing." : "Рекомендации отсутствуют, начните вводить символы", "To upload files, you need to provide your name first." : "Чтобы загрузить файлы, вам необходимо сначала указать свое имя.", diff --git a/apps/files_sharing/l10n/sk.js b/apps/files_sharing/l10n/sk.js index 93d18fb68a0..e2aba332fb1 100644 --- a/apps/files_sharing/l10n/sk.js +++ b/apps/files_sharing/l10n/sk.js @@ -185,7 +185,6 @@ OC.L10N.register( "Set default folder for accepted shares" : "Nastaviť predvolený priečinok pre prijaté zdieľania", "Reset" : "Resetovať", "Reset folder to system default" : "Obnoviť priečinok na predvolené hodnoty systému", - "Share expiration: " : "Vypršanie platnosti zdieľania:", "Share Expiration" : "Vypršanie platnosti zdieľania", "group" : "skupina", "conversation" : "rozhovor", diff --git a/apps/files_sharing/l10n/sk.json b/apps/files_sharing/l10n/sk.json index 210b5e6c24f..c701ce0b113 100644 --- a/apps/files_sharing/l10n/sk.json +++ b/apps/files_sharing/l10n/sk.json @@ -183,7 +183,6 @@ "Set default folder for accepted shares" : "Nastaviť predvolený priečinok pre prijaté zdieľania", "Reset" : "Resetovať", "Reset folder to system default" : "Obnoviť priečinok na predvolené hodnoty systému", - "Share expiration: " : "Vypršanie platnosti zdieľania:", "Share Expiration" : "Vypršanie platnosti zdieľania", "group" : "skupina", "conversation" : "rozhovor", diff --git a/apps/files_sharing/l10n/sr.js b/apps/files_sharing/l10n/sr.js index 76e795e046e..413fccb634c 100644 --- a/apps/files_sharing/l10n/sr.js +++ b/apps/files_sharing/l10n/sr.js @@ -185,7 +185,7 @@ OC.L10N.register( "Set default folder for accepted shares" : "Подесите подразумевани фолдер за прихваћена дељења", "Reset" : "Ресетуј", "Reset folder to system default" : "Vratite fasciklu na podrazumevane vrednosti sistema", - "Share expiration: " : "Истек дељења:", + "Share expiration: {date}" : "Дељење истиче: {date} ", "Share Expiration" : "Истицање дељења", "group" : "група", "conversation" : "разговор", @@ -310,6 +310,7 @@ OC.L10N.register( "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Дељења која нису део интерних или спољних дељења. Ово могу бити дељења из апликација или осталих извора.", "Share with accounts, teams, federated cloud IDs" : "Дели са налозима, тимовима, ID-јевима здруженог облака", "Share with accounts and teams" : "Дељење са налозима и тимовима", + "Federated cloud ID" : "ИД Здруженог облака", "Email, federated cloud ID" : "И-мејл, ID здруженог облака", "Unable to load the shares list" : "Неуспело учитавање листе дељења", "Expires {relativetime}" : "Истиче {relativetime}", @@ -379,8 +380,11 @@ OC.L10N.register( "Share note for recipient saved" : "Сачувана је напомена за примаоца дељења", "Share password saved" : "Сачувана је лозинка дељења", "Share permissions saved" : "Сачуване су дозволе дељења", + "To upload files to {folder}, you need to provide your name first." : "Да бисте могли да отпремите фајлове у фолдер {folder}, најпре наведите своје име.", "Upload files to {folder}" : "Отпреми фајлове у {folder}", + "Please confirm your name to upload files to {folder}" : "Потврдите своје име да бисте отпремили фајлове у {folder}", "{ownerDisplayName} shared a folder with you." : "{ownerDisplayName} је са вама поделио фолдер.", + "Names must not be empty." : "Имена не смеју остати празна.", "Names must not start with a dot." : "Имена не смеју да се почну тачком.", "\"{char}\" is not allowed inside a name." : "„{char}” није дозвољен карактер у имену.", "\"{segment}\" is a reserved name and not allowed." : "„{segment}” је резервисано име и не сме се користити.", diff --git a/apps/files_sharing/l10n/sr.json b/apps/files_sharing/l10n/sr.json index 99236cb6676..a9bd75ab333 100644 --- a/apps/files_sharing/l10n/sr.json +++ b/apps/files_sharing/l10n/sr.json @@ -183,7 +183,7 @@ "Set default folder for accepted shares" : "Подесите подразумевани фолдер за прихваћена дељења", "Reset" : "Ресетуј", "Reset folder to system default" : "Vratite fasciklu na podrazumevane vrednosti sistema", - "Share expiration: " : "Истек дељења:", + "Share expiration: {date}" : "Дељење истиче: {date} ", "Share Expiration" : "Истицање дељења", "group" : "група", "conversation" : "разговор", @@ -308,6 +308,7 @@ "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Дељења која нису део интерних или спољних дељења. Ово могу бити дељења из апликација или осталих извора.", "Share with accounts, teams, federated cloud IDs" : "Дели са налозима, тимовима, ID-јевима здруженог облака", "Share with accounts and teams" : "Дељење са налозима и тимовима", + "Federated cloud ID" : "ИД Здруженог облака", "Email, federated cloud ID" : "И-мејл, ID здруженог облака", "Unable to load the shares list" : "Неуспело учитавање листе дељења", "Expires {relativetime}" : "Истиче {relativetime}", @@ -377,8 +378,11 @@ "Share note for recipient saved" : "Сачувана је напомена за примаоца дељења", "Share password saved" : "Сачувана је лозинка дељења", "Share permissions saved" : "Сачуване су дозволе дељења", + "To upload files to {folder}, you need to provide your name first." : "Да бисте могли да отпремите фајлове у фолдер {folder}, најпре наведите своје име.", "Upload files to {folder}" : "Отпреми фајлове у {folder}", + "Please confirm your name to upload files to {folder}" : "Потврдите своје име да бисте отпремили фајлове у {folder}", "{ownerDisplayName} shared a folder with you." : "{ownerDisplayName} је са вама поделио фолдер.", + "Names must not be empty." : "Имена не смеју остати празна.", "Names must not start with a dot." : "Имена не смеју да се почну тачком.", "\"{char}\" is not allowed inside a name." : "„{char}” није дозвољен карактер у имену.", "\"{segment}\" is a reserved name and not allowed." : "„{segment}” је резервисано име и не сме се користити.", diff --git a/apps/files_sharing/l10n/sv.js b/apps/files_sharing/l10n/sv.js index f6627602393..05be7bc3722 100644 --- a/apps/files_sharing/l10n/sv.js +++ b/apps/files_sharing/l10n/sv.js @@ -185,7 +185,7 @@ OC.L10N.register( "Set default folder for accepted shares" : "Sätt standardmapp för accepterade delningar", "Reset" : "Återställ", "Reset folder to system default" : "Återställ mapp till system-standard", - "Share expiration: " : "Delningens utgång:", + "Share expiration: {date}" : "Delningens utgång: {date}", "Share Expiration" : "Delningens utgång", "group" : "grupp", "conversation" : "konversation", @@ -310,6 +310,7 @@ OC.L10N.register( "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Delningar som inte ingår i de interna eller externa delningarna. Detta kan vara delningar från appar eller andra källor.", "Share with accounts, teams, federated cloud IDs" : "Dela med konton, team, federerade moln-ID:n", "Share with accounts and teams" : "Dela med konton och team", + "Federated cloud ID" : "Federerat moln-ID", "Email, federated cloud ID" : "E-post, federerat moln-ID", "Unable to load the shares list" : "Kunde inte läsa in delningslistan", "Expires {relativetime}" : "Upphör {relativetime}", @@ -379,8 +380,11 @@ OC.L10N.register( "Share note for recipient saved" : "Delningens notering för mottagare sparad", "Share password saved" : "Lösenord för delning sparad", "Share permissions saved" : "Delningsbehörighet sparad", + "To upload files to {folder}, you need to provide your name first." : "För att ladda upp filer till {folder}, måste du först ange ditt namn.", "Upload files to {folder}" : "Ladda upp filer till {folder}", + "Please confirm your name to upload files to {folder}" : "Bekräfta ditt namn för att ladda upp filer till {folder}", "{ownerDisplayName} shared a folder with you." : "{ownerDisplayName} delade en mapp med dig.", + "Names must not be empty." : "Namn får inte vara tomt.", "Names must not start with a dot." : "Namn får inte börja med en punkt.", "\"{char}\" is not allowed inside a name." : "\"{char}\" är inte tillåtet i ett namn.", "\"{segment}\" is a reserved name and not allowed." : "\"{segment}\" är ett reserverat namn och inte tillåtet.", diff --git a/apps/files_sharing/l10n/sv.json b/apps/files_sharing/l10n/sv.json index c0158c0a0be..b675aecf7d0 100644 --- a/apps/files_sharing/l10n/sv.json +++ b/apps/files_sharing/l10n/sv.json @@ -183,7 +183,7 @@ "Set default folder for accepted shares" : "Sätt standardmapp för accepterade delningar", "Reset" : "Återställ", "Reset folder to system default" : "Återställ mapp till system-standard", - "Share expiration: " : "Delningens utgång:", + "Share expiration: {date}" : "Delningens utgång: {date}", "Share Expiration" : "Delningens utgång", "group" : "grupp", "conversation" : "konversation", @@ -308,6 +308,7 @@ "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Delningar som inte ingår i de interna eller externa delningarna. Detta kan vara delningar från appar eller andra källor.", "Share with accounts, teams, federated cloud IDs" : "Dela med konton, team, federerade moln-ID:n", "Share with accounts and teams" : "Dela med konton och team", + "Federated cloud ID" : "Federerat moln-ID", "Email, federated cloud ID" : "E-post, federerat moln-ID", "Unable to load the shares list" : "Kunde inte läsa in delningslistan", "Expires {relativetime}" : "Upphör {relativetime}", @@ -377,8 +378,11 @@ "Share note for recipient saved" : "Delningens notering för mottagare sparad", "Share password saved" : "Lösenord för delning sparad", "Share permissions saved" : "Delningsbehörighet sparad", + "To upload files to {folder}, you need to provide your name first." : "För att ladda upp filer till {folder}, måste du först ange ditt namn.", "Upload files to {folder}" : "Ladda upp filer till {folder}", + "Please confirm your name to upload files to {folder}" : "Bekräfta ditt namn för att ladda upp filer till {folder}", "{ownerDisplayName} shared a folder with you." : "{ownerDisplayName} delade en mapp med dig.", + "Names must not be empty." : "Namn får inte vara tomt.", "Names must not start with a dot." : "Namn får inte börja med en punkt.", "\"{char}\" is not allowed inside a name." : "\"{char}\" är inte tillåtet i ett namn.", "\"{segment}\" is a reserved name and not allowed." : "\"{segment}\" är ett reserverat namn och inte tillåtet.", diff --git a/apps/files_sharing/l10n/tr.js b/apps/files_sharing/l10n/tr.js index 20b9b431dfa..928b017aa59 100644 --- a/apps/files_sharing/l10n/tr.js +++ b/apps/files_sharing/l10n/tr.js @@ -185,7 +185,6 @@ OC.L10N.register( "Set default folder for accepted shares" : "Onaylanmış paylaşımların varsayılan klasörünü ayarlayın", "Reset" : "Sıfırla", "Reset folder to system default" : "Sistem varsayılan klasörüne sıfırlar", - "Share expiration: " : "Paylaşım geçerlilik sonu:", "Share Expiration" : "Paylaşım geçerlilik sonu", "group" : "grup", "conversation" : "görüşme", diff --git a/apps/files_sharing/l10n/tr.json b/apps/files_sharing/l10n/tr.json index f39092bfd9a..97e130dda33 100644 --- a/apps/files_sharing/l10n/tr.json +++ b/apps/files_sharing/l10n/tr.json @@ -183,7 +183,6 @@ "Set default folder for accepted shares" : "Onaylanmış paylaşımların varsayılan klasörünü ayarlayın", "Reset" : "Sıfırla", "Reset folder to system default" : "Sistem varsayılan klasörüne sıfırlar", - "Share expiration: " : "Paylaşım geçerlilik sonu:", "Share Expiration" : "Paylaşım geçerlilik sonu", "group" : "grup", "conversation" : "görüşme", diff --git a/apps/files_sharing/l10n/uk.js b/apps/files_sharing/l10n/uk.js index e408a7579dc..f1d8ed89a22 100644 --- a/apps/files_sharing/l10n/uk.js +++ b/apps/files_sharing/l10n/uk.js @@ -184,7 +184,7 @@ OC.L10N.register( "Set default folder for accepted shares" : "Встановити типовий каталог для прийнятих спільних ресурсів", "Reset" : "Скидання", "Reset folder to system default" : "Відновити типові системні налаштування для каталогу", - "Share expiration: " : "Термін дії спільного ресурсу:", + "Share expiration: {date}" : "У спільному доступі до: {date}", "Share Expiration" : "Термін дії спільного ресурсу:", "group" : "група", "conversation" : "розмова", @@ -309,6 +309,7 @@ OC.L10N.register( "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Спільні ресурси, що не є ані внутрішніми, ані зовнішніми спільними ресурсами, наприклад, спільні ресурси, створені застосунками чи іншими ресурсами.", "Share with accounts, teams, federated cloud IDs" : "Поділитися з користувачами, командами, об'єднаними хмарами", "Share with accounts and teams" : "Поділитися з користувачами або командами", + "Federated cloud ID" : "Ідентифікатор об'єднаної хмари", "Email, federated cloud ID" : "Ел. пошта, ID об'єднаної хмари", "Unable to load the shares list" : "Не вдалося завантажити список спільних ресурсів", "Expires {relativetime}" : "Термін дії закінчується {relativetime}", diff --git a/apps/files_sharing/l10n/uk.json b/apps/files_sharing/l10n/uk.json index 6cc6236b179..395814ab6f4 100644 --- a/apps/files_sharing/l10n/uk.json +++ b/apps/files_sharing/l10n/uk.json @@ -182,7 +182,7 @@ "Set default folder for accepted shares" : "Встановити типовий каталог для прийнятих спільних ресурсів", "Reset" : "Скидання", "Reset folder to system default" : "Відновити типові системні налаштування для каталогу", - "Share expiration: " : "Термін дії спільного ресурсу:", + "Share expiration: {date}" : "У спільному доступі до: {date}", "Share Expiration" : "Термін дії спільного ресурсу:", "group" : "група", "conversation" : "розмова", @@ -307,6 +307,7 @@ "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "Спільні ресурси, що не є ані внутрішніми, ані зовнішніми спільними ресурсами, наприклад, спільні ресурси, створені застосунками чи іншими ресурсами.", "Share with accounts, teams, federated cloud IDs" : "Поділитися з користувачами, командами, об'єднаними хмарами", "Share with accounts and teams" : "Поділитися з користувачами або командами", + "Federated cloud ID" : "Ідентифікатор об'єднаної хмари", "Email, federated cloud ID" : "Ел. пошта, ID об'єднаної хмари", "Unable to load the shares list" : "Не вдалося завантажити список спільних ресурсів", "Expires {relativetime}" : "Термін дії закінчується {relativetime}", diff --git a/apps/files_sharing/l10n/zh_CN.js b/apps/files_sharing/l10n/zh_CN.js index 2022a6cd18a..5fe25dcad5d 100644 --- a/apps/files_sharing/l10n/zh_CN.js +++ b/apps/files_sharing/l10n/zh_CN.js @@ -185,7 +185,6 @@ OC.L10N.register( "Set default folder for accepted shares" : "设置已接受共享的默认文件夹", "Reset" : "重置", "Reset folder to system default" : "重置文件夹为系统默认值", - "Share expiration: " : "共享有效期:", "Share Expiration" : "共享有效期", "group" : "分组", "conversation" : "会话", diff --git a/apps/files_sharing/l10n/zh_CN.json b/apps/files_sharing/l10n/zh_CN.json index 271bc089ecc..6d23d656847 100644 --- a/apps/files_sharing/l10n/zh_CN.json +++ b/apps/files_sharing/l10n/zh_CN.json @@ -183,7 +183,6 @@ "Set default folder for accepted shares" : "设置已接受共享的默认文件夹", "Reset" : "重置", "Reset folder to system default" : "重置文件夹为系统默认值", - "Share expiration: " : "共享有效期:", "Share Expiration" : "共享有效期", "group" : "分组", "conversation" : "会话", diff --git a/apps/files_sharing/l10n/zh_HK.js b/apps/files_sharing/l10n/zh_HK.js index cb99f781477..8c9684a2365 100644 --- a/apps/files_sharing/l10n/zh_HK.js +++ b/apps/files_sharing/l10n/zh_HK.js @@ -185,7 +185,6 @@ OC.L10N.register( "Set default folder for accepted shares" : "為已接受的分享選擇一個默認資料夾", "Reset" : "重設", "Reset folder to system default" : "將資料夾重置為系統默認值", - "Share expiration: " : "共享有效期:", "Share Expiration" : "共享有效期", "group" : "群組", "conversation" : "對話", diff --git a/apps/files_sharing/l10n/zh_HK.json b/apps/files_sharing/l10n/zh_HK.json index 276ad85aa0e..931eab39ecd 100644 --- a/apps/files_sharing/l10n/zh_HK.json +++ b/apps/files_sharing/l10n/zh_HK.json @@ -183,7 +183,6 @@ "Set default folder for accepted shares" : "為已接受的分享選擇一個默認資料夾", "Reset" : "重設", "Reset folder to system default" : "將資料夾重置為系統默認值", - "Share expiration: " : "共享有效期:", "Share Expiration" : "共享有效期", "group" : "群組", "conversation" : "對話", diff --git a/apps/files_sharing/l10n/zh_TW.js b/apps/files_sharing/l10n/zh_TW.js index 1440018d36d..764bd713123 100644 --- a/apps/files_sharing/l10n/zh_TW.js +++ b/apps/files_sharing/l10n/zh_TW.js @@ -185,7 +185,7 @@ OC.L10N.register( "Set default folder for accepted shares" : "為接受的分享設定預設資料夾", "Reset" : "重設", "Reset folder to system default" : "將資料夾重設回系統預設", - "Share expiration: " : "分享過期:", + "Share expiration: {date}" : "分享到期日:{date}", "Share Expiration" : "分享過期", "group" : "群組", "conversation" : "對話", @@ -310,6 +310,7 @@ OC.L10N.register( "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "不屬於內部或外部分享的分享。這可能是來自應用程式或其他來源的分享。", "Share with accounts, teams, federated cloud IDs" : "與帳號、團隊、聯邦雲端 ID 分享", "Share with accounts and teams" : "與帳號及團隊分享", + "Federated cloud ID" : "聯邦雲端 ID", "Email, federated cloud ID" : "電子郵件、聯邦雲端 ID", "Unable to load the shares list" : "無法載入分享列表", "Expires {relativetime}" : "過期於 {relativetime}", diff --git a/apps/files_sharing/l10n/zh_TW.json b/apps/files_sharing/l10n/zh_TW.json index c801aecca37..580be7e28e2 100644 --- a/apps/files_sharing/l10n/zh_TW.json +++ b/apps/files_sharing/l10n/zh_TW.json @@ -183,7 +183,7 @@ "Set default folder for accepted shares" : "為接受的分享設定預設資料夾", "Reset" : "重設", "Reset folder to system default" : "將資料夾重設回系統預設", - "Share expiration: " : "分享過期:", + "Share expiration: {date}" : "分享到期日:{date}", "Share Expiration" : "分享過期", "group" : "群組", "conversation" : "對話", @@ -308,6 +308,7 @@ "Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "不屬於內部或外部分享的分享。這可能是來自應用程式或其他來源的分享。", "Share with accounts, teams, federated cloud IDs" : "與帳號、團隊、聯邦雲端 ID 分享", "Share with accounts and teams" : "與帳號及團隊分享", + "Federated cloud ID" : "聯邦雲端 ID", "Email, federated cloud ID" : "電子郵件、聯邦雲端 ID", "Unable to load the shares list" : "無法載入分享列表", "Expires {relativetime}" : "過期於 {relativetime}", diff --git a/apps/files_sharing/lib/Activity/Settings/PublicLinksUpload.php b/apps/files_sharing/lib/Activity/Settings/PublicLinksUpload.php index 00bf7d0dde9..bcdc4a4ff97 100644 --- a/apps/files_sharing/lib/Activity/Settings/PublicLinksUpload.php +++ b/apps/files_sharing/lib/Activity/Settings/PublicLinksUpload.php @@ -61,6 +61,6 @@ class PublicLinksUpload extends ShareActivitySettings { * @since 11.0.0 */ public function isDefaultEnabledMail() { - return true; + return false; } } diff --git a/apps/files_sharing/src/components/ShareExpiryTime.vue b/apps/files_sharing/src/components/ShareExpiryTime.vue index b789bc92db5..939142616e9 100644 --- a/apps/files_sharing/src/components/ShareExpiryTime.vue +++ b/apps/files_sharing/src/components/ShareExpiryTime.vue @@ -9,7 +9,7 @@ <NcButton v-if="expiryTime" class="hint-icon" type="tertiary" - :aria-label="t('files_sharing', 'Share expiration: ') + new Date(expiryTime).toLocaleString()"> + :aria-label="t('files_sharing', 'Share expiration: {date}', { date: new Date(expiryTime).toLocaleString() })"> <template #icon> <ClockIcon :size="20" /> </template> diff --git a/apps/files_sharing/src/components/SharingEntryLink.vue b/apps/files_sharing/src/components/SharingEntryLink.vue index 781626a1ec9..702b876306f 100644 --- a/apps/files_sharing/src/components/SharingEntryLink.vue +++ b/apps/files_sharing/src/components/SharingEntryLink.vue @@ -223,13 +223,14 @@ </template> <script> +import { showError, showSuccess } from '@nextcloud/dialogs' import { emit } from '@nextcloud/event-bus' +import { t } from '@nextcloud/l10n' +import moment from '@nextcloud/moment' import { generateUrl, getBaseUrl } from '@nextcloud/router' -import { showError, showSuccess } from '@nextcloud/dialogs' import { ShareType } from '@nextcloud/sharing' -import VueQrcode from '@chenfengyuan/vue-qrcode' -import moment from '@nextcloud/moment' +import VueQrcode from '@chenfengyuan/vue-qrcode' import NcActionButton from '@nextcloud/vue/components/NcActionButton' import NcActionCheckbox from '@nextcloud/vue/components/NcActionCheckbox' import NcActionInput from '@nextcloud/vue/components/NcActionInput' @@ -258,7 +259,7 @@ import GeneratePassword from '../utils/GeneratePassword.ts' import Share from '../models/Share.ts' import SharesMixin from '../mixins/SharesMixin.js' import ShareDetails from '../mixins/ShareDetails.js' -import { getLoggerBuilder } from '@nextcloud/logger' +import logger from '../services/logger.ts' export default { name: 'SharingEntryLink', @@ -313,10 +314,6 @@ export default { ExternalLegacyLinkActions: OCA.Sharing.ExternalLinkActions.state, ExternalShareActions: OCA.Sharing.ExternalShareActions.state, - logger: getLoggerBuilder() - .setApp('files_sharing') - .detectUser() - .build(), // tracks whether modal should be opened or not showQRCode: false, @@ -330,6 +327,8 @@ export default { * @return {string} */ title() { + const l10nOptions = { escape: false /* no escape as this string is already escaped by Vue */ } + // if we have a valid existing share (not pending) if (this.share && this.share.id) { if (!this.isShareOwner && this.share.ownerDisplayName) { @@ -337,26 +336,26 @@ export default { return t('files_sharing', '{shareWith} by {initiator}', { shareWith: this.share.shareWith, initiator: this.share.ownerDisplayName, - }) + }, l10nOptions) } return t('files_sharing', 'Shared via link by {initiator}', { initiator: this.share.ownerDisplayName, - }) + }, l10nOptions) } if (this.share.label && this.share.label.trim() !== '') { if (this.isEmailShareType) { if (this.isFileRequest) { return t('files_sharing', 'File request ({label})', { label: this.share.label.trim(), - }) + }, l10nOptions) } return t('files_sharing', 'Mail share ({label})', { label: this.share.label.trim(), - }) + }, l10nOptions) } return t('files_sharing', 'Share link ({label})', { label: this.share.label.trim(), - }) + }, l10nOptions) } if (this.isEmailShareType) { if (!this.share.shareWith || this.share.shareWith.trim() === '') { @@ -391,6 +390,7 @@ export default { } return null }, + passwordExpirationTime() { if (this.share.passwordExpirationTime === null) { return null @@ -613,7 +613,7 @@ export default { * @param {boolean} shareReviewComplete if the share was reviewed */ async onNewLinkShare(shareReviewComplete = false) { - this.logger.debug('onNewLinkShare called (with this.share)', this.share) + logger.debug('onNewLinkShare called (with this.share)', this.share) // do not run again if already loading if (this.loading) { return @@ -628,7 +628,7 @@ export default { shareDefaults.expiration = this.formatDateToString(this.config.defaultExpirationDate) } - this.logger.debug('Missing required properties?', this.enforcedPropertiesMissing) + logger.debug('Missing required properties?', this.enforcedPropertiesMissing) // Do not push yet if we need a password or an expiration date: show pending menu // A share would require a review for example is default expiration date is set but not enforced, this allows // the user to review the share and remove the expiration date if they don't want it @@ -636,7 +636,7 @@ export default { this.pending = true this.shareCreationComplete = false - this.logger.info('Share policy requires a review or has mandated properties (password, expirationDate)...') + logger.info('Share policy requires a review or has mandated properties (password, expirationDate)...') // ELSE, show the pending popovermenu // if password default or enforced, pre-fill with random one @@ -664,13 +664,13 @@ export default { // if the share is valid, create it on the server if (this.checkShare(this.share)) { try { - this.logger.info('Sending existing share to server', this.share) + logger.info('Sending existing share to server', this.share) await this.pushNewLinkShare(this.share, true) this.shareCreationComplete = true - this.logger.info('Share created on server', this.share) + logger.info('Share created on server', this.share) } catch (e) { this.pending = false - this.logger.error('Error creating share', e) + logger.error('Error creating share', e) return false } return true diff --git a/apps/files_sharing/src/views/SharingTab.vue b/apps/files_sharing/src/views/SharingTab.vue index e50c3292055..82a11dea2e0 100644 --- a/apps/files_sharing/src/views/SharingTab.vue +++ b/apps/files_sharing/src/views/SharingTab.vue @@ -100,7 +100,7 @@ :file-info="fileInfo" @open-sharing-details="toggleShareDetailsView" /> <!-- link shares list --> - <SharingLinkList v-if="!loading" + <SharingLinkList v-if="!loading && isLinkSharingAllowed" ref="linkShareList" :can-reshare="canReshare" :file-info="fileInfo" @@ -157,6 +157,7 @@ <script> import { getCurrentUser } from '@nextcloud/auth' +import { getCapabilities } from '@nextcloud/capabilities' import { orderBy } from '@nextcloud/files' import { loadState } from '@nextcloud/initial-state' import { generateOcsUrl } from '@nextcloud/router' @@ -242,7 +243,24 @@ export default { * @return {boolean} */ isSharedWithMe() { - return Object.keys(this.sharedWithMe).length > 0 + return this.sharedWithMe !== null + && this.sharedWithMe !== undefined + }, + + /** + * Is link sharing allowed for the current user? + * + * @return {boolean} + */ + isLinkSharingAllowed() { + const currentUser = getCurrentUser() + if (!currentUser) { + return false + } + + const capabilities = getCapabilities() + const publicSharing = capabilities.files_sharing?.public || {} + return publicSharing.enabled === true }, canReshare() { @@ -257,6 +275,9 @@ export default { }, externalShareInputPlaceholder() { + if (!this.isLinkSharingAllowed) { + return t('files_sharing', 'Federated cloud ID') + } return this.config.showFederatedSharesAsInternal ? t('files_sharing', 'Email') : t('files_sharing', 'Email, federated cloud ID') diff --git a/apps/files_sharing/tests/Listener/LoadAdditionalListenerTest.php b/apps/files_sharing/tests/Listener/LoadAdditionalListenerTest.php index cd3fb0568fa..75bee35d58a 100644 --- a/apps/files_sharing/tests/Listener/LoadAdditionalListenerTest.php +++ b/apps/files_sharing/tests/Listener/LoadAdditionalListenerTest.php @@ -16,6 +16,7 @@ use OCP\EventDispatcher\Event; use OCP\IConfig; use OCP\L10N\IFactory; use OCP\Share\IManager; +use OCP\Util; use PHPUnit\Framework\MockObject\MockObject; use Psr\Log\LoggerInterface; use Test\TestCase; @@ -37,6 +38,21 @@ class LoadAdditionalListenerTest extends TestCase { $this->factory = $this->createMock(IFactory::class); $this->initialStateService = $this->createMock(InitialStateService::class); $this->config = $this->createMock(IConfig::class); + + /* Empty static array to avoid inter-test conflicts */ + \OC_Util::$styles = []; + self::invokePrivate(Util::class, 'scripts', [[]]); + self::invokePrivate(Util::class, 'scriptDeps', [[]]); + self::invokePrivate(Util::class, 'scriptsInit', [[]]); + } + + protected function tearDown(): void { + parent::tearDown(); + + \OC_Util::$styles = []; + self::invokePrivate(Util::class, 'scripts', [[]]); + self::invokePrivate(Util::class, 'scriptDeps', [[]]); + self::invokePrivate(Util::class, 'scriptsInit', [[]]); } public function testHandleIgnoresNonMatchingEvent(): void { @@ -61,7 +77,7 @@ class LoadAdditionalListenerTest extends TestCase { $this->overwriteService(InitialStateService::class, $this->initialStateService); $this->overwriteService(IConfig::class, $this->config); - $scriptsBefore = \OCP\Util::getScripts(); + $scriptsBefore = Util::getScripts(); $this->assertNotContains('files_sharing/l10n/language_mock', $scriptsBefore); $this->assertNotContains('files_sharing/js/additionalScripts', $scriptsBefore); $this->assertNotContains('files_sharing/js/init', $scriptsBefore); @@ -71,14 +87,12 @@ class LoadAdditionalListenerTest extends TestCase { $listener->handle($this->event); // assert array $scripts contains the expected scripts - $scriptsAfter = \OCP\Util::getScripts(); + $scriptsAfter = Util::getScripts(); $this->assertContains('files_sharing/l10n/language_mock', $scriptsAfter); $this->assertContains('files_sharing/js/additionalScripts', $scriptsAfter); $this->assertNotContains('files_sharing/js/init', $scriptsAfter); $this->assertContains('files_sharing/css/icons', \OC_Util::$styles); - - $this->assertTrue(true); } public function testHandleWithLoadAdditionalScriptsEventWithShareApiEnabled(): void { @@ -92,17 +106,15 @@ class LoadAdditionalListenerTest extends TestCase { $this->overwriteService(IConfig::class, $this->config); $this->overwriteService(IFactory::class, $this->factory); - $scriptsBefore = \OCP\Util::getScripts(); + $scriptsBefore = Util::getScripts(); $this->assertNotContains('files_sharing/js/init', $scriptsBefore); // Util static methods can't be easily mocked, so just ensure no exceptions $listener->handle($this->event); - $scriptsAfter = \OCP\Util::getScripts(); + $scriptsAfter = Util::getScripts(); // assert array $scripts contains the expected scripts $this->assertContains('files_sharing/js/init', $scriptsAfter); - - $this->assertTrue(true); } } diff --git a/apps/files_trashbin/l10n/cs.js b/apps/files_trashbin/l10n/cs.js index 48eabc39b81..383b3658ebf 100644 --- a/apps/files_trashbin/l10n/cs.js +++ b/apps/files_trashbin/l10n/cs.js @@ -16,6 +16,7 @@ OC.L10N.register( "Original location" : "Původní umístění", "Deleted by" : "Smazal(a)", "Deleted" : "Smazáno", + "few seconds ago" : "před několika sekundami", "A long time ago" : "Před dlouhou dobou", "Unknown" : "Neznámé", "All files" : "Všechny soubory", diff --git a/apps/files_trashbin/l10n/cs.json b/apps/files_trashbin/l10n/cs.json index cc0e06dab41..8023981f1c4 100644 --- a/apps/files_trashbin/l10n/cs.json +++ b/apps/files_trashbin/l10n/cs.json @@ -14,6 +14,7 @@ "Original location" : "Původní umístění", "Deleted by" : "Smazal(a)", "Deleted" : "Smazáno", + "few seconds ago" : "před několika sekundami", "A long time ago" : "Před dlouhou dobou", "Unknown" : "Neznámé", "All files" : "Všechny soubory", diff --git a/apps/files_trashbin/l10n/de.js b/apps/files_trashbin/l10n/de.js index 75a7ce7d443..0c623ec6ad0 100644 --- a/apps/files_trashbin/l10n/de.js +++ b/apps/files_trashbin/l10n/de.js @@ -16,6 +16,7 @@ OC.L10N.register( "Original location" : "Ursprünglicher Ort", "Deleted by" : "Gelöscht von", "Deleted" : "Gelöscht", + "few seconds ago" : "Gerade eben", "A long time ago" : "Vor langer Zeit", "Unknown" : "Unbekannt", "All files" : "Alle Dateien", diff --git a/apps/files_trashbin/l10n/de.json b/apps/files_trashbin/l10n/de.json index 6085c3ba2ee..d68fd5e470b 100644 --- a/apps/files_trashbin/l10n/de.json +++ b/apps/files_trashbin/l10n/de.json @@ -14,6 +14,7 @@ "Original location" : "Ursprünglicher Ort", "Deleted by" : "Gelöscht von", "Deleted" : "Gelöscht", + "few seconds ago" : "Gerade eben", "A long time ago" : "Vor langer Zeit", "Unknown" : "Unbekannt", "All files" : "Alle Dateien", diff --git a/apps/files_trashbin/l10n/de_DE.js b/apps/files_trashbin/l10n/de_DE.js index 179a3689d7e..27b41dcea4d 100644 --- a/apps/files_trashbin/l10n/de_DE.js +++ b/apps/files_trashbin/l10n/de_DE.js @@ -16,6 +16,7 @@ OC.L10N.register( "Original location" : "Ursprünglicher Ort", "Deleted by" : "Gelöscht von", "Deleted" : "Gelöscht", + "few seconds ago" : "Gerade eben", "A long time ago" : "Vor langer Zeit", "Unknown" : "Unbekannt", "All files" : "Alle Dateien", diff --git a/apps/files_trashbin/l10n/de_DE.json b/apps/files_trashbin/l10n/de_DE.json index 974d0a02b90..c4f1ca5ea43 100644 --- a/apps/files_trashbin/l10n/de_DE.json +++ b/apps/files_trashbin/l10n/de_DE.json @@ -14,6 +14,7 @@ "Original location" : "Ursprünglicher Ort", "Deleted by" : "Gelöscht von", "Deleted" : "Gelöscht", + "few seconds ago" : "Gerade eben", "A long time ago" : "Vor langer Zeit", "Unknown" : "Unbekannt", "All files" : "Alle Dateien", diff --git a/apps/files_trashbin/l10n/et_EE.js b/apps/files_trashbin/l10n/et_EE.js index c8dce5c3a46..0e1b4ed1ae5 100644 --- a/apps/files_trashbin/l10n/et_EE.js +++ b/apps/files_trashbin/l10n/et_EE.js @@ -16,6 +16,7 @@ OC.L10N.register( "Original location" : "Algasukoht", "Deleted by" : "Kustutas", "Deleted" : "Kustutatud", + "few seconds ago" : "mõne sekundi eest", "A long time ago" : "Pikka aega tagasi", "Unknown" : "Teadmata", "All files" : "Kõik failid", diff --git a/apps/files_trashbin/l10n/et_EE.json b/apps/files_trashbin/l10n/et_EE.json index 57e4d9a0921..a3253ba0760 100644 --- a/apps/files_trashbin/l10n/et_EE.json +++ b/apps/files_trashbin/l10n/et_EE.json @@ -14,6 +14,7 @@ "Original location" : "Algasukoht", "Deleted by" : "Kustutas", "Deleted" : "Kustutatud", + "few seconds ago" : "mõne sekundi eest", "A long time ago" : "Pikka aega tagasi", "Unknown" : "Teadmata", "All files" : "Kõik failid", diff --git a/apps/files_trashbin/l10n/nl.js b/apps/files_trashbin/l10n/nl.js index 68913984e38..c36ecaab64a 100644 --- a/apps/files_trashbin/l10n/nl.js +++ b/apps/files_trashbin/l10n/nl.js @@ -3,20 +3,26 @@ OC.L10N.register( { "restored" : "hersteld", "Deleted files" : "Verwijderde bestanden", + "Deleted files and folders in the trash bin (may expire during export if you are low on storage space)" : "Verwijderde bestanden en mappen in de prullenbak (kunnen vervallen tijdens het exporteren wanneer je weinig opslag over hebt)", + "This application enables people to restore files that were deleted from the system." : "Deze applicatie maakt het mogelijk om mensen bestanden te laten herstellen die zijn verwijderd van het systeem.", + "This application enables people to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the people file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent an account from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "Deze applicatie maakt het mogelijk om mensen bestanden te laten herstellen die zijn verwijderd van het systeem. Het laat een lijst van verwijderde bestanden zien in de web interface, en het heeft de mogelijkheid van het herstellen van die verwijderde bestanden terug naar de bestandmappen van de gebruikers of de mogelijkheid tot het permanent verwijderen van die bestanden van het systeem. Het herstellen van een bestand doet ook de gerelateerde bestandversies herstellen, wanneer de versies applicatie is ingeschakeld. Wanneer een bestand is verwijderd van een share, kan deze op dezelfde manier hersteld worden, alleen het is niet langer meer gedeeld. Standaard, blijven de bestanden in de prullenbak voor 30 dagen.\nOm er voor te zorgen dat een account vrije opslag overhoudt, doet de Verwijderde bestanden app niet meer dan 50% van het huidige beschikbare vrije quota voor verwijderde bestanden gebruiken. Als de verwijderde bestanden het limeit bereiken, doet de app eerst de oudste bestanden verwijderden totdat het onder het limiet komt. Meer informatie is beschikbaar in de Verwijderde bestanden documentatie.", "Restore" : "Herstellen", + "Not enough free space to restore the file/folder" : "Er is niet genoeg vrije opslag over om het bestand/de map te herstellen", + "Empty deleted files" : "Leeg verwijderde bestanden", + "Confirm permanent deletion" : "Bevestig permanente verwijdering", + "Are you sure you want to permanently delete all files and folders in the trash? This cannot be undone." : "Weet je zeker dat je parmanent alle bestanden en mappen in de prullenbak wilt verwijderen? Dit kan niet ongedaan worden gemaakt.", + "Cancel" : "Annuleren", + "Deletion cancelled" : "Verwijdering geannuleerd", + "Original location" : "Originele locatie", + "Deleted by" : "Verwijderd door", + "Deleted" : "Verwijderd", + "few seconds ago" : "paar seconden geleden", + "A long time ago" : "Een lange tijd geleden", "Unknown" : "Onbekend", "All files" : "Alle bestanden", - "You" : "Je", - "Deleted" : "Verwijderd", - "Cancel" : "Annuleren", - "Deletion cancelled" : "Verwijderen geannulleerd", + "You" : "Jou", + "List of files that have been deleted." : "Lijst van bestanden die verwijderd zijn.", "No deleted files" : "Geen verwijderde bestanden", - "This application enables users to restore files that were deleted from the system." : "Deze applicatie stelt gebruikers in staat om verwijderde bestanden te herstellen.", - "This application enables users to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the users file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent a user from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "Met deze applicatie kunnen gebruikers bestanden herstellen die uit het systeem zijn verwijderd. Het toont in de webinterface een lijst met verwijderde bestanden en heeft opties om die verwijderde bestanden terug te zetten naar de bestandsmappen van de gebruikers of ze permanent uit het systeem te verwijderen. Het herstellen van een bestand herstelt ook gerelateerde bestandsversies, als de versiebeheer-applicatie is ingeschakeld. Wanneer een bestand uit een share wordt verwijderd, kan het op dezelfde manier worden hersteld, hoewel het niet langer wordt gedeeld. Standaard blijven deze bestanden 30 dagen in de prullenbak staan.\nOm te voorkomen dat een gebruiker onvoldoende schijfruimte heeft, gebruikt de app Verwijderde bestanden niet meer dan 50% van de momenteel beschikbare vrije quota voor verwijderde bestanden. Als de verwijderde bestanden deze limiet overschrijden, verwijdert de app de oudste bestanden totdat deze de limiet is bereikt. Meer informatie is beschikbaar in de documentatie voor Verwijderde bestanden.", - "You will be able to recover deleted files from here" : "Van hieruit kun je verwijderde bestanden terugzetten", - "No entries found in this folder" : "Niets gevonden in deze map", - "Select all" : "Alles selecteren", - "Name" : "Naam", - "Actions" : "Acties" + "Files and folders you have deleted will show up here" : "Bestanden en mappen die je verwijderd hebt worden hier getoond" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_trashbin/l10n/nl.json b/apps/files_trashbin/l10n/nl.json index 01efdaacca8..3b2898f9f44 100644 --- a/apps/files_trashbin/l10n/nl.json +++ b/apps/files_trashbin/l10n/nl.json @@ -1,20 +1,26 @@ { "translations": { "restored" : "hersteld", "Deleted files" : "Verwijderde bestanden", + "Deleted files and folders in the trash bin (may expire during export if you are low on storage space)" : "Verwijderde bestanden en mappen in de prullenbak (kunnen vervallen tijdens het exporteren wanneer je weinig opslag over hebt)", + "This application enables people to restore files that were deleted from the system." : "Deze applicatie maakt het mogelijk om mensen bestanden te laten herstellen die zijn verwijderd van het systeem.", + "This application enables people to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the people file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent an account from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "Deze applicatie maakt het mogelijk om mensen bestanden te laten herstellen die zijn verwijderd van het systeem. Het laat een lijst van verwijderde bestanden zien in de web interface, en het heeft de mogelijkheid van het herstellen van die verwijderde bestanden terug naar de bestandmappen van de gebruikers of de mogelijkheid tot het permanent verwijderen van die bestanden van het systeem. Het herstellen van een bestand doet ook de gerelateerde bestandversies herstellen, wanneer de versies applicatie is ingeschakeld. Wanneer een bestand is verwijderd van een share, kan deze op dezelfde manier hersteld worden, alleen het is niet langer meer gedeeld. Standaard, blijven de bestanden in de prullenbak voor 30 dagen.\nOm er voor te zorgen dat een account vrije opslag overhoudt, doet de Verwijderde bestanden app niet meer dan 50% van het huidige beschikbare vrije quota voor verwijderde bestanden gebruiken. Als de verwijderde bestanden het limeit bereiken, doet de app eerst de oudste bestanden verwijderden totdat het onder het limiet komt. Meer informatie is beschikbaar in de Verwijderde bestanden documentatie.", "Restore" : "Herstellen", + "Not enough free space to restore the file/folder" : "Er is niet genoeg vrije opslag over om het bestand/de map te herstellen", + "Empty deleted files" : "Leeg verwijderde bestanden", + "Confirm permanent deletion" : "Bevestig permanente verwijdering", + "Are you sure you want to permanently delete all files and folders in the trash? This cannot be undone." : "Weet je zeker dat je parmanent alle bestanden en mappen in de prullenbak wilt verwijderen? Dit kan niet ongedaan worden gemaakt.", + "Cancel" : "Annuleren", + "Deletion cancelled" : "Verwijdering geannuleerd", + "Original location" : "Originele locatie", + "Deleted by" : "Verwijderd door", + "Deleted" : "Verwijderd", + "few seconds ago" : "paar seconden geleden", + "A long time ago" : "Een lange tijd geleden", "Unknown" : "Onbekend", "All files" : "Alle bestanden", - "You" : "Je", - "Deleted" : "Verwijderd", - "Cancel" : "Annuleren", - "Deletion cancelled" : "Verwijderen geannulleerd", + "You" : "Jou", + "List of files that have been deleted." : "Lijst van bestanden die verwijderd zijn.", "No deleted files" : "Geen verwijderde bestanden", - "This application enables users to restore files that were deleted from the system." : "Deze applicatie stelt gebruikers in staat om verwijderde bestanden te herstellen.", - "This application enables users to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the users file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent a user from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "Met deze applicatie kunnen gebruikers bestanden herstellen die uit het systeem zijn verwijderd. Het toont in de webinterface een lijst met verwijderde bestanden en heeft opties om die verwijderde bestanden terug te zetten naar de bestandsmappen van de gebruikers of ze permanent uit het systeem te verwijderen. Het herstellen van een bestand herstelt ook gerelateerde bestandsversies, als de versiebeheer-applicatie is ingeschakeld. Wanneer een bestand uit een share wordt verwijderd, kan het op dezelfde manier worden hersteld, hoewel het niet langer wordt gedeeld. Standaard blijven deze bestanden 30 dagen in de prullenbak staan.\nOm te voorkomen dat een gebruiker onvoldoende schijfruimte heeft, gebruikt de app Verwijderde bestanden niet meer dan 50% van de momenteel beschikbare vrije quota voor verwijderde bestanden. Als de verwijderde bestanden deze limiet overschrijden, verwijdert de app de oudste bestanden totdat deze de limiet is bereikt. Meer informatie is beschikbaar in de documentatie voor Verwijderde bestanden.", - "You will be able to recover deleted files from here" : "Van hieruit kun je verwijderde bestanden terugzetten", - "No entries found in this folder" : "Niets gevonden in deze map", - "Select all" : "Alles selecteren", - "Name" : "Naam", - "Actions" : "Acties" + "Files and folders you have deleted will show up here" : "Bestanden en mappen die je verwijderd hebt worden hier getoond" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_trashbin/l10n/ru.js b/apps/files_trashbin/l10n/ru.js index 1d4744b6f69..a62710baef6 100644 --- a/apps/files_trashbin/l10n/ru.js +++ b/apps/files_trashbin/l10n/ru.js @@ -16,6 +16,7 @@ OC.L10N.register( "Original location" : "Исходный путь", "Deleted by" : "Удалено", "Deleted" : "Удалён", + "few seconds ago" : "несколько секунд назад", "A long time ago" : "Очень давно", "Unknown" : "Неизвестно", "All files" : "Все файлы", diff --git a/apps/files_trashbin/l10n/ru.json b/apps/files_trashbin/l10n/ru.json index 4b591cdbee5..70e8796bf3b 100644 --- a/apps/files_trashbin/l10n/ru.json +++ b/apps/files_trashbin/l10n/ru.json @@ -14,6 +14,7 @@ "Original location" : "Исходный путь", "Deleted by" : "Удалено", "Deleted" : "Удалён", + "few seconds ago" : "несколько секунд назад", "A long time ago" : "Очень давно", "Unknown" : "Неизвестно", "All files" : "Все файлы", diff --git a/apps/files_trashbin/l10n/sr.js b/apps/files_trashbin/l10n/sr.js index cf8b15bda0e..11821c8a114 100644 --- a/apps/files_trashbin/l10n/sr.js +++ b/apps/files_trashbin/l10n/sr.js @@ -16,6 +16,7 @@ OC.L10N.register( "Original location" : "Оригинална локација", "Deleted by" : "Обрисао је", "Deleted" : "Обрисано", + "few seconds ago" : "пре неколико секунди", "A long time ago" : "Пре доста времена", "Unknown" : "Непознато", "All files" : "Сви фајлови", diff --git a/apps/files_trashbin/l10n/sr.json b/apps/files_trashbin/l10n/sr.json index 113eda95347..179e1352fa4 100644 --- a/apps/files_trashbin/l10n/sr.json +++ b/apps/files_trashbin/l10n/sr.json @@ -14,6 +14,7 @@ "Original location" : "Оригинална локација", "Deleted by" : "Обрисао је", "Deleted" : "Обрисано", + "few seconds ago" : "пре неколико секунди", "A long time ago" : "Пре доста времена", "Unknown" : "Непознато", "All files" : "Сви фајлови", diff --git a/apps/files_trashbin/l10n/sv.js b/apps/files_trashbin/l10n/sv.js index fd50574e6fc..265736af1c8 100644 --- a/apps/files_trashbin/l10n/sv.js +++ b/apps/files_trashbin/l10n/sv.js @@ -16,6 +16,7 @@ OC.L10N.register( "Original location" : "Ursprunglig plats", "Deleted by" : "Raderad av", "Deleted" : "Borttagen", + "few seconds ago" : "några sekunder sedan", "A long time ago" : "För länge sedan", "Unknown" : "Okänd", "All files" : "Alla filer", diff --git a/apps/files_trashbin/l10n/sv.json b/apps/files_trashbin/l10n/sv.json index 1bf54bf7379..c2ebb95fced 100644 --- a/apps/files_trashbin/l10n/sv.json +++ b/apps/files_trashbin/l10n/sv.json @@ -14,6 +14,7 @@ "Original location" : "Ursprunglig plats", "Deleted by" : "Raderad av", "Deleted" : "Borttagen", + "few seconds ago" : "några sekunder sedan", "A long time ago" : "För länge sedan", "Unknown" : "Okänd", "All files" : "Alla filer", diff --git a/apps/files_trashbin/l10n/uk.js b/apps/files_trashbin/l10n/uk.js index c5c8319afb1..43f6a021a09 100644 --- a/apps/files_trashbin/l10n/uk.js +++ b/apps/files_trashbin/l10n/uk.js @@ -15,6 +15,7 @@ OC.L10N.register( "Original location" : "Звідки вилучено", "Deleted by" : "Ким вилучено", "Deleted" : "Вилучено", + "few seconds ago" : "кілька секунд тому", "A long time ago" : "Давно", "Unknown" : "Невідомо", "All files" : "Усі файли", diff --git a/apps/files_trashbin/l10n/uk.json b/apps/files_trashbin/l10n/uk.json index 3c4160893a2..dcef4ac3b36 100644 --- a/apps/files_trashbin/l10n/uk.json +++ b/apps/files_trashbin/l10n/uk.json @@ -13,6 +13,7 @@ "Original location" : "Звідки вилучено", "Deleted by" : "Ким вилучено", "Deleted" : "Вилучено", + "few seconds ago" : "кілька секунд тому", "A long time ago" : "Давно", "Unknown" : "Невідомо", "All files" : "Усі файли", diff --git a/apps/files_trashbin/l10n/zh_TW.js b/apps/files_trashbin/l10n/zh_TW.js index 2deb89b49de..26b9abd0e0f 100644 --- a/apps/files_trashbin/l10n/zh_TW.js +++ b/apps/files_trashbin/l10n/zh_TW.js @@ -16,6 +16,7 @@ OC.L10N.register( "Original location" : "原始位置", "Deleted by" : "刪除者", "Deleted" : "已刪除", + "few seconds ago" : "幾秒前", "A long time ago" : "很久以前", "Unknown" : "未知", "All files" : "所有檔案", diff --git a/apps/files_trashbin/l10n/zh_TW.json b/apps/files_trashbin/l10n/zh_TW.json index ba719d2b0e6..e9c0e9de42d 100644 --- a/apps/files_trashbin/l10n/zh_TW.json +++ b/apps/files_trashbin/l10n/zh_TW.json @@ -14,6 +14,7 @@ "Original location" : "原始位置", "Deleted by" : "刪除者", "Deleted" : "已刪除", + "few seconds ago" : "幾秒前", "A long time ago" : "很久以前", "Unknown" : "未知", "All files" : "所有檔案", diff --git a/apps/files_versions/src/components/Version.vue b/apps/files_versions/src/components/Version.vue index 8ea16e215c6..275f1d0ddbf 100644 --- a/apps/files_versions/src/components/Version.vue +++ b/apps/files_versions/src/components/Version.vue @@ -45,7 +45,10 @@ disable-menu disable-tooltip :show-user-status="false" /> - <div>{{ versionAuthor }}</div> + <div class="version__info__author_name" + :title="versionAuthor"> + {{ versionAuthor }} + </div> </div> </div> </template> @@ -349,12 +352,19 @@ export default defineComponent({ gap: 0.5rem; color: var(--color-main-text); font-weight: 500; + overflow: hidden; &__label { font-weight: 700; // Fix overflow on narrow screens overflow: hidden; text-overflow: ellipsis; + min-width: 110px; + } + + &__author_name { + overflow: hidden; + text-overflow: ellipsis; } &__date { diff --git a/apps/provisioning_api/appinfo/routes.php b/apps/provisioning_api/appinfo/routes.php index 66d1fb699a9..df4f806fa08 100644 --- a/apps/provisioning_api/appinfo/routes.php +++ b/apps/provisioning_api/appinfo/routes.php @@ -35,6 +35,7 @@ return [ ['root' => '/cloud', 'name' => 'Users#getCurrentUser', 'url' => '/user', 'verb' => 'GET'], ['root' => '/cloud', 'name' => 'Users#getEditableFields', 'url' => '/user/fields', 'verb' => 'GET'], ['root' => '/cloud', 'name' => 'Users#getEditableFieldsForUser', 'url' => '/user/fields/{userId}', 'verb' => 'GET'], + ['root' => '/cloud', 'name' => 'Users#getEnabledApps', 'url' => '/user/apps', 'verb' => 'GET'], ['root' => '/cloud', 'name' => 'Users#editUser', 'url' => '/users/{userId}', 'verb' => 'PUT'], ['root' => '/cloud', 'name' => 'Users#editUserMultiValue', 'url' => '/users/{userId}/{collectionName}', 'verb' => 'PUT', 'requirements' => ['collectionName' => '^(?!enable$|disable$)[a-zA-Z0-9_]*$']], ['root' => '/cloud', 'name' => 'Users#wipeUserDevices', 'url' => '/users/{userId}/wipe', 'verb' => 'POST'], diff --git a/apps/provisioning_api/l10n/de.js b/apps/provisioning_api/l10n/de.js index e407741f9d5..155d7f9c848 100644 --- a/apps/provisioning_api/l10n/de.js +++ b/apps/provisioning_api/l10n/de.js @@ -29,11 +29,11 @@ OC.L10N.register( "Email address not available" : "E-Mail-Adresse nicht verfügbar", "Sending email failed" : "Senden der E-Mail ist fehlgeschlagen", "Email confirmation" : "E-Mail-Bestätigung", - "To enable the email address %s please click the button below." : "Um die E-Mail-Adresse %s zu bestätigen, klicke bitte auf die untenstehende Schaltfläche.", + "To enable the email address %s please click the button below." : "Um die E-Mailadresse %s zu bestätigen, auf die untenstehende Schaltfläche klicken.", "Confirm" : "Bestätigen", "Email was already removed from account and cannot be confirmed anymore." : "Diese E-Mail-Adresse wurde bereits aus dem Konto entfernt und kann nicht mehr bestätigt werden.", - "Could not verify mail because the token is expired." : "Die E-Mail konnte nicht verifiziert werden, da die Frist des Tokens abgelaufen ist.", - "Could not verify mail because the token is invalid." : "Die E-Mail konnte nicht verifiziert werden, da der Token ungültig ist.", + "Could not verify mail because the token is expired." : "Die E-Mailadresse konnte nicht verifiziert werden, da das Token abgelaufen ist.", + "Could not verify mail because the token is invalid." : "Die E-Mailadresse konnte nicht verifiziert werden, da der Token ungültig ist.", "An unexpected error occurred. Please contact your admin." : "Es ist ein unerwarteter Fehler aufgetreten, bitte kontaktiere deine Administration.", "Email confirmation successful" : "Die E-Mail Bestätigung war erfolgreich.", "Provisioning API" : "Bereitstellungs-API", diff --git a/apps/provisioning_api/l10n/de.json b/apps/provisioning_api/l10n/de.json index 36249979fa4..0fa532f48cd 100644 --- a/apps/provisioning_api/l10n/de.json +++ b/apps/provisioning_api/l10n/de.json @@ -27,11 +27,11 @@ "Email address not available" : "E-Mail-Adresse nicht verfügbar", "Sending email failed" : "Senden der E-Mail ist fehlgeschlagen", "Email confirmation" : "E-Mail-Bestätigung", - "To enable the email address %s please click the button below." : "Um die E-Mail-Adresse %s zu bestätigen, klicke bitte auf die untenstehende Schaltfläche.", + "To enable the email address %s please click the button below." : "Um die E-Mailadresse %s zu bestätigen, auf die untenstehende Schaltfläche klicken.", "Confirm" : "Bestätigen", "Email was already removed from account and cannot be confirmed anymore." : "Diese E-Mail-Adresse wurde bereits aus dem Konto entfernt und kann nicht mehr bestätigt werden.", - "Could not verify mail because the token is expired." : "Die E-Mail konnte nicht verifiziert werden, da die Frist des Tokens abgelaufen ist.", - "Could not verify mail because the token is invalid." : "Die E-Mail konnte nicht verifiziert werden, da der Token ungültig ist.", + "Could not verify mail because the token is expired." : "Die E-Mailadresse konnte nicht verifiziert werden, da das Token abgelaufen ist.", + "Could not verify mail because the token is invalid." : "Die E-Mailadresse konnte nicht verifiziert werden, da der Token ungültig ist.", "An unexpected error occurred. Please contact your admin." : "Es ist ein unerwarteter Fehler aufgetreten, bitte kontaktiere deine Administration.", "Email confirmation successful" : "Die E-Mail Bestätigung war erfolgreich.", "Provisioning API" : "Bereitstellungs-API", diff --git a/apps/provisioning_api/l10n/ru.js b/apps/provisioning_api/l10n/ru.js index 604a71392e7..7fa4c8d7e81 100644 --- a/apps/provisioning_api/l10n/ru.js +++ b/apps/provisioning_api/l10n/ru.js @@ -1,8 +1,33 @@ OC.L10N.register( "provisioning_api", { - "Logged in user must be an administrator or have authorization to edit this setting." : "Вошедший пользователь должен быть администратором или иметь полномочия для редактирования этого параметра.", + "Logged in account must be an administrator or have authorization to edit this setting." : "Для изменения этого параметра необходимо быть администратором или иметь соответствующие права.", + "Could not create non-existing user ID" : "Невозможно создать несуществующий идентификатор пользователя", "User already exists" : "Пользователь уже существует", + "Group %1$s does not exist" : "Группа %1$s не существует", + "Insufficient privileges for group %1$s" : "Недостаточно прав для группы %1$s", + "No group specified (required for sub-admins)" : "Группа не указана (обязательно для субадминистраторов)", + "Sub-admin group does not exist" : "Группа субадминистратора не существует", + "Cannot create sub-admins for admin group" : "Нельзя назначить субадминистраторов для группы администраторов", + "No permissions to promote sub-admins" : "Недостаточно прав для назначения субадминистраторов", + "Invalid password value" : "Некорректное значение пароля", + "An email address is required, to send a password link to the user." : "Требуется адрес электронной почты для отправки ссылки на установку пароля пользователю.", + "Required email address was not provided" : "Не указан обязательный адрес электронной почты", + "Invalid quota value: %1$s" : "Недопустимое значение квоты: %1$s", + "Invalid quota value. %1$s is exceeding the maximum quota" : "Недопустимое значение квоты.%1$s превышает максимальное значение", + "Unlimited quota is forbidden on this instance" : "Безлимитная квота запрещена в этом инстансе", + "Setting the password is not supported by the users backend" : "Установка пароля не поддерживается используемой системой управления пользователями", + "Invalid language" : "Недопустимый язык", + "Invalid locale" : "Недопустимая локаль", + "Invalid first day of week" : "Недопустимый первый день недели", + "Cannot remove yourself from the admin group" : "Нельзя удалить себя из группы администраторов", + "Cannot remove yourself from this group as you are a sub-admin" : "Нельзя удалить себя из этой группы, так как вы являетесь субадминистратором", + "Not viable to remove user from the last group you are sub-admin of" : "Нельзя удалить пользователя из последней группы, в которой вы являетесь субадминистратором", + "User does not exist" : "Пользователь не существует", + "Group does not exist" : "Группа не существует", + "User is not a sub-admin of this group" : "Пользователь не является субадминистратором этой группы", + "Email address not available" : "Адрес электронной почты недоступен", + "Sending email failed" : "Не удалось отправить письмо", "Email confirmation" : "Подтверждение электронной почты", "To enable the email address %s please click the button below." : "Чтобы включить адрес электронной почты %s, пожалуйста, нажмите на кнопку ниже.", "Confirm" : "Подтвердить", @@ -12,7 +37,7 @@ OC.L10N.register( "An unexpected error occurred. Please contact your admin." : "Произошла неизвестная ошибка. Пожалуйста, свяжитесь с администратором.", "Email confirmation successful" : "Электронная почта подтверждена", "Provisioning API" : "Provisioning API", - "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Это приложение предоставляет API, которое может использоваться внешними системами для управления пользователями, группами и приложениями.", - "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Это приложение включает набор API-интерфейсов, которые внешние системы могут использовать для создания, редактирования, удаления и запроса пользователя\n\t\tатрибуты, запрос, установка и удаление групп, установка квоты и запрос общего хранилища, используемого в Nextcloud. Пользователи-администраторы группы\n\t\tтакже может запрашивать Nextcloud и выполнять те же функции, что и администратор, для групп, которыми они управляют. API также позволяет\n\t\tадминистратору запрос активных приложений Nextcloud, информации о приложении, а также для удаленного включения или отключения приложения.\n\t\tПосле включения приложения HTTP-запросы можно использовать через заголовок Basic Auth для выполнения любых функций.\n\t\tДополнительная информация доступна в документации по Provisioning API, включая примеры вызовов.\n\t\tи ответы сервера." + "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Это приложение предоставляет набор API, которые внешние системы могут использовать для управления учётными записями, группами и приложениями.", + "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Это приложение включает набор API, которые внешние системы могут использовать для создания, редактирования, удаления и запроса атрибутов учетной записи, запроса, установки и удаления групп, установки квоты и запроса общего хранилища, используемого в Nextcloud. Учетные записи администратора группы\nтакже могут запрашивать Nextcloud и выполнять те же функции, что и администратор для групп, которыми они управляют. API также позволяет\nадминистратору запрашивать активные приложения Nextcloud, информацию о приложении и включать или отключать приложение удаленно.\nПосле включения приложения HTTP-запросы можно использовать через заголовок Basic Auth для выполнения любой из функций,\nперечисленных выше. Дополнительная информация доступна в документации API Provisioning, включая примеры вызовов\nи ответы сервера." }, "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/apps/provisioning_api/l10n/ru.json b/apps/provisioning_api/l10n/ru.json index d2e5e4f12cc..41989b6ba29 100644 --- a/apps/provisioning_api/l10n/ru.json +++ b/apps/provisioning_api/l10n/ru.json @@ -1,6 +1,31 @@ { "translations": { - "Logged in user must be an administrator or have authorization to edit this setting." : "Вошедший пользователь должен быть администратором или иметь полномочия для редактирования этого параметра.", + "Logged in account must be an administrator or have authorization to edit this setting." : "Для изменения этого параметра необходимо быть администратором или иметь соответствующие права.", + "Could not create non-existing user ID" : "Невозможно создать несуществующий идентификатор пользователя", "User already exists" : "Пользователь уже существует", + "Group %1$s does not exist" : "Группа %1$s не существует", + "Insufficient privileges for group %1$s" : "Недостаточно прав для группы %1$s", + "No group specified (required for sub-admins)" : "Группа не указана (обязательно для субадминистраторов)", + "Sub-admin group does not exist" : "Группа субадминистратора не существует", + "Cannot create sub-admins for admin group" : "Нельзя назначить субадминистраторов для группы администраторов", + "No permissions to promote sub-admins" : "Недостаточно прав для назначения субадминистраторов", + "Invalid password value" : "Некорректное значение пароля", + "An email address is required, to send a password link to the user." : "Требуется адрес электронной почты для отправки ссылки на установку пароля пользователю.", + "Required email address was not provided" : "Не указан обязательный адрес электронной почты", + "Invalid quota value: %1$s" : "Недопустимое значение квоты: %1$s", + "Invalid quota value. %1$s is exceeding the maximum quota" : "Недопустимое значение квоты.%1$s превышает максимальное значение", + "Unlimited quota is forbidden on this instance" : "Безлимитная квота запрещена в этом инстансе", + "Setting the password is not supported by the users backend" : "Установка пароля не поддерживается используемой системой управления пользователями", + "Invalid language" : "Недопустимый язык", + "Invalid locale" : "Недопустимая локаль", + "Invalid first day of week" : "Недопустимый первый день недели", + "Cannot remove yourself from the admin group" : "Нельзя удалить себя из группы администраторов", + "Cannot remove yourself from this group as you are a sub-admin" : "Нельзя удалить себя из этой группы, так как вы являетесь субадминистратором", + "Not viable to remove user from the last group you are sub-admin of" : "Нельзя удалить пользователя из последней группы, в которой вы являетесь субадминистратором", + "User does not exist" : "Пользователь не существует", + "Group does not exist" : "Группа не существует", + "User is not a sub-admin of this group" : "Пользователь не является субадминистратором этой группы", + "Email address not available" : "Адрес электронной почты недоступен", + "Sending email failed" : "Не удалось отправить письмо", "Email confirmation" : "Подтверждение электронной почты", "To enable the email address %s please click the button below." : "Чтобы включить адрес электронной почты %s, пожалуйста, нажмите на кнопку ниже.", "Confirm" : "Подтвердить", @@ -10,7 +35,7 @@ "An unexpected error occurred. Please contact your admin." : "Произошла неизвестная ошибка. Пожалуйста, свяжитесь с администратором.", "Email confirmation successful" : "Электронная почта подтверждена", "Provisioning API" : "Provisioning API", - "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Это приложение предоставляет API, которое может использоваться внешними системами для управления пользователями, группами и приложениями.", - "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Это приложение включает набор API-интерфейсов, которые внешние системы могут использовать для создания, редактирования, удаления и запроса пользователя\n\t\tатрибуты, запрос, установка и удаление групп, установка квоты и запрос общего хранилища, используемого в Nextcloud. Пользователи-администраторы группы\n\t\tтакже может запрашивать Nextcloud и выполнять те же функции, что и администратор, для групп, которыми они управляют. API также позволяет\n\t\tадминистратору запрос активных приложений Nextcloud, информации о приложении, а также для удаленного включения или отключения приложения.\n\t\tПосле включения приложения HTTP-запросы можно использовать через заголовок Basic Auth для выполнения любых функций.\n\t\tДополнительная информация доступна в документации по Provisioning API, включая примеры вызовов.\n\t\tи ответы сервера." + "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Это приложение предоставляет набор API, которые внешние системы могут использовать для управления учётными записями, группами и приложениями.", + "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Это приложение включает набор API, которые внешние системы могут использовать для создания, редактирования, удаления и запроса атрибутов учетной записи, запроса, установки и удаления групп, установки квоты и запроса общего хранилища, используемого в Nextcloud. Учетные записи администратора группы\nтакже могут запрашивать Nextcloud и выполнять те же функции, что и администратор для групп, которыми они управляют. API также позволяет\nадминистратору запрашивать активные приложения Nextcloud, информацию о приложении и включать или отключать приложение удаленно.\nПосле включения приложения HTTP-запросы можно использовать через заголовок Basic Auth для выполнения любой из функций,\nперечисленных выше. Дополнительная информация доступна в документации API Provisioning, включая примеры вызовов\nи ответы сервера." },"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" }
\ No newline at end of file diff --git a/apps/provisioning_api/lib/Controller/UsersController.php b/apps/provisioning_api/lib/Controller/UsersController.php index 4b3db45f518..3dfa8f1fe5a 100644 --- a/apps/provisioning_api/lib/Controller/UsersController.php +++ b/apps/provisioning_api/lib/Controller/UsersController.php @@ -21,6 +21,7 @@ use OCA\Settings\Settings\Admin\Users; use OCP\Accounts\IAccountManager; use OCP\Accounts\IAccountProperty; use OCP\Accounts\PropertyDoesNotExistException; +use OCP\App\IAppManager; use OCP\AppFramework\Http; use OCP\AppFramework\Http\Attribute\AuthorizedAdminSetting; use OCP\AppFramework\Http\Attribute\NoAdminRequired; @@ -79,6 +80,7 @@ class UsersController extends AUserDataOCSController { private KnownUserService $knownUserService, private IEventDispatcher $eventDispatcher, private IPhoneNumberUtil $phoneNumberUtil, + private IAppManager $appManager, ) { parent::__construct( $appName, @@ -710,6 +712,19 @@ class UsersController extends AUserDataOCSController { } /** + * Get a list of enabled apps for the current user + * + * @return DataResponse<Http::STATUS_OK, array{apps: list<string>}, array{}> + * + * 200: Enabled apps returned + */ + #[NoAdminRequired] + public function getEnabledApps(): DataResponse { + $currentLoggedInUser = $this->userSession->getUser(); + return new DataResponse(['apps' => $this->appManager->getEnabledAppsForUser($currentLoggedInUser)]); + } + + /** * @NoSubAdminRequired * * Get a list of fields that are editable for a user diff --git a/apps/provisioning_api/openapi-full.json b/apps/provisioning_api/openapi-full.json index 734c588be6b..cde7eeaa557 100644 --- a/apps/provisioning_api/openapi-full.json +++ b/apps/provisioning_api/openapi-full.json @@ -3573,6 +3573,78 @@ } } }, + "/ocs/v2.php/cloud/user/apps": { + "get": { + "operationId": "users-get-enabled-apps", + "summary": "Get a list of enabled apps for the current user", + "tags": [ + "users" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Enabled apps returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "apps" + ], + "properties": { + "apps": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, "/ocs/v2.php/cloud/users/{userId}/{collectionName}": { "put": { "operationId": "users-edit-user-multi-value", diff --git a/apps/provisioning_api/openapi.json b/apps/provisioning_api/openapi.json index d2fd2378488..29272f34956 100644 --- a/apps/provisioning_api/openapi.json +++ b/apps/provisioning_api/openapi.json @@ -2003,6 +2003,78 @@ } } }, + "/ocs/v2.php/cloud/user/apps": { + "get": { + "operationId": "users-get-enabled-apps", + "summary": "Get a list of enabled apps for the current user", + "tags": [ + "users" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Enabled apps returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "apps" + ], + "properties": { + "apps": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, "/ocs/v2.php/cloud/users/{userId}/{collectionName}": { "put": { "operationId": "users-edit-user-multi-value", diff --git a/apps/provisioning_api/tests/Controller/UsersControllerTest.php b/apps/provisioning_api/tests/Controller/UsersControllerTest.php index 80d6d0f6152..3f8c1566b5d 100644 --- a/apps/provisioning_api/tests/Controller/UsersControllerTest.php +++ b/apps/provisioning_api/tests/Controller/UsersControllerTest.php @@ -20,6 +20,7 @@ use OCP\Accounts\IAccount; use OCP\Accounts\IAccountManager; use OCP\Accounts\IAccountProperty; use OCP\Accounts\IAccountPropertyCollection; +use OCP\App\IAppManager; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\OCS\OCSException; use OCP\EventDispatcher\IEventDispatcher; @@ -64,6 +65,7 @@ class UsersControllerTest extends TestCase { private IEventDispatcher&MockObject $eventDispatcher; private IRootFolder $rootFolder; private IPhoneNumberUtil $phoneNumberUtil; + private IAppManager $appManager; protected function setUp(): void { parent::setUp(); @@ -84,6 +86,7 @@ class UsersControllerTest extends TestCase { $this->knownUserService = $this->createMock(KnownUserService::class); $this->eventDispatcher = $this->createMock(IEventDispatcher::class); $this->phoneNumberUtil = new PhoneNumberUtil(); + $this->appManager = $this->createMock(IAppManager::class); $this->rootFolder = $this->createMock(IRootFolder::class); $l10n = $this->createMock(IL10N::class); @@ -110,6 +113,7 @@ class UsersControllerTest extends TestCase { $this->knownUserService, $this->eventDispatcher, $this->phoneNumberUtil, + $this->appManager, ]) ->onlyMethods(['fillStorageInfo']) ->getMock(); @@ -501,6 +505,7 @@ class UsersControllerTest extends TestCase { $this->knownUserService, $this->eventDispatcher, $this->phoneNumberUtil, + $this->appManager, ]) ->onlyMethods(['editUser']) ->getMock(); @@ -3796,6 +3801,7 @@ class UsersControllerTest extends TestCase { $this->knownUserService, $this->eventDispatcher, $this->phoneNumberUtil, + $this->appManager, ]) ->onlyMethods(['getUserData']) ->getMock(); @@ -3887,6 +3893,7 @@ class UsersControllerTest extends TestCase { $this->knownUserService, $this->eventDispatcher, $this->phoneNumberUtil, + $this->appManager, ]) ->onlyMethods(['getUserData']) ->getMock(); diff --git a/apps/settings/l10n/bg.js b/apps/settings/l10n/bg.js index 293bf58d69c..b86916420aa 100644 --- a/apps/settings/l10n/bg.js +++ b/apps/settings/l10n/bg.js @@ -58,7 +58,9 @@ OC.L10N.register( "Saved" : "Запаметяване", "Unable to change password. Password too long." : "Неуспешна промяна на паролата. Паролата е твърде дълга.", "Authentication error" : "Възникна проблем с удостоверяването", + "Please provide an admin recovery password; otherwise, all account data will be lost." : "Моля, задайте администраторска парола за възстановяване; в противен случай цялата профилна информация ще бъде загубена.", "Wrong admin recovery password. Please check the password and try again." : "Грешна администраторска парола за възстановяване. Моля, проверете паролата и опитайте отново.", + "Backend does not support password change, but the encryption of the account key was updated." : "Сървърът не поддържа смяна на паролата, но настройката за криптиране на профила беше обновена.", "Administrator documentation" : "Документация за администратори", "User documentation" : "Документация за потребители", "Invalid SMTP password." : "Невалидна SMTP парола.", @@ -67,6 +69,7 @@ OC.L10N.register( "If you received this email, the email configuration seems to be correct." : "Ако сте получили този имейл, конфигурацията на имейла изглежда е правилна.", "Email could not be sent. Check your mail server log" : "Ймеила не се изпрати.", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Възникна проблем при изпращането на имейла. Моля, провери настройките. (Грешка: %s)", + "You need to set your account email before being able to send test emails. Go to %s for that." : "Трябва да настроите е-мейл профила, за да можете да изпратите тестови е-мейли. Отидете на %s за това.", "Disabled accounts" : "Неактивни профили", "Invalid account" : "Невалиден профил", "Invalid mail address" : "невалиден адрес на електронна поща", @@ -113,6 +116,8 @@ OC.L10N.register( "Personal info" : "Лични данни", "Mobile & desktop" : "Мобилни и настолни", "Email server" : "Имейл сървър", + "User's email account" : "Потребителски е-мейл профил", + "System email account" : "Системен е-мейл профил", "Background jobs" : "Фонови процеси", "Unlimited" : "Неограничено", "Verifying" : "Потвърждаване", diff --git a/apps/settings/l10n/bg.json b/apps/settings/l10n/bg.json index 016133f6e0e..551d6c72024 100644 --- a/apps/settings/l10n/bg.json +++ b/apps/settings/l10n/bg.json @@ -56,7 +56,9 @@ "Saved" : "Запаметяване", "Unable to change password. Password too long." : "Неуспешна промяна на паролата. Паролата е твърде дълга.", "Authentication error" : "Възникна проблем с удостоверяването", + "Please provide an admin recovery password; otherwise, all account data will be lost." : "Моля, задайте администраторска парола за възстановяване; в противен случай цялата профилна информация ще бъде загубена.", "Wrong admin recovery password. Please check the password and try again." : "Грешна администраторска парола за възстановяване. Моля, проверете паролата и опитайте отново.", + "Backend does not support password change, but the encryption of the account key was updated." : "Сървърът не поддържа смяна на паролата, но настройката за криптиране на профила беше обновена.", "Administrator documentation" : "Документация за администратори", "User documentation" : "Документация за потребители", "Invalid SMTP password." : "Невалидна SMTP парола.", @@ -65,6 +67,7 @@ "If you received this email, the email configuration seems to be correct." : "Ако сте получили този имейл, конфигурацията на имейла изглежда е правилна.", "Email could not be sent. Check your mail server log" : "Ймеила не се изпрати.", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Възникна проблем при изпращането на имейла. Моля, провери настройките. (Грешка: %s)", + "You need to set your account email before being able to send test emails. Go to %s for that." : "Трябва да настроите е-мейл профила, за да можете да изпратите тестови е-мейли. Отидете на %s за това.", "Disabled accounts" : "Неактивни профили", "Invalid account" : "Невалиден профил", "Invalid mail address" : "невалиден адрес на електронна поща", @@ -111,6 +114,8 @@ "Personal info" : "Лични данни", "Mobile & desktop" : "Мобилни и настолни", "Email server" : "Имейл сървър", + "User's email account" : "Потребителски е-мейл профил", + "System email account" : "Системен е-мейл профил", "Background jobs" : "Фонови процеси", "Unlimited" : "Неограничено", "Verifying" : "Потвърждаване", diff --git a/apps/settings/l10n/et_EE.js b/apps/settings/l10n/et_EE.js index e7fe29f42dd..82324a67341 100644 --- a/apps/settings/l10n/et_EE.js +++ b/apps/settings/l10n/et_EE.js @@ -33,8 +33,8 @@ OC.L10N.register( "Your <strong>group memberships</strong> were modified" : "Sinu <strong>grupide liikmelisus</strong> on muutunud", "{actor} changed your password" : "{actor} muutis sinu salasõna", "You changed your password" : "Sa muutsid oma salasõna", - "Your password was reset by an administrator" : "Administraator lähtestas sinu parooli", - "Your password was reset" : "Sinu parool lähtestati", + "Your password was reset by an administrator" : "Peakasutaja lähtestas sinu salasõna", + "Your password was reset" : "Sinu salasõna on lähtestatud", "{actor} changed your email address" : "{actor} muutis sinu e-posti aadressi", "You changed your email address" : "Sa muutsid oma e-posti aadressi", "Your email address was changed by an administrator" : "Administraator muutis sinu e-posti aadressi", @@ -49,7 +49,7 @@ OC.L10N.register( "A login attempt using two-factor authentication failed (%1$s)" : "Sisselogimiskatse kaheastmelise autentimisega ebaõnnestus (%1$s)", "Remote wipe was started on %1$s" : "Kaugkustutamine algas: %1$s", "Remote wipe has finished on %1$s" : "Kaugkustutamine lõppes: %1$s", - "Your <strong>password</strong> or <strong>email</strong> was modified" : "Sinu <strong>parooli</strong> või <strong>e-posti aadressi</strong> muudeti", + "Your <strong>password</strong> or <strong>email</strong> was modified" : "Sinu <strong>salasõna</strong> või <strong>e-posti aadress</strong> on muudetud", "Settings" : "Seaded", "Could not remove app." : "Rakenduse eemaldamine ei õnnestunud.", "Could not update app." : "Rakenduse uuendamine ei õnnestunud.", @@ -65,7 +65,7 @@ OC.L10N.register( "Administrator documentation" : "Administraatori dokumentatsioon", "User documentation" : "Kasutaja dokumentatsioon", "Nextcloud help overview" : "Nextcloudi abiteabe ülevaade", - "Invalid SMTP password." : "Vale SMTP parool.", + "Invalid SMTP password." : "Vale SMTP salasõna.", "Email setting test" : "E-posti sätete kontroll", "Well done, %s!" : "Hästi tehtud, %s!", "If you received this email, the email configuration seems to be correct." : "Kui said selle kirja, näib e-posti seadistus õige.", @@ -83,12 +83,13 @@ OC.L10N.register( "Unable to set invalid website" : "Vigase veebisaidi lisamine pole võimalik", "Some account data was invalid" : "Osa kasutajakonto andmeid olid vigased", "In order to verify your Twitter account, post the following tweet on Twitter (please make sure to post it without any line breaks):" : "Selleks, et tuvastada, et tegemist tõesti on sinu X-i / Twitteri kasutajakontoga, palun postita oma kontole järgnev säuts (palun kontrolli, et sinna ei satuks reavahetusi):", - "%1$s changed your password on %2$s." : "%1$s muutis su parooli %2$s.", - "Your password on %s was changed." : "Sinu %s parool muudeti.", - "Your password on %s was reset by an administrator." : "Administraator lähtestas sinu %s parooli.", + "In order to verify your Website, store the following content in your web-root at '.well-known/CloudIdVerificationCode.txt' (please make sure that the complete text is in one line):" : "Sinu veebisaidi õigsuse kontrolliks palun salvesta järgnev sisu oma saiti asukohta „.well-known/CloudIdVerificationCode.txt“ (ning kontrolli, et järgnev tekst on seal failis ühel real):", + "%1$s changed your password on %2$s." : "%1$s muutis sinu salasõna teenuses %2$s.", + "Your password on %s was changed." : "Sinu %s salasõna on muudetud.", + "Your password on %s was reset by an administrator." : "Peakasutaja lähtestas sinu %s salasõna.", "Your password on %s was reset." : "Sinu salasõna „%s“ sai lähtestatud.", - "Password for %1$s changed on %2$s" : "%1$s parool muudetud %2$s", - "Password changed for %s" : "%s parool muudetud", + "Password for %1$s changed on %2$s" : "%1$s salasõna teenuses %2$s on muutunud", + "Password changed for %s" : "%s salasõna on muudetud", "If you did not request this, please contact an administrator." : "Kui sa pole seda taotlenud, võta ühendust administraatoriga.", "Your email address on %s was changed." : "Sinu %s e-posti aadressi muudeti.", "Your email address on %s was changed by an administrator." : "Administraator muutis sinu %s e-posti aadressi.", @@ -100,7 +101,7 @@ OC.L10N.register( "Welcome aboard %s" : "Tere tulemast %s", "Welcome to your %s account, you can add, protect, and share your data." : "Tere tulemast oma %s kontole. Sa saad lisada, kaitsta ja jagada oma andmeid.", "Your Login is: %s" : "Sinu kasutajanimi on: %s", - "Set your password" : "Määra oma parool", + "Set your password" : "Sisesta oma salasõna", "Go to %s" : "Mine %s", "Install Client" : "Paigalda kliendiprogramm", "Logged in account must be a sub admin" : "Sisselogitud kasutajakonto peab olema peakasutajate alamgrupi liige", @@ -121,17 +122,22 @@ OC.L10N.register( "Mobile & desktop" : "Mobiil ja töölaud", "Email server" : "E-kirjade server", "Mail Providers" : "E-posti teenusepakkujad", - "User's email account" : "Kasutaja e-postikonto", - "System email account" : "Süsteemi e-posti konto", + "Mail provider enables sending emails directly through the user's personal email account. At present, this functionality is limited to calendar invitations. It requires Nextcloud Mail 4.1 and an email account in Nextcloud Mail that matches the user's email address in Nextcloud." : "Lisaks järgnevale üldisele valikule on võimalik ka isikliku e-postiikonto kasutamine. Hetkel toimib see võimalus vaid Nextcloudi kalendrikutsete puhul ning eelduseks on Nextcloud Mail 4.1 või suurem ning seal seadistatud e-postikonto vastab kasutaja e-postiaadressile Nextcloudi profiilis.", + "Send emails using" : "E-kirjade saatmisel on kasutusel", + "User's email account" : "Kasutaja seadistatud e-postikonto", + "System email account" : "Süsteemis seadistatud e-postikonto", "Security & setup checks" : "Turva- ja paigalduse kontrollid", "Background jobs" : "Taustal toimivad haldustoimingud", "Unlimited" : "Piiramatult", "Verifying" : "Kontrollin", - "Allowed admin IP ranges" : "Süsteemihalduseks lubatud IP-aadresside filtreerimine", - "Admin IP filtering isn't applied." : "Süsteemihalduseks lubatud IP-aadresside filtreerimine pole kasutusel.", + "Allowed admin IP ranges" : "Süsteemihalduseks lubatud IP-aadresside vahemikus", + "Admin IP filtering isn't applied." : "Süsteemihalduseks lubatud IP-aadresside vahemikud pole seadistatud.", "Configuration key \"%1$s\" expects an array (%2$s found). Admin IP range validation will not be applied." : "Seadistuste võtmes „%1$s“ peab olema kirjas massiiv ( aga leidsime „%2$s“). Süsteemihalduseks lubatud IP-aadresside filtreerimine hetkel ei toimi.", "Configuration key \"%1$s\" contains invalid IP range(s): \"%2$s\"" : "Seadistuste võtmes „%1$s“ on vigane IP-aadressi(de) vahemik: „%2$s“", "Admin IP filtering is correctly configured." : "Süsteemihalduseks lubatud IP-aadresside filtreerimine on korrektselt seadistatud.", + "App directories owner" : "Rakenduste kausta omanik", + "Some app directories are owned by a different user than the web server one. This may be the case if apps have been installed manually. Check the permissions of the following app directories:\n%s" : "Mõnede rakenduste kaustade omanik erinev kogu Nextcloudi serveri omanikust. Nii võib juhtuda, kui rakendused on paigaldatud käsitsi. Palun kontrolli järgnevate rakenduste kaustade omanikke:\n%s", + "App directories have the correct owner \"%s\"" : "Rakenduste kaustadel on korrektne omanik: „%s“", "Your remote address could not be determined." : "Sinu kaugaadressi tuvastamine ei õnnestunud.", "No altered files" : "Muudetud faile pole", "Database missing primary keys" : "Andmebaasis on puudu primaarvõtmed", @@ -141,6 +147,7 @@ OC.L10N.register( "Mail delivery is disabled by instance config \"%s\"." : "Selles serveris piirab e-kirjade edasisaatmist seadistus „%s“.", "Email test was successfully sent" : "Testkirja saatmine õnnestus", "Your \"trusted_proxies\" setting is not correctly set, it should be an array." : "Serveri „trusted_proxies“ seadistus pole korrektne - seal peab leiduma massiiv, aga hetkel on midagi muud.", + "This server has no working internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. Establish a connection from this server to the internet to enjoy all features." : "Sellel serveril puudub toimiv internetiühendus: mitmete otspunktidega ei ole leitavad. See tähendab, et mõned funktsionaalsused, nagu näiteks väliste andmehoidlate ühendamine, uuenduste teavitused või kolmandate osapoolte rakenduste paigaldamine ei tööta. Ligipääs failidele eemalt ning teavistuste saatmine e-kirjaga ei pruugi samuti toimida. Kui soovid kasutada täielikku funktsionaalsust, siis palun taga toimiv internetiühendus.", "Old server-side-encryption" : "Vana serveripoolne krüptimine", "Disabled" : "Keelatud", "The old server-side-encryption format is enabled. We recommend disabling this." : "Vana serveripoolse krüptimise vorming on kasutusel. Mes soovitame, et lülitad selle välja.", @@ -208,8 +215,8 @@ OC.L10N.register( "Restrict users to only share with users in their groups" : "Luba kasutajatel jagada kasutajatega ainult oma grupi piires", "Allow users to share via link and emails" : "Luba kasutajatel lingiga ja e-postiga jagamist", "Allow public uploads" : "Luba avalikud üleslaadimised", - "Always ask for a password" : "Alati küsi parooli", - "Enforce password protection" : "Jõusta paroolikaitse", + "Always ask for a password" : "Alati küsi salasõna", + "Enforce password protection" : "Jõusta salasõnakaitse", "Exclude groups from password requirements" : "Välista grupid salasõnareeglitest", "Exclude groups from creating link shares" : "Välista grupid jagamislinkide loomisest", "Limit sharing based on groups" : "Piira jagamist gruppide alusel", @@ -217,9 +224,11 @@ OC.L10N.register( "Exclude some groups from sharing" : "Välista mõned grupid jagamisest", "Limit sharing to some groups" : "Piira jagamist mõnede gruppidega", "Groups excluded from sharing" : "Jagamisest välistatud grupid", + "Set default expiration date for internal shares" : "Jagamisel selle serveri piires kasuta vaikimisi aegumist", "Enforce expiration date" : "Sunnitud aegumise kuupäev", "Default expiration time of new shares in days" : "Uue jaosmeedia vaikimisi aegumine päevades", "Expire shares after x days" : "Jaosmeedia aegub x päeva möödudes", + "Set default expiration date for shares to other servers" : "Jagamisel teistesse serveritesse kasuta vaikimisi aegumist", "Enforce expiration date for remote shares" : "Määra lingi kaugserverid asuva jaosmeedia vaikimisi aegumiskuupäev ", "Default expiration time of remote shares in days" : "Kaugserveris asuva jaosmeedia vaikimisi aegumine päevades", "Expire remote shares after x days" : "Jaosmeedia aegub x päeva möödudes", @@ -229,6 +238,7 @@ OC.L10N.register( "Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Kuva avaliku lingiga üleslaadimise lehel lahtiütluste tekst (vaid siis, kui failide loend on peidetud)", "Disclaimer text" : "Vastutusest lahtiütluse tekst", "This text will be shown on the public link upload page when the file list is hidden." : "Seda teksti näidatakse avaliku lingiga üleslaadimise lehel kui failide loend on peidetud.", + "Default share permissions" : "Vaikimisi õigusel jagamisel", "Two-Factor Authentication" : "Kaheastmeline autentimine", "Two-factor authentication can be enforced for all accounts and specific groups. If they do not have a two-factor provider configured, they will be unable to log into the system." : "Kaheastmelist autentimist on võimalik teha kohustuslikuks kas kõikidele kasutajakontodele või konkreetsete gruppide kaupa. Kui kaheastmelise autentimise kohustuslikkus on määratud, kuid on kasutajal seadistamata, siis ta ei saa siia serverisse sisse logida.", "Enforce two-factor authentication" : "Tee kaheastmeline autentimine kohustuslikuks", @@ -349,7 +359,7 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Sinu kontole hetkel sisse loginud veebi-, töölaua-, ja mobiilsed kliendid.", "Error while creating device token" : "Tõrge seadme märke loomisel", "App name" : "Rakenduse nimi", - "Create new app password" : "Loo uus rakenduse parool", + "Create new app password" : "Loo uus rakenduse salasõna", "App password copied!" : "Rakenduse salasõna on kopeeritud!", "Copy app password" : "Kopeeri rakenduse salasõna", "Login name copied!" : "Kasutajanimi on koeeritud!", @@ -529,6 +539,7 @@ OC.L10N.register( "Set account as admin for" : "Määra kasutajakonto peakasutajaks siin:", "Select account quota" : "Määra kasutajakonto kvoot", "Set the language" : "Vali keel", + "Toggle account actions menu" : "Lülita kasutajakonto tegevuste menüü sisse/välja", "Done" : "Valmis", "Edit" : "Muuda", "Account management settings" : "Kasutajakontode halduse seadistused", @@ -560,8 +571,13 @@ OC.L10N.register( "No devices configured." : "Ühtegi seadet pole seadistatud.", "The following devices are configured for your account:" : "Järgmised seadmed on seadistatud kasutama sinu kontot:", "Your browser does not support WebAuthn." : "Sinu veebibrauseril puudub WebAuthni tugi.", - "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Administraatorina saate jagamise valikuid täpselt seadistada. Lisateavet leiad dokumentatsioonist.", + "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Administraatorina saad jagamise valikuid täpselt seadistada. Lisateavet leiad dokumentatsioonist.", "You need to enable the File sharing App." : "Sa pead kasutusele võtma Failijagamise rakenduse.", + "App Store" : "Rakendustepood", + "Loading app list" : "Laadin rakenduste loendit", + "Loading categories" : "Laadin kategooriaid", + "Developer documentation ↗" : "Dokumentatsioon arendajatele ↗", + "Version {version}, {license}-licensed" : "Versioon {version}, avaldatud {license} litsentsi alusel", "Version {version}" : "Versioon {version}", "All accounts" : "Kõik kasutajakontod", "Admins" : "Haldurid", diff --git a/apps/settings/l10n/et_EE.json b/apps/settings/l10n/et_EE.json index a27534910f2..d23ba11a232 100644 --- a/apps/settings/l10n/et_EE.json +++ b/apps/settings/l10n/et_EE.json @@ -31,8 +31,8 @@ "Your <strong>group memberships</strong> were modified" : "Sinu <strong>grupide liikmelisus</strong> on muutunud", "{actor} changed your password" : "{actor} muutis sinu salasõna", "You changed your password" : "Sa muutsid oma salasõna", - "Your password was reset by an administrator" : "Administraator lähtestas sinu parooli", - "Your password was reset" : "Sinu parool lähtestati", + "Your password was reset by an administrator" : "Peakasutaja lähtestas sinu salasõna", + "Your password was reset" : "Sinu salasõna on lähtestatud", "{actor} changed your email address" : "{actor} muutis sinu e-posti aadressi", "You changed your email address" : "Sa muutsid oma e-posti aadressi", "Your email address was changed by an administrator" : "Administraator muutis sinu e-posti aadressi", @@ -47,7 +47,7 @@ "A login attempt using two-factor authentication failed (%1$s)" : "Sisselogimiskatse kaheastmelise autentimisega ebaõnnestus (%1$s)", "Remote wipe was started on %1$s" : "Kaugkustutamine algas: %1$s", "Remote wipe has finished on %1$s" : "Kaugkustutamine lõppes: %1$s", - "Your <strong>password</strong> or <strong>email</strong> was modified" : "Sinu <strong>parooli</strong> või <strong>e-posti aadressi</strong> muudeti", + "Your <strong>password</strong> or <strong>email</strong> was modified" : "Sinu <strong>salasõna</strong> või <strong>e-posti aadress</strong> on muudetud", "Settings" : "Seaded", "Could not remove app." : "Rakenduse eemaldamine ei õnnestunud.", "Could not update app." : "Rakenduse uuendamine ei õnnestunud.", @@ -63,7 +63,7 @@ "Administrator documentation" : "Administraatori dokumentatsioon", "User documentation" : "Kasutaja dokumentatsioon", "Nextcloud help overview" : "Nextcloudi abiteabe ülevaade", - "Invalid SMTP password." : "Vale SMTP parool.", + "Invalid SMTP password." : "Vale SMTP salasõna.", "Email setting test" : "E-posti sätete kontroll", "Well done, %s!" : "Hästi tehtud, %s!", "If you received this email, the email configuration seems to be correct." : "Kui said selle kirja, näib e-posti seadistus õige.", @@ -81,12 +81,13 @@ "Unable to set invalid website" : "Vigase veebisaidi lisamine pole võimalik", "Some account data was invalid" : "Osa kasutajakonto andmeid olid vigased", "In order to verify your Twitter account, post the following tweet on Twitter (please make sure to post it without any line breaks):" : "Selleks, et tuvastada, et tegemist tõesti on sinu X-i / Twitteri kasutajakontoga, palun postita oma kontole järgnev säuts (palun kontrolli, et sinna ei satuks reavahetusi):", - "%1$s changed your password on %2$s." : "%1$s muutis su parooli %2$s.", - "Your password on %s was changed." : "Sinu %s parool muudeti.", - "Your password on %s was reset by an administrator." : "Administraator lähtestas sinu %s parooli.", + "In order to verify your Website, store the following content in your web-root at '.well-known/CloudIdVerificationCode.txt' (please make sure that the complete text is in one line):" : "Sinu veebisaidi õigsuse kontrolliks palun salvesta järgnev sisu oma saiti asukohta „.well-known/CloudIdVerificationCode.txt“ (ning kontrolli, et järgnev tekst on seal failis ühel real):", + "%1$s changed your password on %2$s." : "%1$s muutis sinu salasõna teenuses %2$s.", + "Your password on %s was changed." : "Sinu %s salasõna on muudetud.", + "Your password on %s was reset by an administrator." : "Peakasutaja lähtestas sinu %s salasõna.", "Your password on %s was reset." : "Sinu salasõna „%s“ sai lähtestatud.", - "Password for %1$s changed on %2$s" : "%1$s parool muudetud %2$s", - "Password changed for %s" : "%s parool muudetud", + "Password for %1$s changed on %2$s" : "%1$s salasõna teenuses %2$s on muutunud", + "Password changed for %s" : "%s salasõna on muudetud", "If you did not request this, please contact an administrator." : "Kui sa pole seda taotlenud, võta ühendust administraatoriga.", "Your email address on %s was changed." : "Sinu %s e-posti aadressi muudeti.", "Your email address on %s was changed by an administrator." : "Administraator muutis sinu %s e-posti aadressi.", @@ -98,7 +99,7 @@ "Welcome aboard %s" : "Tere tulemast %s", "Welcome to your %s account, you can add, protect, and share your data." : "Tere tulemast oma %s kontole. Sa saad lisada, kaitsta ja jagada oma andmeid.", "Your Login is: %s" : "Sinu kasutajanimi on: %s", - "Set your password" : "Määra oma parool", + "Set your password" : "Sisesta oma salasõna", "Go to %s" : "Mine %s", "Install Client" : "Paigalda kliendiprogramm", "Logged in account must be a sub admin" : "Sisselogitud kasutajakonto peab olema peakasutajate alamgrupi liige", @@ -119,17 +120,22 @@ "Mobile & desktop" : "Mobiil ja töölaud", "Email server" : "E-kirjade server", "Mail Providers" : "E-posti teenusepakkujad", - "User's email account" : "Kasutaja e-postikonto", - "System email account" : "Süsteemi e-posti konto", + "Mail provider enables sending emails directly through the user's personal email account. At present, this functionality is limited to calendar invitations. It requires Nextcloud Mail 4.1 and an email account in Nextcloud Mail that matches the user's email address in Nextcloud." : "Lisaks järgnevale üldisele valikule on võimalik ka isikliku e-postiikonto kasutamine. Hetkel toimib see võimalus vaid Nextcloudi kalendrikutsete puhul ning eelduseks on Nextcloud Mail 4.1 või suurem ning seal seadistatud e-postikonto vastab kasutaja e-postiaadressile Nextcloudi profiilis.", + "Send emails using" : "E-kirjade saatmisel on kasutusel", + "User's email account" : "Kasutaja seadistatud e-postikonto", + "System email account" : "Süsteemis seadistatud e-postikonto", "Security & setup checks" : "Turva- ja paigalduse kontrollid", "Background jobs" : "Taustal toimivad haldustoimingud", "Unlimited" : "Piiramatult", "Verifying" : "Kontrollin", - "Allowed admin IP ranges" : "Süsteemihalduseks lubatud IP-aadresside filtreerimine", - "Admin IP filtering isn't applied." : "Süsteemihalduseks lubatud IP-aadresside filtreerimine pole kasutusel.", + "Allowed admin IP ranges" : "Süsteemihalduseks lubatud IP-aadresside vahemikus", + "Admin IP filtering isn't applied." : "Süsteemihalduseks lubatud IP-aadresside vahemikud pole seadistatud.", "Configuration key \"%1$s\" expects an array (%2$s found). Admin IP range validation will not be applied." : "Seadistuste võtmes „%1$s“ peab olema kirjas massiiv ( aga leidsime „%2$s“). Süsteemihalduseks lubatud IP-aadresside filtreerimine hetkel ei toimi.", "Configuration key \"%1$s\" contains invalid IP range(s): \"%2$s\"" : "Seadistuste võtmes „%1$s“ on vigane IP-aadressi(de) vahemik: „%2$s“", "Admin IP filtering is correctly configured." : "Süsteemihalduseks lubatud IP-aadresside filtreerimine on korrektselt seadistatud.", + "App directories owner" : "Rakenduste kausta omanik", + "Some app directories are owned by a different user than the web server one. This may be the case if apps have been installed manually. Check the permissions of the following app directories:\n%s" : "Mõnede rakenduste kaustade omanik erinev kogu Nextcloudi serveri omanikust. Nii võib juhtuda, kui rakendused on paigaldatud käsitsi. Palun kontrolli järgnevate rakenduste kaustade omanikke:\n%s", + "App directories have the correct owner \"%s\"" : "Rakenduste kaustadel on korrektne omanik: „%s“", "Your remote address could not be determined." : "Sinu kaugaadressi tuvastamine ei õnnestunud.", "No altered files" : "Muudetud faile pole", "Database missing primary keys" : "Andmebaasis on puudu primaarvõtmed", @@ -139,6 +145,7 @@ "Mail delivery is disabled by instance config \"%s\"." : "Selles serveris piirab e-kirjade edasisaatmist seadistus „%s“.", "Email test was successfully sent" : "Testkirja saatmine õnnestus", "Your \"trusted_proxies\" setting is not correctly set, it should be an array." : "Serveri „trusted_proxies“ seadistus pole korrektne - seal peab leiduma massiiv, aga hetkel on midagi muud.", + "This server has no working internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. Establish a connection from this server to the internet to enjoy all features." : "Sellel serveril puudub toimiv internetiühendus: mitmete otspunktidega ei ole leitavad. See tähendab, et mõned funktsionaalsused, nagu näiteks väliste andmehoidlate ühendamine, uuenduste teavitused või kolmandate osapoolte rakenduste paigaldamine ei tööta. Ligipääs failidele eemalt ning teavistuste saatmine e-kirjaga ei pruugi samuti toimida. Kui soovid kasutada täielikku funktsionaalsust, siis palun taga toimiv internetiühendus.", "Old server-side-encryption" : "Vana serveripoolne krüptimine", "Disabled" : "Keelatud", "The old server-side-encryption format is enabled. We recommend disabling this." : "Vana serveripoolse krüptimise vorming on kasutusel. Mes soovitame, et lülitad selle välja.", @@ -206,8 +213,8 @@ "Restrict users to only share with users in their groups" : "Luba kasutajatel jagada kasutajatega ainult oma grupi piires", "Allow users to share via link and emails" : "Luba kasutajatel lingiga ja e-postiga jagamist", "Allow public uploads" : "Luba avalikud üleslaadimised", - "Always ask for a password" : "Alati küsi parooli", - "Enforce password protection" : "Jõusta paroolikaitse", + "Always ask for a password" : "Alati küsi salasõna", + "Enforce password protection" : "Jõusta salasõnakaitse", "Exclude groups from password requirements" : "Välista grupid salasõnareeglitest", "Exclude groups from creating link shares" : "Välista grupid jagamislinkide loomisest", "Limit sharing based on groups" : "Piira jagamist gruppide alusel", @@ -215,9 +222,11 @@ "Exclude some groups from sharing" : "Välista mõned grupid jagamisest", "Limit sharing to some groups" : "Piira jagamist mõnede gruppidega", "Groups excluded from sharing" : "Jagamisest välistatud grupid", + "Set default expiration date for internal shares" : "Jagamisel selle serveri piires kasuta vaikimisi aegumist", "Enforce expiration date" : "Sunnitud aegumise kuupäev", "Default expiration time of new shares in days" : "Uue jaosmeedia vaikimisi aegumine päevades", "Expire shares after x days" : "Jaosmeedia aegub x päeva möödudes", + "Set default expiration date for shares to other servers" : "Jagamisel teistesse serveritesse kasuta vaikimisi aegumist", "Enforce expiration date for remote shares" : "Määra lingi kaugserverid asuva jaosmeedia vaikimisi aegumiskuupäev ", "Default expiration time of remote shares in days" : "Kaugserveris asuva jaosmeedia vaikimisi aegumine päevades", "Expire remote shares after x days" : "Jaosmeedia aegub x päeva möödudes", @@ -227,6 +236,7 @@ "Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Kuva avaliku lingiga üleslaadimise lehel lahtiütluste tekst (vaid siis, kui failide loend on peidetud)", "Disclaimer text" : "Vastutusest lahtiütluse tekst", "This text will be shown on the public link upload page when the file list is hidden." : "Seda teksti näidatakse avaliku lingiga üleslaadimise lehel kui failide loend on peidetud.", + "Default share permissions" : "Vaikimisi õigusel jagamisel", "Two-Factor Authentication" : "Kaheastmeline autentimine", "Two-factor authentication can be enforced for all accounts and specific groups. If they do not have a two-factor provider configured, they will be unable to log into the system." : "Kaheastmelist autentimist on võimalik teha kohustuslikuks kas kõikidele kasutajakontodele või konkreetsete gruppide kaupa. Kui kaheastmelise autentimise kohustuslikkus on määratud, kuid on kasutajal seadistamata, siis ta ei saa siia serverisse sisse logida.", "Enforce two-factor authentication" : "Tee kaheastmeline autentimine kohustuslikuks", @@ -347,7 +357,7 @@ "Web, desktop and mobile clients currently logged in to your account." : "Sinu kontole hetkel sisse loginud veebi-, töölaua-, ja mobiilsed kliendid.", "Error while creating device token" : "Tõrge seadme märke loomisel", "App name" : "Rakenduse nimi", - "Create new app password" : "Loo uus rakenduse parool", + "Create new app password" : "Loo uus rakenduse salasõna", "App password copied!" : "Rakenduse salasõna on kopeeritud!", "Copy app password" : "Kopeeri rakenduse salasõna", "Login name copied!" : "Kasutajanimi on koeeritud!", @@ -527,6 +537,7 @@ "Set account as admin for" : "Määra kasutajakonto peakasutajaks siin:", "Select account quota" : "Määra kasutajakonto kvoot", "Set the language" : "Vali keel", + "Toggle account actions menu" : "Lülita kasutajakonto tegevuste menüü sisse/välja", "Done" : "Valmis", "Edit" : "Muuda", "Account management settings" : "Kasutajakontode halduse seadistused", @@ -558,8 +569,13 @@ "No devices configured." : "Ühtegi seadet pole seadistatud.", "The following devices are configured for your account:" : "Järgmised seadmed on seadistatud kasutama sinu kontot:", "Your browser does not support WebAuthn." : "Sinu veebibrauseril puudub WebAuthni tugi.", - "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Administraatorina saate jagamise valikuid täpselt seadistada. Lisateavet leiad dokumentatsioonist.", + "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Administraatorina saad jagamise valikuid täpselt seadistada. Lisateavet leiad dokumentatsioonist.", "You need to enable the File sharing App." : "Sa pead kasutusele võtma Failijagamise rakenduse.", + "App Store" : "Rakendustepood", + "Loading app list" : "Laadin rakenduste loendit", + "Loading categories" : "Laadin kategooriaid", + "Developer documentation ↗" : "Dokumentatsioon arendajatele ↗", + "Version {version}, {license}-licensed" : "Versioon {version}, avaldatud {license} litsentsi alusel", "Version {version}" : "Versioon {version}", "All accounts" : "Kõik kasutajakontod", "Admins" : "Haldurid", diff --git a/apps/settings/l10n/lv.js b/apps/settings/l10n/lv.js index f22d5e9ac96..0516783f8b2 100644 --- a/apps/settings/l10n/lv.js +++ b/apps/settings/l10n/lv.js @@ -122,7 +122,7 @@ OC.L10N.register( "Create new app password" : "Izveidot jaunu lietotnes paroli", "New app password" : "Jauna lietotnes parole", "Use the credentials below to configure your app or device. For security reasons this password will only be shown once." : "Zemāk esošie piekļuves dati jāizmanto, lai konfigurētu lietotni vai ierīci. Drošības iemeslu dēļ šī parole tiks parādīta tikai vienu reizi.", - "Login" : "Pieteikumvārds", + "Login" : "Pieteikties", "Password" : "Parole", "Show QR code for mobile apps" : "Parādīt kvadrātkodu tālruņa lietotnēm", "Profile" : "Profils", diff --git a/apps/settings/l10n/lv.json b/apps/settings/l10n/lv.json index 5c87992b05b..11de016ba60 100644 --- a/apps/settings/l10n/lv.json +++ b/apps/settings/l10n/lv.json @@ -120,7 +120,7 @@ "Create new app password" : "Izveidot jaunu lietotnes paroli", "New app password" : "Jauna lietotnes parole", "Use the credentials below to configure your app or device. For security reasons this password will only be shown once." : "Zemāk esošie piekļuves dati jāizmanto, lai konfigurētu lietotni vai ierīci. Drošības iemeslu dēļ šī parole tiks parādīta tikai vienu reizi.", - "Login" : "Pieteikumvārds", + "Login" : "Pieteikties", "Password" : "Parole", "Show QR code for mobile apps" : "Parādīt kvadrātkodu tālruņa lietotnēm", "Profile" : "Profils", diff --git a/apps/settings/l10n/pt_BR.js b/apps/settings/l10n/pt_BR.js index 7c038e8a43b..1e292e866bf 100644 --- a/apps/settings/l10n/pt_BR.js +++ b/apps/settings/l10n/pt_BR.js @@ -316,7 +316,7 @@ OC.L10N.register( "64-bit" : "64-bit", "It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit!" : "Parece que você está executando uma versão PHP de 32 bits. Nextcloud precisa de 64 bits para funcionar bem. Atualize seu sistema operacional e PHP para 64 bits!", "Task Processing pickup speed" : "Velocidade de inicio do Processamento de Tarefas", - "_No scheduled tasks in the last %n hour._::_No scheduled tasks in the last %n hours._" : ["Nenhuma tarefa agendada na última %n hora.","Nenhuma tarefa agendada nas últimas %n horas.","Nenhuma tarefa agendada nas últimas %n horas."], + "_No scheduled tasks in the last %n hour._::_No scheduled tasks in the last %n hours._" : ["Nenhuma tarefa agendada na última %n hora.","Nenhuma tarefa agendada no último %n de horas.","Nenhuma tarefa agendada nas últimas %n horas."], "_The task pickup speed has been ok in the last %n hour._::_The task pickup speed has been ok in the last %n hours._" : ["A velocidade de inicio do processamento de tarefas tem sido boa na última %n hora.","A velocidade de inicio do processamento de tarefas tem sido boa nas últimas %n horas.","A velocidade de inicio do processamento de tarefas tem sido boa nas últimas %n horas."], "_The task pickup speed has been slow in the last %n hour. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._::_The task pickup speed has been slow in the last %n hours. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._" : ["A velocidade de inicio do processamento de tarefas tem sido lenta nas última %n hora. Muitas tarefas levaram mais de 4 minutos para serem iniciadas. Considere a possibilidade de configurar um trabalhador para processar tarefas em segundo plano.","A velocidade de inicio do processamento de tarefas tem sido lenta nas últimas %n horas. Muitas tarefas levaram mais de 4 minutos para serem iniciadas. Considere a possibilidade de configurar um trabalhador para processar tarefas em segundo plano.","A velocidade de inicio do processamento de tarefas tem sido lenta nas últimas %n horas. Muitas tarefas levaram mais de 4 minutos para serem iniciadas. Considere a possibilidade de configurar um trabalhador para processar tarefas em segundo plano."], "Temporary space available" : "Espaço temporário disponível", diff --git a/apps/settings/l10n/pt_BR.json b/apps/settings/l10n/pt_BR.json index 954b4ccbaa7..21486f98fd4 100644 --- a/apps/settings/l10n/pt_BR.json +++ b/apps/settings/l10n/pt_BR.json @@ -314,7 +314,7 @@ "64-bit" : "64-bit", "It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit!" : "Parece que você está executando uma versão PHP de 32 bits. Nextcloud precisa de 64 bits para funcionar bem. Atualize seu sistema operacional e PHP para 64 bits!", "Task Processing pickup speed" : "Velocidade de inicio do Processamento de Tarefas", - "_No scheduled tasks in the last %n hour._::_No scheduled tasks in the last %n hours._" : ["Nenhuma tarefa agendada na última %n hora.","Nenhuma tarefa agendada nas últimas %n horas.","Nenhuma tarefa agendada nas últimas %n horas."], + "_No scheduled tasks in the last %n hour._::_No scheduled tasks in the last %n hours._" : ["Nenhuma tarefa agendada na última %n hora.","Nenhuma tarefa agendada no último %n de horas.","Nenhuma tarefa agendada nas últimas %n horas."], "_The task pickup speed has been ok in the last %n hour._::_The task pickup speed has been ok in the last %n hours._" : ["A velocidade de inicio do processamento de tarefas tem sido boa na última %n hora.","A velocidade de inicio do processamento de tarefas tem sido boa nas últimas %n horas.","A velocidade de inicio do processamento de tarefas tem sido boa nas últimas %n horas."], "_The task pickup speed has been slow in the last %n hour. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._::_The task pickup speed has been slow in the last %n hours. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._" : ["A velocidade de inicio do processamento de tarefas tem sido lenta nas última %n hora. Muitas tarefas levaram mais de 4 minutos para serem iniciadas. Considere a possibilidade de configurar um trabalhador para processar tarefas em segundo plano.","A velocidade de inicio do processamento de tarefas tem sido lenta nas últimas %n horas. Muitas tarefas levaram mais de 4 minutos para serem iniciadas. Considere a possibilidade de configurar um trabalhador para processar tarefas em segundo plano.","A velocidade de inicio do processamento de tarefas tem sido lenta nas últimas %n horas. Muitas tarefas levaram mais de 4 minutos para serem iniciadas. Considere a possibilidade de configurar um trabalhador para processar tarefas em segundo plano."], "Temporary space available" : "Espaço temporário disponível", diff --git a/apps/settings/l10n/tr.js b/apps/settings/l10n/tr.js index be2c6795126..e28a06963ef 100644 --- a/apps/settings/l10n/tr.js +++ b/apps/settings/l10n/tr.js @@ -765,7 +765,7 @@ OC.L10N.register( "Adding your device …" : "Aygıtınız ekleniyor …", "Unnamed device" : "Adsız aygıt", "Passwordless Authentication" : "Parolasız kimlik doğrulaması", - "Set up your account for passwordless authentication following the FIDO2 standard." : "Hesabınız için FIDO2 standardına uygun parolasız kimlik doğrulamasını kurun.", + "Set up your account for passwordless authentication following the FIDO2 standard." : "Hesabınız için FIDO2 standardına uygun parolasız kimlik doğrulamasını yapılandırın.", "No devices configured." : "Herhangi bir aygıt yapılandırılmamış.", "The following devices are configured for your account:" : "Hesabınız için şu aygıtlar yapılandırılmış:", "Your browser does not support WebAuthn." : "Tarayıcınız WebAuthn desteklemiyor.", diff --git a/apps/settings/l10n/tr.json b/apps/settings/l10n/tr.json index eecac8fc2a3..7d0da40466f 100644 --- a/apps/settings/l10n/tr.json +++ b/apps/settings/l10n/tr.json @@ -763,7 +763,7 @@ "Adding your device …" : "Aygıtınız ekleniyor …", "Unnamed device" : "Adsız aygıt", "Passwordless Authentication" : "Parolasız kimlik doğrulaması", - "Set up your account for passwordless authentication following the FIDO2 standard." : "Hesabınız için FIDO2 standardına uygun parolasız kimlik doğrulamasını kurun.", + "Set up your account for passwordless authentication following the FIDO2 standard." : "Hesabınız için FIDO2 standardına uygun parolasız kimlik doğrulamasını yapılandırın.", "No devices configured." : "Herhangi bir aygıt yapılandırılmamış.", "The following devices are configured for your account:" : "Hesabınız için şu aygıtlar yapılandırılmış:", "Your browser does not support WebAuthn." : "Tarayıcınız WebAuthn desteklemiyor.", diff --git a/apps/sharebymail/l10n/et_EE.js b/apps/sharebymail/l10n/et_EE.js index 47f81d56824..c47755cfca4 100644 --- a/apps/sharebymail/l10n/et_EE.js +++ b/apps/sharebymail/l10n/et_EE.js @@ -3,6 +3,8 @@ OC.L10N.register( { "Shared with {email}" : "Jagatud aadressile {email}", "Shared with {email} by {actor}" : "Jagatud aadressile {email} {actor} poolt", + "Unshared from {email}" : "Jagamine {email} aadressile on lõpetatud", + "Unshared from {email} by {actor}" : "{actor} lõpetas jagamise {email} aadressile", "Password for mail share sent to {email}" : "E-kirjaga jagamise salasõna on saadetud aadressile {email}", "Password for mail share sent to you" : "Sulle saadetud e-kirjaga jagamise salasõna", "Password to access {file} was sent to {email}" : "Salasõna ligipääsuks „{file}“ failile saadeti aadressile {email}", @@ -10,6 +12,7 @@ OC.L10N.register( "Share by mail" : "Jaga e-postiga", "Sharing %1$s failed, because this item is already shared with the account %2$s" : "%1$s jagamine ebaõnnestus, kuna seda üksust on juba jagatud kontoga %2$s", "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Me ei saa sulle automaatselt loodud salasõna saata. Palun määra oma isiklikes seadistustes korrektne e-posti aadress ja proovi uuesti.", + "Failed to send share by email. Got an invalid email address" : "Jaosmeedia saatmine e-postiga ei õnnestunud. Ilmselt oli e-posti aadress vale.", "Failed to send share by email" : "Jaosmeediat polnud võimalik e-kirjaga saata", "%1$s shared %2$s with you" : "%1$s jagas sinuga: %2$s", "Note:" : "Märkus:", @@ -31,7 +34,8 @@ OC.L10N.register( "You can choose a different password at any time in the share dialog." : "Salasõna saad alati jagamisvaatest muuta.", "Could not find share" : "Jagamist ei leitud.", "Share provider which allows you to share files by mail" : "Jagamisteenuse pakkuja, mis võimaldab sul meediat jagada e-posti vahendusel", - "Send password by mail" : "Saada parool e-postiga", + "Unable to update share by mail config" : "E-postiga jagamise seadistuste uuendamine ei õnnestu.", + "Send password by mail" : "Saada salasõna e-postiga", "Reply to initiator" : "Vasta algatajale" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/et_EE.json b/apps/sharebymail/l10n/et_EE.json index ce01d8465ad..ad4029da1e0 100644 --- a/apps/sharebymail/l10n/et_EE.json +++ b/apps/sharebymail/l10n/et_EE.json @@ -1,6 +1,8 @@ { "translations": { "Shared with {email}" : "Jagatud aadressile {email}", "Shared with {email} by {actor}" : "Jagatud aadressile {email} {actor} poolt", + "Unshared from {email}" : "Jagamine {email} aadressile on lõpetatud", + "Unshared from {email} by {actor}" : "{actor} lõpetas jagamise {email} aadressile", "Password for mail share sent to {email}" : "E-kirjaga jagamise salasõna on saadetud aadressile {email}", "Password for mail share sent to you" : "Sulle saadetud e-kirjaga jagamise salasõna", "Password to access {file} was sent to {email}" : "Salasõna ligipääsuks „{file}“ failile saadeti aadressile {email}", @@ -8,6 +10,7 @@ "Share by mail" : "Jaga e-postiga", "Sharing %1$s failed, because this item is already shared with the account %2$s" : "%1$s jagamine ebaõnnestus, kuna seda üksust on juba jagatud kontoga %2$s", "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Me ei saa sulle automaatselt loodud salasõna saata. Palun määra oma isiklikes seadistustes korrektne e-posti aadress ja proovi uuesti.", + "Failed to send share by email. Got an invalid email address" : "Jaosmeedia saatmine e-postiga ei õnnestunud. Ilmselt oli e-posti aadress vale.", "Failed to send share by email" : "Jaosmeediat polnud võimalik e-kirjaga saata", "%1$s shared %2$s with you" : "%1$s jagas sinuga: %2$s", "Note:" : "Märkus:", @@ -29,7 +32,8 @@ "You can choose a different password at any time in the share dialog." : "Salasõna saad alati jagamisvaatest muuta.", "Could not find share" : "Jagamist ei leitud.", "Share provider which allows you to share files by mail" : "Jagamisteenuse pakkuja, mis võimaldab sul meediat jagada e-posti vahendusel", - "Send password by mail" : "Saada parool e-postiga", + "Unable to update share by mail config" : "E-postiga jagamise seadistuste uuendamine ei õnnestu.", + "Send password by mail" : "Saada salasõna e-postiga", "Reply to initiator" : "Vasta algatajale" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/sharebymail/l10n/ru.js b/apps/sharebymail/l10n/ru.js index 3f59ad6b900..0ee054c416f 100644 --- a/apps/sharebymail/l10n/ru.js +++ b/apps/sharebymail/l10n/ru.js @@ -18,12 +18,22 @@ OC.L10N.register( "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Мы не можем отправить вам автоматически сгенерированный пароль. Укажите действующий адрес электронной почты в личных настройках и повторите попытку.", "Failed to send share by email. Got an invalid email address" : "Не удалось отправить ссылку общего доступа по электронной почте. Получен неверный адрес электронной почты", "Failed to send share by email" : "Не удалось предоставить общий доступ по адресу электронной почты", + "%1$s shared %2$s with you" : "%1$s поделился(ась) %2$s с вами", "Note:" : "Примечание:", + "This share is valid until %s at midnight" : "Общий ресурс будет действителен до полуночи %s", + "Expiration:" : "Срок действия:", "Open %s" : "Открыть %s", "%1$s via %2$s" : "%1$s через %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s поделился(ась) с вами %2$s. Вы должны были получить отдельное письмо со ссылкой для доступа.", + "Password to access %1$s shared to you by %2$s" : "Пароль для доступа к %1$s, предоставленному вам пользователем %2$s", "Password to access %s" : "Пароль для доступа к %s", "It is protected with the following password:" : "Доступ защищён следующим паролем: ", "This password will expire at %s" : "Срок действия этого пароля завершится %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s поделился(ась) %2$s с вами и хочет добавить:", + "%1$s shared %2$s with you and wants to add" : "%1$s поделился(ась) %2$s с вами и хочет добавить", + "%s added a note to a file shared with you" : "%s добавил(а) заметку к файлу, которым поделился(ась) с вами", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Вы только что поделились %1$s с %2$s. Ссылка на доступ уже отправлена получателю. Согласно политике безопасности, установленной администратором %3$s, каждый общий ресурс должен быть защищён паролем, и его запрещено отправлять пароль напрямую получателю. Пожалуйста, передайте пароль самостоятельно.", + "Password to access %1$s shared by you with %2$s" : "Пароль для доступа к %1$s, которым вы поделились с %2$s", "This is the password:" : "Пароль: ", "You can choose a different password at any time in the share dialog." : "В любой момент можно выбрать другой пароль в диалоге «Общий доступ».", "Could not find share" : "Не удалось найти общий ресурс", diff --git a/apps/sharebymail/l10n/ru.json b/apps/sharebymail/l10n/ru.json index b0b3cf028dd..d7bf86c5657 100644 --- a/apps/sharebymail/l10n/ru.json +++ b/apps/sharebymail/l10n/ru.json @@ -16,12 +16,22 @@ "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Мы не можем отправить вам автоматически сгенерированный пароль. Укажите действующий адрес электронной почты в личных настройках и повторите попытку.", "Failed to send share by email. Got an invalid email address" : "Не удалось отправить ссылку общего доступа по электронной почте. Получен неверный адрес электронной почты", "Failed to send share by email" : "Не удалось предоставить общий доступ по адресу электронной почты", + "%1$s shared %2$s with you" : "%1$s поделился(ась) %2$s с вами", "Note:" : "Примечание:", + "This share is valid until %s at midnight" : "Общий ресурс будет действителен до полуночи %s", + "Expiration:" : "Срок действия:", "Open %s" : "Открыть %s", "%1$s via %2$s" : "%1$s через %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s поделился(ась) с вами %2$s. Вы должны были получить отдельное письмо со ссылкой для доступа.", + "Password to access %1$s shared to you by %2$s" : "Пароль для доступа к %1$s, предоставленному вам пользователем %2$s", "Password to access %s" : "Пароль для доступа к %s", "It is protected with the following password:" : "Доступ защищён следующим паролем: ", "This password will expire at %s" : "Срок действия этого пароля завершится %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s поделился(ась) %2$s с вами и хочет добавить:", + "%1$s shared %2$s with you and wants to add" : "%1$s поделился(ась) %2$s с вами и хочет добавить", + "%s added a note to a file shared with you" : "%s добавил(а) заметку к файлу, которым поделился(ась) с вами", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Вы только что поделились %1$s с %2$s. Ссылка на доступ уже отправлена получателю. Согласно политике безопасности, установленной администратором %3$s, каждый общий ресурс должен быть защищён паролем, и его запрещено отправлять пароль напрямую получателю. Пожалуйста, передайте пароль самостоятельно.", + "Password to access %1$s shared by you with %2$s" : "Пароль для доступа к %1$s, которым вы поделились с %2$s", "This is the password:" : "Пароль: ", "You can choose a different password at any time in the share dialog." : "В любой момент можно выбрать другой пароль в диалоге «Общий доступ».", "Could not find share" : "Не удалось найти общий ресурс", diff --git a/apps/systemtags/l10n/ru.js b/apps/systemtags/l10n/ru.js index 0a63f20736e..527a2c47aad 100644 --- a/apps/systemtags/l10n/ru.js +++ b/apps/systemtags/l10n/ru.js @@ -65,18 +65,39 @@ OC.L10N.register( "Delete" : "Удалить", "Reset" : "Сбросить", "Loading …" : "Загрузка…", + "_{tag1} will be set and {tag2} will be removed from 1 file._::_{tag1} will be set and {tag2} will be removed from {count} files._" : ["{tag1} будет добавлен, а {tag2} будет удалён из 1 файла.","{tag1} будет добавлен, а {tag2} будет удалён из {count} файлов.","{tag1} будет добавлен, а {tag2} будет удалён из {count} файлов.","{tag1} будет добавлен, а {tag2} будет удалён из {count} файлов."], + "_{tag} will be set to 1 file._::_{tag} will be set to {count} files._" : ["{tag}будет добавлен к 1 файлу.","{tag} будет добавлен к {count} файлам.","{tag} будет добавлен к {count} файлов.","{tag} будет добавлен к {count} файлов."], + "_{tag} will be removed from 1 file._::_{tag} will be removed from {count} files._" : ["{tag} будет удалён из 1 файла.","{tag} будет удалён из {count} файлов.","{tag} будет удалён из {count} файлов.","{tag} будет удалён из {count} файлов."], + "_{tags} and {lastTag} will be set to 1 file._::_{tags} and {lastTag} will be set to {count} files._" : ["{tags} и {lastTag} будут добавлены к 1 файлу.","{tags} и {lastTag} будут добавлены к {count} файлам.","{tags} и {lastTag} будут добавлены к {count}файлам.","{tags} и {lastTag} будут добавлены к {count} файлам."], + "_{tags} and {lastTag} will be removed from 1 file._::_{tags} and {lastTag} will be removed from {count} files._" : ["{tags} и {lastTag} будут удалены из 1 файла.","{tags} и {lastTag} будут удалены из {count} файлов.","{tags} и {lastTag} будут удалены из {count} файлов.","{tags} и {lastTag} будут удалены из {count} файлов."], + "{displayName} (hidden)" : "{displayName} (скрыто)", + "{displayName} (restricted)" : "{displayName} (ограничено)", + "Only admins can create new tags" : "Только администраторы могут создать новые метки", "Failed to apply tags changes" : "Не удалось применить изменения тегов", + "File tags modification canceled" : "Изменение меток отменено", "Manage tags" : "Управление метками", + "Applying tags changes…" : "Изменение меток…", "Search or create tag" : "Найти или создать тег", + "Search tag" : "Найти метку", + "Change tag color" : "Изменить цвет метки", "Create new tag" : "Создать новый тег", + "Select or create tags to apply to all selected files" : "Выберите или создайте метки для применения ко всем выбранным файлам", + "Select tags to apply to all selected files" : "Выберите метки для применения ко всем выбранным файлам", "Cancel" : "Отмена", "Apply changes" : "Применить изменения", "Failed to load tags" : "Не удалось загрузить метки", "Failed to load selected tags" : "Не удалось загрузить выбранный тег", "Failed to select tag" : "Не удалось выбрать тег", + "System admin disabled tag creation. You can only use existing ones." : "Создание меток отключено системным администратором. Вы можете использовать только существующие.", "Loading collaborative tags …" : "Загрузка совместных тегов ...", "Search or create collaborative tags" : "Поиск или создание совместных тегов", "No tags to select, type to create a new tag" : "Нет тегов для выбора. Введите что-нибудь для создания нового тега", + "Unable to update setting" : "Не удалось обновить настройку", + "System tag creation is now restricted to administrators" : "Создание системных меток теперь разрешено только администраторам", + "System tag creation is now allowed for everybody" : "Создание системных меток теперь разрешено всем пользователям", + "System tag management" : "Управление системными метками", + "If enabled, only administrators can create and edit tags. Accounts can still assign and remove them from files." : "Если включено, только администраторы смогут создавать и редактировать метки. Пользователи всё ещё смогут назначать и удалять их с файлов.", + "Restrict tag creation and editing to administrators" : "Разрешить создание и редактирование меток только администраторам", "Collaborative tags are available for all users. Restricted tags are visible to users but cannot be assigned by them. Invisible tags are for internal use, since users cannot see or assign them." : "Совместные теги доступны для всех пользователей. Ограниченные теги видны пользователям, но не могут быть назначены ими. Невидимые теги предназначены для внутреннего использования, поскольку пользователи не могут их видеть или назначать.", "Assigned collaborative tags" : "Присвоенные теги для совместной работы", "Open in Files" : "Открыть в приложении «Файлы»", @@ -86,6 +107,7 @@ OC.L10N.register( "Failed to load tag" : "Не удалось загрузить тег", "Failed to load last used tags" : "Не удалось загрузить последние использованные метки", "Missing \"Content-Location\" header" : "Отсутствует заголовок «Content-Location»", + "A tag with the same name already exists" : "Метка с таким именем уже существует", "Failed to load tags for file" : "Не удалось загрузить метки для файла", "Failed to set tag for file" : "Не удалось поставить метку файлу", "Failed to delete tag for file" : "Не удалось удалить метку у файла" diff --git a/apps/systemtags/l10n/ru.json b/apps/systemtags/l10n/ru.json index a94c3a94a2e..1b74ab93bc1 100644 --- a/apps/systemtags/l10n/ru.json +++ b/apps/systemtags/l10n/ru.json @@ -63,18 +63,39 @@ "Delete" : "Удалить", "Reset" : "Сбросить", "Loading …" : "Загрузка…", + "_{tag1} will be set and {tag2} will be removed from 1 file._::_{tag1} will be set and {tag2} will be removed from {count} files._" : ["{tag1} будет добавлен, а {tag2} будет удалён из 1 файла.","{tag1} будет добавлен, а {tag2} будет удалён из {count} файлов.","{tag1} будет добавлен, а {tag2} будет удалён из {count} файлов.","{tag1} будет добавлен, а {tag2} будет удалён из {count} файлов."], + "_{tag} will be set to 1 file._::_{tag} will be set to {count} files._" : ["{tag}будет добавлен к 1 файлу.","{tag} будет добавлен к {count} файлам.","{tag} будет добавлен к {count} файлов.","{tag} будет добавлен к {count} файлов."], + "_{tag} will be removed from 1 file._::_{tag} will be removed from {count} files._" : ["{tag} будет удалён из 1 файла.","{tag} будет удалён из {count} файлов.","{tag} будет удалён из {count} файлов.","{tag} будет удалён из {count} файлов."], + "_{tags} and {lastTag} will be set to 1 file._::_{tags} and {lastTag} will be set to {count} files._" : ["{tags} и {lastTag} будут добавлены к 1 файлу.","{tags} и {lastTag} будут добавлены к {count} файлам.","{tags} и {lastTag} будут добавлены к {count}файлам.","{tags} и {lastTag} будут добавлены к {count} файлам."], + "_{tags} and {lastTag} will be removed from 1 file._::_{tags} and {lastTag} will be removed from {count} files._" : ["{tags} и {lastTag} будут удалены из 1 файла.","{tags} и {lastTag} будут удалены из {count} файлов.","{tags} и {lastTag} будут удалены из {count} файлов.","{tags} и {lastTag} будут удалены из {count} файлов."], + "{displayName} (hidden)" : "{displayName} (скрыто)", + "{displayName} (restricted)" : "{displayName} (ограничено)", + "Only admins can create new tags" : "Только администраторы могут создать новые метки", "Failed to apply tags changes" : "Не удалось применить изменения тегов", + "File tags modification canceled" : "Изменение меток отменено", "Manage tags" : "Управление метками", + "Applying tags changes…" : "Изменение меток…", "Search or create tag" : "Найти или создать тег", + "Search tag" : "Найти метку", + "Change tag color" : "Изменить цвет метки", "Create new tag" : "Создать новый тег", + "Select or create tags to apply to all selected files" : "Выберите или создайте метки для применения ко всем выбранным файлам", + "Select tags to apply to all selected files" : "Выберите метки для применения ко всем выбранным файлам", "Cancel" : "Отмена", "Apply changes" : "Применить изменения", "Failed to load tags" : "Не удалось загрузить метки", "Failed to load selected tags" : "Не удалось загрузить выбранный тег", "Failed to select tag" : "Не удалось выбрать тег", + "System admin disabled tag creation. You can only use existing ones." : "Создание меток отключено системным администратором. Вы можете использовать только существующие.", "Loading collaborative tags …" : "Загрузка совместных тегов ...", "Search or create collaborative tags" : "Поиск или создание совместных тегов", "No tags to select, type to create a new tag" : "Нет тегов для выбора. Введите что-нибудь для создания нового тега", + "Unable to update setting" : "Не удалось обновить настройку", + "System tag creation is now restricted to administrators" : "Создание системных меток теперь разрешено только администраторам", + "System tag creation is now allowed for everybody" : "Создание системных меток теперь разрешено всем пользователям", + "System tag management" : "Управление системными метками", + "If enabled, only administrators can create and edit tags. Accounts can still assign and remove them from files." : "Если включено, только администраторы смогут создавать и редактировать метки. Пользователи всё ещё смогут назначать и удалять их с файлов.", + "Restrict tag creation and editing to administrators" : "Разрешить создание и редактирование меток только администраторам", "Collaborative tags are available for all users. Restricted tags are visible to users but cannot be assigned by them. Invisible tags are for internal use, since users cannot see or assign them." : "Совместные теги доступны для всех пользователей. Ограниченные теги видны пользователям, но не могут быть назначены ими. Невидимые теги предназначены для внутреннего использования, поскольку пользователи не могут их видеть или назначать.", "Assigned collaborative tags" : "Присвоенные теги для совместной работы", "Open in Files" : "Открыть в приложении «Файлы»", @@ -84,6 +105,7 @@ "Failed to load tag" : "Не удалось загрузить тег", "Failed to load last used tags" : "Не удалось загрузить последние использованные метки", "Missing \"Content-Location\" header" : "Отсутствует заголовок «Content-Location»", + "A tag with the same name already exists" : "Метка с таким именем уже существует", "Failed to load tags for file" : "Не удалось загрузить метки для файла", "Failed to set tag for file" : "Не удалось поставить метку файлу", "Failed to delete tag for file" : "Не удалось удалить метку у файла" diff --git a/apps/systemtags/src/components/SystemTags.vue b/apps/systemtags/src/components/SystemTags.vue index 08dbb59d1c9..e9181cbb1ad 100644 --- a/apps/systemtags/src/components/SystemTags.vue +++ b/apps/systemtags/src/components/SystemTags.vue @@ -8,52 +8,56 @@ <NcLoadingIcon v-if="loadingTags" :name="t('systemtags', 'Loading collaborative tags …')" :size="32" /> - <template v-else> - <NcSelectTags class="system-tags__select" - :input-label="t('systemtags', 'Search or create collaborative tags')" - :placeholder="t('systemtags', 'Collaborative tags …')" - :options="sortedTags" - :value="selectedTags" - :create-option="createOption" - :disabled="disabled" - :taggable="true" - :passthru="true" - :fetch-tags="false" - :loading="loading" - @input="handleInput" - @option:selected="handleSelect" - @option:created="handleCreate" - @option:deselected="handleDeselect"> - <template #no-options> - {{ t('systemtags', 'No tags to select, type to create a new tag') }} - </template> - </NcSelectTags> - </template> + + <NcSelectTags v-show="!loadingTags" + class="system-tags__select" + :input-label="t('systemtags', 'Search or create collaborative tags')" + :placeholder="t('systemtags', 'Collaborative tags …')" + :options="sortedTags" + :value="selectedTags" + :create-option="createOption" + :disabled="disabled" + :taggable="true" + :passthru="true" + :fetch-tags="false" + :loading="loading" + @input="handleInput" + @option:selected="handleSelect" + @option:created="handleCreate" + @option:deselected="handleDeselect"> + <template #no-options> + {{ t('systemtags', 'No tags to select, type to create a new tag') }} + </template> + </NcSelectTags> </div> </template> <script lang="ts"> // FIXME Vue TypeScript ESLint errors /* eslint-disable */ +import type { Node } from '@nextcloud/files' +import type { Tag, TagWithId } from '../types.js' + import Vue from 'vue' import NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon' import NcSelectTags from '@nextcloud/vue/components/NcSelectTags' -import { translate as t } from '@nextcloud/l10n' +import { emit, subscribe } from '@nextcloud/event-bus' +import { loadState } from '@nextcloud/initial-state' import { showError } from '@nextcloud/dialogs' +import { t } from '@nextcloud/l10n' import { defaultBaseTag } from '../utils.js' import { fetchLastUsedTagIds, fetchTags } from '../services/api.js' +import { fetchNode } from '../../../files/src/services/WebdavClient.js' import { createTagForFile, deleteTagForFile, fetchTagsForFile, setTagForFile, } from '../services/files.js' +import logger from '../logger.js' -import { loadState } from '@nextcloud/initial-state' - -import type { Tag, TagWithId } from '../types.js' export default Vue.extend({ name: 'SystemTags', @@ -125,6 +129,10 @@ export default Vue.extend({ }, }, + mounted() { + subscribe('systemtags:node:updated', this.onTagUpdated) + }, + methods: { t, @@ -179,6 +187,8 @@ export default Vue.extend({ showError(t('systemtags', 'Failed to select tag')) } this.loading = false + + this.updateAndDispatchNodeTagsEvent(this.fileId) }, async handleCreate(tag: Tag) { @@ -197,6 +207,8 @@ export default Vue.extend({ showError(t('systemtags', 'Failed to create tag')) } this.loading = false + + this.updateAndDispatchNodeTagsEvent(this.fileId) }, async handleDeselect(tag: TagWithId) { @@ -207,6 +219,35 @@ export default Vue.extend({ showError(t('systemtags', 'Failed to delete tag')) } this.loading = false + + this.updateAndDispatchNodeTagsEvent(this.fileId) + }, + + async onTagUpdated(node: Node) { + if (node.fileid !== this.fileId) { + return + } + + this.loadingTags = true + try { + this.selectedTags = await fetchTagsForFile(this.fileId) + } catch (error) { + showError(t('systemtags', 'Failed to load selected tags')) + } + + this.loadingTags = false + }, + + async updateAndDispatchNodeTagsEvent(fileId: number) { + const path = window.OCA?.Files?.Sidebar?.file || '' + try { + const node = await fetchNode(path) + if (node) { + emit('systemtags:node:updated', node) + } + } catch (error) { + logger.error('Failed to fetch node for system tags update', { error, fileId }) + } }, }, }) diff --git a/apps/testing/composer/composer/autoload_classmap.php b/apps/testing/composer/composer/autoload_classmap.php index e7f1ce74466..9be96aaf617 100644 --- a/apps/testing/composer/composer/autoload_classmap.php +++ b/apps/testing/composer/composer/autoload_classmap.php @@ -13,6 +13,7 @@ return array( 'OCA\\Testing\\Controller\\LockingController' => $baseDir . '/../lib/Controller/LockingController.php', 'OCA\\Testing\\Controller\\RateLimitTestController' => $baseDir . '/../lib/Controller/RateLimitTestController.php', 'OCA\\Testing\\Conversion\\ConversionProvider' => $baseDir . '/../lib/Conversion/ConversionProvider.php', + 'OCA\\Testing\\HiddenGroupBackend' => $baseDir . '/../lib/HiddenGroupBackend.php', 'OCA\\Testing\\Listener\\GetDeclarativeSettingsValueListener' => $baseDir . '/../lib/Listener/GetDeclarativeSettingsValueListener.php', 'OCA\\Testing\\Listener\\RegisterDeclarativeSettingsListener' => $baseDir . '/../lib/Listener/RegisterDeclarativeSettingsListener.php', 'OCA\\Testing\\Listener\\SetDeclarativeSettingsValueListener' => $baseDir . '/../lib/Listener/SetDeclarativeSettingsValueListener.php', diff --git a/apps/testing/composer/composer/autoload_static.php b/apps/testing/composer/composer/autoload_static.php index f87a822aaf2..bd557c37f6b 100644 --- a/apps/testing/composer/composer/autoload_static.php +++ b/apps/testing/composer/composer/autoload_static.php @@ -28,6 +28,7 @@ class ComposerStaticInitTesting 'OCA\\Testing\\Controller\\LockingController' => __DIR__ . '/..' . '/../lib/Controller/LockingController.php', 'OCA\\Testing\\Controller\\RateLimitTestController' => __DIR__ . '/..' . '/../lib/Controller/RateLimitTestController.php', 'OCA\\Testing\\Conversion\\ConversionProvider' => __DIR__ . '/..' . '/../lib/Conversion/ConversionProvider.php', + 'OCA\\Testing\\HiddenGroupBackend' => __DIR__ . '/..' . '/../lib/HiddenGroupBackend.php', 'OCA\\Testing\\Listener\\GetDeclarativeSettingsValueListener' => __DIR__ . '/..' . '/../lib/Listener/GetDeclarativeSettingsValueListener.php', 'OCA\\Testing\\Listener\\RegisterDeclarativeSettingsListener' => __DIR__ . '/..' . '/../lib/Listener/RegisterDeclarativeSettingsListener.php', 'OCA\\Testing\\Listener\\SetDeclarativeSettingsValueListener' => __DIR__ . '/..' . '/../lib/Listener/SetDeclarativeSettingsValueListener.php', diff --git a/apps/testing/lib/AppInfo/Application.php b/apps/testing/lib/AppInfo/Application.php index bbd9e288cc1..0b86c2be78e 100644 --- a/apps/testing/lib/AppInfo/Application.php +++ b/apps/testing/lib/AppInfo/Application.php @@ -8,6 +8,7 @@ namespace OCA\Testing\AppInfo; use OCA\Testing\AlternativeHomeUserBackend; use OCA\Testing\Conversion\ConversionProvider; +use OCA\Testing\HiddenGroupBackend; use OCA\Testing\Listener\GetDeclarativeSettingsValueListener; use OCA\Testing\Listener\RegisterDeclarativeSettingsListener; use OCA\Testing\Listener\SetDeclarativeSettingsValueListener; @@ -26,6 +27,7 @@ use OCP\AppFramework\App; use OCP\AppFramework\Bootstrap\IBootContext; use OCP\AppFramework\Bootstrap\IBootstrap; use OCP\AppFramework\Bootstrap\IRegistrationContext; +use OCP\IGroupManager; use OCP\Settings\Events\DeclarativeSettingsGetValueEvent; use OCP\Settings\Events\DeclarativeSettingsRegisterFormEvent; use OCP\Settings\Events\DeclarativeSettingsSetValueEvent; @@ -68,5 +70,8 @@ class Application extends App implements IBootstrap { $userManager->clearBackends(); $userManager->registerBackend($context->getAppContainer()->get(AlternativeHomeUserBackend::class)); } + + $groupManager = $server->get(IGroupManager::class); + $groupManager->addBackend($server->get(HiddenGroupBackend::class)); } } diff --git a/apps/testing/lib/HiddenGroupBackend.php b/apps/testing/lib/HiddenGroupBackend.php new file mode 100644 index 00000000000..4f7004aae0a --- /dev/null +++ b/apps/testing/lib/HiddenGroupBackend.php @@ -0,0 +1,47 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\Testing; + +use OCP\Group\Backend\ABackend; +use OCP\Group\Backend\IHideFromCollaborationBackend; + +class HiddenGroupBackend extends ABackend implements IHideFromCollaborationBackend { + private string $groupName; + + public function __construct( + string $groupName = 'hidden_group', + ) { + $this->groupName = $groupName; + } + + public function inGroup($uid, $gid): bool { + return false; + } + + public function getUserGroups($uid): array { + return []; + } + + public function getGroups($search = '', $limit = -1, $offset = 0): array { + return $offset === 0 ? [$this->groupName] : []; + } + + public function groupExists($gid): bool { + return $gid === $this->groupName; + } + + public function usersInGroup($gid, $search = '', $limit = -1, $offset = 0): array { + return []; + } + + public function hideGroup(string $groupId): bool { + return true; + } +} diff --git a/apps/theming/lib/Capabilities.php b/apps/theming/lib/Capabilities.php index b6145298d95..c9bc98036f5 100644 --- a/apps/theming/lib/Capabilities.php +++ b/apps/theming/lib/Capabilities.php @@ -41,6 +41,7 @@ class Capabilities implements IPublicCapability { * @return array{ * theming: array{ * name: string, + * productName: string, * url: string, * slogan: string, * color: string, @@ -94,6 +95,7 @@ class Capabilities implements IPublicCapability { return [ 'theming' => [ 'name' => $this->theming->getName(), + 'productName' => $this->theming->getProductName(), 'url' => $this->theming->getBaseUrl(), 'slogan' => $this->theming->getSlogan(), 'color' => $color, diff --git a/apps/theming/openapi.json b/apps/theming/openapi.json index 26f5e7b8120..66ee05413b3 100644 --- a/apps/theming/openapi.json +++ b/apps/theming/openapi.json @@ -79,6 +79,7 @@ "type": "object", "required": [ "name", + "productName", "url", "slogan", "color", @@ -98,6 +99,9 @@ "name": { "type": "string" }, + "productName": { + "type": "string" + }, "url": { "type": "string" }, diff --git a/apps/theming/tests/CapabilitiesTest.php b/apps/theming/tests/CapabilitiesTest.php index f5230d4d6d0..16cc6d51ba9 100644 --- a/apps/theming/tests/CapabilitiesTest.php +++ b/apps/theming/tests/CapabilitiesTest.php @@ -54,6 +54,7 @@ class CapabilitiesTest extends TestCase { return [ ['name', 'url', 'slogan', '#FFFFFF', '#000000', 'logo', 'background', '#fff', '#000', 'http://absolute/', true, [ 'name' => 'name', + 'productName' => 'name', 'url' => 'url', 'slogan' => 'slogan', 'color' => '#FFFFFF', @@ -71,6 +72,7 @@ class CapabilitiesTest extends TestCase { ]], ['name1', 'url2', 'slogan3', '#01e4a0', '#ffffff', 'logo5', 'background6', '#fff', '#000', 'http://localhost/', false, [ 'name' => 'name1', + 'productName' => 'name1', 'url' => 'url2', 'slogan' => 'slogan3', 'color' => '#01e4a0', @@ -88,6 +90,7 @@ class CapabilitiesTest extends TestCase { ]], ['name1', 'url2', 'slogan3', '#000000', '#ffffff', 'logo5', 'backgroundColor', '#000000', '#ffffff', 'http://localhost/', true, [ 'name' => 'name1', + 'productName' => 'name1', 'url' => 'url2', 'slogan' => 'slogan3', 'color' => '#000000', @@ -105,6 +108,7 @@ class CapabilitiesTest extends TestCase { ]], ['name1', 'url2', 'slogan3', '#000000', '#ffffff', 'logo5', 'backgroundColor', '#000000', '#ffffff', 'http://localhost/', false, [ 'name' => 'name1', + 'productName' => 'name1', 'url' => 'url2', 'slogan' => 'slogan3', 'color' => '#000000', @@ -135,6 +139,9 @@ class CapabilitiesTest extends TestCase { ->method('getName') ->willReturn($name); $this->theming->expects($this->once()) + ->method('getProductName') + ->willReturn($name); + $this->theming->expects($this->once()) ->method('getBaseUrl') ->willReturn($url); $this->theming->expects($this->once()) diff --git a/apps/user_ldap/ajax/deleteConfiguration.php b/apps/user_ldap/ajax/deleteConfiguration.php index f09295355ac..68bce69f982 100644 --- a/apps/user_ldap/ajax/deleteConfiguration.php +++ b/apps/user_ldap/ajax/deleteConfiguration.php @@ -1,8 +1,6 @@ <?php use OCA\User_LDAP\Helper; -use OCP\IConfig; -use OCP\IDBConnection; use OCP\Server; use OCP\Util; @@ -17,7 +15,7 @@ use OCP\Util; \OC_JSON::callCheck(); $prefix = (string)$_POST['ldap_serverconfig_chooser']; -$helper = new Helper(Server::get(IConfig::class), Server::get(IDBConnection::class)); +$helper = Server::get(Helper::class); if ($helper->deleteServerConfiguration($prefix)) { \OC_JSON::success(); } else { diff --git a/apps/user_ldap/ajax/getNewServerConfigPrefix.php b/apps/user_ldap/ajax/getNewServerConfigPrefix.php index e8746a7c1b1..e5ba6375c73 100644 --- a/apps/user_ldap/ajax/getNewServerConfigPrefix.php +++ b/apps/user_ldap/ajax/getNewServerConfigPrefix.php @@ -2,8 +2,6 @@ use OCA\User_LDAP\Configuration; use OCA\User_LDAP\Helper; -use OCP\IConfig; -use OCP\IDBConnection; use OCP\Server; /** @@ -16,7 +14,7 @@ use OCP\Server; \OC_JSON::checkAppEnabled('user_ldap'); \OC_JSON::callCheck(); -$helper = new Helper(Server::get(IConfig::class), Server::get(IDBConnection::class)); +$helper = Server::get(Helper::class); $serverConnections = $helper->getServerConfigurationPrefixes(); sort($serverConnections); $lk = array_pop($serverConnections); diff --git a/apps/user_ldap/l10n/gl.js b/apps/user_ldap/l10n/gl.js index d97ec49e13c..a39e92ab1f8 100644 --- a/apps/user_ldap/l10n/gl.js +++ b/apps/user_ldap/l10n/gl.js @@ -61,6 +61,7 @@ OC.L10N.register( "No LDAP base DN was given" : "Non se indicou un DN base de LDAP", "User base DN is not a subnode of global base DN" : "O DN base do usuario non é un subnodo do DN base global", "Group base DN is not a subnode of global base DN" : "O DN base de grupo non é un subnodo do DN base global", + "Login filter does not contain %s placeholder." : "O filtro de inicio de sesión non contén o marcador de substitución %s.", "Please login with the new password" : "Acceda co novo contrasinal", "LDAP User backend" : "Infraestrutura do usuario LDAP", "Your password will expire tomorrow." : "O seu contrasinal caduca mañá.", diff --git a/apps/user_ldap/l10n/gl.json b/apps/user_ldap/l10n/gl.json index 952066b7994..58b0658ebf0 100644 --- a/apps/user_ldap/l10n/gl.json +++ b/apps/user_ldap/l10n/gl.json @@ -59,6 +59,7 @@ "No LDAP base DN was given" : "Non se indicou un DN base de LDAP", "User base DN is not a subnode of global base DN" : "O DN base do usuario non é un subnodo do DN base global", "Group base DN is not a subnode of global base DN" : "O DN base de grupo non é un subnodo do DN base global", + "Login filter does not contain %s placeholder." : "O filtro de inicio de sesión non contén o marcador de substitución %s.", "Please login with the new password" : "Acceda co novo contrasinal", "LDAP User backend" : "Infraestrutura do usuario LDAP", "Your password will expire tomorrow." : "O seu contrasinal caduca mañá.", diff --git a/apps/user_ldap/l10n/ru.js b/apps/user_ldap/l10n/ru.js index 2868b79aa5f..30ab9ad0e15 100644 --- a/apps/user_ldap/l10n/ru.js +++ b/apps/user_ldap/l10n/ru.js @@ -11,6 +11,7 @@ OC.L10N.register( "No configuration specified" : "Конфигурация не указана", "No data specified" : "Нет данных", "Invalid data specified" : "Указаны некорректные данные", + "Could not set configuration %1$s to %2$s" : "Не удалось задать конфигурацию %1$s для %2$s", "Action does not exist" : "Действие не существует", "Renewing …" : "Обновление…", "Very weak password" : "Очень слабый пароль", @@ -25,12 +26,12 @@ OC.L10N.register( "Configuration OK" : "Конфигурация в порядке", "Select groups" : "Выберите группы", "Select object classes" : "Выберите объектные классы", - "Please check the credentials, they seem to be wrong." : "Пожалуйста проверьте учетный данные, возможно они не верны.", + "Please check the credentials, they seem to be wrong." : "Пожалуйста, проверьте учётные данные — возможно, они указаны неверно.", "Please specify the port, it could not be auto-detected." : "Пожалуйста укажите порт, он не может быть определен автоматически.", "Base DN could not be auto-detected, please revise credentials, host and port." : "База поиска не может быть определена автоматически, пожалуйста перепроверьте учетные данные, адрес и порт.", "Could not detect Base DN, please enter it manually." : "Невозможно обнаружить Base DN, пожалуйста, задайте вручную.", "{nthServer}. Server" : "Сервер {nthServer}.", - "No object found in the given Base DN. Please revise." : "Не найдено объектов в Base DN. Пожалуйста перепроверьте.", + "No object found in the given Base DN. Please revise." : "В указанной базовой DN не найден ни один объект. Пожалуйста, перепроверьте.", "More than 1,000 directory entries available." : "В каталоге доступно более 1,000 записей.", "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} элемент доступен в предоставленном базовом DN","{objectsFound} элементов доступно в предоставленном базовом DN","{objectsFound} элементов доступно в предоставленном базовом DN","{objectsFound} элементов доступно в предоставленном базовом DN"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Произошла ошибка. Пожалуйста проверьте базу поиска DN, а также настройки подключения и учетные данные.", @@ -53,6 +54,14 @@ OC.L10N.register( "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Заполнитель \"%uid\" отсутствует. Он будет заменён именем пользователя при запросе LDAP/AD.", "Please provide a login name to test against" : "Пожалуйста, укажите логин для проверки", "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Блок группы был отключен, поскольку сервер LDAP/AD не поддерживает memberOf.", + "Password change rejected. Hint: %s" : "Изменение пароля отклонено. Подсказка: %s", + "Mandatory field \"%s\" left empty" : "Обязательное поле «%s» оставлено пустым", + "A password is given, but not an LDAP agent" : "Пароль задан, но не указан LDAP-агент", + "No password is given for the user agent" : "Пароль для LDAP-агента не задан", + "No LDAP base DN was given" : "Не указана базовая DN LDAP", + "User base DN is not a subnode of global base DN" : "Базовая DN пользователей не является подузлом глобальной базовой DN", + "Group base DN is not a subnode of global base DN" : " Базовая DN групп не является подузлом глобальной базовой DN", + "Login filter does not contain %s placeholder." : "Фильтр входа не содержит плейсхолдер %s.", "Please login with the new password" : "Войдите в систему со своим новым паролем", "LDAP User backend" : "Механизм учета пользователей LDAP", "Your password will expire tomorrow." : "Завтра истекает срок действия пароля.", @@ -60,6 +69,10 @@ OC.L10N.register( "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Срок действия пароля истекает через %n день.","Срок действия пароля истекает через %n дня.","Срок действия пароля истекает через %n дней.","Срок действия пароля истекает через %n день."], "LDAP/AD integration" : "LDAP/AD интеграция", "LDAP Connection" : "Подключение по протоколу LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Не удалось выполнить привязку для этой конфигурации LDAP: %s","Не удалось выполнить привязку для %n конфигураций LDAP: %s","Не удалось выполнить привязку для %n конфигураций LDAP: %s","Не удалось выполнить привязку для %n конфигураций LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Ошибка поиска в этой конфигурации LDAP: %s","Ошибка поиска в %n конфигурациях LDAP: %s","Ошибка поиска в %n конфигурациях LDAP: %s","Ошибка поиска в %n конфигурациях LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Найдена неактивная конфигурация LDAP: %s","Найдено %n неактивных конфигурации LDAP: %s","Найдено %n неактивных конфигураций LDAP: %s","Найдено %n неактивных конфигураций LDAP: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : [" Привязка и поиск работают в настроенном LDAP-соединении (%s)"," Привязка и поиск работают во всех %n настроенных LDAP-соединениях (%s)"," Привязка и поиск работают во всех %n настроенных LDAP-соединениях (%s)"," Привязка и поиск работают во всех %n настроенных LDAP-соединениях (%s)"], "Invalid LDAP UUIDs" : "Недопустимые UUID LDAP", "None found" : "Ничего не найдено", "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Обнаружены недопустимые идентификаторы UUID учетных записей или групп LDAP. Пожалуйста, ознакомьтесь с вашими настройками \"Переопределение обнаружения UUID\" в экспертной части конфигурации LDAP и используйте \"occ ldap:update-uuid\", чтобы обновить их.", @@ -208,6 +221,8 @@ OC.L10N.register( "User profile Biography will be set from the specified attribute" : "Биография в профиле пользователя будет установлена из указанного атрибута", "Birthdate Field" : "Поле Даты рождения", "User profile Date of birth will be set from the specified attribute" : "Дата рождения профиля пользователя будет установлена на основе указанного атрибута", + "Pronouns Field" : " Поле местоимений", + "User profile Pronouns will be set from the specified attribute" : "Местоимения в профиле пользователя будут заданы из указанного атрибута", "Internal Username" : "Внутреннее имя пользователя", "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "По умолчанию внутреннее имя пользователя будет создано на основе атрибута UUID. Это гарантирует, что имя пользователя будет уникальным и символы не нужно будет преобразовывать. Внутреннее имя пользователя имеет ограничение – разрешены только эти символы: [a-zA-Z0-9_.@-]. Другие символы заменяются их ASCII-кодами или просто опускаются. При совпадениях число будет добавлено/увеличено. Внутреннее имя пользователя используется для внутренней идентификации пользователя. Оно также является именем по умолчанию для домашней папки пользователя. Оно также является частью удалённых URL-адресов, например, для всех служб DAV. С помощью этого параметра можно переопределить поведение по умолчанию. Изменения будут иметь силу только для новых сопоставленных (добавленных) пользователей LDAP. Оставьте этот параметр пустым для поведения по умолчанию.", "Internal Username Attribute:" : "Атрибут для внутреннего имени:", diff --git a/apps/user_ldap/l10n/ru.json b/apps/user_ldap/l10n/ru.json index 683b486066b..eea51dcf3a7 100644 --- a/apps/user_ldap/l10n/ru.json +++ b/apps/user_ldap/l10n/ru.json @@ -9,6 +9,7 @@ "No configuration specified" : "Конфигурация не указана", "No data specified" : "Нет данных", "Invalid data specified" : "Указаны некорректные данные", + "Could not set configuration %1$s to %2$s" : "Не удалось задать конфигурацию %1$s для %2$s", "Action does not exist" : "Действие не существует", "Renewing …" : "Обновление…", "Very weak password" : "Очень слабый пароль", @@ -23,12 +24,12 @@ "Configuration OK" : "Конфигурация в порядке", "Select groups" : "Выберите группы", "Select object classes" : "Выберите объектные классы", - "Please check the credentials, they seem to be wrong." : "Пожалуйста проверьте учетный данные, возможно они не верны.", + "Please check the credentials, they seem to be wrong." : "Пожалуйста, проверьте учётные данные — возможно, они указаны неверно.", "Please specify the port, it could not be auto-detected." : "Пожалуйста укажите порт, он не может быть определен автоматически.", "Base DN could not be auto-detected, please revise credentials, host and port." : "База поиска не может быть определена автоматически, пожалуйста перепроверьте учетные данные, адрес и порт.", "Could not detect Base DN, please enter it manually." : "Невозможно обнаружить Base DN, пожалуйста, задайте вручную.", "{nthServer}. Server" : "Сервер {nthServer}.", - "No object found in the given Base DN. Please revise." : "Не найдено объектов в Base DN. Пожалуйста перепроверьте.", + "No object found in the given Base DN. Please revise." : "В указанной базовой DN не найден ни один объект. Пожалуйста, перепроверьте.", "More than 1,000 directory entries available." : "В каталоге доступно более 1,000 записей.", "_{objectsFound} entry available within the provided Base DN_::_{objectsFound} entries available within the provided Base DN_" : ["{objectsFound} элемент доступен в предоставленном базовом DN","{objectsFound} элементов доступно в предоставленном базовом DN","{objectsFound} элементов доступно в предоставленном базовом DN","{objectsFound} элементов доступно в предоставленном базовом DN"], "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Произошла ошибка. Пожалуйста проверьте базу поиска DN, а также настройки подключения и учетные данные.", @@ -51,6 +52,14 @@ "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Заполнитель \"%uid\" отсутствует. Он будет заменён именем пользователя при запросе LDAP/AD.", "Please provide a login name to test against" : "Пожалуйста, укажите логин для проверки", "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Блок группы был отключен, поскольку сервер LDAP/AD не поддерживает memberOf.", + "Password change rejected. Hint: %s" : "Изменение пароля отклонено. Подсказка: %s", + "Mandatory field \"%s\" left empty" : "Обязательное поле «%s» оставлено пустым", + "A password is given, but not an LDAP agent" : "Пароль задан, но не указан LDAP-агент", + "No password is given for the user agent" : "Пароль для LDAP-агента не задан", + "No LDAP base DN was given" : "Не указана базовая DN LDAP", + "User base DN is not a subnode of global base DN" : "Базовая DN пользователей не является подузлом глобальной базовой DN", + "Group base DN is not a subnode of global base DN" : " Базовая DN групп не является подузлом глобальной базовой DN", + "Login filter does not contain %s placeholder." : "Фильтр входа не содержит плейсхолдер %s.", "Please login with the new password" : "Войдите в систему со своим новым паролем", "LDAP User backend" : "Механизм учета пользователей LDAP", "Your password will expire tomorrow." : "Завтра истекает срок действия пароля.", @@ -58,6 +67,10 @@ "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Срок действия пароля истекает через %n день.","Срок действия пароля истекает через %n дня.","Срок действия пароля истекает через %n дней.","Срок действия пароля истекает через %n день."], "LDAP/AD integration" : "LDAP/AD интеграция", "LDAP Connection" : "Подключение по протоколу LDAP", + "_Binding failed for this LDAP configuration: %s_::_Binding failed for %n LDAP configurations: %s_" : ["Не удалось выполнить привязку для этой конфигурации LDAP: %s","Не удалось выполнить привязку для %n конфигураций LDAP: %s","Не удалось выполнить привязку для %n конфигураций LDAP: %s","Не удалось выполнить привязку для %n конфигураций LDAP: %s"], + "_Searching failed for this LDAP configuration: %s_::_Searching failed for %n LDAP configurations: %s_" : ["Ошибка поиска в этой конфигурации LDAP: %s","Ошибка поиска в %n конфигурациях LDAP: %s","Ошибка поиска в %n конфигурациях LDAP: %s","Ошибка поиска в %n конфигурациях LDAP: %s"], + "_There is an inactive LDAP configuration: %s_::_There are %n inactive LDAP configurations: %s_" : ["Найдена неактивная конфигурация LDAP: %s","Найдено %n неактивных конфигурации LDAP: %s","Найдено %n неактивных конфигураций LDAP: %s","Найдено %n неактивных конфигураций LDAP: %s"], + "_Binding and searching works on the configured LDAP connection (%s)_::_Binding and searching works on all of the %n configured LDAP connections (%s)_" : [" Привязка и поиск работают в настроенном LDAP-соединении (%s)"," Привязка и поиск работают во всех %n настроенных LDAP-соединениях (%s)"," Привязка и поиск работают во всех %n настроенных LDAP-соединениях (%s)"," Привязка и поиск работают во всех %n настроенных LDAP-соединениях (%s)"], "Invalid LDAP UUIDs" : "Недопустимые UUID LDAP", "None found" : "Ничего не найдено", "Invalid UUIDs of LDAP accounts or groups have been found. Please review your \"Override UUID detection\" settings in the Expert part of the LDAP configuration and use \"occ ldap:update-uuid\" to update them." : "Обнаружены недопустимые идентификаторы UUID учетных записей или групп LDAP. Пожалуйста, ознакомьтесь с вашими настройками \"Переопределение обнаружения UUID\" в экспертной части конфигурации LDAP и используйте \"occ ldap:update-uuid\", чтобы обновить их.", @@ -206,6 +219,8 @@ "User profile Biography will be set from the specified attribute" : "Биография в профиле пользователя будет установлена из указанного атрибута", "Birthdate Field" : "Поле Даты рождения", "User profile Date of birth will be set from the specified attribute" : "Дата рождения профиля пользователя будет установлена на основе указанного атрибута", + "Pronouns Field" : " Поле местоимений", + "User profile Pronouns will be set from the specified attribute" : "Местоимения в профиле пользователя будут заданы из указанного атрибута", "Internal Username" : "Внутреннее имя пользователя", "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "По умолчанию внутреннее имя пользователя будет создано на основе атрибута UUID. Это гарантирует, что имя пользователя будет уникальным и символы не нужно будет преобразовывать. Внутреннее имя пользователя имеет ограничение – разрешены только эти символы: [a-zA-Z0-9_.@-]. Другие символы заменяются их ASCII-кодами или просто опускаются. При совпадениях число будет добавлено/увеличено. Внутреннее имя пользователя используется для внутренней идентификации пользователя. Оно также является именем по умолчанию для домашней папки пользователя. Оно также является частью удалённых URL-адресов, например, для всех служб DAV. С помощью этого параметра можно переопределить поведение по умолчанию. Изменения будут иметь силу только для новых сопоставленных (добавленных) пользователей LDAP. Оставьте этот параметр пустым для поведения по умолчанию.", "Internal Username Attribute:" : "Атрибут для внутреннего имени:", diff --git a/apps/user_ldap/lib/Command/Search.php b/apps/user_ldap/lib/Command/Search.php index ad13c94c84a..85906b20e9a 100644 --- a/apps/user_ldap/lib/Command/Search.php +++ b/apps/user_ldap/lib/Command/Search.php @@ -12,7 +12,6 @@ use OCA\User_LDAP\Helper; use OCA\User_LDAP\LDAP; use OCA\User_LDAP\User_Proxy; use OCP\IConfig; -use OCP\IDBConnection; use OCP\Server; use Symfony\Component\Console\Command\Command; @@ -83,7 +82,7 @@ class Search extends Command { } protected function execute(InputInterface $input, OutputInterface $output): int { - $helper = new Helper($this->ocConfig, Server::get(IDBConnection::class)); + $helper = Server::get(Helper::class); $configPrefixes = $helper->getServerConfigurationPrefixes(true); $ldapWrapper = new LDAP(); diff --git a/apps/user_ldap/lib/Command/SetConfig.php b/apps/user_ldap/lib/Command/SetConfig.php index 5a0b65a2c3e..7e9efcf34d0 100644 --- a/apps/user_ldap/lib/Command/SetConfig.php +++ b/apps/user_ldap/lib/Command/SetConfig.php @@ -11,8 +11,6 @@ use OCA\User_LDAP\Configuration; use OCA\User_LDAP\ConnectionFactory; use OCA\User_LDAP\Helper; use OCA\User_LDAP\LDAP; -use OCP\IConfig; -use OCP\IDBConnection; use OCP\Server; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; @@ -43,7 +41,7 @@ class SetConfig extends Command { } protected function execute(InputInterface $input, OutputInterface $output): int { - $helper = new Helper(Server::get(IConfig::class), Server::get(IDBConnection::class)); + $helper = Server::get(Helper::class); $availableConfigs = $helper->getServerConfigurationPrefixes(); $configID = $input->getArgument('configID'); if (!in_array($configID, $availableConfigs)) { diff --git a/apps/user_ldap/lib/Connection.php b/apps/user_ldap/lib/Connection.php index 78a5f93d29e..b25a2e72b2b 100644 --- a/apps/user_ldap/lib/Connection.php +++ b/apps/user_ldap/lib/Connection.php @@ -11,8 +11,6 @@ use OC\ServerNotAvailableException; use OCA\User_LDAP\Exceptions\ConfigurationIssueException; use OCP\ICache; use OCP\ICacheFactory; -use OCP\IConfig; -use OCP\IDBConnection; use OCP\IL10N; use OCP\Server; use OCP\Util; @@ -156,7 +154,7 @@ class Connection extends LDAPUtility { if ($memcache->isAvailable()) { $this->cache = $memcache->createDistributed(); } - $helper = new Helper(Server::get(IConfig::class), Server::get(IDBConnection::class)); + $helper = Server::get(Helper::class); $this->doNotValidate = !in_array($this->configPrefix, $helper->getServerConfigurationPrefixes()); $this->logger = Server::get(LoggerInterface::class); diff --git a/apps/user_ldap/lib/Helper.php b/apps/user_ldap/lib/Helper.php index 27c19e6c4f5..d3abf04fd1e 100644 --- a/apps/user_ldap/lib/Helper.php +++ b/apps/user_ldap/lib/Helper.php @@ -9,7 +9,7 @@ namespace OCA\User_LDAP; use OCP\Cache\CappedMemoryCache; use OCP\DB\QueryBuilder\IQueryBuilder; -use OCP\IConfig; +use OCP\IAppConfig; use OCP\IDBConnection; use OCP\Server; @@ -18,7 +18,7 @@ class Helper { protected CappedMemoryCache $sanitizeDnCache; public function __construct( - private IConfig $config, + private IAppConfig $appConfig, private IDBConnection $connection, ) { $this->sanitizeDnCache = new CappedMemoryCache(10000); @@ -45,21 +45,37 @@ class Helper { * except the default (first) server shall be connected to. * */ - public function getServerConfigurationPrefixes($activeConfigurations = false): array { + public function getServerConfigurationPrefixes(bool $activeConfigurations = false): array { + $all = $this->getAllServerConfigurationPrefixes(); + if (!$activeConfigurations) { + return $all; + } + return array_values(array_filter( + $all, + fn (string $prefix): bool => ($this->appConfig->getValueString('user_ldap', $prefix . 'ldap_configuration_active') === '1') + )); + } + + protected function getAllServerConfigurationPrefixes(): array { + $unfilled = ['UNFILLED']; + $prefixes = $this->appConfig->getValueArray('user_ldap', 'configuration_prefixes', $unfilled); + if ($prefixes !== $unfilled) { + return $prefixes; + } + + /* Fallback to browsing key for migration from Nextcloud<32 */ $referenceConfigkey = 'ldap_configuration_active'; $keys = $this->getServersConfig($referenceConfigkey); $prefixes = []; foreach ($keys as $key) { - if ($activeConfigurations && $this->config->getAppValue('user_ldap', $key, '0') !== '1') { - continue; - } - $len = strlen($key) - strlen($referenceConfigkey); $prefixes[] = substr($key, 0, $len); } - asort($prefixes); + sort($prefixes); + + $this->appConfig->setValueArray('user_ldap', 'configuration_prefixes', $prefixes); return $prefixes; } @@ -68,46 +84,45 @@ class Helper { * * determines the host for every configured connection * - * @return array an array with configprefix as keys + * @return array<string,string> an array with configprefix as keys * */ - public function getServerConfigurationHosts() { - $referenceConfigkey = 'ldap_host'; - - $keys = $this->getServersConfig($referenceConfigkey); + public function getServerConfigurationHosts(): array { + $prefixes = $this->getServerConfigurationPrefixes(); + $referenceConfigkey = 'ldap_host'; $result = []; - foreach ($keys as $key) { - $len = strlen($key) - strlen($referenceConfigkey); - $prefix = substr($key, 0, $len); - $result[$prefix] = $this->config->getAppValue('user_ldap', $key); + foreach ($prefixes as $prefix) { + $result[$prefix] = $this->appConfig->getValueString('user_ldap', $prefix . $referenceConfigkey); } return $result; } /** - * return the next available configuration prefix - * - * @return string + * return the next available configuration prefix and register it as used */ - public function getNextServerConfigurationPrefix() { - $serverConnections = $this->getServerConfigurationPrefixes(); - - if (count($serverConnections) === 0) { - return 's01'; + public function getNextServerConfigurationPrefix(): string { + $prefixes = $this->getServerConfigurationPrefixes(); + + if (count($prefixes) === 0) { + $prefix = 's01'; + } else { + sort($prefixes); + $lastKey = array_pop($prefixes); + $lastNumber = (int)str_replace('s', '', $lastKey); + $prefix = 's' . str_pad((string)($lastNumber + 1), 2, '0', STR_PAD_LEFT); } - sort($serverConnections); - $lastKey = array_pop($serverConnections); - $lastNumber = (int)str_replace('s', '', $lastKey); - return 's' . str_pad((string)($lastNumber + 1), 2, '0', STR_PAD_LEFT); + $prefixes[] = $prefix; + $this->appConfig->setValueArray('user_ldap', 'configuration_prefixes', $prefixes); + return $prefix; } private function getServersConfig(string $value): array { $regex = '/' . $value . '$/S'; - $keys = $this->config->getAppKeys('user_ldap'); + $keys = $this->appConfig->getKeys('user_ldap'); $result = []; foreach ($keys as $key) { if (preg_match($regex, $key) === 1) { @@ -125,7 +140,9 @@ class Helper { * @return bool true on success, false otherwise */ public function deleteServerConfiguration($prefix) { - if (!in_array($prefix, self::getServerConfigurationPrefixes())) { + $prefixes = $this->getServerConfigurationPrefixes(); + $index = array_search($prefix, $prefixes); + if ($index === false) { return false; } @@ -144,7 +161,11 @@ class Helper { $query->andWhere($query->expr()->notLike('configkey', $query->createNamedParameter('s%'))); } - $deletedRows = $query->execute(); + $deletedRows = $query->executeStatement(); + + unset($prefixes[$index]); + $this->appConfig->setValueArray('user_ldap', 'configuration_prefixes', array_values($prefixes)); + return $deletedRows !== 0; } @@ -152,10 +173,13 @@ class Helper { * checks whether there is one or more disabled LDAP configurations */ public function haveDisabledConfigurations(): bool { - $all = $this->getServerConfigurationPrefixes(false); - $active = $this->getServerConfigurationPrefixes(true); - - return count($all) !== count($active) || count($all) === 0; + $all = $this->getServerConfigurationPrefixes(); + foreach ($all as $prefix) { + if ($this->appConfig->getValueString('user_ldap', $prefix . 'ldap_configuration_active') !== '1') { + return true; + } + } + return false; } /** diff --git a/apps/user_ldap/lib/Jobs/CleanUp.php b/apps/user_ldap/lib/Jobs/CleanUp.php index 7cfc473c950..a1309c0c463 100644 --- a/apps/user_ldap/lib/Jobs/CleanUp.php +++ b/apps/user_ldap/lib/Jobs/CleanUp.php @@ -67,7 +67,7 @@ class CleanUp extends TimedJob { if (isset($arguments['helper'])) { $this->ldapHelper = $arguments['helper']; } else { - $this->ldapHelper = new Helper(Server::get(IConfig::class), Server::get(IDBConnection::class)); + $this->ldapHelper = Server::get(Helper::class); } if (isset($arguments['ocConfig'])) { diff --git a/apps/user_ldap/lib/Settings/Admin.php b/apps/user_ldap/lib/Settings/Admin.php index 014210ca8f0..49868eb68c7 100644 --- a/apps/user_ldap/lib/Settings/Admin.php +++ b/apps/user_ldap/lib/Settings/Admin.php @@ -8,8 +8,6 @@ namespace OCA\User_LDAP\Settings; use OCA\User_LDAP\Configuration; use OCA\User_LDAP\Helper; use OCP\AppFramework\Http\TemplateResponse; -use OCP\IConfig; -use OCP\IDBConnection; use OCP\IL10N; use OCP\Server; use OCP\Settings\IDelegatedSettings; @@ -26,7 +24,7 @@ class Admin implements IDelegatedSettings { * @return TemplateResponse */ public function getForm() { - $helper = new Helper(Server::get(IConfig::class), Server::get(IDBConnection::class)); + $helper = Server::get(Helper::class); $prefixes = $helper->getServerConfigurationPrefixes(); if (count($prefixes) === 0) { $newPrefix = $helper->getNextServerConfigurationPrefix(); diff --git a/apps/user_ldap/tests/AccessTest.php b/apps/user_ldap/tests/AccessTest.php index 86ce2aff854..eafaeb76403 100644 --- a/apps/user_ldap/tests/AccessTest.php +++ b/apps/user_ldap/tests/AccessTest.php @@ -25,7 +25,6 @@ use OCP\HintException; use OCP\IAppConfig; use OCP\IAvatarManager; use OCP\IConfig; -use OCP\IDBConnection; use OCP\Image; use OCP\IUserManager; use OCP\Notification\IManager as INotificationManager; @@ -110,7 +109,7 @@ class AccessTest extends TestCase { $this->createMock(INotificationManager::class), $this->shareManager]) ->getMock(); - $helper = new Helper(Server::get(IConfig::class), Server::get(IDBConnection::class)); + $helper = Server::get(Helper::class); return [$lw, $connector, $um, $helper]; } diff --git a/apps/user_ldap/tests/HelperTest.php b/apps/user_ldap/tests/HelperTest.php index 470b67c5531..adea600d900 100644 --- a/apps/user_ldap/tests/HelperTest.php +++ b/apps/user_ldap/tests/HelperTest.php @@ -8,7 +8,7 @@ declare(strict_types=1); namespace OCA\User_LDAP\Tests; use OCA\User_LDAP\Helper; -use OCP\IConfig; +use OCP\IAppConfig; use OCP\IDBConnection; use OCP\Server; use PHPUnit\Framework\MockObject\MockObject; @@ -17,45 +17,53 @@ use PHPUnit\Framework\MockObject\MockObject; * @group DB */ class HelperTest extends \Test\TestCase { - private IConfig&MockObject $config; + private IAppConfig&MockObject $appConfig; private Helper $helper; protected function setUp(): void { parent::setUp(); - $this->config = $this->createMock(IConfig::class); - $this->helper = new Helper($this->config, Server::get(IDBConnection::class)); + $this->appConfig = $this->createMock(IAppConfig::class); + $this->helper = new Helper( + $this->appConfig, + Server::get(IDBConnection::class) + ); } public function testGetServerConfigurationPrefixes(): void { - $this->config->method('getAppKeys') - ->with($this->equalTo('user_ldap')) + $this->appConfig->method('getKeys') + ->with('user_ldap') ->willReturn([ 'foo', 'ldap_configuration_active', 's1ldap_configuration_active', ]); + $this->appConfig->method('getValueArray') + ->with('user_ldap', 'configuration_prefixes') + -> willReturnArgument(2); + $result = $this->helper->getServerConfigurationPrefixes(false); $this->assertEquals(['', 's1'], $result); } public function testGetServerConfigurationPrefixesActive(): void { - $this->config->method('getAppKeys') - ->with($this->equalTo('user_ldap')) + $this->appConfig->method('getKeys') + ->with('user_ldap') ->willReturn([ 'foo', 'ldap_configuration_active', 's1ldap_configuration_active', ]); - $this->config->method('getAppValue') + $this->appConfig->method('getValueArray') + ->with('user_ldap', 'configuration_prefixes') + -> willReturnArgument(2); + + $this->appConfig->method('getValueString') ->willReturnCallback(function ($app, $key, $default) { - if ($app !== 'user_ldap') { - $this->fail('wrong app'); - } if ($key === 's1ldap_configuration_active') { return '1'; } @@ -67,21 +75,58 @@ class HelperTest extends \Test\TestCase { $this->assertEquals(['s1'], $result); } - public function testGetServerConfigurationHost(): void { - $this->config->method('getAppKeys') - ->with($this->equalTo('user_ldap')) + public function testGetServerConfigurationHostFromAppKeys(): void { + $this->appConfig->method('getKeys') + ->with('user_ldap') ->willReturn([ 'foo', 'ldap_host', 's1ldap_host', 's02ldap_host', + 'ldap_configuration_active', + 's1ldap_configuration_active', + 's02ldap_configuration_active', ]); - $this->config->method('getAppValue') + $this->appConfig->method('getValueArray') + ->with('user_ldap', 'configuration_prefixes') + -> willReturnArgument(2); + + $this->appConfig->method('getValueString') ->willReturnCallback(function ($app, $key, $default) { - if ($app !== 'user_ldap') { - $this->fail('wrong app'); + if ($key === 'ldap_host') { + return 'example.com'; } + if ($key === 's1ldap_host') { + return 'foo.bar.com'; + } + return $default; + }); + + $result = $this->helper->getServerConfigurationHosts(); + + $this->assertEquals([ + '' => 'example.com', + 's1' => 'foo.bar.com', + 's02' => '', + ], $result); + } + + public function testGetServerConfigurationHost(): void { + $this->appConfig + ->expects(self::never()) + ->method('getKeys'); + + $this->appConfig->method('getValueArray') + ->with('user_ldap', 'configuration_prefixes') + -> willReturn([ + '', + 's1', + 's02', + ]); + + $this->appConfig->method('getValueString') + ->willReturnCallback(function ($app, $key, $default) { if ($key === 'ldap_host') { return 'example.com'; } diff --git a/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php b/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php index be8d7702cd1..00f8be18586 100644 --- a/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php +++ b/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php @@ -16,7 +16,6 @@ use OCA\User_LDAP\User\Manager; use OCA\User_LDAP\UserPluginManager; use OCP\IAvatarManager; use OCP\IConfig; -use OCP\IDBConnection; use OCP\Image; use OCP\IUserManager; use OCP\Server; @@ -125,7 +124,7 @@ abstract class AbstractIntegrationTest { * initializes the test Helper */ protected function initHelper() { - $this->helper = new Helper(Server::get(IConfig::class), Server::get(IDBConnection::class)); + $this->helper = Server::get(Helper::class); } /** diff --git a/apps/user_ldap/tests/LDAPProviderTest.php b/apps/user_ldap/tests/LDAPProviderTest.php index a4da4a91948..57323e374aa 100644 --- a/apps/user_ldap/tests/LDAPProviderTest.php +++ b/apps/user_ldap/tests/LDAPProviderTest.php @@ -21,7 +21,6 @@ use OCA\User_LDAP\User_LDAP; use OCP\EventDispatcher\IEventDispatcher; use OCP\ICacheFactory; use OCP\IConfig; -use OCP\IDBConnection; use OCP\IServerContainer; use OCP\Server; use Psr\Log\LoggerInterface; @@ -199,7 +198,7 @@ class LDAPProviderTest extends \Test\TestCase { $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock()); - $helper = new Helper(Server::get(IConfig::class), Server::get(IDBConnection::class)); + $helper = Server::get(Helper::class); $ldapProvider = $this->getLDAPProvider($server); $this->assertEquals( @@ -212,7 +211,7 @@ class LDAPProviderTest extends \Test\TestCase { $server = $this->getServerMock($userBackend, $this->getDefaultGroupBackendMock()); - $helper = new Helper(Server::get(IConfig::class), Server::get(IDBConnection::class)); + $helper = Server::get(Helper::class); $ldapProvider = $this->getLDAPProvider($server); $this->assertEquals( diff --git a/apps/user_status/l10n/bg.js b/apps/user_status/l10n/bg.js index bd0e6bee6a0..c0cca7e6c43 100644 --- a/apps/user_status/l10n/bg.js +++ b/apps/user_status/l10n/bg.js @@ -4,7 +4,7 @@ OC.L10N.register( "Recent statuses" : "Последни състояния", "No recent status changes" : "Няма скорошни промени в състоянието", "In a meeting" : "В среща", - "Commuting" : "Работно пътуване", + "Commuting" : "Пътувам до работа", "Out sick" : "Болничен", "Vacationing" : "Отпуск", "Out of office" : "Извън офиса", @@ -12,7 +12,7 @@ OC.L10N.register( "In a call" : "В обаждане", "User status" : "Потребителско състояние", "Clear status after" : "Изчистване на състоянието след", - "What is your status?" : "Какъв е вашият статус?", + "What is your status?" : "Какво е вашето състояние?", "Previously set" : "Предишно зададени", "Reset status" : "Възстановяване на състоянието", "Reset status to \"{icon} {message}\"" : "Възстановяване на състоянието на „{icon} {message}“", @@ -22,13 +22,13 @@ OC.L10N.register( "There was an error clearing the status" : "Възникна грешка при изчистване на състоянието", "There was an error reverting the status" : "Имаше грешка при връщане на състоянието", "Set status" : "Задаване на състояние", - "Online status" : "Състояние на линия", + "Online status" : "Състояние", "Status message" : "Съобщение за състояние", "Set absence period" : "Задай период на отсъствие", "Set absence period and replacement" : "Задай период на отсъствие и заместник.", "Your status was set automatically" : "Състоянието ви беше зададено автоматично", - "Clear status message" : "Изчистване на съобщението за състояние", - "Set status message" : "Задаване на съобщение за състояние", + "Clear status message" : "Изчисти състоянието", + "Set status message" : "Задай състояние", "Don't clear" : "Да не се изчиства", "Today" : "Днес", "This week" : "Тази седмица", @@ -40,7 +40,7 @@ OC.L10N.register( "There was an error saving the new status" : "Възникна грешка при запазване на новото състояние", "30 minutes" : "30 минути", "1 hour" : "1 час", - "4 hours" : "4 часа", + "4 hours" : "4 чàса", "Mute all notifications" : "Заглушаване на всички известия", "Appear offline" : "Показване като офлайн" }, diff --git a/apps/user_status/l10n/bg.json b/apps/user_status/l10n/bg.json index 57c898980c0..0909badbed2 100644 --- a/apps/user_status/l10n/bg.json +++ b/apps/user_status/l10n/bg.json @@ -2,7 +2,7 @@ "Recent statuses" : "Последни състояния", "No recent status changes" : "Няма скорошни промени в състоянието", "In a meeting" : "В среща", - "Commuting" : "Работно пътуване", + "Commuting" : "Пътувам до работа", "Out sick" : "Болничен", "Vacationing" : "Отпуск", "Out of office" : "Извън офиса", @@ -10,7 +10,7 @@ "In a call" : "В обаждане", "User status" : "Потребителско състояние", "Clear status after" : "Изчистване на състоянието след", - "What is your status?" : "Какъв е вашият статус?", + "What is your status?" : "Какво е вашето състояние?", "Previously set" : "Предишно зададени", "Reset status" : "Възстановяване на състоянието", "Reset status to \"{icon} {message}\"" : "Възстановяване на състоянието на „{icon} {message}“", @@ -20,13 +20,13 @@ "There was an error clearing the status" : "Възникна грешка при изчистване на състоянието", "There was an error reverting the status" : "Имаше грешка при връщане на състоянието", "Set status" : "Задаване на състояние", - "Online status" : "Състояние на линия", + "Online status" : "Състояние", "Status message" : "Съобщение за състояние", "Set absence period" : "Задай период на отсъствие", "Set absence period and replacement" : "Задай период на отсъствие и заместник.", "Your status was set automatically" : "Състоянието ви беше зададено автоматично", - "Clear status message" : "Изчистване на съобщението за състояние", - "Set status message" : "Задаване на съобщение за състояние", + "Clear status message" : "Изчисти състоянието", + "Set status message" : "Задай състояние", "Don't clear" : "Да не се изчиства", "Today" : "Днес", "This week" : "Тази седмица", @@ -38,7 +38,7 @@ "There was an error saving the new status" : "Възникна грешка при запазване на новото състояние", "30 minutes" : "30 минути", "1 hour" : "1 час", - "4 hours" : "4 часа", + "4 hours" : "4 чàса", "Mute all notifications" : "Заглушаване на всички известия", "Appear offline" : "Показване като офлайн" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/weather_status/l10n/bg.js b/apps/weather_status/l10n/bg.js index 6bcb4bdb01f..7b4543b4de4 100644 --- a/apps/weather_status/l10n/bg.js +++ b/apps/weather_status/l10n/bg.js @@ -7,10 +7,23 @@ OC.L10N.register( "Error" : "Грешка", "Weather status" : "Метеорологично състояние", "Weather status in your dashboard" : "Метеорологично състояние във вашето табло", + "Weather status integrated in the Dashboard app.\n The geographic location can be automatically determined or manually defined. A 6 hours forecast is then displayed.\n This status can also be integrated in other places like the Calendar app." : "Информацията за времето е вградена в приложението Табло.\n Географското местоположение може да бъде определено автоматично или зададено ръчно, след което се показва прогноза за следващите 6 часа.\nТази информация може да бъде използвана и на други места, като например приложението Календар.", "{temperature} {unit} clear sky later today" : "{temperature} {unit} по късно днес небето ще е ясно", "{temperature} {unit} clear sky" : "{temperature} {unit} ясно", "{temperature} {unit} cloudy later today" : "{temperature} {unit} по късно днес ще е облачно", "{temperature} {unit} cloudy" : "{temperature} {unit} облачно", + "{temperature} {unit} snow and thunder later today" : "{temperature}{unit}сняг и гръмотевици по-късно днес", + "{temperature} {unit} snow and thunder" : "{temperature}{unit}сняг и гръмотевици", + "{temperature} {unit} snow showers and thunder later today" : "{temperature}{unit}снеговалеж и гръмотевици по-късно днес", + "{temperature} {unit} snow showers and thunder" : "{temperature}{unit}снеговалеж и гръмотевици", + "{temperature} {unit} snow showers, thunder and polar twilight later today" : "{temperature}{unit}снеговалеж, гръмотевици и полярен здрач по-късно днес", + "{temperature} {unit} snow showers, thunder and polar twilight" : "{temperature}{unit}снеговалеж, гръмотевици и полярен здрач", + "{temperature} {unit} snow showers later today" : "{temperature}{unit}снеговалеж по-късно днес", + "{temperature} {unit} snow showers" : "{temperature}{unit}снеговалеж", + "{temperature} {unit} snow showers and polar twilight later today" : "{temperature}{unit}снеговалеж и полярен здрач по-късно днес", + "{temperature} {unit} snow showers and polar twilight" : "{temperature}{unit}снеговалеж и полярен здрач", + "{temperature} {unit} snow later today" : "{temperature}{unit}снеговалеж по-късно днес", + "{temperature} {unit} snow" : "{temperature}{unit}сняг", "{temperature} {unit} fair weather later today" : "{temperature} {unit} по-късно днес времето ще е хубаво", "{temperature} {unit} fair weather" : "{temperature} {unit} хубаво време", "{temperature} {unit} partly cloudy later today" : "{temperature} {unit} по късно днес ще има частична облачност", @@ -29,7 +42,7 @@ OC.L10N.register( "{temperature} {unit} light rainfall showers" : "{temperature} {unit} леки превалявания от дъжд", "{temperature} {unit} heavy rainfall showers later today" : "{temperature} {unit} по късно днес ще има обилни превалявания от дъжд", "{temperature} {unit} heavy rainfall showers" : "{temperature} {unit} обилни превалявания от дъжд", - "More weather for {adr}" : "Още за времето за {adr}", + "More weather for {adr}" : "Още за времето в {adr}", "Loading weather" : "Зареждане на времето", "Set location for weather" : "Задаване на местоположение за метеорологично време", "Remove from favorites" : "Премахни от любимите", @@ -42,8 +55,9 @@ OC.L10N.register( "There was an error setting the location." : "Възникна грешка при задаване на местоположението.", "There was an error saving the mode." : "Възникна грешка при запазването на режима.", "There was an error using personal address." : "Възникна грешка при използването на личния адрес.", + "Unknown weather code" : "Непознат код за време", "Detect location" : "Откриване на местоположение", - "Set custom address" : "Задаване на персонализиран адрес", + "Set custom address" : "Задай локация", "Favorites" : "Любими" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/weather_status/l10n/bg.json b/apps/weather_status/l10n/bg.json index bcc7a03ecdf..16464e473bc 100644 --- a/apps/weather_status/l10n/bg.json +++ b/apps/weather_status/l10n/bg.json @@ -5,10 +5,23 @@ "Error" : "Грешка", "Weather status" : "Метеорологично състояние", "Weather status in your dashboard" : "Метеорологично състояние във вашето табло", + "Weather status integrated in the Dashboard app.\n The geographic location can be automatically determined or manually defined. A 6 hours forecast is then displayed.\n This status can also be integrated in other places like the Calendar app." : "Информацията за времето е вградена в приложението Табло.\n Географското местоположение може да бъде определено автоматично или зададено ръчно, след което се показва прогноза за следващите 6 часа.\nТази информация може да бъде използвана и на други места, като например приложението Календар.", "{temperature} {unit} clear sky later today" : "{temperature} {unit} по късно днес небето ще е ясно", "{temperature} {unit} clear sky" : "{temperature} {unit} ясно", "{temperature} {unit} cloudy later today" : "{temperature} {unit} по късно днес ще е облачно", "{temperature} {unit} cloudy" : "{temperature} {unit} облачно", + "{temperature} {unit} snow and thunder later today" : "{temperature}{unit}сняг и гръмотевици по-късно днес", + "{temperature} {unit} snow and thunder" : "{temperature}{unit}сняг и гръмотевици", + "{temperature} {unit} snow showers and thunder later today" : "{temperature}{unit}снеговалеж и гръмотевици по-късно днес", + "{temperature} {unit} snow showers and thunder" : "{temperature}{unit}снеговалеж и гръмотевици", + "{temperature} {unit} snow showers, thunder and polar twilight later today" : "{temperature}{unit}снеговалеж, гръмотевици и полярен здрач по-късно днес", + "{temperature} {unit} snow showers, thunder and polar twilight" : "{temperature}{unit}снеговалеж, гръмотевици и полярен здрач", + "{temperature} {unit} snow showers later today" : "{temperature}{unit}снеговалеж по-късно днес", + "{temperature} {unit} snow showers" : "{temperature}{unit}снеговалеж", + "{temperature} {unit} snow showers and polar twilight later today" : "{temperature}{unit}снеговалеж и полярен здрач по-късно днес", + "{temperature} {unit} snow showers and polar twilight" : "{temperature}{unit}снеговалеж и полярен здрач", + "{temperature} {unit} snow later today" : "{temperature}{unit}снеговалеж по-късно днес", + "{temperature} {unit} snow" : "{temperature}{unit}сняг", "{temperature} {unit} fair weather later today" : "{temperature} {unit} по-късно днес времето ще е хубаво", "{temperature} {unit} fair weather" : "{temperature} {unit} хубаво време", "{temperature} {unit} partly cloudy later today" : "{temperature} {unit} по късно днес ще има частична облачност", @@ -27,7 +40,7 @@ "{temperature} {unit} light rainfall showers" : "{temperature} {unit} леки превалявания от дъжд", "{temperature} {unit} heavy rainfall showers later today" : "{temperature} {unit} по късно днес ще има обилни превалявания от дъжд", "{temperature} {unit} heavy rainfall showers" : "{temperature} {unit} обилни превалявания от дъжд", - "More weather for {adr}" : "Още за времето за {adr}", + "More weather for {adr}" : "Още за времето в {adr}", "Loading weather" : "Зареждане на времето", "Set location for weather" : "Задаване на местоположение за метеорологично време", "Remove from favorites" : "Премахни от любимите", @@ -40,8 +53,9 @@ "There was an error setting the location." : "Възникна грешка при задаване на местоположението.", "There was an error saving the mode." : "Възникна грешка при запазването на режима.", "There was an error using personal address." : "Възникна грешка при използването на личния адрес.", + "Unknown weather code" : "Непознат код за време", "Detect location" : "Откриване на местоположение", - "Set custom address" : "Задаване на персонализиран адрес", + "Set custom address" : "Задай локация", "Favorites" : "Любими" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file |