diff options
120 files changed, 1279 insertions, 350 deletions
diff --git a/apps/accessibility/l10n/bg.js b/apps/accessibility/l10n/bg.js new file mode 100644 index 00000000000..df7705de88a --- /dev/null +++ b/apps/accessibility/l10n/bg.js @@ -0,0 +1,17 @@ +OC.L10N.register( + "accessibility", + { + "High contrast theme" : "Тема с висок контраст", + "A high contrast theme to ease your navigation. Visual quality will be reduced but clarity will be increased." : "Тема с висок контраст за улесняване на навигацията. Визуалното качество ще бъде намалено, но яснотата ще бъде увеличена.", + "Dark theme (beta)" : "Тъмна тема (бета)", + "A dark theme to ease your eyes by reducing the overall luminosity and brightness. It is still under development, so please report any issues you may find." : "Тъмна тема, която облекчава очите ви, като намалява яркостта. Все още е в процес на разработка, затова, моля, докладвайте за всички проблеми, които откриете.", + "Dyslexia font" : "Шрифт за дислексия", + "OpenDyslexic is a free typeface/font designed to mitigate some of the common reading errors caused by dyslexia." : "OpenDyslexic е безплатен шрифт, предназначен за смекчаване на някои от често срещаните грешки при четенето, причинени от дислексия.", + "Accessibility" : "Достъпност", + "Accessibility options for nextcloud" : "Опции за достъпност за nextcloud", + "Provides multiple accessibilities options to ease your use of Nextcloud" : "Осигурява множество опции за достъпност за улесняване на използването на Nextcloud", + "Web Content Accessibility Guidelines" : "Указания за достъпност на уеб съдържание", + "our design team" : "нашия екип", + "Enable" : "Включване" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/accessibility/l10n/bg.json b/apps/accessibility/l10n/bg.json new file mode 100644 index 00000000000..a61454f19af --- /dev/null +++ b/apps/accessibility/l10n/bg.json @@ -0,0 +1,15 @@ +{ "translations": { + "High contrast theme" : "Тема с висок контраст", + "A high contrast theme to ease your navigation. Visual quality will be reduced but clarity will be increased." : "Тема с висок контраст за улесняване на навигацията. Визуалното качество ще бъде намалено, но яснотата ще бъде увеличена.", + "Dark theme (beta)" : "Тъмна тема (бета)", + "A dark theme to ease your eyes by reducing the overall luminosity and brightness. It is still under development, so please report any issues you may find." : "Тъмна тема, която облекчава очите ви, като намалява яркостта. Все още е в процес на разработка, затова, моля, докладвайте за всички проблеми, които откриете.", + "Dyslexia font" : "Шрифт за дислексия", + "OpenDyslexic is a free typeface/font designed to mitigate some of the common reading errors caused by dyslexia." : "OpenDyslexic е безплатен шрифт, предназначен за смекчаване на някои от често срещаните грешки при четенето, причинени от дислексия.", + "Accessibility" : "Достъпност", + "Accessibility options for nextcloud" : "Опции за достъпност за nextcloud", + "Provides multiple accessibilities options to ease your use of Nextcloud" : "Осигурява множество опции за достъпност за улесняване на използването на Nextcloud", + "Web Content Accessibility Guidelines" : "Указания за достъпност на уеб съдържание", + "our design team" : "нашия екип", + "Enable" : "Включване" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/accessibility/l10n/fa.js b/apps/accessibility/l10n/fa.js new file mode 100644 index 00000000000..0cd3921bfad --- /dev/null +++ b/apps/accessibility/l10n/fa.js @@ -0,0 +1,18 @@ +OC.L10N.register( + "accessibility", + { + "High contrast theme" : "تم با وضوح بالا", + "A high contrast theme to ease your navigation. Visual quality will be reduced but clarity will be increased." : "یک تم با وضوح بالا برای آسان نمودن راهبری شما\nکیفیت بصری کاهش خاهد یافت تا وضوح افزایش یابد.", + "Dark theme (beta)" : "تم تاریک (بتا)", + "A dark theme to ease your eyes by reducing the overall luminosity and brightness. It is still under development, so please report any issues you may find." : "تم تاریک برای با کاهش نور و نیز شفافیت برای راحتی بیشتر چشمان شما در استفاده از نکست کلود تعبیه دیده شده است و این امکان در حال توسعه می باشد،به همین دلیل هرگونه ایراد پیش آمده را گزارش دهید.", + "Dyslexia font" : "فونت Dyslexia", + "OpenDyslexic is a free typeface/font designed to mitigate some of the common reading errors caused by dyslexia." : "اپن دیسلکسیک یک فونت و نمایه رایگان است که طراحی شده برای خواندن بعضی ایراد های دیسلکسیا", + "Accessibility" : "در دسترس بودن", + "Accessibility options for nextcloud" : "امکان در دسترس بودن برای نکس کلود", + "Provides multiple accessibilities options to ease your use of Nextcloud" : "امکان دسترسی امکانات از چند مسیر برای کار کردن راحت تر شما با نکست کلود قرارداده شده است.", + "Web Content Accessibility Guidelines" : "راهنمای در دسترس بودن محتوای وب", + "our issue tracker" : "ایشو ترکر ما", + "our design team" : "تیم تولید ما", + "Enable" : "فعالسازی" +}, +"nplurals=2; plural=(n > 1);"); diff --git a/apps/accessibility/l10n/fa.json b/apps/accessibility/l10n/fa.json new file mode 100644 index 00000000000..a67fa066085 --- /dev/null +++ b/apps/accessibility/l10n/fa.json @@ -0,0 +1,16 @@ +{ "translations": { + "High contrast theme" : "تم با وضوح بالا", + "A high contrast theme to ease your navigation. Visual quality will be reduced but clarity will be increased." : "یک تم با وضوح بالا برای آسان نمودن راهبری شما\nکیفیت بصری کاهش خاهد یافت تا وضوح افزایش یابد.", + "Dark theme (beta)" : "تم تاریک (بتا)", + "A dark theme to ease your eyes by reducing the overall luminosity and brightness. It is still under development, so please report any issues you may find." : "تم تاریک برای با کاهش نور و نیز شفافیت برای راحتی بیشتر چشمان شما در استفاده از نکست کلود تعبیه دیده شده است و این امکان در حال توسعه می باشد،به همین دلیل هرگونه ایراد پیش آمده را گزارش دهید.", + "Dyslexia font" : "فونت Dyslexia", + "OpenDyslexic is a free typeface/font designed to mitigate some of the common reading errors caused by dyslexia." : "اپن دیسلکسیک یک فونت و نمایه رایگان است که طراحی شده برای خواندن بعضی ایراد های دیسلکسیا", + "Accessibility" : "در دسترس بودن", + "Accessibility options for nextcloud" : "امکان در دسترس بودن برای نکس کلود", + "Provides multiple accessibilities options to ease your use of Nextcloud" : "امکان دسترسی امکانات از چند مسیر برای کار کردن راحت تر شما با نکست کلود قرارداده شده است.", + "Web Content Accessibility Guidelines" : "راهنمای در دسترس بودن محتوای وب", + "our issue tracker" : "ایشو ترکر ما", + "our design team" : "تیم تولید ما", + "Enable" : "فعالسازی" +},"pluralForm" :"nplurals=2; plural=(n > 1);" +}
\ No newline at end of file diff --git a/apps/accessibility/l10n/uk.js b/apps/accessibility/l10n/uk.js index 6427c9a1d1c..fc266942273 100644 --- a/apps/accessibility/l10n/uk.js +++ b/apps/accessibility/l10n/uk.js @@ -8,6 +8,9 @@ OC.L10N.register( "Dyslexia font" : "Шрифт для людей, які страждають від дислексії", "Accessibility" : "Доступність", "Accessibility options for nextcloud" : "Опції доступності для nextcloud", - "Provides multiple accessibilities options to ease your use of Nextcloud" : "Надає кілька опцій доступності для полегшення вашого користування Nextcloud" + "Provides multiple accessibilities options to ease your use of Nextcloud" : "Надає кілька опцій доступності для полегшення вашого користування Nextcloud", + "our issue tracker" : "наш баґ-трекер", + "our design team" : "наша команда дизайнерів", + "Enable" : "Увімкнути" }, "nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"); diff --git a/apps/accessibility/l10n/uk.json b/apps/accessibility/l10n/uk.json index 2c8b5cbe96f..bd250822b06 100644 --- a/apps/accessibility/l10n/uk.json +++ b/apps/accessibility/l10n/uk.json @@ -6,6 +6,9 @@ "Dyslexia font" : "Шрифт для людей, які страждають від дислексії", "Accessibility" : "Доступність", "Accessibility options for nextcloud" : "Опції доступності для nextcloud", - "Provides multiple accessibilities options to ease your use of Nextcloud" : "Надає кілька опцій доступності для полегшення вашого користування Nextcloud" + "Provides multiple accessibilities options to ease your use of Nextcloud" : "Надає кілька опцій доступності для полегшення вашого користування Nextcloud", + "our issue tracker" : "наш баґ-трекер", + "our design team" : "наша команда дизайнерів", + "Enable" : "Увімкнути" },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (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/accessibility/l10n/zh_CN.js b/apps/accessibility/l10n/zh_CN.js index 04f7bbc7d4c..0ce5e2583ce 100644 --- a/apps/accessibility/l10n/zh_CN.js +++ b/apps/accessibility/l10n/zh_CN.js @@ -4,7 +4,7 @@ OC.L10N.register( "High contrast theme" : "高对比度主题", "A high contrast theme to ease your navigation. Visual quality will be reduced but clarity will be increased." : "便于您浏览的高对比度主题。图像质量会下降但清晰度会提升。", "Dark theme (beta)" : "暗色主题(beta)", - "A dark theme to ease your eyes by reducing the overall luminosity and brightness. It is still under development, so please report any issues you may find." : "一款通过降低整体亮度来使您的眼睛放松的暗色主题。它仍在开发中,所以请报告您可能遇到的问题。", + "A dark theme to ease your eyes by reducing the overall luminosity and brightness. It is still under development, so please report any issues you may find." : "一款通过降低整体亮度来使您的眼睛放松的暗色主题。它仍在开发中,所以请报告您可能发现的问题。", "Dyslexia font" : "阅读障碍字体", "OpenDyslexic is a free typeface/font designed to mitigate some of the common reading errors caused by dyslexia." : "OpenDyslexic是一款免费的字样/字体,这款字体的设计目的是缓解由阅读障碍引起的一些常见阅读错误。", "Accessibility" : "易用性", diff --git a/apps/accessibility/l10n/zh_CN.json b/apps/accessibility/l10n/zh_CN.json index faf3ab3774b..a3919bd5747 100644 --- a/apps/accessibility/l10n/zh_CN.json +++ b/apps/accessibility/l10n/zh_CN.json @@ -2,7 +2,7 @@ "High contrast theme" : "高对比度主题", "A high contrast theme to ease your navigation. Visual quality will be reduced but clarity will be increased." : "便于您浏览的高对比度主题。图像质量会下降但清晰度会提升。", "Dark theme (beta)" : "暗色主题(beta)", - "A dark theme to ease your eyes by reducing the overall luminosity and brightness. It is still under development, so please report any issues you may find." : "一款通过降低整体亮度来使您的眼睛放松的暗色主题。它仍在开发中,所以请报告您可能遇到的问题。", + "A dark theme to ease your eyes by reducing the overall luminosity and brightness. It is still under development, so please report any issues you may find." : "一款通过降低整体亮度来使您的眼睛放松的暗色主题。它仍在开发中,所以请报告您可能发现的问题。", "Dyslexia font" : "阅读障碍字体", "OpenDyslexic is a free typeface/font designed to mitigate some of the common reading errors caused by dyslexia." : "OpenDyslexic是一款免费的字样/字体,这款字体的设计目的是缓解由阅读障碍引起的一些常见阅读错误。", "Accessibility" : "易用性", diff --git a/apps/comments/l10n/fi.js b/apps/comments/l10n/fi.js index 2c4a85922aa..dac8cc3f081 100644 --- a/apps/comments/l10n/fi.js +++ b/apps/comments/l10n/fi.js @@ -26,6 +26,7 @@ OC.L10N.register( "Error occurred while updating comment with id {id}" : "Virhe päivittäessä kommenttia tunnisteella {id}", "Error occurred while posting comment" : "Virhe kommenttia lähettäessä", "_%n unread comment_::_%n unread comments_" : ["%n lukematon kommentti","%n lukematonta kommenttia"], + "_1 new comment_::_{unread} new comments_" : ["1 uusi kommentti","{unread} uutta kommenttia"], "Comment" : "Kommentti", "%1$s mentioned you in a comment on “%2$s”" : "%1$s mainitsi sinut kommentissa “%2$s”" }, diff --git a/apps/comments/l10n/fi.json b/apps/comments/l10n/fi.json index f6b1bc608e6..60c527a5824 100644 --- a/apps/comments/l10n/fi.json +++ b/apps/comments/l10n/fi.json @@ -24,6 +24,7 @@ "Error occurred while updating comment with id {id}" : "Virhe päivittäessä kommenttia tunnisteella {id}", "Error occurred while posting comment" : "Virhe kommenttia lähettäessä", "_%n unread comment_::_%n unread comments_" : ["%n lukematon kommentti","%n lukematonta kommenttia"], + "_1 new comment_::_{unread} new comments_" : ["1 uusi kommentti","{unread} uutta kommenttia"], "Comment" : "Kommentti", "%1$s mentioned you in a comment on “%2$s”" : "%1$s mainitsi sinut kommentissa “%2$s”" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/comments/l10n/sl.js b/apps/comments/l10n/sl.js index 4cd60777336..6495c7ce1f7 100644 --- a/apps/comments/l10n/sl.js +++ b/apps/comments/l10n/sl.js @@ -8,16 +8,18 @@ OC.L10N.register( "<strong>Comments</strong> for files" : "<strong>Opombe</strong> za datoteke", "Edit comment" : "Uredi opombo", "Delete comment" : "Izbriši opombo", - "New comment …" : "Nov komentar ...", + "New comment …" : "Nova opomba ...", "Post" : "Objavi", "Cancel" : "Prekliči", "[Deleted user]" : "[Izbrisan uporabnik]", "No comments yet, start the conversation!" : "Ni še odzivov, bodite prvi!", - "More comments …" : "Več komentarjev ....", + "More comments …" : "Več opomb ...", "Save" : "Shrani", "Allowed characters {count} of {max}" : "Dovoljeni znaki: {count} od {max}", - "Error occurred while updating comment with id {id}" : "Napaka se je zgodila med posodabljanjem komentarja z oznako {id}", - "Error occurred while posting comment" : "Napaka se je zgodila med predajo komentarja", + "Error occurred while updating comment with id {id}" : "Prišlo je do napake med posodabljanjem opombe z oznako {id}", + "Error occurred while posting comment" : "Prišlo je do napake med objavo opombe", + "_%n unread comment_::_%n unread comments_" : ["%n neprebrana opomba","%n neprebrani opombi","%n neprebrane opombe","%n neprebranih opomb"], + "_1 new comment_::_{unread} new comments_" : ["{unread} nova opomba","{unread} novi opombi","{unread} nove opombe","{unread} novih opomb"], "Comment" : "Opomba" }, "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); diff --git a/apps/comments/l10n/sl.json b/apps/comments/l10n/sl.json index 6d888c4d271..87a08caaffa 100644 --- a/apps/comments/l10n/sl.json +++ b/apps/comments/l10n/sl.json @@ -6,16 +6,18 @@ "<strong>Comments</strong> for files" : "<strong>Opombe</strong> za datoteke", "Edit comment" : "Uredi opombo", "Delete comment" : "Izbriši opombo", - "New comment …" : "Nov komentar ...", + "New comment …" : "Nova opomba ...", "Post" : "Objavi", "Cancel" : "Prekliči", "[Deleted user]" : "[Izbrisan uporabnik]", "No comments yet, start the conversation!" : "Ni še odzivov, bodite prvi!", - "More comments …" : "Več komentarjev ....", + "More comments …" : "Več opomb ...", "Save" : "Shrani", "Allowed characters {count} of {max}" : "Dovoljeni znaki: {count} od {max}", - "Error occurred while updating comment with id {id}" : "Napaka se je zgodila med posodabljanjem komentarja z oznako {id}", - "Error occurred while posting comment" : "Napaka se je zgodila med predajo komentarja", + "Error occurred while updating comment with id {id}" : "Prišlo je do napake med posodabljanjem opombe z oznako {id}", + "Error occurred while posting comment" : "Prišlo je do napake med objavo opombe", + "_%n unread comment_::_%n unread comments_" : ["%n neprebrana opomba","%n neprebrani opombi","%n neprebrane opombe","%n neprebranih opomb"], + "_1 new comment_::_{unread} new comments_" : ["{unread} nova opomba","{unread} novi opombi","{unread} nove opombe","{unread} novih opomb"], "Comment" : "Opomba" },"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" }
\ No newline at end of file diff --git a/apps/dav/composer/composer/autoload_classmap.php b/apps/dav/composer/composer/autoload_classmap.php index 61fd5c25917..6452cd298d4 100644 --- a/apps/dav/composer/composer/autoload_classmap.php +++ b/apps/dav/composer/composer/autoload_classmap.php @@ -15,6 +15,7 @@ return array( 'OCA\\DAV\\BackgroundJob\\CleanupInvitationTokenJob' => $baseDir . '/../lib/BackgroundJob/CleanupInvitationTokenJob.php', 'OCA\\DAV\\BackgroundJob\\GenerateBirthdayCalendarBackgroundJob' => $baseDir . '/../lib/BackgroundJob/GenerateBirthdayCalendarBackgroundJob.php', 'OCA\\DAV\\BackgroundJob\\RefreshWebcalJob' => $baseDir . '/../lib/BackgroundJob/RefreshWebcalJob.php', + 'OCA\\DAV\\BackgroundJob\\RegisterRegenerateBirthdayCalendars' => $baseDir . '/../lib/BackgroundJob/RegisterRegenerateBirthdayCalendars.php', 'OCA\\DAV\\BackgroundJob\\UpdateCalendarResourcesRoomsBackgroundJob' => $baseDir . '/../lib/BackgroundJob/UpdateCalendarResourcesRoomsBackgroundJob.php', 'OCA\\DAV\\BackgroundJob\\UploadCleanup' => $baseDir . '/../lib/BackgroundJob/UploadCleanup.php', 'OCA\\DAV\\CalDAV\\Activity\\Backend' => $baseDir . '/../lib/CalDAV/Activity/Backend.php', diff --git a/apps/dav/composer/composer/autoload_static.php b/apps/dav/composer/composer/autoload_static.php index 4898c78021c..19c74d3be07 100644 --- a/apps/dav/composer/composer/autoload_static.php +++ b/apps/dav/composer/composer/autoload_static.php @@ -30,6 +30,7 @@ class ComposerStaticInitDAV 'OCA\\DAV\\BackgroundJob\\CleanupInvitationTokenJob' => __DIR__ . '/..' . '/../lib/BackgroundJob/CleanupInvitationTokenJob.php', 'OCA\\DAV\\BackgroundJob\\GenerateBirthdayCalendarBackgroundJob' => __DIR__ . '/..' . '/../lib/BackgroundJob/GenerateBirthdayCalendarBackgroundJob.php', 'OCA\\DAV\\BackgroundJob\\RefreshWebcalJob' => __DIR__ . '/..' . '/../lib/BackgroundJob/RefreshWebcalJob.php', + 'OCA\\DAV\\BackgroundJob\\RegisterRegenerateBirthdayCalendars' => __DIR__ . '/..' . '/../lib/BackgroundJob/RegisterRegenerateBirthdayCalendars.php', 'OCA\\DAV\\BackgroundJob\\UpdateCalendarResourcesRoomsBackgroundJob' => __DIR__ . '/..' . '/../lib/BackgroundJob/UpdateCalendarResourcesRoomsBackgroundJob.php', 'OCA\\DAV\\BackgroundJob\\UploadCleanup' => __DIR__ . '/..' . '/../lib/BackgroundJob/UploadCleanup.php', 'OCA\\DAV\\CalDAV\\Activity\\Backend' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Backend.php', diff --git a/apps/dav/lib/BackgroundJob/RegisterRegenerateBirthdayCalendars.php b/apps/dav/lib/BackgroundJob/RegisterRegenerateBirthdayCalendars.php new file mode 100644 index 00000000000..e20547053c5 --- /dev/null +++ b/apps/dav/lib/BackgroundJob/RegisterRegenerateBirthdayCalendars.php @@ -0,0 +1,66 @@ +<?php +/** + * @copyright 2019 Georg Ehrke <oc.list@georgehrke.com> + * + * @author Georg Ehrke <oc.list@georgehrke.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +namespace OCA\DAV\BackgroundJob; + +use OCP\AppFramework\Utility\ITimeFactory; +use OCP\BackgroundJob\IJobList; +use OCP\BackgroundJob\QueuedJob; +use OCP\IUser; +use OCP\IUserManager; + +class RegisterRegenerateBirthdayCalendars extends QueuedJob { + + /** @var IUserManager */ + private $userManager; + + /** @var IJobList */ + private $jobList; + + /** + * RegisterRegenerateBirthdayCalendars constructor. + * + * @param ITimeFactory $time + * @param IUserManager $userManager + * @param IJobList $jobList + */ + public function __construct(ITimeFactory $time, + IUserManager $userManager, + IJobList $jobList) { + parent::__construct($time); + $this->userManager = $userManager; + $this->jobList = $jobList; + } + + /** + * @inheritDoc + */ + public function run($argument) { + $this->userManager->callForSeenUsers(function(IUser $user) { + $this->jobList->add(GenerateBirthdayCalendarBackgroundJob::class, [ + 'userId' => $user->getUID(), + 'purgeBeforeGenerating' => true + ]); + }); + } + +}
\ No newline at end of file diff --git a/apps/dav/lib/Migration/RegenerateBirthdayCalendars.php b/apps/dav/lib/Migration/RegenerateBirthdayCalendars.php index 263e6d00db4..492ae876e8a 100644 --- a/apps/dav/lib/Migration/RegenerateBirthdayCalendars.php +++ b/apps/dav/lib/Migration/RegenerateBirthdayCalendars.php @@ -22,19 +22,14 @@ */ namespace OCA\DAV\Migration; -use OCA\DAV\BackgroundJob\GenerateBirthdayCalendarBackgroundJob; +use OCA\DAV\BackgroundJob\RegisterRegenerateBirthdayCalendars; use OCP\BackgroundJob\IJobList; use OCP\IConfig; -use OCP\IUser; -use OCP\IUserManager; use OCP\Migration\IOutput; use OCP\Migration\IRepairStep; class RegenerateBirthdayCalendars implements IRepairStep { - /** @var IUserManager */ - private $userManager; - /** @var IJobList */ private $jobList; @@ -42,14 +37,11 @@ class RegenerateBirthdayCalendars implements IRepairStep { private $config; /** - * @param IUserManager $userManager, * @param IJobList $jobList * @param IConfig $config */ - public function __construct(IUserManager $userManager, - IJobList $jobList, + public function __construct(IJobList $jobList, IConfig $config) { - $this->userManager = $userManager; $this->jobList = $jobList; $this->config = $config; } @@ -72,12 +64,7 @@ class RegenerateBirthdayCalendars implements IRepairStep { } $output->info('Adding background jobs to regenerate birthday calendar'); - $this->userManager->callForSeenUsers(function(IUser $user) { - $this->jobList->add(GenerateBirthdayCalendarBackgroundJob::class, [ - 'userId' => $user->getUID(), - 'purgeBeforeGenerating' => true - ]); - }); + $this->jobList->add(RegisterRegenerateBirthdayCalendars::class); // if all were done, no need to redo the repair during next upgrade $this->config->setAppValue('dav', 'regeneratedBirthdayCalendarsForYearFix', 'yes'); diff --git a/apps/dav/tests/unit/BackgroundJob/GenerateBirthdayCalendarBackgroundJobTest.php b/apps/dav/tests/unit/BackgroundJob/GenerateBirthdayCalendarBackgroundJobTest.php index 1d672ff22a4..acf1306a632 100644 --- a/apps/dav/tests/unit/BackgroundJob/GenerateBirthdayCalendarBackgroundJobTest.php +++ b/apps/dav/tests/unit/BackgroundJob/GenerateBirthdayCalendarBackgroundJobTest.php @@ -24,10 +24,7 @@ namespace OCA\DAV\Tests\unit\BackgroundJob; use OCA\DAV\BackgroundJob\GenerateBirthdayCalendarBackgroundJob; use OCA\DAV\CalDAV\BirthdayService; -use OCA\DAV\CalDAV\CalDavBackend; -use OCA\DAV\CalDAV\CalendarHome; use OCP\IConfig; -use Sabre\DAV\MkCol; use Test\TestCase; class GenerateBirthdayCalendarBackgroundJobTest extends TestCase { diff --git a/apps/dav/tests/unit/BackgroundJob/RegisterRegenerateBirthdayCalendarsTest.php b/apps/dav/tests/unit/BackgroundJob/RegisterRegenerateBirthdayCalendarsTest.php new file mode 100644 index 00000000000..c118e7497fa --- /dev/null +++ b/apps/dav/tests/unit/BackgroundJob/RegisterRegenerateBirthdayCalendarsTest.php @@ -0,0 +1,101 @@ +<?php +/** + * @copyright 2019 Georg Ehrke <oc.list@georgehrke.com> + * + * @author Georg Ehrke <oc.list@georgehrke.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\DAV\Tests\unit\BackgroundJob; + +use OCA\DAV\BackgroundJob\GenerateBirthdayCalendarBackgroundJob; +use OCA\DAV\BackgroundJob\RegisterRegenerateBirthdayCalendars; +use OCP\AppFramework\Utility\ITimeFactory; +use OCP\BackgroundJob\IJobList; +use OCP\IConfig; +use OCP\IUser; +use OCP\IUserManager; +use Test\TestCase; + +class RegisterRegenerateBirthdayCalendarsTest extends TestCase { + + /** @var ITimeFactory | \PHPUnit_Framework_MockObject_MockObject */ + private $time; + + /** @var IUserManager | \PHPUnit_Framework_MockObject_MockObject */ + private $userManager; + + /** @var IJobList | \PHPUnit_Framework_MockObject_MockObject */ + private $jobList; + + /** @var IConfig | \PHPUnit_Framework_MockObject_MockObject */ + private $config; + + /** @var RegisterRegenerateBirthdayCalendars */ + private $backgroundJob; + + protected function setUp() { + parent::setUp(); + + $this->time = $this->createMock(ITimeFactory::class); + $this->userManager = $this->createMock(IUserManager::class); + $this->jobList = $this->createMock(IJobList::class); + $this->config = $this->createMock(IConfig::class); + + $this->backgroundJob = new RegisterRegenerateBirthdayCalendars($this->time, + $this->userManager, $this->jobList); + } + + public function testRun() { + $this->userManager->expects($this->once()) + ->method('callForSeenUsers') + ->will($this->returnCallback(function($closure) { + $user1 = $this->createMock(IUser::class); + $user1->method('getUID')->will($this->returnValue('uid1')); + $user2 = $this->createMock(IUser::class); + $user2->method('getUID')->will($this->returnValue('uid2')); + $user3 = $this->createMock(IUser::class); + $user3->method('getUID')->will($this->returnValue('uid3')); + + $closure($user1); + $closure($user2); + $closure($user3); + })); + + $this->jobList->expects($this->at(0)) + ->method('add') + ->with(GenerateBirthdayCalendarBackgroundJob::class, [ + 'userId' => 'uid1', + 'purgeBeforeGenerating' => true + ]); + $this->jobList->expects($this->at(1)) + ->method('add') + ->with(GenerateBirthdayCalendarBackgroundJob::class, [ + 'userId' => 'uid2', + 'purgeBeforeGenerating' => true + ]); + $this->jobList->expects($this->at(2)) + ->method('add') + ->with(GenerateBirthdayCalendarBackgroundJob::class, [ + 'userId' => 'uid3', + 'purgeBeforeGenerating' => true + ]); + + $this->backgroundJob->run([]); + } +}
\ No newline at end of file diff --git a/apps/dav/tests/unit/Migration/RegenerateBirthdayCalendarsTest.php b/apps/dav/tests/unit/Migration/RegenerateBirthdayCalendarsTest.php index 74af6af88dc..657d4dcebbb 100644 --- a/apps/dav/tests/unit/Migration/RegenerateBirthdayCalendarsTest.php +++ b/apps/dav/tests/unit/Migration/RegenerateBirthdayCalendarsTest.php @@ -22,39 +22,32 @@ namespace OCA\DAV\Tests\unit\DAV\Migration; -use OCA\DAV\BackgroundJob\GenerateBirthdayCalendarBackgroundJob; -use OCA\DAV\Migration\RefreshWebcalJobRegistrar; +use OCA\DAV\BackgroundJob\RegisterRegenerateBirthdayCalendars; use OCA\DAV\Migration\RegenerateBirthdayCalendars; use OCP\BackgroundJob\IJobList; use OCP\IConfig; -use OCP\IUser; -use OCP\IUserManager; use OCP\Migration\IOutput; use Test\TestCase; class RegenerateBirthdayCalendarsTest extends TestCase { - /** @var IUserManager | \PHPUnit_Framework_MockObject_MockObject */ - private $userManager; - /** @var IJobList | \PHPUnit_Framework_MockObject_MockObject */ private $jobList; /** @var IConfig | \PHPUnit_Framework_MockObject_MockObject */ private $config; - /** @var RefreshWebcalJobRegistrar */ + /** @var RegenerateBirthdayCalendars */ private $migration; protected function setUp() { parent::setUp(); - $this->userManager = $this->createMock(IUserManager::class); $this->jobList = $this->createMock(IJobList::class); $this->config = $this->createMock(IConfig::class); - $this->migration = new RegenerateBirthdayCalendars($this->userManager, - $this->jobList, $this->config); + $this->migration = new RegenerateBirthdayCalendars($this->jobList, + $this->config); } public function testGetName() { @@ -75,39 +68,9 @@ class RegenerateBirthdayCalendarsTest extends TestCase { ->method('info') ->with('Adding background jobs to regenerate birthday calendar'); - $this->userManager->expects($this->once()) - ->method('callForSeenUsers') - ->will($this->returnCallback(function($closure) { - $user1 = $this->createMock(IUser::class); - $user1->method('getUID')->will($this->returnValue('uid1')); - $user2 = $this->createMock(IUser::class); - $user2->method('getUID')->will($this->returnValue('uid2')); - $user3 = $this->createMock(IUser::class); - $user3->method('getUID')->will($this->returnValue('uid3')); - - $closure($user1); - $closure($user2); - $closure($user3); - })); - $this->jobList->expects($this->at(0)) ->method('add') - ->with(GenerateBirthdayCalendarBackgroundJob::class, [ - 'userId' => 'uid1', - 'purgeBeforeGenerating' => true - ]); - $this->jobList->expects($this->at(1)) - ->method('add') - ->with(GenerateBirthdayCalendarBackgroundJob::class, [ - 'userId' => 'uid2', - 'purgeBeforeGenerating' => true - ]); - $this->jobList->expects($this->at(2)) - ->method('add') - ->with(GenerateBirthdayCalendarBackgroundJob::class, [ - 'userId' => 'uid3', - 'purgeBeforeGenerating' => true - ]); + ->with(RegisterRegenerateBirthdayCalendars::class); $this->config->expects($this->at(1)) ->method('setAppValue') @@ -127,8 +90,8 @@ class RegenerateBirthdayCalendarsTest extends TestCase { ->method('info') ->with('Repair step already executed'); - $this->userManager->expects($this->never()) - ->method('callForSeenUsers'); + $this->jobList->expects($this->never()) + ->method('add'); $this->migration->run($output); } diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js index 91180e98cb3..8021fe002a2 100644 --- a/apps/files/l10n/fr.js +++ b/apps/files/l10n/fr.js @@ -139,7 +139,7 @@ OC.L10N.register( "%1$s%% of %2$s used" : "%1$s%% de %2$s utilisés", "%s used" : "%s utilisé", "Settings" : "Paramètres", - "Show hidden files" : "Afficher les fichiers cachés", + "Show hidden files" : "Afficher les fichiers masqués", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer noopener\">access your Files via WebDAV</a>" : "Utilisez cette adresse pour <a href=\"%s\" target=\"_blank\" rel=\"noreferrer noopener\">accéder à vos fichiers par WebDAV</a>", "Toggle grid view" : "Activer/Désactiver l'affichage mosaïque", diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json index 26516b83b12..de56fe1649c 100644 --- a/apps/files/l10n/fr.json +++ b/apps/files/l10n/fr.json @@ -137,7 +137,7 @@ "%1$s%% of %2$s used" : "%1$s%% de %2$s utilisés", "%s used" : "%s utilisé", "Settings" : "Paramètres", - "Show hidden files" : "Afficher les fichiers cachés", + "Show hidden files" : "Afficher les fichiers masqués", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer noopener\">access your Files via WebDAV</a>" : "Utilisez cette adresse pour <a href=\"%s\" target=\"_blank\" rel=\"noreferrer noopener\">accéder à vos fichiers par WebDAV</a>", "Toggle grid view" : "Activer/Désactiver l'affichage mosaïque", diff --git a/apps/files/l10n/ps.js b/apps/files/l10n/ps.js index c032fab6064..505931a88bc 100644 --- a/apps/files/l10n/ps.js +++ b/apps/files/l10n/ps.js @@ -48,7 +48,10 @@ OC.L10N.register( "Copied {origin} inside {destination}" : "له {origin} څخه {destination} کاپي شو", "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} او {nbfiles} نور فایلونه {destination} ته کاپي شول", "{newName} already exists" : "{newName} له پخوا شتون لري", + "Could not rename \"{fileName}\"" : " \"{fileName}\" فایل نوم نشئ بدلولی", "Could not create file \"{file}\"" : "\"{file}\" فایل نشي جوړېدای", + "Could not create file \"{file}\" because it already exists" : "\"{file}\" فایل موجود دی. بيا يې نشئ جوړولی.", + "Could not create folder \"{dir}\" because it already exists" : "\"{dir}\" فولډر موجود دی. بيا يې نشئ جوړولی.", "Error deleting file \"{fileName}\"." : "\"{fileName}\" فايل پاکولو کې ستونزه ده", "No search results in other folders for {tag}{filter}{endtag}" : "په نورو فولډرونو کې د {tag}{filter}{endtag} لپاره پايلې نه وې", "Name" : "نوم", @@ -68,6 +71,7 @@ OC.L10N.register( "File name cannot be empty." : "فایل نوم تش نشي کېدای", "\"/\" is not allowed inside a file name." : "د فایل په نوم کې \"/\" نشئ کارولای", "\"{name}\" is not an allowed filetype" : "\"{name}\" ډول فایلونو اجازه نشته", + "Your storage is almost full ({usedSpacePercent}%)" : "({usedSpacePercent}%) ستاسې ذخیره تقریبا ډکه ده ", "_matches '{filter}'_::_match '{filter}'_" : ["'{filter}' په څېر","'{filter}' په څېر"], "View in folder" : "په فولډر کې کتل", "Copied!" : "کاپي شو!", @@ -98,15 +102,23 @@ OC.L10N.register( "{user} created {file}" : "{user} کارن {file} فایل جوړ کړ", "{file} was created in a public folder" : "{file} په یو عمومي فولډر کې جوړ شوی", "You changed {file}" : "تاسې په {file} کې تغیر راوستی", + "You changed an encrypted file in {file}" : " تاسې په {file} کې يو خوندي فایل بدل کړ", "{user} changed {file}" : "{user} کارن {file} فایل کې تغیر رواستی", + "{user} changed an encrypted file in {file}" : "{user} يو خوندي فايل په {file} کې بدل کړ", "You deleted {file}" : "تاسې {file} ړنګ کړی", + "You deleted an encrypted file in {file}" : "تاسې په {file} کې يو خوندي فايل ړنګ کړ", "{user} deleted {file}" : "{user} کارن {file} فایل ړنګ کړ", + "{user} deleted an encrypted file in {file}" : "{user} په {file} کې يو خوندي فايل ړنګ کړ", "You restored {file}" : "تاسې {file} اصلي حالت ته کړی", "{user} restored {file}" : "{user} کارن {file} فایل اصلي حالت ته کړی", "You renamed {oldfile} to {newfile}" : "تاسې {oldfile} فایل {newfile} نوم ته اړولی ", "{user} renamed {oldfile} to {newfile}" : "{user} {oldfile} فایل {newfile} نوم ته اړولی ", + "Unlimited" : "نامحدود", "Upload (max. %s)" : "پورته کول (%s نهايي)", "File Management" : "فایلونه ترتیبول", + "%s of %s used" : "د %sبرخې %sکارول شوې", + "%1$s%% of %2$s used" : "د %2$sبرخې %1$s%%کارول شوې", + "%s used" : "%sکارول شوې", "Settings" : "سمونې", "Show hidden files" : "پټ فایلونه ليدل", "Toggle grid view" : "په جدولي شکل ليدل", @@ -128,7 +140,9 @@ OC.L10N.register( "New text file.txt" : "New text file.txt", "Target folder" : "د ورانتقالېدو فولډر", "File handling" : "فایلونه سمبالول", + "Maximum upload size" : "د پورته کولو تر ټولو زیاته اندازه", "Save" : "ساتل", - "Cancel upload" : "پرېښودل" + "Cancel upload" : "پرېښودل", + "%1$s of %2$s used" : "د %2$sبرخې %1$sکارول شوې" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/ps.json b/apps/files/l10n/ps.json index 0875c866bed..59778f5814c 100644 --- a/apps/files/l10n/ps.json +++ b/apps/files/l10n/ps.json @@ -46,7 +46,10 @@ "Copied {origin} inside {destination}" : "له {origin} څخه {destination} کاپي شو", "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} او {nbfiles} نور فایلونه {destination} ته کاپي شول", "{newName} already exists" : "{newName} له پخوا شتون لري", + "Could not rename \"{fileName}\"" : " \"{fileName}\" فایل نوم نشئ بدلولی", "Could not create file \"{file}\"" : "\"{file}\" فایل نشي جوړېدای", + "Could not create file \"{file}\" because it already exists" : "\"{file}\" فایل موجود دی. بيا يې نشئ جوړولی.", + "Could not create folder \"{dir}\" because it already exists" : "\"{dir}\" فولډر موجود دی. بيا يې نشئ جوړولی.", "Error deleting file \"{fileName}\"." : "\"{fileName}\" فايل پاکولو کې ستونزه ده", "No search results in other folders for {tag}{filter}{endtag}" : "په نورو فولډرونو کې د {tag}{filter}{endtag} لپاره پايلې نه وې", "Name" : "نوم", @@ -66,6 +69,7 @@ "File name cannot be empty." : "فایل نوم تش نشي کېدای", "\"/\" is not allowed inside a file name." : "د فایل په نوم کې \"/\" نشئ کارولای", "\"{name}\" is not an allowed filetype" : "\"{name}\" ډول فایلونو اجازه نشته", + "Your storage is almost full ({usedSpacePercent}%)" : "({usedSpacePercent}%) ستاسې ذخیره تقریبا ډکه ده ", "_matches '{filter}'_::_match '{filter}'_" : ["'{filter}' په څېر","'{filter}' په څېر"], "View in folder" : "په فولډر کې کتل", "Copied!" : "کاپي شو!", @@ -96,15 +100,23 @@ "{user} created {file}" : "{user} کارن {file} فایل جوړ کړ", "{file} was created in a public folder" : "{file} په یو عمومي فولډر کې جوړ شوی", "You changed {file}" : "تاسې په {file} کې تغیر راوستی", + "You changed an encrypted file in {file}" : " تاسې په {file} کې يو خوندي فایل بدل کړ", "{user} changed {file}" : "{user} کارن {file} فایل کې تغیر رواستی", + "{user} changed an encrypted file in {file}" : "{user} يو خوندي فايل په {file} کې بدل کړ", "You deleted {file}" : "تاسې {file} ړنګ کړی", + "You deleted an encrypted file in {file}" : "تاسې په {file} کې يو خوندي فايل ړنګ کړ", "{user} deleted {file}" : "{user} کارن {file} فایل ړنګ کړ", + "{user} deleted an encrypted file in {file}" : "{user} په {file} کې يو خوندي فايل ړنګ کړ", "You restored {file}" : "تاسې {file} اصلي حالت ته کړی", "{user} restored {file}" : "{user} کارن {file} فایل اصلي حالت ته کړی", "You renamed {oldfile} to {newfile}" : "تاسې {oldfile} فایل {newfile} نوم ته اړولی ", "{user} renamed {oldfile} to {newfile}" : "{user} {oldfile} فایل {newfile} نوم ته اړولی ", + "Unlimited" : "نامحدود", "Upload (max. %s)" : "پورته کول (%s نهايي)", "File Management" : "فایلونه ترتیبول", + "%s of %s used" : "د %sبرخې %sکارول شوې", + "%1$s%% of %2$s used" : "د %2$sبرخې %1$s%%کارول شوې", + "%s used" : "%sکارول شوې", "Settings" : "سمونې", "Show hidden files" : "پټ فایلونه ليدل", "Toggle grid view" : "په جدولي شکل ليدل", @@ -126,7 +138,9 @@ "New text file.txt" : "New text file.txt", "Target folder" : "د ورانتقالېدو فولډر", "File handling" : "فایلونه سمبالول", + "Maximum upload size" : "د پورته کولو تر ټولو زیاته اندازه", "Save" : "ساتل", - "Cancel upload" : "پرېښودل" + "Cancel upload" : "پرېښودل", + "%1$s of %2$s used" : "د %2$sبرخې %1$sکارول شوې" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/uk.js b/apps/files/l10n/uk.js index 1a1555175a6..18ede8e305e 100644 --- a/apps/files/l10n/uk.js +++ b/apps/files/l10n/uk.js @@ -27,10 +27,12 @@ OC.L10N.register( "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} з {totalSize} ({bitrate})", "Uploading that item is not supported" : "Завантаження цього елемента не підтримується", "Target folder does not exist any more" : "Цільовий каталог більше не існує", + "Error when assembling chunks, status code {status}" : "Помилка під час збірки частин, код помилки {status}", "Actions" : "Дії", "Rename" : "Перейменувати", "Copy" : "Скопіювати", "Choose target folder" : "Виберіть цільовий каталог", + "Open" : "Відкрити", "Disconnect storage" : "Від’єднати сховище", "Unshare" : "Закрити доступ", "Could not load info for file \"{file}\"" : "Не вдалося завантажити інформацію для файлу \"{file}\"", @@ -67,6 +69,7 @@ OC.L10N.register( "You don’t have permission to upload or create files here" : "У вас недостатньо прав для вивантаження або створення тут файлів", "_Uploading %n file_::_Uploading %n files_" : ["Вивантаження %n файлу","Вивантаження %n файлів","Вивантаження %n файлів","Вивантаження %n файлів"], "New" : "Створити", + "Select file range" : "Виберіть набір файлів", "{used} of {quota} used" : "використано {used} з {quota}", "{used} used" : "використано {used}", "\"{name}\" is an invalid file name." : "\"{name}\" - некоректне ім'я файлу.", @@ -85,6 +88,7 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n байт","%n байти","%n байт","%n байт"], "Favorited" : "Улюблений", "Favorite" : "В улюблене", + "You can only favorite a single file or folder at a time" : "Одночасно вподобати можна лише один файл чи каталог", "New folder" : "Нова тека", "Upload file" : "Вивантажити файл", "Not favorited" : "Не улюблене", @@ -106,11 +110,16 @@ OC.L10N.register( "You created {file}" : "Ви створили {file}", "You created an encrypted file in {file}" : "Ви створили зашифрований файл у {file}", "{user} created {file}" : "Користувач {user} створив {file}", + "{user} created an encrypted file in {file}" : "{user} створив зашифрований файл у {file}", "{file} was created in a public folder" : "Файл {file} створено у спільній теці", "You changed {file}" : "Ви змінили {file}", + "You changed an encrypted file in {file}" : "Ви змінили зашифрований файл у {file}", "{user} changed {file}" : "Користувач {user} змінив {file}", + "{user} changed an encrypted file in {file}" : "{user} змінив зашифрований файл у {file}", "You deleted {file}" : "Ви видалили {file}", + "You deleted an encrypted file in {file}" : "Ви вилучити зашифрований файл у {file}", "{user} deleted {file}" : "Користувач {user} видалив {file}", + "{user} deleted an encrypted file in {file}" : "{user} вилучив зашифрований файл у {file}", "You restored {file}" : "Ви відновили {file}", "{user} restored {file}" : "Користувач {user} відновив {file}", "You renamed {oldfile} to {newfile}" : "Ви перейменували {oldfile} в {newfile}", @@ -127,11 +136,13 @@ OC.L10N.register( "Upload (max. %s)" : "Вивантаження (макс. %s)", "File Management" : "Управління файлами", "%s of %s used" : "%s з %s використано", + "%1$s%% of %2$s used" : "використано %1$s%% з %2$s", "%s used" : "%s використано", "Settings" : "Налаштування", "Show hidden files" : "Показати приховані файли", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer noopener\">access your Files via WebDAV</a>" : "Використовуйте цю адресу для <a href=\"%s\" target=\"_blank\" rel=\"noreferrer noopener\">доступ до своїх файлів через WebDAV</a>", + "Toggle grid view" : "Показати плитками", "No files in here" : "Тут немає файлів", "Upload some content or sync with your devices!" : "Вивантажте щось або синхронізуйте з пристроями!", "No entries found in this folder" : "В цій теці нічого немає", @@ -142,9 +153,11 @@ OC.L10N.register( "Files and folders you mark as favorite will show up here" : "Файли і теки, які ви позначили як улюблені, з’являться тут", "Tags" : "Теги", "Deleted files" : "Видалені файли", + "Shares" : "Спільний доступ", "Shared with others" : "Поділились з іншими", "Shared with you" : "Поділились з вами", "Shared by link" : "Доступне за посиланням", + "Deleted shares" : "Вилучено зі спільного доступу", "Text file" : "Текстовий файл", "New text file.txt" : "Новий текстовий файл file.txt", "Target folder" : "Тека призначення", @@ -154,6 +167,7 @@ OC.L10N.register( "Save" : "Зберегти", "With PHP-FPM it might take 5 minutes for changes to be applied." : "З PHP-FPM прийняття змін може тривати до 5 хвилин.", "Missing permissions to edit from here." : "Недостатньо прав для редагування звідси.", + "Cancel upload" : "Скасувати завантаження", "%1$s of %2$s used" : "використано %1$s з %2$s" }, "nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"); diff --git a/apps/files/l10n/uk.json b/apps/files/l10n/uk.json index ebdde58a8f0..5a909d14e01 100644 --- a/apps/files/l10n/uk.json +++ b/apps/files/l10n/uk.json @@ -25,10 +25,12 @@ "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} з {totalSize} ({bitrate})", "Uploading that item is not supported" : "Завантаження цього елемента не підтримується", "Target folder does not exist any more" : "Цільовий каталог більше не існує", + "Error when assembling chunks, status code {status}" : "Помилка під час збірки частин, код помилки {status}", "Actions" : "Дії", "Rename" : "Перейменувати", "Copy" : "Скопіювати", "Choose target folder" : "Виберіть цільовий каталог", + "Open" : "Відкрити", "Disconnect storage" : "Від’єднати сховище", "Unshare" : "Закрити доступ", "Could not load info for file \"{file}\"" : "Не вдалося завантажити інформацію для файлу \"{file}\"", @@ -65,6 +67,7 @@ "You don’t have permission to upload or create files here" : "У вас недостатньо прав для вивантаження або створення тут файлів", "_Uploading %n file_::_Uploading %n files_" : ["Вивантаження %n файлу","Вивантаження %n файлів","Вивантаження %n файлів","Вивантаження %n файлів"], "New" : "Створити", + "Select file range" : "Виберіть набір файлів", "{used} of {quota} used" : "використано {used} з {quota}", "{used} used" : "використано {used}", "\"{name}\" is an invalid file name." : "\"{name}\" - некоректне ім'я файлу.", @@ -83,6 +86,7 @@ "_%n byte_::_%n bytes_" : ["%n байт","%n байти","%n байт","%n байт"], "Favorited" : "Улюблений", "Favorite" : "В улюблене", + "You can only favorite a single file or folder at a time" : "Одночасно вподобати можна лише один файл чи каталог", "New folder" : "Нова тека", "Upload file" : "Вивантажити файл", "Not favorited" : "Не улюблене", @@ -104,11 +108,16 @@ "You created {file}" : "Ви створили {file}", "You created an encrypted file in {file}" : "Ви створили зашифрований файл у {file}", "{user} created {file}" : "Користувач {user} створив {file}", + "{user} created an encrypted file in {file}" : "{user} створив зашифрований файл у {file}", "{file} was created in a public folder" : "Файл {file} створено у спільній теці", "You changed {file}" : "Ви змінили {file}", + "You changed an encrypted file in {file}" : "Ви змінили зашифрований файл у {file}", "{user} changed {file}" : "Користувач {user} змінив {file}", + "{user} changed an encrypted file in {file}" : "{user} змінив зашифрований файл у {file}", "You deleted {file}" : "Ви видалили {file}", + "You deleted an encrypted file in {file}" : "Ви вилучити зашифрований файл у {file}", "{user} deleted {file}" : "Користувач {user} видалив {file}", + "{user} deleted an encrypted file in {file}" : "{user} вилучив зашифрований файл у {file}", "You restored {file}" : "Ви відновили {file}", "{user} restored {file}" : "Користувач {user} відновив {file}", "You renamed {oldfile} to {newfile}" : "Ви перейменували {oldfile} в {newfile}", @@ -125,11 +134,13 @@ "Upload (max. %s)" : "Вивантаження (макс. %s)", "File Management" : "Управління файлами", "%s of %s used" : "%s з %s використано", + "%1$s%% of %2$s used" : "використано %1$s%% з %2$s", "%s used" : "%s використано", "Settings" : "Налаштування", "Show hidden files" : "Показати приховані файли", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer noopener\">access your Files via WebDAV</a>" : "Використовуйте цю адресу для <a href=\"%s\" target=\"_blank\" rel=\"noreferrer noopener\">доступ до своїх файлів через WebDAV</a>", + "Toggle grid view" : "Показати плитками", "No files in here" : "Тут немає файлів", "Upload some content or sync with your devices!" : "Вивантажте щось або синхронізуйте з пристроями!", "No entries found in this folder" : "В цій теці нічого немає", @@ -140,9 +151,11 @@ "Files and folders you mark as favorite will show up here" : "Файли і теки, які ви позначили як улюблені, з’являться тут", "Tags" : "Теги", "Deleted files" : "Видалені файли", + "Shares" : "Спільний доступ", "Shared with others" : "Поділились з іншими", "Shared with you" : "Поділились з вами", "Shared by link" : "Доступне за посиланням", + "Deleted shares" : "Вилучено зі спільного доступу", "Text file" : "Текстовий файл", "New text file.txt" : "Новий текстовий файл file.txt", "Target folder" : "Тека призначення", @@ -152,6 +165,7 @@ "Save" : "Зберегти", "With PHP-FPM it might take 5 minutes for changes to be applied." : "З PHP-FPM прийняття змін може тривати до 5 хвилин.", "Missing permissions to edit from here." : "Недостатньо прав для редагування звідси.", + "Cancel upload" : "Скасувати завантаження", "%1$s of %2$s used" : "використано %1$s з %2$s" },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (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/files_external/l10n/ca.js b/apps/files_external/l10n/ca.js index 0311b4a1099..27a861990f4 100644 --- a/apps/files_external/l10n/ca.js +++ b/apps/files_external/l10n/ca.js @@ -103,6 +103,7 @@ OC.L10N.register( "SFTP with secret key login" : "Inici de sessió SFTP amb clau secreta", "SMB / CIFS" : "SMB / CIFS", "Share" : "Comparteix", + "Show hidden files" : "Mostra els fitxers ocults", "SMB / CIFS using OC login" : "SMB / CIFS fent servir acreditació OC", "Username as share" : "Nom d'usuari amb que es comparteix", "OpenStack Object Storage" : "OpenStack Object Storage", diff --git a/apps/files_external/l10n/ca.json b/apps/files_external/l10n/ca.json index eb8ef4fcc58..42711327607 100644 --- a/apps/files_external/l10n/ca.json +++ b/apps/files_external/l10n/ca.json @@ -101,6 +101,7 @@ "SFTP with secret key login" : "Inici de sessió SFTP amb clau secreta", "SMB / CIFS" : "SMB / CIFS", "Share" : "Comparteix", + "Show hidden files" : "Mostra els fitxers ocults", "SMB / CIFS using OC login" : "SMB / CIFS fent servir acreditació OC", "Username as share" : "Nom d'usuari amb que es comparteix", "OpenStack Object Storage" : "OpenStack Object Storage", diff --git a/apps/files_external/l10n/de.js b/apps/files_external/l10n/de.js index c6c9c72c555..8a69587ad38 100644 --- a/apps/files_external/l10n/de.js +++ b/apps/files_external/l10n/de.js @@ -103,6 +103,7 @@ OC.L10N.register( "SFTP with secret key login" : "SFTP mit der Anmeldung über einen geheimen Schlüssel", "SMB / CIFS" : "SMB / CIFS", "Share" : "Share", + "Show hidden files" : "Versteckte Dateien anzeigen", "SMB / CIFS using OC login" : "SMB / CIFS mit OC-Anmeldung", "Username as share" : "Benutzername als Freigabe", "OpenStack Object Storage" : "Openstack-Objektspeicher", diff --git a/apps/files_external/l10n/de.json b/apps/files_external/l10n/de.json index 53c465ad8f4..6d8c573da97 100644 --- a/apps/files_external/l10n/de.json +++ b/apps/files_external/l10n/de.json @@ -101,6 +101,7 @@ "SFTP with secret key login" : "SFTP mit der Anmeldung über einen geheimen Schlüssel", "SMB / CIFS" : "SMB / CIFS", "Share" : "Share", + "Show hidden files" : "Versteckte Dateien anzeigen", "SMB / CIFS using OC login" : "SMB / CIFS mit OC-Anmeldung", "Username as share" : "Benutzername als Freigabe", "OpenStack Object Storage" : "Openstack-Objektspeicher", diff --git a/apps/files_external/l10n/de_DE.js b/apps/files_external/l10n/de_DE.js index 348991bfa95..f80eda2bc3e 100644 --- a/apps/files_external/l10n/de_DE.js +++ b/apps/files_external/l10n/de_DE.js @@ -103,6 +103,7 @@ OC.L10N.register( "SFTP with secret key login" : "SFTP mit der Anmeldung über einen geheimen Schlüssel", "SMB / CIFS" : "SMB / CIFS", "Share" : "Share", + "Show hidden files" : "Versteckte Dateien anzeigen", "SMB / CIFS using OC login" : "SMB / CIFS mit OC-Anmeldung", "Username as share" : "Benutzername als Freigabe", "OpenStack Object Storage" : "Openstack-Objektspeicher", diff --git a/apps/files_external/l10n/de_DE.json b/apps/files_external/l10n/de_DE.json index a050f85c43f..6b43332b81e 100644 --- a/apps/files_external/l10n/de_DE.json +++ b/apps/files_external/l10n/de_DE.json @@ -101,6 +101,7 @@ "SFTP with secret key login" : "SFTP mit der Anmeldung über einen geheimen Schlüssel", "SMB / CIFS" : "SMB / CIFS", "Share" : "Share", + "Show hidden files" : "Versteckte Dateien anzeigen", "SMB / CIFS using OC login" : "SMB / CIFS mit OC-Anmeldung", "Username as share" : "Benutzername als Freigabe", "OpenStack Object Storage" : "Openstack-Objektspeicher", diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js index 93cdb5fc9eb..4b6a2719bb1 100644 --- a/apps/files_external/l10n/fr.js +++ b/apps/files_external/l10n/fr.js @@ -103,6 +103,7 @@ OC.L10N.register( "SFTP with secret key login" : "SFTP avec identification par clé", "SMB / CIFS" : "SMB / CIFS", "Share" : "Partage", + "Show hidden files" : "Afficher les fichiers masqués", "SMB / CIFS using OC login" : "SMB / CIFS en utilisant les identifiants OC", "Username as share" : "Nom d'utilisateur comme nom de partage", "OpenStack Object Storage" : "OpenStack Object Storage", diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json index 23e59b7fd26..29ea0bdfd9f 100644 --- a/apps/files_external/l10n/fr.json +++ b/apps/files_external/l10n/fr.json @@ -101,6 +101,7 @@ "SFTP with secret key login" : "SFTP avec identification par clé", "SMB / CIFS" : "SMB / CIFS", "Share" : "Partage", + "Show hidden files" : "Afficher les fichiers masqués", "SMB / CIFS using OC login" : "SMB / CIFS en utilisant les identifiants OC", "Username as share" : "Nom d'utilisateur comme nom de partage", "OpenStack Object Storage" : "OpenStack Object Storage", diff --git a/apps/files_external/l10n/gl.js b/apps/files_external/l10n/gl.js index efdf0064c52..eb35ca616f6 100644 --- a/apps/files_external/l10n/gl.js +++ b/apps/files_external/l10n/gl.js @@ -103,6 +103,7 @@ OC.L10N.register( "SFTP with secret key login" : "SFTP con chave secreta de acceso", "SMB / CIFS" : "SMB / CIFS", "Share" : "Compartir", + "Show hidden files" : "Amosar os ficheiros agochados", "SMB / CIFS using OC login" : "SMB / CIFS usando acceso OC", "Username as share" : "Nome de usuario como compartición", "OpenStack Object Storage" : "OpenStack Object Storage", diff --git a/apps/files_external/l10n/gl.json b/apps/files_external/l10n/gl.json index 3c4dd07c34a..4ba1a02adc3 100644 --- a/apps/files_external/l10n/gl.json +++ b/apps/files_external/l10n/gl.json @@ -101,6 +101,7 @@ "SFTP with secret key login" : "SFTP con chave secreta de acceso", "SMB / CIFS" : "SMB / CIFS", "Share" : "Compartir", + "Show hidden files" : "Amosar os ficheiros agochados", "SMB / CIFS using OC login" : "SMB / CIFS usando acceso OC", "Username as share" : "Nome de usuario como compartición", "OpenStack Object Storage" : "OpenStack Object Storage", diff --git a/apps/files_external/l10n/it.js b/apps/files_external/l10n/it.js index 69f0120e8c9..d6aeba92a71 100644 --- a/apps/files_external/l10n/it.js +++ b/apps/files_external/l10n/it.js @@ -103,6 +103,7 @@ OC.L10N.register( "SFTP with secret key login" : "SFTP con accesso a chiave segreta", "SMB / CIFS" : "SMB / CIFS", "Share" : "Condividi", + "Show hidden files" : "Mostra i file nascosti", "SMB / CIFS using OC login" : "SMB / CIFS utilizzando le credenziali di OC", "Username as share" : "Nome utente come condivisione", "OpenStack Object Storage" : "OpenStack Object Storage", diff --git a/apps/files_external/l10n/it.json b/apps/files_external/l10n/it.json index 7abbe8c58ca..249954f1d55 100644 --- a/apps/files_external/l10n/it.json +++ b/apps/files_external/l10n/it.json @@ -101,6 +101,7 @@ "SFTP with secret key login" : "SFTP con accesso a chiave segreta", "SMB / CIFS" : "SMB / CIFS", "Share" : "Condividi", + "Show hidden files" : "Mostra i file nascosti", "SMB / CIFS using OC login" : "SMB / CIFS utilizzando le credenziali di OC", "Username as share" : "Nome utente come condivisione", "OpenStack Object Storage" : "OpenStack Object Storage", diff --git a/apps/files_external/l10n/pt_BR.js b/apps/files_external/l10n/pt_BR.js index ea21879bbcf..ba0caadb22c 100644 --- a/apps/files_external/l10n/pt_BR.js +++ b/apps/files_external/l10n/pt_BR.js @@ -103,6 +103,7 @@ OC.L10N.register( "SFTP with secret key login" : "SFTP com login de chave secreta", "SMB / CIFS" : "SMB / CIFS", "Share" : "Compartilhar", + "Show hidden files" : "Mostrar arquivos ocultos", "SMB / CIFS using OC login" : "SMB / CIFS usando OC login", "Username as share" : "Nome de usuário como compartilhamento", "OpenStack Object Storage" : "Armazenamento de Objetos OpenStack", diff --git a/apps/files_external/l10n/pt_BR.json b/apps/files_external/l10n/pt_BR.json index 0792970aeac..949e776e2b4 100644 --- a/apps/files_external/l10n/pt_BR.json +++ b/apps/files_external/l10n/pt_BR.json @@ -101,6 +101,7 @@ "SFTP with secret key login" : "SFTP com login de chave secreta", "SMB / CIFS" : "SMB / CIFS", "Share" : "Compartilhar", + "Show hidden files" : "Mostrar arquivos ocultos", "SMB / CIFS using OC login" : "SMB / CIFS usando OC login", "Username as share" : "Nome de usuário como compartilhamento", "OpenStack Object Storage" : "Armazenamento de Objetos OpenStack", diff --git a/apps/files_external/l10n/tr.js b/apps/files_external/l10n/tr.js index e8508d3b917..87dc675d0d3 100644 --- a/apps/files_external/l10n/tr.js +++ b/apps/files_external/l10n/tr.js @@ -103,6 +103,7 @@ OC.L10N.register( "SFTP with secret key login" : "Gizli oturum açma anahtarı ile SFTP", "SMB / CIFS" : "SMB / CIFS", "Share" : "Paylaş", + "Show hidden files" : "Gizli dosyaları görüntüle", "SMB / CIFS using OC login" : "OC oturum açma ile SMB / CIFS", "Username as share" : "Paylaşım olarak kullanıcı adı", "OpenStack Object Storage" : "OpenStack Nesne Depolama", diff --git a/apps/files_external/l10n/tr.json b/apps/files_external/l10n/tr.json index 0ef2cf9bfb1..19001a2459f 100644 --- a/apps/files_external/l10n/tr.json +++ b/apps/files_external/l10n/tr.json @@ -101,6 +101,7 @@ "SFTP with secret key login" : "Gizli oturum açma anahtarı ile SFTP", "SMB / CIFS" : "SMB / CIFS", "Share" : "Paylaş", + "Show hidden files" : "Gizli dosyaları görüntüle", "SMB / CIFS using OC login" : "OC oturum açma ile SMB / CIFS", "Username as share" : "Paylaşım olarak kullanıcı adı", "OpenStack Object Storage" : "OpenStack Nesne Depolama", diff --git a/apps/files_external/l10n/zh_CN.js b/apps/files_external/l10n/zh_CN.js index 272784943b2..4b52ba6482d 100644 --- a/apps/files_external/l10n/zh_CN.js +++ b/apps/files_external/l10n/zh_CN.js @@ -103,6 +103,7 @@ OC.L10N.register( "SFTP with secret key login" : "包含 secret key 的 SFTP", "SMB / CIFS" : "SMB / CIFS", "Share" : "共享", + "Show hidden files" : "显示隐藏文件", "SMB / CIFS using OC login" : "SMB / CIFS 使用 OC 登录信息", "Username as share" : "以用户名作为共享名", "OpenStack Object Storage" : "OpenStack 对象存储", diff --git a/apps/files_external/l10n/zh_CN.json b/apps/files_external/l10n/zh_CN.json index 22675e7253b..3eb01f28815 100644 --- a/apps/files_external/l10n/zh_CN.json +++ b/apps/files_external/l10n/zh_CN.json @@ -101,6 +101,7 @@ "SFTP with secret key login" : "包含 secret key 的 SFTP", "SMB / CIFS" : "SMB / CIFS", "Share" : "共享", + "Show hidden files" : "显示隐藏文件", "SMB / CIFS using OC login" : "SMB / CIFS 使用 OC 登录信息", "Username as share" : "以用户名作为共享名", "OpenStack Object Storage" : "OpenStack 对象存储", diff --git a/apps/files_external/lib/Lib/Backend/SMB.php b/apps/files_external/lib/Lib/Backend/SMB.php index c871dc69771..0543247051f 100644 --- a/apps/files_external/lib/Lib/Backend/SMB.php +++ b/apps/files_external/lib/Lib/Backend/SMB.php @@ -50,6 +50,9 @@ class SMB extends Backend { ->setFlag(DefinitionParameter::FLAG_OPTIONAL), (new DefinitionParameter('domain', $l->t('Domain'))) ->setFlag(DefinitionParameter::FLAG_OPTIONAL), + (new DefinitionParameter('show_hidden', $l->t('Show hidden files'))) + ->setType(DefinitionParameter::VALUE_BOOLEAN) + ->setFlag(DefinitionParameter::FLAG_OPTIONAL), ]) ->addAuthScheme(AuthMechanism::SCHEME_PASSWORD) ->addAuthScheme(AuthMechanism::SCHEME_SMB) diff --git a/apps/files_external/lib/Lib/Storage/SMB.php b/apps/files_external/lib/Lib/Storage/SMB.php index 760cc9ef98b..0d8c10b316b 100644 --- a/apps/files_external/lib/Lib/Storage/SMB.php +++ b/apps/files_external/lib/Lib/Storage/SMB.php @@ -82,6 +82,9 @@ class SMB extends Common implements INotifyStorage { /** @var ILogger */ protected $logger; + /** @var bool */ + protected $showHidden; + public function __construct($params) { if (!isset($params['host'])) { throw new \Exception('Invalid configuration, no host provided'); @@ -110,6 +113,8 @@ class SMB extends Common implements INotifyStorage { $this->root = '/' . ltrim($this->root, '/'); $this->root = rtrim($this->root, '/') . '/'; + $this->showHidden = isset($params['show_hidden']) && $params['show_hidden']; + $this->statCache = new CappedMemoryCache(); parent::__construct($params); } @@ -184,10 +189,13 @@ class SMB extends Common implements INotifyStorage { } return array_filter($files, function (IFileInfo $file) { try { - if ($file->isHidden()) { + // the isHidden check is done before checking the config boolean to ensure that the metadata is always fetch + // so we trigger the below exceptions where applicable + $hide = $file->isHidden() && !$this->showHidden; + if ($hide) { $this->logger->debug('hiding hidden file ' . $file->getName()); } - return !$file->isHidden(); + return !$hide; } catch (ForbiddenException $e) { $this->logger->logException($e, ['level' => ILogger::DEBUG, 'message' => 'Hiding forbidden entry ' . $file->getName()]); return false; @@ -526,7 +534,7 @@ class SMB extends Common implements INotifyStorage { public function isReadable($path) { try { $info = $this->getFileInfo($path); - return !$info->isHidden(); + return $this->showHidden || !$info->isHidden(); } catch (NotFoundException $e) { return false; } catch (ForbiddenException $e) { @@ -539,7 +547,7 @@ class SMB extends Common implements INotifyStorage { $info = $this->getFileInfo($path); // following windows behaviour for read-only folders: they can be written into // (https://support.microsoft.com/en-us/kb/326549 - "cause" section) - return !$info->isHidden() && (!$info->isReadOnly() || $this->is_dir($path)); + return ($this->showHidden || !$info->isHidden()) && (!$info->isReadOnly() || $this->is_dir($path)); } catch (NotFoundException $e) { return false; } catch (ForbiddenException $e) { @@ -550,7 +558,7 @@ class SMB extends Common implements INotifyStorage { public function isDeletable($path) { try { $info = $this->getFileInfo($path); - return !$info->isHidden() && !$info->isReadOnly(); + return ($this->showHidden || !$info->isHidden()) && !$info->isReadOnly(); } catch (NotFoundException $e) { return false; } catch (ForbiddenException $e) { diff --git a/apps/files_sharing/l10n/fi.js b/apps/files_sharing/l10n/fi.js index 8a8a3b5a4d2..6be906ac777 100644 --- a/apps/files_sharing/l10n/fi.js +++ b/apps/files_sharing/l10n/fi.js @@ -104,6 +104,8 @@ OC.L10N.register( "Add to your Nextcloud" : "Lisää Nextcloudiisi", "Share API is disabled" : "Jakamisrajapinta on poistettu käytöstä", "File sharing" : "Tiedostonjako", + "Link to a file" : "Linkki tiedostoon", + "Shared" : "Jaettu", "Share" : "Jaa", "Sharing" : "Jakaminen", "No entries found in this folder" : "Ei kohteita tässä kansiossa", diff --git a/apps/files_sharing/l10n/fi.json b/apps/files_sharing/l10n/fi.json index 4a5159e34a9..ee1b87d1589 100644 --- a/apps/files_sharing/l10n/fi.json +++ b/apps/files_sharing/l10n/fi.json @@ -102,6 +102,8 @@ "Add to your Nextcloud" : "Lisää Nextcloudiisi", "Share API is disabled" : "Jakamisrajapinta on poistettu käytöstä", "File sharing" : "Tiedostonjako", + "Link to a file" : "Linkki tiedostoon", + "Shared" : "Jaettu", "Share" : "Jaa", "Sharing" : "Jakaminen", "No entries found in this folder" : "Ei kohteita tässä kansiossa", diff --git a/apps/files_trashbin/l10n/sk.js b/apps/files_trashbin/l10n/sk.js index 35ffb55efd4..e660ced089c 100644 --- a/apps/files_trashbin/l10n/sk.js +++ b/apps/files_trashbin/l10n/sk.js @@ -12,6 +12,7 @@ OC.L10N.register( "No entries found in this folder" : "V tomto priečinku nebolo nič nájdené", "Select all" : "Vybrať všetko", "Name" : "Názov", + "Actions" : "Akcie", "Deleted" : "Zmazané", "Delete" : "Zmazať", "Couldn't delete %s permanently" : "Nemožno zmazať %s navždy", diff --git a/apps/files_trashbin/l10n/sk.json b/apps/files_trashbin/l10n/sk.json index 99f7e1d053d..f1110500d2a 100644 --- a/apps/files_trashbin/l10n/sk.json +++ b/apps/files_trashbin/l10n/sk.json @@ -10,6 +10,7 @@ "No entries found in this folder" : "V tomto priečinku nebolo nič nájdené", "Select all" : "Vybrať všetko", "Name" : "Názov", + "Actions" : "Akcie", "Deleted" : "Zmazané", "Delete" : "Zmazať", "Couldn't delete %s permanently" : "Nemožno zmazať %s navždy", diff --git a/apps/systemtags/l10n/ca.js b/apps/systemtags/l10n/ca.js index d0f5c997438..f74fcbec3f2 100644 --- a/apps/systemtags/l10n/ca.js +++ b/apps/systemtags/l10n/ca.js @@ -5,52 +5,59 @@ OC.L10N.register( "Update" : "Actualitza", "Create" : "Crea", "Select tag…" : "Selecciona etiqueta...", - "Added system tag {systemtag}" : "S'ha afegit l'etiqueta del sistema {systemtag}", - "Added system tag %1$s" : "S'ha afegit l'etiqueta del sistema%1$s", - "%1$s added system tag %2$s" : "%1$setiqueta del sistema afegida%2$s", - "{actor} added system tag {systemtag}" : "{actor} etiqueta del sistema afegida {systemtag}", - "Removed system tag {systemtag}" : "S'ha eliminat l'etiqueta del sistema {systemtag}", - "Removed system tag %1$s" : "S'ha eliminat l'etiqueta del sistema%1$s", - "%1$s removed system tag %2$s" : "%1$setiqueta del sistema eliminada%2$s", - "{actor} removed system tag {systemtag}" : "{actor} ha eliminat l'etiqueta del sistema {systemtag}", - "You created system tag %1$s" : "Has creat la marca de sistema %1$s", - "You created system tag {systemtag}" : "Has creat la marca de sistema {systemtag}", - "%1$s created system tag %2$s" : "%1$s ha creat la marca de sistema %2$s", - "{actor} created system tag {systemtag}" : "{actor} ha creat l'etiqueta del sistema {systemtag}", - "You deleted system tag %1$s" : "Has esborrat la marca de sistema %1$s", - "You deleted system tag {systemtag}" : "Heu suprimit l'etiqueta del sistema {systemtag}", - "%1$s deleted system tag %2$s" : "%1$s ha esborrat la marca de sistema %2$s", - "{actor} deleted system tag {systemtag}" : "{actor} sistema de sistema eliminat {systemtag}", - "You updated system tag %2$s to %1$s" : "Has actualitzat les marques de sistema de la %2$s a la %1$s", - "You updated system tag {oldsystemtag} to {newsystemtag}" : "Heu actualitzat l'etiqueta del sistema {oldsystemtag} a {newsystemtag}", - "%1$s updated system tag %3$s to %2$s" : "%1$s ha actualitzat les marques de sistema de la %3$s a la %2$s", - "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} etiqueta del sistema actualitzada {oldsystemtag} a {newsystemtag}", - "You added system tag %2$s to %1$s" : "Heu afegit l'etiqueta del sistema %2$sa%1$s", - "You added system tag {systemtag} to {file}" : "Heu afegit l'etiqueta del sistema {systemtag} a {file}", - "%1$s added system tag %3$s to %2$s" : "%1$sS'ha afegit una etiqueta al sistema%3$s%2$s", - "{actor} added system tag {systemtag} to {file}" : "{actor} ha afegit l'etiqueta del sistema {systemtag} a {file}", - "You removed system tag %2$s from %1$s" : "Heu eliminat l'etiqueta del sistema%2$s %1$s", - "You removed system tag {systemtag} from {file}" : "Heu eliminat l'etiqueta del sistema {systemtag} de {file}", - "%1$s removed system tag %3$s from %2$s" : "%1$sS'ha eliminat l'etiqueta del sistema%3$s%2$s", - "{actor} removed system tag {systemtag} from {file}" : "{actor} ha eliminat l'etiqueta del sistema {systemtag} de {file}", + "System tag %1$s added by the system" : "Etiqueta de sistema %1$s afegida pel sistema", + "Added system tag {systemtag}" : "S'ha afegit l'etiqueta de sistema {systemtag}", + "Added system tag %1$s" : "S'ha afegit l'etiqueta de sistema %1$s", + "%1$s added system tag %2$s" : "%1$s ha afegit l'etiqueta de sistema %2$s", + "{actor} added system tag {systemtag}" : "{actor} ha afegit l'etiqueta de sistema {systemtag}", + "System tag %1$s removed by the system" : "Etiqueta de sistema %1$s suprimida pel sistema", + "Removed system tag {systemtag}" : "S'ha suprimit l'etiqueta de sistema {systemtag}", + "Removed system tag %1$s" : "S'ha suprimit l'etiqueta de sistema%1$s", + "%1$s removed system tag %2$s" : "%1$s ha suprimit l'etiqueta de sistema %2$s", + "{actor} removed system tag {systemtag}" : "{actor} ha suprimit l'etiqueta de sistema {systemtag}", + "You created system tag %1$s" : "Heu creat l'etiqueta de sistema %1$s", + "You created system tag {systemtag}" : "Heu creat l'etiqueta de sistema {systemtag}", + "%1$s created system tag %2$s" : "%1$s ha creat l'etiqueta de sistema %2$s", + "{actor} created system tag {systemtag}" : "{actor} ha creat l'etiqueta de sistema {systemtag}", + "You deleted system tag %1$s" : "Heu suprimit l'etiqueta de sistema %1$s", + "You deleted system tag {systemtag}" : "Heu suprimit l'etiqueta de sistema {systemtag}", + "%1$s deleted system tag %2$s" : "%1$s ha suprimit l'etiqueta de sistema %2$s", + "{actor} deleted system tag {systemtag}" : "{actor} ha suprimit l'etiqueta de sistema {systemtag}", + "You updated system tag %2$s to %1$s" : "Heu actualitzat l'etiqueta de sistema %2$s a %1$s", + "You updated system tag {oldsystemtag} to {newsystemtag}" : "Heu actualitzat l'etiqueta de sistema {oldsystemtag} a {newsystemtag}", + "%1$s updated system tag %3$s to %2$s" : "%1$s ha actualitzat l'etiqueta de sistema %3$s a %2$s", + "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} ha actualitzat l'etiqueta de sistema {oldsystemtag} a {newsystemtag}", + "System tag %2$s was added to %1$s by the system" : "L'etiqueta de sistema %2$s ha estat afegida a %1$s pel sistema", + "System tag {systemtag} was added to {file} by the system" : "L'etiqueta de sistema {systemtag} ha estat afegida a {file} pel sistema", + "You added system tag %2$s to %1$s" : "Heu afegit l'etiqueta de sistema %2$sa%1$s", + "You added system tag {systemtag} to {file}" : "Heu afegit l'etiqueta de sistema {systemtag} a {file}", + "%1$s added system tag %3$s to %2$s" : "%1$s ha afegit l'etiqueta de sistema %3$s a %2$s", + "{actor} added system tag {systemtag} to {file}" : "{actor} ha afegit l'etiqueta de sistema {systemtag} a {file}", + "System tag %2$s was removed from %1$s by the system" : "L'etiqueta de sistema %2$s ha estat suprimida de %1$s pel sistema", + "System tag {systemtag} was removed from {file} by the system" : "L'etiqueta de sistema {systemtag} ha estat suprimida de {file} pel sistema", + "You removed system tag %2$s from %1$s" : "Heu suprimit l'etiqueta de sistema%2$s de %1$s", + "You removed system tag {systemtag} from {file}" : "Heu suprimit l'etiqueta de sistema {systemtag} de {file}", + "%1$s removed system tag %3$s from %2$s" : "%1$s ha suprimit l'etiqueta de sistema %3$s de %2$s", + "{actor} removed system tag {systemtag} from {file}" : "{actor} ha suprimit l'etiqueta de sistema {systemtag} de {file}", "%s (restricted)" : "%s (restringit)", "%s (invisible)" : "%s (invisible)", - "<strong>System tags</strong> for a file have been modified" : "Les <strong>Marques de Sistema</strong> d'un fitxer s'han modificat", + "<strong>System tags</strong> for a file have been modified" : "S'han modificat les <strong>etiquetes de sistema</strong> d'un fitxer", "Collaborative tags" : "Etiquetes col·laboratives", "Tagged files" : "Fitxers marcats", "Select tags to filter by" : "Selecciona les marques per filtrar-ne", "No tags found" : "No s'han trobat etiquetes", - "Please select tags to filter by" : "Si us plau selecciona les marques per filtrar-ne", - "No files found for the selected tags" : "No s'han trobat fitxers per les marques sel·leccionades", + "Please select tags to filter by" : "Si us plau seleccioneu les etiquetes amb les que es filtrarà", + "No files found for the selected tags" : "No s'han trobat fitxers per les etiquetes seleccionades", "Select tag …" : "Selecciona etiqueta...", + "Create a new tag" : "Crea una nova etiqueta", "Name" : "Nom", "Public" : "Públic", "Restricted" : "Restringit", "Invisible" : "Invisible", - "Delete" : "Esborra", - "Reset" : "Canvia", - "No files in here" : "No hi ha arxius", - "No entries found in this folder" : "No hi ha entrades en aquesta carpeta", + "Delete" : "Suprimeix", + "Reset" : "Restableix", + "No files in here" : "No hi ha fitxers aquí", + "No entries found in this folder" : "No s'han trobat entrades en aquesta carpeta", "Size" : "Mida", "Modified" : "Modificat" }, diff --git a/apps/systemtags/l10n/ca.json b/apps/systemtags/l10n/ca.json index bc40cb449ec..18198b3d51e 100644 --- a/apps/systemtags/l10n/ca.json +++ b/apps/systemtags/l10n/ca.json @@ -3,52 +3,59 @@ "Update" : "Actualitza", "Create" : "Crea", "Select tag…" : "Selecciona etiqueta...", - "Added system tag {systemtag}" : "S'ha afegit l'etiqueta del sistema {systemtag}", - "Added system tag %1$s" : "S'ha afegit l'etiqueta del sistema%1$s", - "%1$s added system tag %2$s" : "%1$setiqueta del sistema afegida%2$s", - "{actor} added system tag {systemtag}" : "{actor} etiqueta del sistema afegida {systemtag}", - "Removed system tag {systemtag}" : "S'ha eliminat l'etiqueta del sistema {systemtag}", - "Removed system tag %1$s" : "S'ha eliminat l'etiqueta del sistema%1$s", - "%1$s removed system tag %2$s" : "%1$setiqueta del sistema eliminada%2$s", - "{actor} removed system tag {systemtag}" : "{actor} ha eliminat l'etiqueta del sistema {systemtag}", - "You created system tag %1$s" : "Has creat la marca de sistema %1$s", - "You created system tag {systemtag}" : "Has creat la marca de sistema {systemtag}", - "%1$s created system tag %2$s" : "%1$s ha creat la marca de sistema %2$s", - "{actor} created system tag {systemtag}" : "{actor} ha creat l'etiqueta del sistema {systemtag}", - "You deleted system tag %1$s" : "Has esborrat la marca de sistema %1$s", - "You deleted system tag {systemtag}" : "Heu suprimit l'etiqueta del sistema {systemtag}", - "%1$s deleted system tag %2$s" : "%1$s ha esborrat la marca de sistema %2$s", - "{actor} deleted system tag {systemtag}" : "{actor} sistema de sistema eliminat {systemtag}", - "You updated system tag %2$s to %1$s" : "Has actualitzat les marques de sistema de la %2$s a la %1$s", - "You updated system tag {oldsystemtag} to {newsystemtag}" : "Heu actualitzat l'etiqueta del sistema {oldsystemtag} a {newsystemtag}", - "%1$s updated system tag %3$s to %2$s" : "%1$s ha actualitzat les marques de sistema de la %3$s a la %2$s", - "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} etiqueta del sistema actualitzada {oldsystemtag} a {newsystemtag}", - "You added system tag %2$s to %1$s" : "Heu afegit l'etiqueta del sistema %2$sa%1$s", - "You added system tag {systemtag} to {file}" : "Heu afegit l'etiqueta del sistema {systemtag} a {file}", - "%1$s added system tag %3$s to %2$s" : "%1$sS'ha afegit una etiqueta al sistema%3$s%2$s", - "{actor} added system tag {systemtag} to {file}" : "{actor} ha afegit l'etiqueta del sistema {systemtag} a {file}", - "You removed system tag %2$s from %1$s" : "Heu eliminat l'etiqueta del sistema%2$s %1$s", - "You removed system tag {systemtag} from {file}" : "Heu eliminat l'etiqueta del sistema {systemtag} de {file}", - "%1$s removed system tag %3$s from %2$s" : "%1$sS'ha eliminat l'etiqueta del sistema%3$s%2$s", - "{actor} removed system tag {systemtag} from {file}" : "{actor} ha eliminat l'etiqueta del sistema {systemtag} de {file}", + "System tag %1$s added by the system" : "Etiqueta de sistema %1$s afegida pel sistema", + "Added system tag {systemtag}" : "S'ha afegit l'etiqueta de sistema {systemtag}", + "Added system tag %1$s" : "S'ha afegit l'etiqueta de sistema %1$s", + "%1$s added system tag %2$s" : "%1$s ha afegit l'etiqueta de sistema %2$s", + "{actor} added system tag {systemtag}" : "{actor} ha afegit l'etiqueta de sistema {systemtag}", + "System tag %1$s removed by the system" : "Etiqueta de sistema %1$s suprimida pel sistema", + "Removed system tag {systemtag}" : "S'ha suprimit l'etiqueta de sistema {systemtag}", + "Removed system tag %1$s" : "S'ha suprimit l'etiqueta de sistema%1$s", + "%1$s removed system tag %2$s" : "%1$s ha suprimit l'etiqueta de sistema %2$s", + "{actor} removed system tag {systemtag}" : "{actor} ha suprimit l'etiqueta de sistema {systemtag}", + "You created system tag %1$s" : "Heu creat l'etiqueta de sistema %1$s", + "You created system tag {systemtag}" : "Heu creat l'etiqueta de sistema {systemtag}", + "%1$s created system tag %2$s" : "%1$s ha creat l'etiqueta de sistema %2$s", + "{actor} created system tag {systemtag}" : "{actor} ha creat l'etiqueta de sistema {systemtag}", + "You deleted system tag %1$s" : "Heu suprimit l'etiqueta de sistema %1$s", + "You deleted system tag {systemtag}" : "Heu suprimit l'etiqueta de sistema {systemtag}", + "%1$s deleted system tag %2$s" : "%1$s ha suprimit l'etiqueta de sistema %2$s", + "{actor} deleted system tag {systemtag}" : "{actor} ha suprimit l'etiqueta de sistema {systemtag}", + "You updated system tag %2$s to %1$s" : "Heu actualitzat l'etiqueta de sistema %2$s a %1$s", + "You updated system tag {oldsystemtag} to {newsystemtag}" : "Heu actualitzat l'etiqueta de sistema {oldsystemtag} a {newsystemtag}", + "%1$s updated system tag %3$s to %2$s" : "%1$s ha actualitzat l'etiqueta de sistema %3$s a %2$s", + "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} ha actualitzat l'etiqueta de sistema {oldsystemtag} a {newsystemtag}", + "System tag %2$s was added to %1$s by the system" : "L'etiqueta de sistema %2$s ha estat afegida a %1$s pel sistema", + "System tag {systemtag} was added to {file} by the system" : "L'etiqueta de sistema {systemtag} ha estat afegida a {file} pel sistema", + "You added system tag %2$s to %1$s" : "Heu afegit l'etiqueta de sistema %2$sa%1$s", + "You added system tag {systemtag} to {file}" : "Heu afegit l'etiqueta de sistema {systemtag} a {file}", + "%1$s added system tag %3$s to %2$s" : "%1$s ha afegit l'etiqueta de sistema %3$s a %2$s", + "{actor} added system tag {systemtag} to {file}" : "{actor} ha afegit l'etiqueta de sistema {systemtag} a {file}", + "System tag %2$s was removed from %1$s by the system" : "L'etiqueta de sistema %2$s ha estat suprimida de %1$s pel sistema", + "System tag {systemtag} was removed from {file} by the system" : "L'etiqueta de sistema {systemtag} ha estat suprimida de {file} pel sistema", + "You removed system tag %2$s from %1$s" : "Heu suprimit l'etiqueta de sistema%2$s de %1$s", + "You removed system tag {systemtag} from {file}" : "Heu suprimit l'etiqueta de sistema {systemtag} de {file}", + "%1$s removed system tag %3$s from %2$s" : "%1$s ha suprimit l'etiqueta de sistema %3$s de %2$s", + "{actor} removed system tag {systemtag} from {file}" : "{actor} ha suprimit l'etiqueta de sistema {systemtag} de {file}", "%s (restricted)" : "%s (restringit)", "%s (invisible)" : "%s (invisible)", - "<strong>System tags</strong> for a file have been modified" : "Les <strong>Marques de Sistema</strong> d'un fitxer s'han modificat", + "<strong>System tags</strong> for a file have been modified" : "S'han modificat les <strong>etiquetes de sistema</strong> d'un fitxer", "Collaborative tags" : "Etiquetes col·laboratives", "Tagged files" : "Fitxers marcats", "Select tags to filter by" : "Selecciona les marques per filtrar-ne", "No tags found" : "No s'han trobat etiquetes", - "Please select tags to filter by" : "Si us plau selecciona les marques per filtrar-ne", - "No files found for the selected tags" : "No s'han trobat fitxers per les marques sel·leccionades", + "Please select tags to filter by" : "Si us plau seleccioneu les etiquetes amb les que es filtrarà", + "No files found for the selected tags" : "No s'han trobat fitxers per les etiquetes seleccionades", "Select tag …" : "Selecciona etiqueta...", + "Create a new tag" : "Crea una nova etiqueta", "Name" : "Nom", "Public" : "Públic", "Restricted" : "Restringit", "Invisible" : "Invisible", - "Delete" : "Esborra", - "Reset" : "Canvia", - "No files in here" : "No hi ha arxius", - "No entries found in this folder" : "No hi ha entrades en aquesta carpeta", + "Delete" : "Suprimeix", + "Reset" : "Restableix", + "No files in here" : "No hi ha fitxers aquí", + "No entries found in this folder" : "No s'han trobat entrades en aquesta carpeta", "Size" : "Mida", "Modified" : "Modificat" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/theming/l10n/ca.js b/apps/theming/l10n/ca.js index 55b11cd070a..7e26e6a9c0d 100644 --- a/apps/theming/l10n/ca.js +++ b/apps/theming/l10n/ca.js @@ -1,39 +1,51 @@ OC.L10N.register( "theming", { - "Loading preview…" : "Carregant vista prèvia ...", - "Saved" : "Guardat", - "Admin" : "Admin", - "a safe home for all your data" : "un lloc segur per a les teves dades", + "Loading preview…" : "S'està carregant la vista prèvia ...", + "Saved" : "Desat", + "Admin" : "Administrador", + "a safe home for all your data" : "un lloc segur per a les vostres dades", "Name cannot be empty" : "El nom del fitxer no pot estar buit", "The given name is too long" : "El nom introduït és massa llarg", "The given web address is too long" : "L'adreça web proporcionada és massa llarga", - "The given slogan is too long" : "El lema indicat és massa llarg", - "The given color is invalid" : "El color donat no és vàlid", + "The given legal notice address is too long" : "L'adreça d'avís legal és massa llarga", + "The given privacy policy address is too long" : "L'adreça de política de privadesa és massa llarga", + "The given slogan is too long" : "L'eslògan proporcionat és massa llarg", + "The given color is invalid" : "El color proporcionat no és vàlid", "The file was uploaded" : "S'ha carregat el fitxer", + "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El fitxer carregat supera la directiva upload_max_filesize a php.ini", + "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El fitxer carregat supera la directiva MAX_FILE_SIZE especificada al formulari HTML", + "The file was only partially uploaded" : "El fitxer només es ha estat carregat parcialment", "No file was uploaded" : "No s'ha carregat cap fitxer", + "Missing a temporary folder" : "Falta una carpeta temporal", + "Could not write file to disk" : "No s’ha pogut escriure el fitxer al disc", + "A PHP extension stopped the file upload" : "Una extensió de PHP ha aturat la càrrega del fitxer", "No file uploaded" : "No s'ha carregat cap fitxer", "Unsupported image type" : "Tipus d'imatge no compatible", - "You are already using a custom theme. Theming app settings might be overwritten by that." : "Ja estàs utilitzant un tema propi. La configuració de l'app s'hauria d'haver modificat.", + "You are already using a custom theme. Theming app settings might be overwritten by that." : "Ja esteu fent servir un tema propi. La configuració de l'aplicació s'hauria d'haver modificat.", "Theming" : "Aparença", "Legal notice" : "Avís legal", "Privacy policy" : "Política de privadesa", - "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "La personalització permet canviar fàcilment l'aspecte de la vostra web i dels clients. Això serà visible per a tots els usuaris.", + "Adjust the Nextcloud theme" : "Ajusta el tema de Nextcloud", + "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "L'aparença permet personalitzar fàcilment l'aspecte de la vostra web i dels clients. Això serà visible per a tots els usuaris.", "Name" : "Nom", - "Reset to default" : "Restablir al valor predeterminat", + "Reset to default" : "Restableix als valors predeterminats", + "Web link" : "Enllaç web", "https://…" : "https://...", - "Slogan" : "Lema", + "Slogan" : "Eslògan", "Color" : "Color", "Logo" : "Logotip", - "Upload new logo" : "Penjar un nou logotip", - "Login image" : "Login logo", - "Upload new login background" : "Carregar nou fons d'inici de sessió", - "Remove background image" : "Elimina la imatge de fons", + "Upload new logo" : "Carrega un nou logotip", + "Login image" : "Imatge d'inici de sessió", + "Upload new login background" : "Carrega un nou fons d'inici de sessió", + "Remove background image" : "Suprimeix la imatge de fons", "Advanced options" : "Opcions avançades", "Legal notice link" : "Enllaç a l'avís legal", "Privacy policy link" : "Enllaç a la política de privadesa", - "Header logo" : "Logo de capçalera", - "Upload new header logo" : "Pujar un nou logo de capçalera", + "Header logo" : "Logotip de capçalera", + "Upload new header logo" : "Carrega un nou logotip de capçalera", + "Favicon" : "Favicon", + "Upload new favicon" : "Carrega un nou favicon", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Instal·la l'extensió Imagemagick per al PHP i es generarà automàticament un favicon a partir del logo i del color del tema." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/theming/l10n/ca.json b/apps/theming/l10n/ca.json index 50121247dd7..4409f1e6a17 100644 --- a/apps/theming/l10n/ca.json +++ b/apps/theming/l10n/ca.json @@ -1,37 +1,49 @@ { "translations": { - "Loading preview…" : "Carregant vista prèvia ...", - "Saved" : "Guardat", - "Admin" : "Admin", - "a safe home for all your data" : "un lloc segur per a les teves dades", + "Loading preview…" : "S'està carregant la vista prèvia ...", + "Saved" : "Desat", + "Admin" : "Administrador", + "a safe home for all your data" : "un lloc segur per a les vostres dades", "Name cannot be empty" : "El nom del fitxer no pot estar buit", "The given name is too long" : "El nom introduït és massa llarg", "The given web address is too long" : "L'adreça web proporcionada és massa llarga", - "The given slogan is too long" : "El lema indicat és massa llarg", - "The given color is invalid" : "El color donat no és vàlid", + "The given legal notice address is too long" : "L'adreça d'avís legal és massa llarga", + "The given privacy policy address is too long" : "L'adreça de política de privadesa és massa llarga", + "The given slogan is too long" : "L'eslògan proporcionat és massa llarg", + "The given color is invalid" : "El color proporcionat no és vàlid", "The file was uploaded" : "S'ha carregat el fitxer", + "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El fitxer carregat supera la directiva upload_max_filesize a php.ini", + "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El fitxer carregat supera la directiva MAX_FILE_SIZE especificada al formulari HTML", + "The file was only partially uploaded" : "El fitxer només es ha estat carregat parcialment", "No file was uploaded" : "No s'ha carregat cap fitxer", + "Missing a temporary folder" : "Falta una carpeta temporal", + "Could not write file to disk" : "No s’ha pogut escriure el fitxer al disc", + "A PHP extension stopped the file upload" : "Una extensió de PHP ha aturat la càrrega del fitxer", "No file uploaded" : "No s'ha carregat cap fitxer", "Unsupported image type" : "Tipus d'imatge no compatible", - "You are already using a custom theme. Theming app settings might be overwritten by that." : "Ja estàs utilitzant un tema propi. La configuració de l'app s'hauria d'haver modificat.", + "You are already using a custom theme. Theming app settings might be overwritten by that." : "Ja esteu fent servir un tema propi. La configuració de l'aplicació s'hauria d'haver modificat.", "Theming" : "Aparença", "Legal notice" : "Avís legal", "Privacy policy" : "Política de privadesa", - "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "La personalització permet canviar fàcilment l'aspecte de la vostra web i dels clients. Això serà visible per a tots els usuaris.", + "Adjust the Nextcloud theme" : "Ajusta el tema de Nextcloud", + "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "L'aparença permet personalitzar fàcilment l'aspecte de la vostra web i dels clients. Això serà visible per a tots els usuaris.", "Name" : "Nom", - "Reset to default" : "Restablir al valor predeterminat", + "Reset to default" : "Restableix als valors predeterminats", + "Web link" : "Enllaç web", "https://…" : "https://...", - "Slogan" : "Lema", + "Slogan" : "Eslògan", "Color" : "Color", "Logo" : "Logotip", - "Upload new logo" : "Penjar un nou logotip", - "Login image" : "Login logo", - "Upload new login background" : "Carregar nou fons d'inici de sessió", - "Remove background image" : "Elimina la imatge de fons", + "Upload new logo" : "Carrega un nou logotip", + "Login image" : "Imatge d'inici de sessió", + "Upload new login background" : "Carrega un nou fons d'inici de sessió", + "Remove background image" : "Suprimeix la imatge de fons", "Advanced options" : "Opcions avançades", "Legal notice link" : "Enllaç a l'avís legal", "Privacy policy link" : "Enllaç a la política de privadesa", - "Header logo" : "Logo de capçalera", - "Upload new header logo" : "Pujar un nou logo de capçalera", + "Header logo" : "Logotip de capçalera", + "Upload new header logo" : "Carrega un nou logotip de capçalera", + "Favicon" : "Favicon", + "Upload new favicon" : "Carrega un nou favicon", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Instal·la l'extensió Imagemagick per al PHP i es generarà automàticament un favicon a partir del logo i del color del tema." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/twofactor_backupcodes/l10n/ca.js b/apps/twofactor_backupcodes/l10n/ca.js index 3d1817bff24..5b69fa89541 100644 --- a/apps/twofactor_backupcodes/l10n/ca.js +++ b/apps/twofactor_backupcodes/l10n/ca.js @@ -1,19 +1,33 @@ OC.L10N.register( "twofactor_backupcodes", { - "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Aquests són els codis de seguretat. Deseu-los i / o imprimiu-los ja que no podreu tornar a llegir els codis més tard", - "Save backup codes" : "Guardar els codis de la copia de seguretat", - "Print backup codes" : "Imprimeix codis de còpia de seguretat", - "Regenerate backup codes" : "Regenerar els codis de la copia de seguretat", - "If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneres codis de còpia de seguretat, invalida automàticament els codis antics.", - "Generate backup codes" : "Generar codis de la copia de seguretat", - "An error occurred while generating your backup codes" : "S'ha produït un error en generar els codis de seguretat", - "Nextcloud backup codes" : "Codis de la copia de seguretat de Nextcloud", - "You created two-factor backup codes for your account" : "Heu creat codis de còpia de seguretat de dos factors per al vostre compte", - "Second-factor backup codes" : "Codis secundaris de còpia de seguretat", - "Backup code" : "Codi de copia de seguretat", - "Use backup code" : "Utilitza un codi de copia de seguretat", + "_" : "_", + "An error occurred while generating your backup codes" : "S'ha produït un error mentre es generaven els codis de seguretat", + "{name} backup codes" : "Codis de seguretat {name}", + "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Aquests són els vostres codis de seguretat. Si us plau, deseu-los i/o imprimiu-los ja que no podreu tornar-los a llegir després", + "Save backup codes" : "Desa els codis de seguretat", + "Print backup codes" : "Imprimeix codis de seguretat", + "Backup codes have been generated. {used} of {total} codes have been used." : "S'han generat els codis de seguretat. S'han fet servir {used} de {total} codis.", + "Regenerate backup codes" : "Regenera els codis de seguretat", + "_icon-loading-small_::_generate-backup-codes_" : ["icon-loading-small","generate-backup-codes"], + "If you regenerate backup codes, you automatically invalidate old codes." : "Si regenereu els codis de seguretat, invalidareu automàticament els codis antics.", + "Generate backup codes" : "Genera els codis de seguretat", + "You created two-factor backup codes for your account" : "Heu creat els codis de seguretat de dos factors per al vostre compte", + "Second-factor backup codes" : "Codis de seguretat de segon factor", + "You have enabled two-factor authentication but have not yet generated backup codes. Be sure to do this in case you lose access to your second factor." : "Heu activat l'autenticació de dos factors, però encara no heu generat els codis de seguretat. Assegureu-vos de fer-ho en cas de perdre l'accés al segon factor.", + "Backup code" : "Codi de seguretat", + "Use backup code" : "Utilitza un codi de seguretat", "Two factor backup codes" : "Codis de seguretat de l'autenticació en dos factors", - "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "S'han generat codis de còpia de seguretat. S'han usat {{used}} de {{total}} codis." + "A two-factor auth backup codes provider" : "Proveïdor de codis de seguretat d'autenticació en dos factors", + "Use one of the backup codes you saved when setting up two-factor authentication." : "Feu servir un dels codis de seguretat que heu desat quan he configurat l’autenticació de dos factors.", + "Submit" : "Envia", + "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "S'han generat els codis de seguretat. S'han fet servir {{used}} de {{total}} codis.", + "Nextcloud backup codes" : "Codis de seguretat de Nextcloud", + "activated" : "activat", + "updated" : "actualitzat", + "mounted" : "muntat", + "deactivated" : "desactivat", + "created" : "creat", + "destroyed" : "destruït" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/twofactor_backupcodes/l10n/ca.json b/apps/twofactor_backupcodes/l10n/ca.json index e1be06150af..a9552ccce90 100644 --- a/apps/twofactor_backupcodes/l10n/ca.json +++ b/apps/twofactor_backupcodes/l10n/ca.json @@ -1,17 +1,31 @@ { "translations": { - "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Aquests són els codis de seguretat. Deseu-los i / o imprimiu-los ja que no podreu tornar a llegir els codis més tard", - "Save backup codes" : "Guardar els codis de la copia de seguretat", - "Print backup codes" : "Imprimeix codis de còpia de seguretat", - "Regenerate backup codes" : "Regenerar els codis de la copia de seguretat", - "If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneres codis de còpia de seguretat, invalida automàticament els codis antics.", - "Generate backup codes" : "Generar codis de la copia de seguretat", - "An error occurred while generating your backup codes" : "S'ha produït un error en generar els codis de seguretat", - "Nextcloud backup codes" : "Codis de la copia de seguretat de Nextcloud", - "You created two-factor backup codes for your account" : "Heu creat codis de còpia de seguretat de dos factors per al vostre compte", - "Second-factor backup codes" : "Codis secundaris de còpia de seguretat", - "Backup code" : "Codi de copia de seguretat", - "Use backup code" : "Utilitza un codi de copia de seguretat", + "_" : "_", + "An error occurred while generating your backup codes" : "S'ha produït un error mentre es generaven els codis de seguretat", + "{name} backup codes" : "Codis de seguretat {name}", + "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Aquests són els vostres codis de seguretat. Si us plau, deseu-los i/o imprimiu-los ja que no podreu tornar-los a llegir després", + "Save backup codes" : "Desa els codis de seguretat", + "Print backup codes" : "Imprimeix codis de seguretat", + "Backup codes have been generated. {used} of {total} codes have been used." : "S'han generat els codis de seguretat. S'han fet servir {used} de {total} codis.", + "Regenerate backup codes" : "Regenera els codis de seguretat", + "_icon-loading-small_::_generate-backup-codes_" : ["icon-loading-small","generate-backup-codes"], + "If you regenerate backup codes, you automatically invalidate old codes." : "Si regenereu els codis de seguretat, invalidareu automàticament els codis antics.", + "Generate backup codes" : "Genera els codis de seguretat", + "You created two-factor backup codes for your account" : "Heu creat els codis de seguretat de dos factors per al vostre compte", + "Second-factor backup codes" : "Codis de seguretat de segon factor", + "You have enabled two-factor authentication but have not yet generated backup codes. Be sure to do this in case you lose access to your second factor." : "Heu activat l'autenticació de dos factors, però encara no heu generat els codis de seguretat. Assegureu-vos de fer-ho en cas de perdre l'accés al segon factor.", + "Backup code" : "Codi de seguretat", + "Use backup code" : "Utilitza un codi de seguretat", "Two factor backup codes" : "Codis de seguretat de l'autenticació en dos factors", - "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "S'han generat codis de còpia de seguretat. S'han usat {{used}} de {{total}} codis." + "A two-factor auth backup codes provider" : "Proveïdor de codis de seguretat d'autenticació en dos factors", + "Use one of the backup codes you saved when setting up two-factor authentication." : "Feu servir un dels codis de seguretat que heu desat quan he configurat l’autenticació de dos factors.", + "Submit" : "Envia", + "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "S'han generat els codis de seguretat. S'han fet servir {{used}} de {{total}} codis.", + "Nextcloud backup codes" : "Codis de seguretat de Nextcloud", + "activated" : "activat", + "updated" : "actualitzat", + "mounted" : "muntat", + "deactivated" : "desactivat", + "created" : "creat", + "destroyed" : "destruït" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/lt_LT.js b/apps/updatenotification/l10n/lt_LT.js index 2fa4463f51c..a380063f2c0 100644 --- a/apps/updatenotification/l10n/lt_LT.js +++ b/apps/updatenotification/l10n/lt_LT.js @@ -18,6 +18,7 @@ OC.L10N.register( "Your version is up to date." : "Jūsų versija yra naujausia.", "A non-default update server is in use to be checked for updates:" : "Atnaujinimų aptikimui yra naudojamas ne nenumatytasis serveris: ", "Update channel:" : "Atnaujinimo kanalas:", + "You can always update to a newer version. But you can never downgrade to a more stable version." : "Visada galite atnaujinti į naujesnę versiją. Tačiau niekada negalite sendinti į stabilesnę versiją.", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Turėkite omenyje, kad po naujos versijos išleidimo, gali praeiti šiek tiek laiko, kol ji čia taps matoma. Mes išleidžiame naujas versijas paskirstytas pagal laiką savo naudotojams ir, kartais, pastebėjus klaidas, praleidžiame versiją.", "Notify members of the following groups about available updates:" : "Apie galimus atnaujinimus informuoti narius iš grupių:", "Only notification for app updates are available." : "Yra prieinami tik pranešimai apie programėlių atnaujinimus.", diff --git a/apps/updatenotification/l10n/lt_LT.json b/apps/updatenotification/l10n/lt_LT.json index 908cb3db04c..182e6583384 100644 --- a/apps/updatenotification/l10n/lt_LT.json +++ b/apps/updatenotification/l10n/lt_LT.json @@ -16,6 +16,7 @@ "Your version is up to date." : "Jūsų versija yra naujausia.", "A non-default update server is in use to be checked for updates:" : "Atnaujinimų aptikimui yra naudojamas ne nenumatytasis serveris: ", "Update channel:" : "Atnaujinimo kanalas:", + "You can always update to a newer version. But you can never downgrade to a more stable version." : "Visada galite atnaujinti į naujesnę versiją. Tačiau niekada negalite sendinti į stabilesnę versiją.", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Turėkite omenyje, kad po naujos versijos išleidimo, gali praeiti šiek tiek laiko, kol ji čia taps matoma. Mes išleidžiame naujas versijas paskirstytas pagal laiką savo naudotojams ir, kartais, pastebėjus klaidas, praleidžiame versiją.", "Notify members of the following groups about available updates:" : "Apie galimus atnaujinimus informuoti narius iš grupių:", "Only notification for app updates are available." : "Yra prieinami tik pranešimai apie programėlių atnaujinimus.", diff --git a/build/package-lock.json b/build/package-lock.json index 71d7e3c3814..d359cccccb5 100644 --- a/build/package-lock.json +++ b/build/package-lock.json @@ -566,6 +566,13 @@ "upath": "^1.0.5" } }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "dev": true, + "optional": true + }, "circular-json": { "version": "0.5.9", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz", @@ -1415,6 +1422,16 @@ } } }, + "fs-minipass": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", + "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1478,9 +1495,7 @@ }, "chownr": { "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "code-point-at": { "version": "1.1.0", @@ -1536,8 +1551,6 @@ "fs-minipass": { "version": "1.2.5", "bundled": true, - "dev": true, - "optional": true, "requires": { "minipass": "^2.2.1" } @@ -1657,7 +1670,6 @@ "minipass": { "version": "2.2.4", "bundled": true, - "dev": true, "optional": true, "requires": { "safe-buffer": "^5.1.1", @@ -1667,8 +1679,6 @@ "minizlib": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true, "requires": { "minipass": "^2.2.1" } @@ -1857,7 +1867,6 @@ "safe-buffer": { "version": "5.1.1", "bundled": true, - "dev": true, "optional": true }, "safer-buffer": { @@ -1925,21 +1934,6 @@ "dev": true, "optional": true }, - "tar": { - "version": "4.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" - } - }, "util-deprecate": { "version": "1.0.2", "bundled": true, @@ -1964,7 +1958,6 @@ "yallist": { "version": "3.0.2", "bundled": true, - "dev": true, "optional": true } } @@ -3121,6 +3114,36 @@ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true }, + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true, + "optional": true + } + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, "mixin-deep": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", @@ -3252,6 +3275,31 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", "dev": true + }, + "tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + }, + "dependencies": { + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + } + } } } }, @@ -4435,14 +4483,28 @@ "dev": true }, "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", "dev": true, + "optional": true, "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + }, + "dependencies": { + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true, + "optional": true + } } }, "text-encoding": { diff --git a/core/l10n/fi.js b/core/l10n/fi.js index 345f03b3a73..94a17b7bff0 100644 --- a/core/l10n/fi.js +++ b/core/l10n/fi.js @@ -14,6 +14,7 @@ OC.L10N.register( "No crop data provided" : "Leikkaustietoa ei annettu", "No valid crop data provided" : "Kelvollisia leikkaustietoja ei määritetty", "Crop is not square" : "Leikkaus ei ole neliö", + "Could not complete login" : "Kirjautumista ei voitu suorittaa loppuun", "Password reset is disabled" : "Salasanan palautus poistettu käytöstä", "Couldn't reset password because the token is invalid" : "Salasanaa ei voitu palauttaa, koska valtuutus on virheellinen", "Couldn't reset password because the token is expired" : "Salasanaa ei voitu palauttaa, koska valtuutus on vanhentunut", @@ -25,8 +26,14 @@ OC.L10N.register( "Reset your password" : "Palauta salasanasi", "Couldn't send reset email. Please contact your administrator." : "Palautussähköpostin lähettäminen ei onnistunut. Ota yhteys ylläpitäjään.", "Couldn't send reset email. Please make sure your username is correct." : "Palautussähköpostin lähettäminen ei onnistunut. Varmista, että käyttäjätunnuksesi on oikein.", + "Some of your link shares have been removed" : "Jotkin linkkijakosi on poistettu", + "Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Tietoturvaongelman vuoksi jouduimme poistaa joitakin linkkijakojasi. Lue lisätietoja linkin kautta.", "Preparing update" : "Valmistellaan päivitystä", "[%d / %d]: %s" : "[%d / %d]: %s", + "Repair step:" : "Korjausvaihe:", + "Repair info:" : "Korjaustiedot:", + "Repair warning:" : "Korjausvaroitus:", + "Repair error:" : "Korjausvirhe:", "Please use the command line updater because automatic updating is disabled in the config.php." : "Käytä komentorivipäivitintä, koska automaattinen päivitys on estetty config.php-asetustiedostossa.", "[%d / %d]: Checking table %s" : "[%d / %d]: Tarkistetaan taulua %s", "Turned on maintenance mode" : "Siirrytty huoltotilaan", @@ -50,6 +57,7 @@ OC.L10N.register( "%s (incompatible)" : "%s (ei yhteensopiva)", "Following apps have been disabled: %s" : "Seuraavat sovellukset on poistettu käytöstä: %s", "Already up to date" : "Kaikki on jo ajan tasalla", + ": " : ": ", "Dismiss" : "Hylkää", "Connection to server lost" : "Yhteys palvelimelle katkesi", "No" : "Ei", @@ -57,6 +65,9 @@ OC.L10N.register( "No files in here" : "Täällä ei ole tiedostoja", "New folder" : "Uusi kansio", "No more subfolders in here" : "Täällä ei ole enempää alikansioita", + "Name" : "Nimi", + "Size" : "Koko", + "Modified" : "Muokattu", "{newName} already exists" : "{newName} on jo olemassa", "Choose" : "Valitse", "Copy" : "Kopioi", @@ -303,8 +314,10 @@ OC.L10N.register( "Two-factor authentication" : "Kaksivaiheinen tunnistautuminen", "Enhanced security is enabled for your account. Choose a second factor for authentication:" : "Tilisi tietoturvatasoa on korotettu. Käytä kaksivaiheista tunnistautumista:", "Two-factor authentication is enforced but has not been configured on your account. Contact your admin for assistance." : "Kaksivaiheinen tunnistautuminen on pakotettu, mutta sitä ei ole määritelty tilillesi. Ole yhteydessä ylläpitoon saadaksesi apua.", + "Set up two-factor authentication" : "Määritä kaksivaiheinen tunnistautuminen", "Use backup code" : "Käytä varakoodia", "Cancel log in" : "Peru kirjautuminen", + "Setup two-factor authentication" : "Määritä kaksivaiheinen tunnistautuminen", "Error while validating your second factor" : "Tunnistuksen toisen vaiheen tarkistus epäonnistui", "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Ota yhteys ylläpitoon, tai jos olet tämän palvelun ylläpitäjä, määritä \"trusted_domains\"-asetus config/config.php-tiedostossa. Esimerkkimääritys on tiedostossa config/config.sample.php.", "App update required" : "Sovelluksen päivittäminen vaaditaan", diff --git a/core/l10n/fi.json b/core/l10n/fi.json index f726dcd54a6..bdb374a84f0 100644 --- a/core/l10n/fi.json +++ b/core/l10n/fi.json @@ -12,6 +12,7 @@ "No crop data provided" : "Leikkaustietoa ei annettu", "No valid crop data provided" : "Kelvollisia leikkaustietoja ei määritetty", "Crop is not square" : "Leikkaus ei ole neliö", + "Could not complete login" : "Kirjautumista ei voitu suorittaa loppuun", "Password reset is disabled" : "Salasanan palautus poistettu käytöstä", "Couldn't reset password because the token is invalid" : "Salasanaa ei voitu palauttaa, koska valtuutus on virheellinen", "Couldn't reset password because the token is expired" : "Salasanaa ei voitu palauttaa, koska valtuutus on vanhentunut", @@ -23,8 +24,14 @@ "Reset your password" : "Palauta salasanasi", "Couldn't send reset email. Please contact your administrator." : "Palautussähköpostin lähettäminen ei onnistunut. Ota yhteys ylläpitäjään.", "Couldn't send reset email. Please make sure your username is correct." : "Palautussähköpostin lähettäminen ei onnistunut. Varmista, että käyttäjätunnuksesi on oikein.", + "Some of your link shares have been removed" : "Jotkin linkkijakosi on poistettu", + "Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Tietoturvaongelman vuoksi jouduimme poistaa joitakin linkkijakojasi. Lue lisätietoja linkin kautta.", "Preparing update" : "Valmistellaan päivitystä", "[%d / %d]: %s" : "[%d / %d]: %s", + "Repair step:" : "Korjausvaihe:", + "Repair info:" : "Korjaustiedot:", + "Repair warning:" : "Korjausvaroitus:", + "Repair error:" : "Korjausvirhe:", "Please use the command line updater because automatic updating is disabled in the config.php." : "Käytä komentorivipäivitintä, koska automaattinen päivitys on estetty config.php-asetustiedostossa.", "[%d / %d]: Checking table %s" : "[%d / %d]: Tarkistetaan taulua %s", "Turned on maintenance mode" : "Siirrytty huoltotilaan", @@ -48,6 +55,7 @@ "%s (incompatible)" : "%s (ei yhteensopiva)", "Following apps have been disabled: %s" : "Seuraavat sovellukset on poistettu käytöstä: %s", "Already up to date" : "Kaikki on jo ajan tasalla", + ": " : ": ", "Dismiss" : "Hylkää", "Connection to server lost" : "Yhteys palvelimelle katkesi", "No" : "Ei", @@ -55,6 +63,9 @@ "No files in here" : "Täällä ei ole tiedostoja", "New folder" : "Uusi kansio", "No more subfolders in here" : "Täällä ei ole enempää alikansioita", + "Name" : "Nimi", + "Size" : "Koko", + "Modified" : "Muokattu", "{newName} already exists" : "{newName} on jo olemassa", "Choose" : "Valitse", "Copy" : "Kopioi", @@ -301,8 +312,10 @@ "Two-factor authentication" : "Kaksivaiheinen tunnistautuminen", "Enhanced security is enabled for your account. Choose a second factor for authentication:" : "Tilisi tietoturvatasoa on korotettu. Käytä kaksivaiheista tunnistautumista:", "Two-factor authentication is enforced but has not been configured on your account. Contact your admin for assistance." : "Kaksivaiheinen tunnistautuminen on pakotettu, mutta sitä ei ole määritelty tilillesi. Ole yhteydessä ylläpitoon saadaksesi apua.", + "Set up two-factor authentication" : "Määritä kaksivaiheinen tunnistautuminen", "Use backup code" : "Käytä varakoodia", "Cancel log in" : "Peru kirjautuminen", + "Setup two-factor authentication" : "Määritä kaksivaiheinen tunnistautuminen", "Error while validating your second factor" : "Tunnistuksen toisen vaiheen tarkistus epäonnistui", "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Ota yhteys ylläpitoon, tai jos olet tämän palvelun ylläpitäjä, määritä \"trusted_domains\"-asetus config/config.php-tiedostossa. Esimerkkimääritys on tiedostossa config/config.sample.php.", "App update required" : "Sovelluksen päivittäminen vaaditaan", diff --git a/core/l10n/fr.js b/core/l10n/fr.js index 67e5d191d3c..e18f1df7426 100644 --- a/core/l10n/fr.js +++ b/core/l10n/fr.js @@ -364,11 +364,13 @@ OC.L10N.register( "Enhanced security is enabled for your account. Choose a second factor for authentication:" : "La sécurité renforcée est activée pour votre compte. Choisissez un second facteur pour l'authentification :", "Could not load at least one of your enabled two-factor auth methods. Please contact your admin." : "Impossible de charger au moins l'une de vos méthodes activées d'authentification à deux facteurs . Veuillez contacter votre administrateur.", "Two-factor authentication is enforced but has not been configured on your account. Contact your admin for assistance." : "L'authentification en deux étapes a été imposée mais n'est pas configurée sur votre compte. Contactez votre administrateur pour avoir de l'aide.", + "Two-factor authentication is enforced but has not been configured on your account. Please continue to setup two-factor authentication." : "L'authentification à deux facteurs est appliquée mais n'a pas été configurée sur votre compte. Veuillez continuer à configurer l'authentification à deux facteurs.", "Set up two-factor authentication" : "Paramétrer l'authentification à double facteur", "Two-factor authentication is enforced but has not been configured on your account. Use one of your backup codes to log in or contact your admin for assistance." : "L'authentification en deux étapes a été imposée mais n'est pas configurée sur votre compte. Utilisez un de vos codes de secours pour vous connecter ou contactez votre administrateur pour avoir de l'aide.", "Use backup code" : "Utiliser un code de récupération", "Cancel log in" : "Annuler l'authentification", "Setup two-factor authentication" : "Paramétrer l'authentification à double facteur", + "Enhanced security is enforced for your account. Choose wich provider to set up:" : "Une sécurité renforcée est appliquée à votre compte. Choisissez le fournisseur à configurer :", "Error while validating your second factor" : "Erreur lors de la validation de votre second facteur", "Access through untrusted domain" : "Accès à partir d'un domaine non approuvé", "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Veuillez contacter votre administrateur. Si vous êtes un administrateur, éditez la variable \"trusted_domains\" dans le fichier config/config.php comme l'exemple dans le fichier config/config.sample.php.", diff --git a/core/l10n/fr.json b/core/l10n/fr.json index 195fc11500d..94afcdeba3b 100644 --- a/core/l10n/fr.json +++ b/core/l10n/fr.json @@ -362,11 +362,13 @@ "Enhanced security is enabled for your account. Choose a second factor for authentication:" : "La sécurité renforcée est activée pour votre compte. Choisissez un second facteur pour l'authentification :", "Could not load at least one of your enabled two-factor auth methods. Please contact your admin." : "Impossible de charger au moins l'une de vos méthodes activées d'authentification à deux facteurs . Veuillez contacter votre administrateur.", "Two-factor authentication is enforced but has not been configured on your account. Contact your admin for assistance." : "L'authentification en deux étapes a été imposée mais n'est pas configurée sur votre compte. Contactez votre administrateur pour avoir de l'aide.", + "Two-factor authentication is enforced but has not been configured on your account. Please continue to setup two-factor authentication." : "L'authentification à deux facteurs est appliquée mais n'a pas été configurée sur votre compte. Veuillez continuer à configurer l'authentification à deux facteurs.", "Set up two-factor authentication" : "Paramétrer l'authentification à double facteur", "Two-factor authentication is enforced but has not been configured on your account. Use one of your backup codes to log in or contact your admin for assistance." : "L'authentification en deux étapes a été imposée mais n'est pas configurée sur votre compte. Utilisez un de vos codes de secours pour vous connecter ou contactez votre administrateur pour avoir de l'aide.", "Use backup code" : "Utiliser un code de récupération", "Cancel log in" : "Annuler l'authentification", "Setup two-factor authentication" : "Paramétrer l'authentification à double facteur", + "Enhanced security is enforced for your account. Choose wich provider to set up:" : "Une sécurité renforcée est appliquée à votre compte. Choisissez le fournisseur à configurer :", "Error while validating your second factor" : "Erreur lors de la validation de votre second facteur", "Access through untrusted domain" : "Accès à partir d'un domaine non approuvé", "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Veuillez contacter votre administrateur. Si vous êtes un administrateur, éditez la variable \"trusted_domains\" dans le fichier config/config.php comme l'exemple dans le fichier config/config.sample.php.", diff --git a/core/l10n/is.js b/core/l10n/is.js index c94be376075..76a2871130b 100644 --- a/core/l10n/is.js +++ b/core/l10n/is.js @@ -28,6 +28,7 @@ OC.L10N.register( "Reset your password" : "Endurstilltu lykilorðið þitt", "Couldn't send reset email. Please contact your administrator." : "Gat ekki sent endurstillingu í tölvupósti. Hafðu samband við kerfisstjóra.", "Couldn't send reset email. Please make sure your username is correct." : "Gat ekki sent endurstillingu í tölvupósti. Gakktu úr skugga um að notandanafn þitt sé rétt.", + "Some of your link shares have been removed" : "Sumir tenglar þnir sameignir hafa verið fjarlægðir", "Preparing update" : "Undirbý uppfærslu", "[%d / %d]: %s" : "[%d / %d]: %s", "Repair step:" : "Þrep viðgerðar:", @@ -57,6 +58,7 @@ OC.L10N.register( "%s (incompatible)" : "%s (ósamhæft)", "Following apps have been disabled: %s" : "Eftirfarandi forrit hafa verið gerð óvirk: %s", "Already up to date" : "Allt uppfært nú þegar", + ": " : ": ", "Dismiss" : "Hafna", "Connection to server lost" : "Tenging við miðlara rofnaði", "No" : "Nei", @@ -354,9 +356,13 @@ OC.L10N.register( "Enhanced security is enabled for your account. Choose a second factor for authentication:" : "Aukið öryggi var virkjað fyrir aðganginn þinn. Veldu aukaþrep til auðkenningar:", "Could not load at least one of your enabled two-factor auth methods. Please contact your admin." : "Gat ekki hlaðið inn a.m.k. einni af virkum tveggja-þrepa auðkenningaraðferðunum þínum. Hafðu samband við kerfisstjóra.", "Two-factor authentication is enforced but has not been configured on your account. Contact your admin for assistance." : "Tveggja-þátta auðkenningar er krafist, en er ekki búið að setja upp á aðgangnu þínum. Hafðu samband við kerfisstjóra til að fá aðstoð varðandi þetta.", + "Two-factor authentication is enforced but has not been configured on your account. Please continue to setup two-factor authentication." : "Tveggja-þátta auðkenningar er krafist, en er ekki búið að setja upp á aðgangnum þínum. Hafðu samband við kerfisstjóra til að fá aðstoð varðandi þetta.", + "Set up two-factor authentication" : "Setja upp tveggja-þátta auðkenningu", "Two-factor authentication is enforced but has not been configured on your account. Use one of your backup codes to log in or contact your admin for assistance." : "Tveggja-þátta auðkenningar er krafist, en er ekki búið að setja upp á aðgangnu þínum. Notaðu einn af öryggisafritunarkóðunum þínum til að skrá þig inn, eða hafðu samband við kerfisstjóra til að fá aðstoð varðandi þetta.", "Use backup code" : "Nota öryggisafritskóða", "Cancel log in" : "Hætta við innskráningu", + "Setup two-factor authentication" : "Setja upp tveggja-þátta auðkenningu", + "Enhanced security is enforced for your account. Choose wich provider to set up:" : "Aukið öryggi var virkjað fyrir aðganginn þinn. Veldu hvaða auðkenningarveitu eigi að nota til auðkenningar:", "Error while validating your second factor" : "Villa við að sannreyna seinna þrepið", "Access through untrusted domain" : "Tenging frá ótreystu léni", "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Hafðu samband við kerfisstjóra. Ef þú ert stjórnandi, stilltu \"trusted_domains\" setninguna í config/config.php. Dæmi um stillingar má sjá í config/config.sample.php.", diff --git a/core/l10n/is.json b/core/l10n/is.json index fab0853e0b6..d8f1b39cdc3 100644 --- a/core/l10n/is.json +++ b/core/l10n/is.json @@ -26,6 +26,7 @@ "Reset your password" : "Endurstilltu lykilorðið þitt", "Couldn't send reset email. Please contact your administrator." : "Gat ekki sent endurstillingu í tölvupósti. Hafðu samband við kerfisstjóra.", "Couldn't send reset email. Please make sure your username is correct." : "Gat ekki sent endurstillingu í tölvupósti. Gakktu úr skugga um að notandanafn þitt sé rétt.", + "Some of your link shares have been removed" : "Sumir tenglar þnir sameignir hafa verið fjarlægðir", "Preparing update" : "Undirbý uppfærslu", "[%d / %d]: %s" : "[%d / %d]: %s", "Repair step:" : "Þrep viðgerðar:", @@ -55,6 +56,7 @@ "%s (incompatible)" : "%s (ósamhæft)", "Following apps have been disabled: %s" : "Eftirfarandi forrit hafa verið gerð óvirk: %s", "Already up to date" : "Allt uppfært nú þegar", + ": " : ": ", "Dismiss" : "Hafna", "Connection to server lost" : "Tenging við miðlara rofnaði", "No" : "Nei", @@ -352,9 +354,13 @@ "Enhanced security is enabled for your account. Choose a second factor for authentication:" : "Aukið öryggi var virkjað fyrir aðganginn þinn. Veldu aukaþrep til auðkenningar:", "Could not load at least one of your enabled two-factor auth methods. Please contact your admin." : "Gat ekki hlaðið inn a.m.k. einni af virkum tveggja-þrepa auðkenningaraðferðunum þínum. Hafðu samband við kerfisstjóra.", "Two-factor authentication is enforced but has not been configured on your account. Contact your admin for assistance." : "Tveggja-þátta auðkenningar er krafist, en er ekki búið að setja upp á aðgangnu þínum. Hafðu samband við kerfisstjóra til að fá aðstoð varðandi þetta.", + "Two-factor authentication is enforced but has not been configured on your account. Please continue to setup two-factor authentication." : "Tveggja-þátta auðkenningar er krafist, en er ekki búið að setja upp á aðgangnum þínum. Hafðu samband við kerfisstjóra til að fá aðstoð varðandi þetta.", + "Set up two-factor authentication" : "Setja upp tveggja-þátta auðkenningu", "Two-factor authentication is enforced but has not been configured on your account. Use one of your backup codes to log in or contact your admin for assistance." : "Tveggja-þátta auðkenningar er krafist, en er ekki búið að setja upp á aðgangnu þínum. Notaðu einn af öryggisafritunarkóðunum þínum til að skrá þig inn, eða hafðu samband við kerfisstjóra til að fá aðstoð varðandi þetta.", "Use backup code" : "Nota öryggisafritskóða", "Cancel log in" : "Hætta við innskráningu", + "Setup two-factor authentication" : "Setja upp tveggja-þátta auðkenningu", + "Enhanced security is enforced for your account. Choose wich provider to set up:" : "Aukið öryggi var virkjað fyrir aðganginn þinn. Veldu hvaða auðkenningarveitu eigi að nota til auðkenningar:", "Error while validating your second factor" : "Villa við að sannreyna seinna þrepið", "Access through untrusted domain" : "Tenging frá ótreystu léni", "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Hafðu samband við kerfisstjóra. Ef þú ert stjórnandi, stilltu \"trusted_domains\" setninguna í config/config.php. Dæmi um stillingar má sjá í config/config.sample.php.", diff --git a/core/l10n/sl.js b/core/l10n/sl.js index 65940fe8077..1c55c458927 100644 --- a/core/l10n/sl.js +++ b/core/l10n/sl.js @@ -12,10 +12,10 @@ OC.L10N.register( "An error occurred. Please contact your admin." : "Prišlo je do napake. Stopite v stik s skrbnikom sistema.", "No temporary profile picture available, try again" : "Na voljo ni nobene začasne slike za profil. Poskusite znova.", "No crop data provided" : "Ni podanih podatkov obreza", - "No valid crop data provided" : "Navedeni so neveljavni podatki obrez slike", + "No valid crop data provided" : "Podani so neveljavni podatki za obrez slike ", "Crop is not square" : "Obrez ni pravokoten", "Could not complete login" : "Prijave ni mogoče dokončati", - "Password reset is disabled" : "Ponastavitev gesla je izključena", + "Password reset is disabled" : "Ponastavitev gesla je onemogočena", "Couldn't reset password because the token is invalid" : "Zaradi neustreznega žetona ni mogoče ponastaviti gesla.", "Couldn't reset password because the token is expired" : "Ni mogoče ponastaviti gesla, ker je žeton potekel.", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Ni mogoče poslati elektronskega sporočila za ponastavitev gesla, ker ni navedenega elektronskega naslova. Stopite v stik s skrbnikom sistema.", @@ -71,7 +71,7 @@ OC.L10N.register( "One file conflict" : "En spor datotek", "New Files" : "Nove datoteke", "Already existing files" : "Obstoječe datoteke", - "Which files do you want to keep?" : "Katare datoteke želite ohraniti?", + "Which files do you want to keep?" : "Katere datoteke želite ohraniti?", "If you select both versions, the copied file will have a number added to its name." : "Če izberete obe različici, bo k imenu kopirane datoteke dodana številka.", "Cancel" : "Prekliči", "Continue" : "Nadaljuj", @@ -98,7 +98,7 @@ OC.L10N.register( "I know what I'm doing" : "Vem, kaj delam!", "Password can not be changed. Please contact your administrator." : "Gesla ni mogoče spremeniti. Stopite v stik s skrbnikom.", "Reset password" : "Ponastavi geslo", - "Sending email …" : "Pošiljanje e-pošte ...", + "Sending email …" : "Poteka pošiljanje elektronske pošte ...", "Logging in …" : "Prijava...", "View changelog" : "Ogled dnevnika sprememb", "No action available" : "Ni razpoložljivih dejanj", @@ -182,7 +182,7 @@ OC.L10N.register( "The update is in progress, leaving this page might interrupt the process in some environments." : "Posodobitev je v teku. Če zapustiš to stran, lahko, v določenih okoljih, prekineš proces", "Update to {version}" : "Posodobi na {version}", "An error occurred." : "Prišlo je do napake.", - "Please reload the page." : "Stran je treba ponovno naložiti", + "Please reload the page." : "Stran je treba osvežiti.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Posodobitev je spodletela. Več podrobnosti o napaki je <a href=\"{url}\">objavljenih na forumu</a>.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Posodobitev je spodletela. Pošljite poročilo o napaki <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">skupnosti Nextcloud</a>.", "Continue to Nextcloud" : "Nadaljuj na Nextcloud", @@ -262,13 +262,13 @@ OC.L10N.register( "Contact your system administrator if this message persists or appeared unexpectedly." : "Stopite v stik s skrbnikom sistema, če se bo sporočilo še naprej nepričakovano prikazovalo.", "Updated \"%s\" to %s" : "Datoteka \"%s\" je posodobljena na %s", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Med preverjanjem celovitosti kode je prišlo do napak. Več podrobnosti …</a>", - "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Povezava za ponastavitev gesla je bila poslana na naveden elektronski naslov. V kolikor sporočila ne dobite v kratkem, preverite tudi mapo neželene pošte.<br> Če sporočila ni niti v tej mapi, stopite v stik s skrbnikom.", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Povezava za ponastavitev gesla je bila poslana na naveden elektronski naslov. V kolikor sporočila ne prejmete v kratkem, preverite tudi mapo neželene pošte.<br> Če sporočila ni niti v tej mapi, stopite v stik s skrbnikom.", "Copy URL" : "Kopiraj naslov URL", "Enable" : "Omogoči", "{sharee} (group)" : "{sharee} (skupina)", "{sharee} (remote)" : "{sharee} (oddaljeno)", "{sharee} (email)" : "{sharee} (email)", - "The specified document has not been found on the server." : "Določenega dokumenta na strežniku ni mogoče najti.", + "The specified document has not been found on the server." : "Navedenega dokumenta na strežniku ni mogoče najti.", "You can click here to return to %s." : "S klikom na povezavo boste vrnjeni na %s.", "SQLite will be used as database." : "Kot podatkovna zbirka bo uporabljena zbirka SQLite", "For larger installations we recommend to choose a different database backend." : "Za večje namestitve je priporočljivo uporabiti drug ozadnji program zbirke podatkov.", diff --git a/core/l10n/sl.json b/core/l10n/sl.json index 256d72eb626..7a4bb8d06cd 100644 --- a/core/l10n/sl.json +++ b/core/l10n/sl.json @@ -10,10 +10,10 @@ "An error occurred. Please contact your admin." : "Prišlo je do napake. Stopite v stik s skrbnikom sistema.", "No temporary profile picture available, try again" : "Na voljo ni nobene začasne slike za profil. Poskusite znova.", "No crop data provided" : "Ni podanih podatkov obreza", - "No valid crop data provided" : "Navedeni so neveljavni podatki obrez slike", + "No valid crop data provided" : "Podani so neveljavni podatki za obrez slike ", "Crop is not square" : "Obrez ni pravokoten", "Could not complete login" : "Prijave ni mogoče dokončati", - "Password reset is disabled" : "Ponastavitev gesla je izključena", + "Password reset is disabled" : "Ponastavitev gesla je onemogočena", "Couldn't reset password because the token is invalid" : "Zaradi neustreznega žetona ni mogoče ponastaviti gesla.", "Couldn't reset password because the token is expired" : "Ni mogoče ponastaviti gesla, ker je žeton potekel.", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Ni mogoče poslati elektronskega sporočila za ponastavitev gesla, ker ni navedenega elektronskega naslova. Stopite v stik s skrbnikom sistema.", @@ -69,7 +69,7 @@ "One file conflict" : "En spor datotek", "New Files" : "Nove datoteke", "Already existing files" : "Obstoječe datoteke", - "Which files do you want to keep?" : "Katare datoteke želite ohraniti?", + "Which files do you want to keep?" : "Katere datoteke želite ohraniti?", "If you select both versions, the copied file will have a number added to its name." : "Če izberete obe različici, bo k imenu kopirane datoteke dodana številka.", "Cancel" : "Prekliči", "Continue" : "Nadaljuj", @@ -96,7 +96,7 @@ "I know what I'm doing" : "Vem, kaj delam!", "Password can not be changed. Please contact your administrator." : "Gesla ni mogoče spremeniti. Stopite v stik s skrbnikom.", "Reset password" : "Ponastavi geslo", - "Sending email …" : "Pošiljanje e-pošte ...", + "Sending email …" : "Poteka pošiljanje elektronske pošte ...", "Logging in …" : "Prijava...", "View changelog" : "Ogled dnevnika sprememb", "No action available" : "Ni razpoložljivih dejanj", @@ -180,7 +180,7 @@ "The update is in progress, leaving this page might interrupt the process in some environments." : "Posodobitev je v teku. Če zapustiš to stran, lahko, v določenih okoljih, prekineš proces", "Update to {version}" : "Posodobi na {version}", "An error occurred." : "Prišlo je do napake.", - "Please reload the page." : "Stran je treba ponovno naložiti", + "Please reload the page." : "Stran je treba osvežiti.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Posodobitev je spodletela. Več podrobnosti o napaki je <a href=\"{url}\">objavljenih na forumu</a>.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Posodobitev je spodletela. Pošljite poročilo o napaki <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">skupnosti Nextcloud</a>.", "Continue to Nextcloud" : "Nadaljuj na Nextcloud", @@ -260,13 +260,13 @@ "Contact your system administrator if this message persists or appeared unexpectedly." : "Stopite v stik s skrbnikom sistema, če se bo sporočilo še naprej nepričakovano prikazovalo.", "Updated \"%s\" to %s" : "Datoteka \"%s\" je posodobljena na %s", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Med preverjanjem celovitosti kode je prišlo do napak. Več podrobnosti …</a>", - "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Povezava za ponastavitev gesla je bila poslana na naveden elektronski naslov. V kolikor sporočila ne dobite v kratkem, preverite tudi mapo neželene pošte.<br> Če sporočila ni niti v tej mapi, stopite v stik s skrbnikom.", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Povezava za ponastavitev gesla je bila poslana na naveden elektronski naslov. V kolikor sporočila ne prejmete v kratkem, preverite tudi mapo neželene pošte.<br> Če sporočila ni niti v tej mapi, stopite v stik s skrbnikom.", "Copy URL" : "Kopiraj naslov URL", "Enable" : "Omogoči", "{sharee} (group)" : "{sharee} (skupina)", "{sharee} (remote)" : "{sharee} (oddaljeno)", "{sharee} (email)" : "{sharee} (email)", - "The specified document has not been found on the server." : "Določenega dokumenta na strežniku ni mogoče najti.", + "The specified document has not been found on the server." : "Navedenega dokumenta na strežniku ni mogoče najti.", "You can click here to return to %s." : "S klikom na povezavo boste vrnjeni na %s.", "SQLite will be used as database." : "Kot podatkovna zbirka bo uporabljena zbirka SQLite", "For larger installations we recommend to choose a different database backend." : "Za večje namestitve je priporočljivo uporabiti drug ozadnji program zbirke podatkov.", diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index d9dd418ce08..2bbce469fc0 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -379,6 +379,7 @@ return array( 'OCP\\Settings\\IManager' => $baseDir . '/lib/public/Settings/IManager.php', 'OCP\\Settings\\ISection' => $baseDir . '/lib/public/Settings/ISection.php', 'OCP\\Settings\\ISettings' => $baseDir . '/lib/public/Settings/ISettings.php', + 'OCP\\Settings\\ISubAdminSettings' => $baseDir . '/lib/public/Settings/ISubAdminSettings.php', 'OCP\\Share' => $baseDir . '/lib/public/Share.php', 'OCP\\Share\\Exceptions\\GenericShareException' => $baseDir . '/lib/public/Share/Exceptions/GenericShareException.php', 'OCP\\Share\\Exceptions\\IllegalIDChangeException' => $baseDir . '/lib/public/Share/Exceptions/IllegalIDChangeException.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index d9693ab0320..383af9f3a77 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -409,6 +409,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OCP\\Settings\\IManager' => __DIR__ . '/../../..' . '/lib/public/Settings/IManager.php', 'OCP\\Settings\\ISection' => __DIR__ . '/../../..' . '/lib/public/Settings/ISection.php', 'OCP\\Settings\\ISettings' => __DIR__ . '/../../..' . '/lib/public/Settings/ISettings.php', + 'OCP\\Settings\\ISubAdminSettings' => __DIR__ . '/../../..' . '/lib/public/Settings/ISubAdminSettings.php', 'OCP\\Share' => __DIR__ . '/../../..' . '/lib/public/Share.php', 'OCP\\Share\\Exceptions\\GenericShareException' => __DIR__ . '/../../..' . '/lib/public/Share/Exceptions/GenericShareException.php', 'OCP\\Share\\Exceptions\\IllegalIDChangeException' => __DIR__ . '/../../..' . '/lib/public/Share/Exceptions/IllegalIDChangeException.php', diff --git a/lib/l10n/ca.js b/lib/l10n/ca.js index 05a823baad8..362b1c97f79 100644 --- a/lib/l10n/ca.js +++ b/lib/l10n/ca.js @@ -29,7 +29,12 @@ OC.L10N.register( "Following platforms are supported: %s" : "S'admeten les següents plataformes: %s", "Server version %s or higher is required." : "Es requereix una versió de servidor %s o superior.", "Server version %s or lower is required." : "Es requereix una versió de servidor %s o inferior.", - "Logged in user must be an admin" : "L'usuari registrat ha de ser un administrador", + "Logged in user must be an admin or sub admin" : "L'usuari que ha iniciat la sessió ha de ser un administrador o un subadministrador", + "Logged in user must be an admin" : "L'usuari que ha iniciat la sessió ha de ser un administrador", + "Remote wipe started" : "S'ha iniciat la neteja remota", + "A remote wipe was started on device %s" : "S'ha engegat una neteja remota en el dispositiu %s", + "Remote wipe finished" : "Ha finalitzat la neteja remota", + "The remote wipe on %s has finished" : "Ha finalitzat la neteja remota a %s", "Unknown filetype" : "Tipus de fitxer desconegut", "Invalid image" : "Imatge no vàlida", "Avatar image is not square" : "La imatge de perfil no és quadrada", diff --git a/lib/l10n/ca.json b/lib/l10n/ca.json index b797eac99aa..07b4424f912 100644 --- a/lib/l10n/ca.json +++ b/lib/l10n/ca.json @@ -27,7 +27,12 @@ "Following platforms are supported: %s" : "S'admeten les següents plataformes: %s", "Server version %s or higher is required." : "Es requereix una versió de servidor %s o superior.", "Server version %s or lower is required." : "Es requereix una versió de servidor %s o inferior.", - "Logged in user must be an admin" : "L'usuari registrat ha de ser un administrador", + "Logged in user must be an admin or sub admin" : "L'usuari que ha iniciat la sessió ha de ser un administrador o un subadministrador", + "Logged in user must be an admin" : "L'usuari que ha iniciat la sessió ha de ser un administrador", + "Remote wipe started" : "S'ha iniciat la neteja remota", + "A remote wipe was started on device %s" : "S'ha engegat una neteja remota en el dispositiu %s", + "Remote wipe finished" : "Ha finalitzat la neteja remota", + "The remote wipe on %s has finished" : "Ha finalitzat la neteja remota a %s", "Unknown filetype" : "Tipus de fitxer desconegut", "Invalid image" : "Imatge no vàlida", "Avatar image is not square" : "La imatge de perfil no és quadrada", diff --git a/lib/l10n/de.js b/lib/l10n/de.js index 63c389e33bd..115d5ff660a 100644 --- a/lib/l10n/de.js +++ b/lib/l10n/de.js @@ -29,6 +29,7 @@ OC.L10N.register( "Following platforms are supported: %s" : "Die folgenden Plattformen werden unterstützt: %s", "Server version %s or higher is required." : "Server Version %s oder höher wird benötigt.", "Server version %s or lower is required." : "Server Version %s oder niedriger wird benötigt.", + "Logged in user must be an admin or sub admin" : "Der angemeldete Benutzer muss ein (Sub-)Administrator sein", "Logged in user must be an admin" : "Der angemeldete Benutzer muss ein Administrator sein", "Remote wipe started" : "Fernlöschung gestartet", "A remote wipe was started on device %s" : "Eine Fernlöschung wurde am Gerät %s gestartet", diff --git a/lib/l10n/de.json b/lib/l10n/de.json index 9e3a3e090ae..894bef301cf 100644 --- a/lib/l10n/de.json +++ b/lib/l10n/de.json @@ -27,6 +27,7 @@ "Following platforms are supported: %s" : "Die folgenden Plattformen werden unterstützt: %s", "Server version %s or higher is required." : "Server Version %s oder höher wird benötigt.", "Server version %s or lower is required." : "Server Version %s oder niedriger wird benötigt.", + "Logged in user must be an admin or sub admin" : "Der angemeldete Benutzer muss ein (Sub-)Administrator sein", "Logged in user must be an admin" : "Der angemeldete Benutzer muss ein Administrator sein", "Remote wipe started" : "Fernlöschung gestartet", "A remote wipe was started on device %s" : "Eine Fernlöschung wurde am Gerät %s gestartet", diff --git a/lib/l10n/de_DE.js b/lib/l10n/de_DE.js index febcddcab32..7344329eab4 100644 --- a/lib/l10n/de_DE.js +++ b/lib/l10n/de_DE.js @@ -29,6 +29,7 @@ OC.L10N.register( "Following platforms are supported: %s" : "Die folgenden Plattformen werden unterstützt: %s", "Server version %s or higher is required." : "Server Version %s oder höher wird benötigt.", "Server version %s or lower is required." : "Server Version %s oder niedriger wird benötigt.", + "Logged in user must be an admin or sub admin" : "Der angemeldete Benutzer muss ein (Sub-)Administrator sein", "Logged in user must be an admin" : "Der angemeldete Benutzer muss ein Administrator sein", "Remote wipe started" : "Fernlöschung gestartet", "A remote wipe was started on device %s" : "Eine Fernlöschung wurde am Gerät %s gestartet", diff --git a/lib/l10n/de_DE.json b/lib/l10n/de_DE.json index 0443b8cf313..a32ce48c663 100644 --- a/lib/l10n/de_DE.json +++ b/lib/l10n/de_DE.json @@ -27,6 +27,7 @@ "Following platforms are supported: %s" : "Die folgenden Plattformen werden unterstützt: %s", "Server version %s or higher is required." : "Server Version %s oder höher wird benötigt.", "Server version %s or lower is required." : "Server Version %s oder niedriger wird benötigt.", + "Logged in user must be an admin or sub admin" : "Der angemeldete Benutzer muss ein (Sub-)Administrator sein", "Logged in user must be an admin" : "Der angemeldete Benutzer muss ein Administrator sein", "Remote wipe started" : "Fernlöschung gestartet", "A remote wipe was started on device %s" : "Eine Fernlöschung wurde am Gerät %s gestartet", diff --git a/lib/l10n/es.js b/lib/l10n/es.js index 82d5d6081c2..80b64b79a3c 100644 --- a/lib/l10n/es.js +++ b/lib/l10n/es.js @@ -30,6 +30,10 @@ OC.L10N.register( "Server version %s or higher is required." : "Se necesita la versión %s o superior del servidor.", "Server version %s or lower is required." : "Se necesita la versión %s o inferior del servidor. ", "Logged in user must be an admin" : "El usuario registrado debe ser un administrador", + "Remote wipe started" : "Barrido remoto comenzado.", + "A remote wipe was started on device %s" : "Se ha iniciado un barrido remoto en el dispositivo %s.", + "Remote wipe finished" : "Barrido remoto finalizado", + "The remote wipe on %s has finished" : "El barrido remoto en %s ha finalizado", "Unknown filetype" : "Tipo de archivo desconocido", "Invalid image" : "Imagen inválida", "Avatar image is not square" : "La imagen de avatar no es cuadrada", diff --git a/lib/l10n/es.json b/lib/l10n/es.json index 226bc8f9792..f6d3a078732 100644 --- a/lib/l10n/es.json +++ b/lib/l10n/es.json @@ -28,6 +28,10 @@ "Server version %s or higher is required." : "Se necesita la versión %s o superior del servidor.", "Server version %s or lower is required." : "Se necesita la versión %s o inferior del servidor. ", "Logged in user must be an admin" : "El usuario registrado debe ser un administrador", + "Remote wipe started" : "Barrido remoto comenzado.", + "A remote wipe was started on device %s" : "Se ha iniciado un barrido remoto en el dispositivo %s.", + "Remote wipe finished" : "Barrido remoto finalizado", + "The remote wipe on %s has finished" : "El barrido remoto en %s ha finalizado", "Unknown filetype" : "Tipo de archivo desconocido", "Invalid image" : "Imagen inválida", "Avatar image is not square" : "La imagen de avatar no es cuadrada", diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js index 769bd0d9879..a8e2a8a42b5 100644 --- a/lib/l10n/fr.js +++ b/lib/l10n/fr.js @@ -29,7 +29,12 @@ OC.L10N.register( "Following platforms are supported: %s" : "Les plateformes suivantes sont prises en charge : %s", "Server version %s or higher is required." : "Un serveur de version %s ou supérieure est requis.", "Server version %s or lower is required." : "Un serveur de version %s ou inférieure est requis.", + "Logged in user must be an admin or sub admin" : "L'utilisateur connecté doit être administrateur ou sous-administrateur", "Logged in user must be an admin" : "L'utilisateur connecté doit être un administrateur", + "Remote wipe started" : "Nettoyage à distance lancé", + "A remote wipe was started on device %s" : "Un nettoyage à distance à été lancé sur l'appareil %s", + "Remote wipe finished" : "Nettoyage à distance terminé", + "The remote wipe on %s has finished" : "Le nettoyage à distance de %s est terminé", "Unknown filetype" : "Type de fichier inconnu", "Invalid image" : "Image non valable", "Avatar image is not square" : "L'image d'avatar n'est pas carré", diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json index c3c6a7bd627..02e1c00f8a0 100644 --- a/lib/l10n/fr.json +++ b/lib/l10n/fr.json @@ -27,7 +27,12 @@ "Following platforms are supported: %s" : "Les plateformes suivantes sont prises en charge : %s", "Server version %s or higher is required." : "Un serveur de version %s ou supérieure est requis.", "Server version %s or lower is required." : "Un serveur de version %s ou inférieure est requis.", + "Logged in user must be an admin or sub admin" : "L'utilisateur connecté doit être administrateur ou sous-administrateur", "Logged in user must be an admin" : "L'utilisateur connecté doit être un administrateur", + "Remote wipe started" : "Nettoyage à distance lancé", + "A remote wipe was started on device %s" : "Un nettoyage à distance à été lancé sur l'appareil %s", + "Remote wipe finished" : "Nettoyage à distance terminé", + "The remote wipe on %s has finished" : "Le nettoyage à distance de %s est terminé", "Unknown filetype" : "Type de fichier inconnu", "Invalid image" : "Image non valable", "Avatar image is not square" : "L'image d'avatar n'est pas carré", diff --git a/lib/l10n/gl.js b/lib/l10n/gl.js index 1c38703cfa1..a5daea47dbd 100644 --- a/lib/l10n/gl.js +++ b/lib/l10n/gl.js @@ -29,7 +29,12 @@ OC.L10N.register( "Following platforms are supported: %s" : "Admítense as seguintes plataformas: %s", "Server version %s or higher is required." : "Requírese a versión %s ou superior do servidor.", "Server version %s or lower is required." : "Requírese a versión %s ou inferior do servidor.", - "Logged in user must be an admin" : "O usuario registrado debe ser un administrador", + "Logged in user must be an admin or sub admin" : "O usuario rexistrado debe ser un administrador ou subadministrador", + "Logged in user must be an admin" : "O usuario rexistrado debe ser un administrador", + "Remote wipe started" : "Iniciouse a limpeza remota", + "A remote wipe was started on device %s" : "Iniciouse unha limpeza remota no dispositivo %s", + "Remote wipe finished" : "Rematou a limpeza remota", + "The remote wipe on %s has finished" : "A limpeza remota en %s rematou", "Unknown filetype" : "Tipo de ficheiro descoñecido", "Invalid image" : "Imaxe incorrecta", "Avatar image is not square" : "A imaxe do avatar non é un cadrado", diff --git a/lib/l10n/gl.json b/lib/l10n/gl.json index 852ef456abc..6481cd17565 100644 --- a/lib/l10n/gl.json +++ b/lib/l10n/gl.json @@ -27,7 +27,12 @@ "Following platforms are supported: %s" : "Admítense as seguintes plataformas: %s", "Server version %s or higher is required." : "Requírese a versión %s ou superior do servidor.", "Server version %s or lower is required." : "Requírese a versión %s ou inferior do servidor.", - "Logged in user must be an admin" : "O usuario registrado debe ser un administrador", + "Logged in user must be an admin or sub admin" : "O usuario rexistrado debe ser un administrador ou subadministrador", + "Logged in user must be an admin" : "O usuario rexistrado debe ser un administrador", + "Remote wipe started" : "Iniciouse a limpeza remota", + "A remote wipe was started on device %s" : "Iniciouse unha limpeza remota no dispositivo %s", + "Remote wipe finished" : "Rematou a limpeza remota", + "The remote wipe on %s has finished" : "A limpeza remota en %s rematou", "Unknown filetype" : "Tipo de ficheiro descoñecido", "Invalid image" : "Imaxe incorrecta", "Avatar image is not square" : "A imaxe do avatar non é un cadrado", diff --git a/lib/l10n/it.js b/lib/l10n/it.js index fba5c873972..63cbcb4d43c 100644 --- a/lib/l10n/it.js +++ b/lib/l10n/it.js @@ -29,6 +29,7 @@ OC.L10N.register( "Following platforms are supported: %s" : "Sono supportate le seguenti piattaforme: %s", "Server version %s or higher is required." : "È richiesta la versione %s o successiva.", "Server version %s or lower is required." : "È richiesta la versione %s o precedente.", + "Logged in user must be an admin or sub admin" : "L'utente che ha eseguito l'accesso deve esere un amministratore o sub-amministratore", "Logged in user must be an admin" : "L'utente che ha eseguito l'accesso deve essere un amministratore ", "Remote wipe started" : "Cancellazione remota avviata", "A remote wipe was started on device %s" : "Una cancellazione remota è stata avviata sul dispositivo %s", diff --git a/lib/l10n/it.json b/lib/l10n/it.json index 69d9922e53a..b137a1b7d37 100644 --- a/lib/l10n/it.json +++ b/lib/l10n/it.json @@ -27,6 +27,7 @@ "Following platforms are supported: %s" : "Sono supportate le seguenti piattaforme: %s", "Server version %s or higher is required." : "È richiesta la versione %s o successiva.", "Server version %s or lower is required." : "È richiesta la versione %s o precedente.", + "Logged in user must be an admin or sub admin" : "L'utente che ha eseguito l'accesso deve esere un amministratore o sub-amministratore", "Logged in user must be an admin" : "L'utente che ha eseguito l'accesso deve essere un amministratore ", "Remote wipe started" : "Cancellazione remota avviata", "A remote wipe was started on device %s" : "Una cancellazione remota è stata avviata sul dispositivo %s", diff --git a/lib/l10n/pt_BR.js b/lib/l10n/pt_BR.js index 79f1b1f7123..b9fbcff465c 100644 --- a/lib/l10n/pt_BR.js +++ b/lib/l10n/pt_BR.js @@ -29,6 +29,7 @@ OC.L10N.register( "Following platforms are supported: %s" : "As seguintes plataformas são suportadas: %s", "Server version %s or higher is required." : "É requerido um servidor da versão %s ou superior.", "Server version %s or lower is required." : "É requerido um servidor da versão %s ou abaixo.", + "Logged in user must be an admin or sub admin" : "O usuário conectado deve ser um administrador ou subadministrador", "Logged in user must be an admin" : "O usuário conectado deve ser um administrador", "Remote wipe started" : "Limpeza remota iniciada", "A remote wipe was started on device %s" : "Uma limpeza remota iniciou no dispositivo %s", diff --git a/lib/l10n/pt_BR.json b/lib/l10n/pt_BR.json index 26d2263dd1c..85a0b0e57af 100644 --- a/lib/l10n/pt_BR.json +++ b/lib/l10n/pt_BR.json @@ -27,6 +27,7 @@ "Following platforms are supported: %s" : "As seguintes plataformas são suportadas: %s", "Server version %s or higher is required." : "É requerido um servidor da versão %s ou superior.", "Server version %s or lower is required." : "É requerido um servidor da versão %s ou abaixo.", + "Logged in user must be an admin or sub admin" : "O usuário conectado deve ser um administrador ou subadministrador", "Logged in user must be an admin" : "O usuário conectado deve ser um administrador", "Remote wipe started" : "Limpeza remota iniciada", "A remote wipe was started on device %s" : "Uma limpeza remota iniciou no dispositivo %s", diff --git a/lib/l10n/tr.js b/lib/l10n/tr.js index 6eb811d9ed4..c072367abf3 100644 --- a/lib/l10n/tr.js +++ b/lib/l10n/tr.js @@ -29,6 +29,7 @@ OC.L10N.register( "Following platforms are supported: %s" : "Şu platformlar destekleniyor: %s", "Server version %s or higher is required." : "Sunucu %s ya da daha sonraki bir sürüm olmalıdır.", "Server version %s or lower is required." : "Sunucu %s ya da daha önceki bir sürüm olmalıdır.", + "Logged in user must be an admin or sub admin" : "Oturum açmış kullanıcı bir yönetici ya da alt yönetici olmalıdır", "Logged in user must be an admin" : "Oturum açmış kullanıcı bir yönetici olmalıdır", "Remote wipe started" : "Uzaktan silme başlatıldı", "A remote wipe was started on device %s" : "%s aygıtı üzerinde bir uzaktan silme işlemi başlatıldı", diff --git a/lib/l10n/tr.json b/lib/l10n/tr.json index 5f48efefb5c..f9080fcb1ee 100644 --- a/lib/l10n/tr.json +++ b/lib/l10n/tr.json @@ -27,6 +27,7 @@ "Following platforms are supported: %s" : "Şu platformlar destekleniyor: %s", "Server version %s or higher is required." : "Sunucu %s ya da daha sonraki bir sürüm olmalıdır.", "Server version %s or lower is required." : "Sunucu %s ya da daha önceki bir sürüm olmalıdır.", + "Logged in user must be an admin or sub admin" : "Oturum açmış kullanıcı bir yönetici ya da alt yönetici olmalıdır", "Logged in user must be an admin" : "Oturum açmış kullanıcı bir yönetici olmalıdır", "Remote wipe started" : "Uzaktan silme başlatıldı", "A remote wipe was started on device %s" : "%s aygıtı üzerinde bir uzaktan silme işlemi başlatıldı", diff --git a/lib/l10n/zh_CN.js b/lib/l10n/zh_CN.js index 6d5be352e37..601a2325fff 100644 --- a/lib/l10n/zh_CN.js +++ b/lib/l10n/zh_CN.js @@ -29,7 +29,8 @@ OC.L10N.register( "Following platforms are supported: %s" : "支持以下平台:%s", "Server version %s or higher is required." : "需要服务器版本 %s 或更高版本。", "Server version %s or lower is required." : "需要服务器版本 %s 或更低版本。", - "Logged in user must be an admin" : "必须使用管理员用户登录", + "Logged in user must be an admin or sub admin" : "当前登录用户必须为管理员或子管理员", + "Logged in user must be an admin" : "当前登录用户必须为管理员", "Remote wipe started" : "远程擦除开始", "A remote wipe was started on device %s" : "设备%s上一个远程擦除操作已开始", "Remote wipe finished" : "远程擦除完成", diff --git a/lib/l10n/zh_CN.json b/lib/l10n/zh_CN.json index 8b9e76cc74b..50afee70aa7 100644 --- a/lib/l10n/zh_CN.json +++ b/lib/l10n/zh_CN.json @@ -27,7 +27,8 @@ "Following platforms are supported: %s" : "支持以下平台:%s", "Server version %s or higher is required." : "需要服务器版本 %s 或更高版本。", "Server version %s or lower is required." : "需要服务器版本 %s 或更低版本。", - "Logged in user must be an admin" : "必须使用管理员用户登录", + "Logged in user must be an admin or sub admin" : "当前登录用户必须为管理员或子管理员", + "Logged in user must be an admin" : "当前登录用户必须为管理员", "Remote wipe started" : "远程擦除开始", "A remote wipe was started on device %s" : "设备%s上一个远程擦除操作已开始", "Remote wipe finished" : "远程擦除完成", diff --git a/lib/private/AppFramework/App.php b/lib/private/AppFramework/App.php index 5a9fb0c64fc..6185a35d1d7 100644 --- a/lib/private/AppFramework/App.php +++ b/lib/private/AppFramework/App.php @@ -157,7 +157,15 @@ class App { * https://tools.ietf.org/html/rfc7230#section-3.3 * https://tools.ietf.org/html/rfc7230#section-3.3.2 */ - if ($httpHeaders !== Http::STATUS_NO_CONTENT && $httpHeaders !== Http::STATUS_NOT_MODIFIED) { + $emptyResponse = false; + if (preg_match('/^HTTP\/\d\.\d (\d{3}) .*$/', $httpHeaders, $matches)) { + $status = (int)$matches[1]; + if ($status === Http::STATUS_NO_CONTENT || $status === Http::STATUS_NOT_MODIFIED) { + $emptyResponse = true; + } + } + + if (!$emptyResponse) { if ($response instanceof ICallbackResponse) { $response->callback($io); } else if (!is_null($output)) { diff --git a/lib/private/AppFramework/DependencyInjection/DIContainer.php b/lib/private/AppFramework/DependencyInjection/DIContainer.php index 209ea5c876d..a6a9b205747 100644 --- a/lib/private/AppFramework/DependencyInjection/DIContainer.php +++ b/lib/private/AppFramework/DependencyInjection/DIContainer.php @@ -56,6 +56,7 @@ use OCP\AppFramework\Utility\ITimeFactory; use OCP\Files\Folder; use OCP\Files\IAppData; use OCP\GlobalScale\IConfig; +use OCP\Group\ISubAdmin; use OCP\IL10N; use OCP\ILogger; use OCP\INavigationManager; @@ -218,6 +219,7 @@ class DIContainer extends SimpleContainer implements IAppContainer { $c['AppName'], $server->getUserSession()->isLoggedIn(), $server->getGroupManager()->isAdmin($this->getUserId()), + $server->getUserSession()->getUser() !== null && $server->query(ISubAdmin::class)->isSubAdmin($server->getUserSession()->getUser()), $server->getContentSecurityPolicyManager(), $server->getCsrfTokenManager(), $server->getContentSecurityPolicyNonceManager(), diff --git a/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php b/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php index 87954ccc1cb..fef3f226e15 100644 --- a/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php +++ b/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php @@ -82,6 +82,8 @@ class SecurityMiddleware extends Middleware { private $isLoggedIn; /** @var bool */ private $isAdminUser; + /** @var bool */ + private $isSubAdmin; /** @var ContentSecurityPolicyManager */ private $contentSecurityPolicyManager; /** @var CsrfTokenManager */ @@ -101,6 +103,7 @@ class SecurityMiddleware extends Middleware { string $appName, bool $isLoggedIn, bool $isAdminUser, + bool $isSubAdmin, ContentSecurityPolicyManager $contentSecurityPolicyManager, CsrfTokenManager $csrfTokenManager, ContentSecurityPolicyNonceManager $cspNonceManager, @@ -115,6 +118,7 @@ class SecurityMiddleware extends Middleware { $this->logger = $logger; $this->isLoggedIn = $isLoggedIn; $this->isAdminUser = $isAdminUser; + $this->isSubAdmin = $isSubAdmin; $this->contentSecurityPolicyManager = $contentSecurityPolicyManager; $this->csrfTokenManager = $csrfTokenManager; $this->cspNonceManager = $cspNonceManager; @@ -143,7 +147,14 @@ class SecurityMiddleware extends Middleware { throw new NotLoggedInException(); } - if(!$this->reflector->hasAnnotation('NoAdminRequired') && !$this->isAdminUser) { + if($this->reflector->hasAnnotation('SubAdminRequired') + && !$this->isSubAdmin + && !$this->isAdminUser) { + throw new NotAdminException($this->l10n->t('Logged in user must be an admin or sub admin')); + } + if(!$this->reflector->hasAnnotation('SubAdminRequired') + && !$this->reflector->hasAnnotation('NoAdminRequired') + && !$this->isAdminUser) { throw new NotAdminException($this->l10n->t('Logged in user must be an admin')); } } diff --git a/lib/private/Files/ObjectStore/S3ConnectionTrait.php b/lib/private/Files/ObjectStore/S3ConnectionTrait.php index b2bb6d706e0..4cd25878ec5 100644 --- a/lib/private/Files/ObjectStore/S3ConnectionTrait.php +++ b/lib/private/Files/ObjectStore/S3ConnectionTrait.php @@ -65,6 +65,9 @@ trait S3ConnectionTrait { $this->params = $params; } + public function getBucket() { + return $this->bucket; + } /** * Returns the connection @@ -72,7 +75,7 @@ trait S3ConnectionTrait { * @return S3Client connected client * @throws \Exception if connection could not be made */ - protected function getConnection() { + public function getConnection() { if (!is_null($this->connection)) { return $this->connection; } diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php index 982c2dba2ee..7e3edfa9df0 100644 --- a/lib/private/Settings/Manager.php +++ b/lib/private/Settings/Manager.php @@ -29,6 +29,7 @@ namespace OC\Settings; +use Closure; use OCP\AppFramework\QueryException; use OCP\IL10N; use OCP\ILogger; @@ -38,6 +39,7 @@ use OCP\L10N\IFactory; use OCP\Settings\ISettings; use OCP\Settings\IManager; use OCP\Settings\ISection; +use OCP\Settings\ISubAdminSettings; class Manager implements IManager { @@ -150,10 +152,11 @@ class Manager implements IManager { /** * @param string $type 'admin' or 'personal' * @param string $section + * @param Closure $filter optional filter to apply on all loaded ISettings * * @return ISettings[] */ - protected function getSettings(string $type, string $section): array { + protected function getSettings(string $type, string $section, Closure $filter = null): array { if (!isset($this->settings[$type])) { $this->settings[$type] = []; } @@ -162,6 +165,10 @@ class Manager implements IManager { } foreach ($this->settingClasses as $class => $settingsType) { + if ($type !== $settingsType) { + continue; + } + try { /** @var ISettings $setting */ $setting = \OC::$server->query($class); @@ -175,6 +182,9 @@ class Manager implements IManager { continue; } + if ($filter !== null && !$filter($setting)) { + continue; + } if ($setting->getSection() === null) { continue; } @@ -226,33 +236,44 @@ class Manager implements IManager { /** * @param string $section + * @param Closure $filter * * @return ISection[] */ - private function getBuiltInAdminSettings($section): array { + private function getBuiltInAdminSettings($section, Closure $filter = null): array { $forms = []; if ($section === 'overview') { /** @var ISettings $form */ $form = $this->container->query(Admin\Overview::class); - $forms[$form->getPriority()] = [$form]; + if ($filter === null || $filter($form)) { + $forms[$form->getPriority()] = [$form]; + } } if ($section === 'server') { /** @var ISettings $form */ $form = $this->container->query(Admin\Server::class); - $forms[$form->getPriority()] = [$form]; + if ($filter === null || $filter($form)) { + $forms[$form->getPriority()] = [$form]; + } $form = $this->container->query(Admin\Mail::class); - $forms[$form->getPriority()] = [$form]; + if ($filter === null || $filter($form)) { + $forms[$form->getPriority()] = [$form]; + } } if ($section === 'security') { /** @var ISettings $form */ $form = $this->container->query(Admin\Security::class); - $forms[$form->getPriority()] = [$form]; + if ($filter === null || $filter($form)) { + $forms[$form->getPriority()] = [$form]; + } } if ($section === 'sharing') { /** @var ISettings $form */ $form = $this->container->query(Admin\Sharing::class); - $forms[$form->getPriority()] = [$form]; + if ($filter === null || $filter($form)) { + $forms[$form->getPriority()] = [$form]; + } } return $forms; @@ -290,9 +311,17 @@ class Manager implements IManager { /** * @inheritdoc */ - public function getAdminSettings($section): array { - $settings = $this->getBuiltInAdminSettings($section); - $appSettings = $this->getSettings('admin', $section); + public function getAdminSettings($section, bool $subAdminOnly = false): array { + if ($subAdminOnly) { + $subAdminSettingsFilter = function(ISettings $settings) { + return $settings instanceof ISubAdminSettings; + }; + $settings = $this->getBuiltInAdminSettings($section, $subAdminSettingsFilter); + $appSettings = $this->getSettings('admin', $section, $subAdminSettingsFilter); + } else { + $settings = $this->getBuiltInAdminSettings($section); + $appSettings = $this->getSettings('admin', $section); + } foreach ($appSettings as $setting) { if (!isset($settings[$setting->getPriority()])) { diff --git a/lib/public/AppFramework/AuthPublicShareController.php b/lib/public/AppFramework/AuthPublicShareController.php index ffd2bddd24b..37a8cedcd7e 100644 --- a/lib/public/AppFramework/AuthPublicShareController.php +++ b/lib/public/AppFramework/AuthPublicShareController.php @@ -185,6 +185,20 @@ abstract class AuthPublicShareController extends PublicShareController { $route = $params['_route']; unset($params['_route']); } + + // If the token doesn't match the rest of the arguments can't be trusted either + if (isset($params['token']) && $params['token'] !== $this->getToken()) { + $params = [ + 'token' => $this->getToken(), + ]; + } + + // We need a token + if (!isset($params['token'])) { + $params = [ + 'token' => $this->getToken(), + ]; + } } return new RedirectResponse($this->urlGenerator->linkToRoute($route, $params)); diff --git a/lib/public/Settings/IManager.php b/lib/public/Settings/IManager.php index 52f12c3a8fb..c0a34f4403f 100644 --- a/lib/public/Settings/IManager.php +++ b/lib/public/Settings/IManager.php @@ -82,10 +82,11 @@ interface IManager { * returns a list of the admin settings * * @param string $section the section id for which to load the settings + * @param bool $subAdminOnly only return settings sub admins are supposed to see (since 17.0.0) * @return array array of IAdmin[] where key is the priority * @since 9.1.0 */ - public function getAdminSettings($section): array; + public function getAdminSettings($section, bool $subAdminOnly = false): array; /** * returns a list of the personal settings diff --git a/lib/public/Settings/ISubAdminSettings.php b/lib/public/Settings/ISubAdminSettings.php new file mode 100644 index 00000000000..3d047d2c872 --- /dev/null +++ b/lib/public/Settings/ISubAdminSettings.php @@ -0,0 +1,35 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at> + * + * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +namespace OCP\Settings; + +/** + * Tagging interface for settings that should be shown to sub admins + * + * @since 17.0.0 + */ +interface ISubAdminSettings extends ISettings { + +} diff --git a/package-lock.json b/package-lock.json index b784ea7de53..7f584fba30b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3528,7 +3528,8 @@ }, "tar": { "version": "4.4.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", "dev": true, "optional": true, "requires": { @@ -6674,14 +6675,28 @@ "dev": true }, "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", "dev": true, "requires": { "block-stream": "*", - "fstream": "^1.0.2", + "fstream": "^1.0.12", "inherits": "2" + }, + "dependencies": { + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + } } }, "terser": { diff --git a/settings/Controller/AdminSettingsController.php b/settings/Controller/AdminSettingsController.php index e2ad577024c..e322a2a5354 100644 --- a/settings/Controller/AdminSettingsController.php +++ b/settings/Controller/AdminSettingsController.php @@ -27,8 +27,12 @@ namespace OC\Settings\Controller; use OCP\AppFramework\Controller; use OCP\AppFramework\Http\TemplateResponse; +use OCP\Group\ISubAdmin; +use OCP\IGroupManager; use OCP\INavigationManager; use OCP\IRequest; +use OCP\IUser; +use OCP\IUserSession; use OCP\Settings\IManager as ISettingsManager; use OCP\Template; @@ -38,21 +42,21 @@ use OCP\Template; class AdminSettingsController extends Controller { use CommonSettingsTrait; - /** - * @param string $appName - * @param IRequest $request - * @param INavigationManager $navigationManager - * @param ISettingsManager $settingsManager - */ public function __construct( $appName, IRequest $request, INavigationManager $navigationManager, - ISettingsManager $settingsManager + ISettingsManager $settingsManager, + IUserSession $userSession, + IGroupManager $groupManager, + ISubAdmin $subAdmin ) { parent::__construct($appName, $request); $this->navigationManager = $navigationManager; $this->settingsManager = $settingsManager; + $this->userSession = $userSession; + $this->groupManager = $groupManager; + $this->subAdmin = $subAdmin; } /** @@ -60,6 +64,7 @@ class AdminSettingsController extends Controller { * @return TemplateResponse * * @NoCSRFRequired + * @SubAdminRequired */ public function index($section) { return $this->getIndexResponse('admin', $section); @@ -70,9 +75,16 @@ class AdminSettingsController extends Controller { * @return array */ protected function getSettings($section) { - $settings = $this->settingsManager->getAdminSettings($section); + /** @var IUser $user */ + $user = $this->userSession->getUser(); + $isSubAdmin = !$this->groupManager->isAdmin($user->getUID()) && $this->subAdmin->isSubAdmin($user); + $settings = $this->settingsManager->getAdminSettings( + $section, + $isSubAdmin + ); $formatted = $this->formatSettings($settings); - if($section === 'additional') { + // Do not show legacy forms for sub admins + if($section === 'additional' && !$isSubAdmin) { $formatted['content'] .= $this->getLegacyForms(); } return $formatted; diff --git a/settings/Controller/CommonSettingsTrait.php b/settings/Controller/CommonSettingsTrait.php index 10fc0d84bbd..1844dda551e 100644 --- a/settings/Controller/CommonSettingsTrait.php +++ b/settings/Controller/CommonSettingsTrait.php @@ -25,18 +25,32 @@ namespace OC\Settings\Controller; use OCP\AppFramework\Http\TemplateResponse; +use OCP\Group\ISubAdmin; +use OCP\IGroupManager; use OCP\INavigationManager; +use OCP\IUser; +use OCP\IUserSession; use OCP\Settings\IManager as ISettingsManager; use OCP\Settings\IIconSection; use OCP\Settings\ISettings; trait CommonSettingsTrait { + /** @var ISettingsManager */ private $settingsManager; /** @var INavigationManager */ private $navigationManager; + /** @var IUserSession */ + private $userSession; + + /** @var IGroupManager */ + private $groupManager; + + /** @var ISubAdmin */ + private $subAdmin; + /** * @param string $currentSection * @return array @@ -47,8 +61,16 @@ trait CommonSettingsTrait { 'admin' => [] ]; - if(\OC_User::isAdminUser(\OC_User::getUser())) { - $templateParameters['admin'] = $this->formatAdminSections($currentType, $currentSection); + /** @var IUser $user */ + $user = $this->userSession->getUser(); + $isAdmin = $this->groupManager->isAdmin($user->getUID()); + $isSubAdmin = $this->subAdmin->isSubAdmin($user); + if ($isAdmin || $isSubAdmin) { + $templateParameters['admin'] = $this->formatAdminSections( + $currentType, + $currentSection, + !$isAdmin && $isSubAdmin + ); } return [ @@ -56,13 +78,13 @@ trait CommonSettingsTrait { ]; } - protected function formatSections($sections, $currentSection, $type, $currentType) { + protected function formatSections($sections, $currentSection, $type, $currentType, bool $subAdminOnly = false) { $templateParameters = []; /** @var \OCP\Settings\ISection[] $prioritizedSections */ foreach($sections as $prioritizedSections) { foreach ($prioritizedSections as $section) { if($type === 'admin') { - $settings = $this->settingsManager->getAdminSettings($section->getID()); + $settings = $this->settingsManager->getAdminSettings($section->getID(), $subAdminOnly); } else if($type === 'personal') { $settings = $this->settingsManager->getPersonalSettings($section->getID()); } @@ -96,9 +118,9 @@ trait CommonSettingsTrait { return $templateParameters; } - protected function formatAdminSections($currentType, $currentSections) { + protected function formatAdminSections($currentType, $currentSections, bool $subAdminOnly) { $sections = $this->settingsManager->getAdminSections(); - $templateParameters = $this->formatSections($sections, $currentSections, 'admin', $currentType); + $templateParameters = $this->formatSections($sections, $currentSections, 'admin', $currentType, $subAdminOnly); return $templateParameters; } diff --git a/settings/Controller/PersonalSettingsController.php b/settings/Controller/PersonalSettingsController.php index 9ec7ce72645..01ef84a1c49 100644 --- a/settings/Controller/PersonalSettingsController.php +++ b/settings/Controller/PersonalSettingsController.php @@ -26,8 +26,11 @@ namespace OC\Settings\Controller; use OCP\AppFramework\Controller; use OCP\AppFramework\Http\TemplateResponse; +use OCP\Group\ISubAdmin; +use OCP\IGroupManager; use OCP\INavigationManager; use OCP\IRequest; +use OCP\IUserSession; use OCP\Settings\IManager as ISettingsManager; use OCP\Template; @@ -38,11 +41,17 @@ class PersonalSettingsController extends Controller { $appName, IRequest $request, INavigationManager $navigationManager, - ISettingsManager $settingsManager + ISettingsManager $settingsManager, + IUserSession $userSession, + IGroupManager $groupManager, + ISubAdmin $subAdmin ) { parent::__construct($appName, $request); $this->navigationManager = $navigationManager; $this->settingsManager = $settingsManager; + $this->userSession = $userSession; + $this->subAdmin = $subAdmin; + $this->groupManager = $groupManager; } /** diff --git a/settings/l10n/ca.js b/settings/l10n/ca.js index 79a66ffe9dc..65340bc79df 100644 --- a/settings/l10n/ca.js +++ b/settings/l10n/ca.js @@ -26,6 +26,8 @@ OC.L10N.register( "Security" : "Seguretat", "You successfully logged in using two-factor authentication (%1$s)" : "Us heu identificat correctament amb l'autenticació en dues passes (%1$s)", "A login attempt using two-factor authentication failed (%1$s)" : "Ha fallat l'inici de sessió mitjançant l'autenticació en dues passes (%1$s)", + "Remote wipe was started on %1$s" : "S'ha engegat la neteja remota a %1$s", + "Remote wipe has finished on %1$s" : "Ha finalitzat la neteja remota a %1$s", "Your <strong>password</strong> or <strong>email</strong> was modified" : "S'ha modificat la vostra <strong>contrasenya</strong> o <strong>correu electrònic</strong>", "Couldn't remove app." : "No s'ha pogut suprimit l'aplicació.", "Couldn't update app." : "No s'ha pogut actualitzar l'aplicació.", @@ -547,10 +549,13 @@ OC.L10N.register( "Excluded groups" : "Grups exclosos", "When groups are selected/excluded, they use the following logic to determine if a user has 2FA enforced: If no groups are selected, 2FA is enabled for everyone except members of the excluded groups. If groups are selected, 2FA is enabled for all members of these. If a user is both in a selected and excluded group, the selected takes precedence and 2FA is enforced." : "Quan es seleccionen/exclouen grups, es fa servir la lògica següent per determinar si un usuari té 2FA (Autentificació de 2 Factors) obligada: si no hi ha grups seleccionats, 2FA està activada per a tothom, a excepció de membres dels grups exclosos. Si els grups estan seleccionats, 2FA està activada per a tots els membres d'aquests. Si un usuari està tant en un grup seleccionat com exclòs, els seleccionats tenen prioritat i 2FA s'imposa.", "Save changes" : "Desa els canvis", + "Marked for remote wipe" : "Marcat per netejar remotament", "Device settings" : "Paràmetres del dispositiu", "Allow filesystem access" : "Permet l'accés al sistema de fitxers", "Rename" : "Canvia el nom", "Revoke" : "Revoca", + "Wipe device" : "Neteja dispositiu", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Revocant aquest token impedirà la neteja del vostre dispositiu is encara no ha començat.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -573,6 +578,7 @@ OC.L10N.register( "Error while updating device token scope" : "S'ha produït un error mentre s'actualitzava l’abast de testimonis del dispositiu", "Error while updating device token name" : "S'ha produït un error mentre s'actualitzava el nom del testimoni del dispositiu", "Error while deleting the token" : "S'ha produït un error mentre se suprimia el testimoni", + "Error while wiping the device with the token" : "S'ha produït un error mentre es netejava el dispositiu amb el token", "App name" : "Nom de l'aplicació", "Create new app password" : "Crea una nova contrasenya d'aplicació", "Use the credentials below to configure your app or device." : "Utilitzeu les credencials de sota per configurar la vostra aplicació o dispositiu.", diff --git a/settings/l10n/ca.json b/settings/l10n/ca.json index e14e20f928a..c4b1fcb6604 100644 --- a/settings/l10n/ca.json +++ b/settings/l10n/ca.json @@ -24,6 +24,8 @@ "Security" : "Seguretat", "You successfully logged in using two-factor authentication (%1$s)" : "Us heu identificat correctament amb l'autenticació en dues passes (%1$s)", "A login attempt using two-factor authentication failed (%1$s)" : "Ha fallat l'inici de sessió mitjançant l'autenticació en dues passes (%1$s)", + "Remote wipe was started on %1$s" : "S'ha engegat la neteja remota a %1$s", + "Remote wipe has finished on %1$s" : "Ha finalitzat la neteja remota a %1$s", "Your <strong>password</strong> or <strong>email</strong> was modified" : "S'ha modificat la vostra <strong>contrasenya</strong> o <strong>correu electrònic</strong>", "Couldn't remove app." : "No s'ha pogut suprimit l'aplicació.", "Couldn't update app." : "No s'ha pogut actualitzar l'aplicació.", @@ -545,10 +547,13 @@ "Excluded groups" : "Grups exclosos", "When groups are selected/excluded, they use the following logic to determine if a user has 2FA enforced: If no groups are selected, 2FA is enabled for everyone except members of the excluded groups. If groups are selected, 2FA is enabled for all members of these. If a user is both in a selected and excluded group, the selected takes precedence and 2FA is enforced." : "Quan es seleccionen/exclouen grups, es fa servir la lògica següent per determinar si un usuari té 2FA (Autentificació de 2 Factors) obligada: si no hi ha grups seleccionats, 2FA està activada per a tothom, a excepció de membres dels grups exclosos. Si els grups estan seleccionats, 2FA està activada per a tots els membres d'aquests. Si un usuari està tant en un grup seleccionat com exclòs, els seleccionats tenen prioritat i 2FA s'imposa.", "Save changes" : "Desa els canvis", + "Marked for remote wipe" : "Marcat per netejar remotament", "Device settings" : "Paràmetres del dispositiu", "Allow filesystem access" : "Permet l'accés al sistema de fitxers", "Rename" : "Canvia el nom", "Revoke" : "Revoca", + "Wipe device" : "Neteja dispositiu", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Revocant aquest token impedirà la neteja del vostre dispositiu is encara no ha començat.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -571,6 +576,7 @@ "Error while updating device token scope" : "S'ha produït un error mentre s'actualitzava l’abast de testimonis del dispositiu", "Error while updating device token name" : "S'ha produït un error mentre s'actualitzava el nom del testimoni del dispositiu", "Error while deleting the token" : "S'ha produït un error mentre se suprimia el testimoni", + "Error while wiping the device with the token" : "S'ha produït un error mentre es netejava el dispositiu amb el token", "App name" : "Nom de l'aplicació", "Create new app password" : "Crea una nova contrasenya d'aplicació", "Use the credentials below to configure your app or device." : "Utilitzeu les credencials de sota per configurar la vostra aplicació o dispositiu.", diff --git a/settings/l10n/es.js b/settings/l10n/es.js index b7bea0b3c88..f006055a903 100644 --- a/settings/l10n/es.js +++ b/settings/l10n/es.js @@ -26,6 +26,8 @@ OC.L10N.register( "Security" : "Seguridad", "You successfully logged in using two-factor authentication (%1$s)" : "Has iniciado sesión usando la verificación en dos pasos (%1$s)", "A login attempt using two-factor authentication failed (%1$s)" : "El intento de inicio de sesión usando la autenticación en dos pasos (%1$s) ha fallado", + "Remote wipe was started on %1$s" : "Barrido remoto iniciado en %1$s", + "Remote wipe has finished on %1$s" : "Barrido remoto finalizado en %1$s", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Tu <strong>contraseña</strong> o <strong>dirección de correo</strong> fue modificada", "Couldn't remove app." : "No se ha podido eliminar la aplicación.", "Couldn't update app." : "No se ha podido actualizar la aplicación.", @@ -547,10 +549,13 @@ OC.L10N.register( "Excluded groups" : "Grupos excluidos", "When groups are selected/excluded, they use the following logic to determine if a user has 2FA enforced: If no groups are selected, 2FA is enabled for everyone except members of the excluded groups. If groups are selected, 2FA is enabled for all members of these. If a user is both in a selected and excluded group, the selected takes precedence and 2FA is enforced." : "Cuando los grupos se seleccionan/excluyen, usan la siguiente lógica para determinar si un usuario tiene obligada la 2FA: si no hay grupos seleccionados, 2FA está activa para todos excepto los miembros de los grupos excluidos. Si hay grupos seleccionados, 2FA está activa para todos los miembros de estos. Si un usuaro está a la vez en un grupo seleccionado y otro excluido, el seleccionado tiene preferencia y se obliga la 2FA.", "Save changes" : "Guardar cambios", + "Marked for remote wipe" : "Marcado para barrido remoto", "Device settings" : "Configuración del dispositivo", "Allow filesystem access" : "Permitir acceso al sistema de archivos", "Rename" : "Renombrar", "Revoke" : "Revocar", + "Wipe device" : "Barrer dispositivo", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Revocar este token puede evitar el barrido de tu dispositivo si no se ha iniciado aún el barrido.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -573,6 +578,7 @@ OC.L10N.register( "Error while updating device token scope" : "Error al actualizar el alcance del token de dispositivo", "Error while updating device token name" : "Error al actualizar el nombre del token de dispositivo", "Error while deleting the token" : "Error al eliminar el \"token\"", + "Error while wiping the device with the token" : "Error al barrer el dispositivo con el token", "App name" : "Nombre de la app", "Create new app password" : "Crear nueva contraseña de app", "Use the credentials below to configure your app or device." : "Use las siguientes credenciales para configurar su app o dispositivo.", diff --git a/settings/l10n/es.json b/settings/l10n/es.json index e62108fb051..7adf3215919 100644 --- a/settings/l10n/es.json +++ b/settings/l10n/es.json @@ -24,6 +24,8 @@ "Security" : "Seguridad", "You successfully logged in using two-factor authentication (%1$s)" : "Has iniciado sesión usando la verificación en dos pasos (%1$s)", "A login attempt using two-factor authentication failed (%1$s)" : "El intento de inicio de sesión usando la autenticación en dos pasos (%1$s) ha fallado", + "Remote wipe was started on %1$s" : "Barrido remoto iniciado en %1$s", + "Remote wipe has finished on %1$s" : "Barrido remoto finalizado en %1$s", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Tu <strong>contraseña</strong> o <strong>dirección de correo</strong> fue modificada", "Couldn't remove app." : "No se ha podido eliminar la aplicación.", "Couldn't update app." : "No se ha podido actualizar la aplicación.", @@ -545,10 +547,13 @@ "Excluded groups" : "Grupos excluidos", "When groups are selected/excluded, they use the following logic to determine if a user has 2FA enforced: If no groups are selected, 2FA is enabled for everyone except members of the excluded groups. If groups are selected, 2FA is enabled for all members of these. If a user is both in a selected and excluded group, the selected takes precedence and 2FA is enforced." : "Cuando los grupos se seleccionan/excluyen, usan la siguiente lógica para determinar si un usuario tiene obligada la 2FA: si no hay grupos seleccionados, 2FA está activa para todos excepto los miembros de los grupos excluidos. Si hay grupos seleccionados, 2FA está activa para todos los miembros de estos. Si un usuaro está a la vez en un grupo seleccionado y otro excluido, el seleccionado tiene preferencia y se obliga la 2FA.", "Save changes" : "Guardar cambios", + "Marked for remote wipe" : "Marcado para barrido remoto", "Device settings" : "Configuración del dispositivo", "Allow filesystem access" : "Permitir acceso al sistema de archivos", "Rename" : "Renombrar", "Revoke" : "Revocar", + "Wipe device" : "Barrer dispositivo", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Revocar este token puede evitar el barrido de tu dispositivo si no se ha iniciado aún el barrido.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -571,6 +576,7 @@ "Error while updating device token scope" : "Error al actualizar el alcance del token de dispositivo", "Error while updating device token name" : "Error al actualizar el nombre del token de dispositivo", "Error while deleting the token" : "Error al eliminar el \"token\"", + "Error while wiping the device with the token" : "Error al barrer el dispositivo con el token", "App name" : "Nombre de la app", "Create new app password" : "Crear nueva contraseña de app", "Use the credentials below to configure your app or device." : "Use las siguientes credenciales para configurar su app o dispositivo.", diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js index 243e5d9145b..ef6ba4815ea 100644 --- a/settings/l10n/fr.js +++ b/settings/l10n/fr.js @@ -26,6 +26,8 @@ OC.L10N.register( "Security" : "Sécurité", "You successfully logged in using two-factor authentication (%1$s)" : "Vous avez réussi à vous connecter en utilisant l'authentification à deux facteurs (%1$s)", "A login attempt using two-factor authentication failed (%1$s)" : "Une tentative de connexion utilisant l'authentification à deux facteurs a échoué (%1$s)", + "Remote wipe was started on %1$s" : "Effaçage distant démarré pour%1$s", + "Remote wipe has finished on %1$s" : "Effaçage distant terminé pour %1$s", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Votre <strong>mot de passe</strong> ou <strong>adresse e-mail</strong> a été modifié", "Couldn't remove app." : "Impossible de supprimer l'application.", "Couldn't update app." : "Impossible de mettre à jour l'application", @@ -170,6 +172,8 @@ OC.L10N.register( "Chiga" : "Kiga", "Chinese (Simplified Han)" : "Chinois (Han simplifié)", "Chinese (Simplified Han, China)" : "Chinois (Han simplifié, Chine)", + "Chinese (Simplified Han, Hong Kong SAR China)" : "Chinois (Han simplifié, SAR chinoise de Hong Kong)", + "Chinese (Simplified Han, Macau SAR China)" : "Chinois (Han simplifié, SAR de Macao Chine)", "Chinese (Simplified Han, Singapore)" : "Chinois (Han simplifié, Singapour)", "Chinese (Traditional Han)" : "Chinois (Han traditionnel)", "Chinese (Traditional Han, Taiwan)" : "Chinois (Han traditionnel, Taïwan)", @@ -192,22 +196,38 @@ OC.L10N.register( "English (Botswana)" : "Anglais (Botswana)", "English (Canada)" : "Anglais (Canada)", "English (Guam)" : "Anglais (Guam)", + "English (Hong Kong SAR China)" : "Anglais (Hong Kong SAR Chine)", "English (India)" : "Anglais (Inde)", "English (Ireland)" : "Anglais (Irlande)", "English (Jamaica)" : "Anglais (Jamaïque)", "English (Malta)" : "Anglais (Malte)", + "English (Marshall Islands)" : "Anglais (Îles Marshall)", "English (Mauritius)" : "Anglais (Îles Maurice)", "English (Namibia)" : "Anglais (Namibie)", "English (New Zealand)" : "Anglais (Nouvelle-Zélande)", + "English (Northern Mariana Islands)" : "Anglais (Îles Mariannes du Nord)", "English (Pakistan)" : "Anglais (Pakistan)", + "English (Philippines)" : "Anglais (Philippines)", "English (Singapore)" : "Anglais (Singapour)", "English (South Africa)" : "Anglais (Afrique du Sud)", + "English (Trinidad and Tobago)" : "Anglais (Trinité-et-Tobago)", + "English (U.S. Minor Outlying Islands)" : "Anglais (Îles mineures éloignées des États-Unis)", + "English (U.S. Virgin Islands)" : "Anglais (Îles Vierges américaines)", "English (United Kingdom)" : "Anglais (Royaume-Uni)", "English (United States)" : "Anglais (États-Unis)", + "English (Zimbabwe)" : "Anglais (Zimbabwe)", "English" : "Anglais", "Esperanto" : "Espéranto", + "Estonian (Estonia)" : "Estonien (Estonie)", "Estonian" : "Estonien", + "Ewe (Ghana)" : "Ewe (Ghana)", + "Ewe (Togo)" : "Ewe (Togo)", "Ewe" : "Éwé", + "Faroese (Faroe Islands)" : "Féroïen (Îles Féroé)", + "Faroese" : "Féroïen", + "Filipino (Philippines)" : "Philippin (Philippines)", + "Filipino" : "Philippin", + "Finnish (Finland)" : "Finnois (Finlande)", "Finnish" : "Finnois", "French (Belgium)" : "Français (Belgique)", "French (Benin)" : "Français (Bénin)", @@ -241,15 +261,35 @@ OC.L10N.register( "French (Switzerland)" : "Français (Suisse)", "French (Togo)" : "Français (Togo)", "French" : "Français", + "Fulah (Senegal)" : "Fulah (Sénégal)", + "Fulah" : "Fulah", + "Galician (Spain)" : "Galicien (Espagne)", "Galician" : "Galicien", + "Ganda (Uganda)" : "Ganda (Ouganda)", + "Ganda" : "Ganda", "Georgian (Georgia)" : "Géorgien (Géorgie)", "Georgian" : "Géorgien", "German (Austria)" : "Allemand (Autriche)", "German (Belgium)" : "Allemand (Belgique)", "German (Germany)" : "Allemand (Allemagne)", + "German (Liechtenstein)" : "Allemand (Liechtenstein)", "German (Luxembourg)" : "Allemand (Luxembourg)", "German (Switzerland)" : "Allemand (Suisse)", "German" : "Allemand", + "Greek (Cyprus)" : "Grec (Chypre)", + "Greek (Greece)" : "Grec (Grèce)", + "Greek" : "Grec", + "Gujarati (India)" : "Gujarati (Inde)", + "Gujarati" : "Gujarati", + "Gusii (Kenya)" : "Gusii (Kenya)", + "Gusii" : "Gusii", + "Hausa (Latin)" : "Haoussa (latin)", + "Hausa (Latin, Ghana)" : "Haoussa (latin, Ghana)", + "Hausa (Latin, Niger)" : "Haoussa (latin, Niger)", + "Hausa (Latin, Nigeria)" : "Haoussa (latin, Nigeria)", + "Hausa" : "Haoussa", + "Hawaiian (United States)" : "Hawaïen (États-Unis)", + "Hawaiian" : "Hawaïen", "Hebrew" : "Hébreu", "Hindi" : "Hindi", "Hungarian" : "Hongrois", @@ -281,9 +321,17 @@ OC.L10N.register( "Portuguese (Portugal)" : "Portugais (Portugal)", "Portuguese" : "Portuguais", "Punjabi" : "Pendjabi", + "Romanian (Moldova)" : "Roumain (Moldavie)", + "Romanian (Romania)" : "Roumain (Roumanie)", + "Romanian" : "Roumain", + "Romansh (Switzerland)" : "Romanche (Suisse)", + "Romansh" : "Romanche", + "Russian (Moldova)" : "Russe (Moldavie)", "Russian (Russia)" : "Russe (Russie)", "Russian (Ukraine)" : "Russe (Ukraine)", "Russian" : "Russe", + "Serbian (Cyrillic)" : "Serbe (Cyrillique)", + "Serbian (Cyrillic, Montenegro)" : "Serbe (Cyrillique, Monténégro)", "Serbian" : "Serbe", "Slovak" : "Slovaque", "Slovenian" : "Slovène", @@ -329,10 +377,13 @@ OC.L10N.register( "Excluded groups" : "Groupes exclus", "When groups are selected/excluded, they use the following logic to determine if a user has 2FA enforced: If no groups are selected, 2FA is enabled for everyone except members of the excluded groups. If groups are selected, 2FA is enabled for all members of these. If a user is both in a selected and excluded group, the selected takes precedence and 2FA is enforced." : "Lorsque des groupes sont sélectionnés/exclus, la logique suivante est utilisée pour déterminer si un utilisateur a activé l'authentification double facteur (2FA). Si aucun groupe n'est sélectionné, l'authentification double facteur (2FA) est activé pour tout le monde sauf pour les membres des groupes exclus. Si des groupes sont sélectionnés, l'authentification double facteur (2FA) est activé pour tous les membres de ces groupes. Si un utilisateur est à la fois dans un groupe sélectionné et exclus, c'est le groupe sélectionné qui prime et l'authentification double facteur (2FA) est appliquée.", "Save changes" : "Enregistrer les modifications", + "Marked for remote wipe" : "Marqué pour l'effaçage distant", "Device settings" : "Paramètres de l'appareil", "Allow filesystem access" : "Autoriser l'accès au gestionnaire de fichiers", "Rename" : "Renommer", "Revoke" : "Révoquer", + "Wipe device" : "Effacer l'appareil", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Révoquer ce jeton peut empêcher l'effacement de votre appareil s'il n'a pas encore démarré l'effacement.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -355,6 +406,7 @@ OC.L10N.register( "Error while updating device token scope" : "Erreur lors de la mise à jour du jeton de l'appareil", "Error while updating device token name" : "Erreur lors de la mise à jour du nom du jeton", "Error while deleting the token" : "Erreur lors de la suppression du jeton", + "Error while wiping the device with the token" : "Erreur lors de l'effaçage de l'appareil avec le jeton", "App name" : "Nom de l'application", "Create new app password" : "Créer un nouveau mot de passe d'application", "Use the credentials below to configure your app or device." : "Utilisez les informations d'identification ci-dessous pour configurer votre application ou appareil.", @@ -484,7 +536,7 @@ OC.L10N.register( "Test email settings" : "Tester les paramètres e-mail", "Send email" : "Envoyer un e-mail", "Security & setup warnings" : "Avertissements de sécurité & configuration", - "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Il est important pour la sécurité et la performance de votre instance que celle-ci soit correctement configurée. Afin de vous aider, votre instance Nextcloud effectue quelques vérifications automatiques. Pour de plus amples informations, veuillez consulter la documentation liée.", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Il est important pour la sécurité et la performance de votre instance que celle-ci soit correctement configurée. Afin de vous aider, votre instance Nextcloud effectue des vérifications automatiques. Pour de plus amples informations, veuillez consulter la documentation liée.", "All checks passed." : "Tous les tests ont réussi.", "There are some errors regarding your setup." : "Il y a quelques erreurs concernant votre configuration.", "There are some warnings regarding your setup." : "Il y a quelques avertissements concernant votre configuration.", diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json index 3530d46fddc..da658e674b9 100644 --- a/settings/l10n/fr.json +++ b/settings/l10n/fr.json @@ -24,6 +24,8 @@ "Security" : "Sécurité", "You successfully logged in using two-factor authentication (%1$s)" : "Vous avez réussi à vous connecter en utilisant l'authentification à deux facteurs (%1$s)", "A login attempt using two-factor authentication failed (%1$s)" : "Une tentative de connexion utilisant l'authentification à deux facteurs a échoué (%1$s)", + "Remote wipe was started on %1$s" : "Effaçage distant démarré pour%1$s", + "Remote wipe has finished on %1$s" : "Effaçage distant terminé pour %1$s", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Votre <strong>mot de passe</strong> ou <strong>adresse e-mail</strong> a été modifié", "Couldn't remove app." : "Impossible de supprimer l'application.", "Couldn't update app." : "Impossible de mettre à jour l'application", @@ -168,6 +170,8 @@ "Chiga" : "Kiga", "Chinese (Simplified Han)" : "Chinois (Han simplifié)", "Chinese (Simplified Han, China)" : "Chinois (Han simplifié, Chine)", + "Chinese (Simplified Han, Hong Kong SAR China)" : "Chinois (Han simplifié, SAR chinoise de Hong Kong)", + "Chinese (Simplified Han, Macau SAR China)" : "Chinois (Han simplifié, SAR de Macao Chine)", "Chinese (Simplified Han, Singapore)" : "Chinois (Han simplifié, Singapour)", "Chinese (Traditional Han)" : "Chinois (Han traditionnel)", "Chinese (Traditional Han, Taiwan)" : "Chinois (Han traditionnel, Taïwan)", @@ -190,22 +194,38 @@ "English (Botswana)" : "Anglais (Botswana)", "English (Canada)" : "Anglais (Canada)", "English (Guam)" : "Anglais (Guam)", + "English (Hong Kong SAR China)" : "Anglais (Hong Kong SAR Chine)", "English (India)" : "Anglais (Inde)", "English (Ireland)" : "Anglais (Irlande)", "English (Jamaica)" : "Anglais (Jamaïque)", "English (Malta)" : "Anglais (Malte)", + "English (Marshall Islands)" : "Anglais (Îles Marshall)", "English (Mauritius)" : "Anglais (Îles Maurice)", "English (Namibia)" : "Anglais (Namibie)", "English (New Zealand)" : "Anglais (Nouvelle-Zélande)", + "English (Northern Mariana Islands)" : "Anglais (Îles Mariannes du Nord)", "English (Pakistan)" : "Anglais (Pakistan)", + "English (Philippines)" : "Anglais (Philippines)", "English (Singapore)" : "Anglais (Singapour)", "English (South Africa)" : "Anglais (Afrique du Sud)", + "English (Trinidad and Tobago)" : "Anglais (Trinité-et-Tobago)", + "English (U.S. Minor Outlying Islands)" : "Anglais (Îles mineures éloignées des États-Unis)", + "English (U.S. Virgin Islands)" : "Anglais (Îles Vierges américaines)", "English (United Kingdom)" : "Anglais (Royaume-Uni)", "English (United States)" : "Anglais (États-Unis)", + "English (Zimbabwe)" : "Anglais (Zimbabwe)", "English" : "Anglais", "Esperanto" : "Espéranto", + "Estonian (Estonia)" : "Estonien (Estonie)", "Estonian" : "Estonien", + "Ewe (Ghana)" : "Ewe (Ghana)", + "Ewe (Togo)" : "Ewe (Togo)", "Ewe" : "Éwé", + "Faroese (Faroe Islands)" : "Féroïen (Îles Féroé)", + "Faroese" : "Féroïen", + "Filipino (Philippines)" : "Philippin (Philippines)", + "Filipino" : "Philippin", + "Finnish (Finland)" : "Finnois (Finlande)", "Finnish" : "Finnois", "French (Belgium)" : "Français (Belgique)", "French (Benin)" : "Français (Bénin)", @@ -239,15 +259,35 @@ "French (Switzerland)" : "Français (Suisse)", "French (Togo)" : "Français (Togo)", "French" : "Français", + "Fulah (Senegal)" : "Fulah (Sénégal)", + "Fulah" : "Fulah", + "Galician (Spain)" : "Galicien (Espagne)", "Galician" : "Galicien", + "Ganda (Uganda)" : "Ganda (Ouganda)", + "Ganda" : "Ganda", "Georgian (Georgia)" : "Géorgien (Géorgie)", "Georgian" : "Géorgien", "German (Austria)" : "Allemand (Autriche)", "German (Belgium)" : "Allemand (Belgique)", "German (Germany)" : "Allemand (Allemagne)", + "German (Liechtenstein)" : "Allemand (Liechtenstein)", "German (Luxembourg)" : "Allemand (Luxembourg)", "German (Switzerland)" : "Allemand (Suisse)", "German" : "Allemand", + "Greek (Cyprus)" : "Grec (Chypre)", + "Greek (Greece)" : "Grec (Grèce)", + "Greek" : "Grec", + "Gujarati (India)" : "Gujarati (Inde)", + "Gujarati" : "Gujarati", + "Gusii (Kenya)" : "Gusii (Kenya)", + "Gusii" : "Gusii", + "Hausa (Latin)" : "Haoussa (latin)", + "Hausa (Latin, Ghana)" : "Haoussa (latin, Ghana)", + "Hausa (Latin, Niger)" : "Haoussa (latin, Niger)", + "Hausa (Latin, Nigeria)" : "Haoussa (latin, Nigeria)", + "Hausa" : "Haoussa", + "Hawaiian (United States)" : "Hawaïen (États-Unis)", + "Hawaiian" : "Hawaïen", "Hebrew" : "Hébreu", "Hindi" : "Hindi", "Hungarian" : "Hongrois", @@ -279,9 +319,17 @@ "Portuguese (Portugal)" : "Portugais (Portugal)", "Portuguese" : "Portuguais", "Punjabi" : "Pendjabi", + "Romanian (Moldova)" : "Roumain (Moldavie)", + "Romanian (Romania)" : "Roumain (Roumanie)", + "Romanian" : "Roumain", + "Romansh (Switzerland)" : "Romanche (Suisse)", + "Romansh" : "Romanche", + "Russian (Moldova)" : "Russe (Moldavie)", "Russian (Russia)" : "Russe (Russie)", "Russian (Ukraine)" : "Russe (Ukraine)", "Russian" : "Russe", + "Serbian (Cyrillic)" : "Serbe (Cyrillique)", + "Serbian (Cyrillic, Montenegro)" : "Serbe (Cyrillique, Monténégro)", "Serbian" : "Serbe", "Slovak" : "Slovaque", "Slovenian" : "Slovène", @@ -327,10 +375,13 @@ "Excluded groups" : "Groupes exclus", "When groups are selected/excluded, they use the following logic to determine if a user has 2FA enforced: If no groups are selected, 2FA is enabled for everyone except members of the excluded groups. If groups are selected, 2FA is enabled for all members of these. If a user is both in a selected and excluded group, the selected takes precedence and 2FA is enforced." : "Lorsque des groupes sont sélectionnés/exclus, la logique suivante est utilisée pour déterminer si un utilisateur a activé l'authentification double facteur (2FA). Si aucun groupe n'est sélectionné, l'authentification double facteur (2FA) est activé pour tout le monde sauf pour les membres des groupes exclus. Si des groupes sont sélectionnés, l'authentification double facteur (2FA) est activé pour tous les membres de ces groupes. Si un utilisateur est à la fois dans un groupe sélectionné et exclus, c'est le groupe sélectionné qui prime et l'authentification double facteur (2FA) est appliquée.", "Save changes" : "Enregistrer les modifications", + "Marked for remote wipe" : "Marqué pour l'effaçage distant", "Device settings" : "Paramètres de l'appareil", "Allow filesystem access" : "Autoriser l'accès au gestionnaire de fichiers", "Rename" : "Renommer", "Revoke" : "Révoquer", + "Wipe device" : "Effacer l'appareil", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Révoquer ce jeton peut empêcher l'effacement de votre appareil s'il n'a pas encore démarré l'effacement.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -353,6 +404,7 @@ "Error while updating device token scope" : "Erreur lors de la mise à jour du jeton de l'appareil", "Error while updating device token name" : "Erreur lors de la mise à jour du nom du jeton", "Error while deleting the token" : "Erreur lors de la suppression du jeton", + "Error while wiping the device with the token" : "Erreur lors de l'effaçage de l'appareil avec le jeton", "App name" : "Nom de l'application", "Create new app password" : "Créer un nouveau mot de passe d'application", "Use the credentials below to configure your app or device." : "Utilisez les informations d'identification ci-dessous pour configurer votre application ou appareil.", @@ -482,7 +534,7 @@ "Test email settings" : "Tester les paramètres e-mail", "Send email" : "Envoyer un e-mail", "Security & setup warnings" : "Avertissements de sécurité & configuration", - "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Il est important pour la sécurité et la performance de votre instance que celle-ci soit correctement configurée. Afin de vous aider, votre instance Nextcloud effectue quelques vérifications automatiques. Pour de plus amples informations, veuillez consulter la documentation liée.", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Il est important pour la sécurité et la performance de votre instance que celle-ci soit correctement configurée. Afin de vous aider, votre instance Nextcloud effectue des vérifications automatiques. Pour de plus amples informations, veuillez consulter la documentation liée.", "All checks passed." : "Tous les tests ont réussi.", "There are some errors regarding your setup." : "Il y a quelques erreurs concernant votre configuration.", "There are some warnings regarding your setup." : "Il y a quelques avertissements concernant votre configuration.", diff --git a/settings/l10n/gl.js b/settings/l10n/gl.js index 594e3b5c37d..f6ce764c2fc 100644 --- a/settings/l10n/gl.js +++ b/settings/l10n/gl.js @@ -26,6 +26,8 @@ OC.L10N.register( "Security" : "Seguridade", "You successfully logged in using two-factor authentication (%1$s)" : "Accedeu satisfactoriamente usando autenticación de dous factores (%1$s)", "A login attempt using two-factor authentication failed (%1$s)" : "Fallou un intento de acceso usando autenticación de dous factores (%1$s)", + "Remote wipe was started on %1$s" : "Iniciouse a limpeza remota en %1$s", + "Remote wipe has finished on %1$s" : "Rematou a limpeza remota en %1$s", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Foi modificado o seu <strong>contrasinal</strong> ou o seu <strong>correo electrónico</strong>", "Couldn't remove app." : "Non foi posíbel retirar o aplicativo.", "Couldn't update app." : "Non foi posíbel actualizar o aplicativo.", @@ -72,7 +74,7 @@ OC.L10N.register( "Set your password" : "Estabeleza o seu contrasinal", "Go to %s" : "Ira a %s", "Install Client" : "Instalar o cliente", - "Logged in user must be a subadmin" : "O usuario registrado debe ser un subadministrador", + "Logged in user must be a subadmin" : "O usuario rexistrado debe ser un subadministrador", "Migration in progress. Please wait until the migration is finished" : "A migración está en proceso. Agarde a que remate.", "Migration started …" : "Iniciada a migración ...", "Not saved" : "Sen gardar", @@ -547,10 +549,13 @@ OC.L10N.register( "Excluded groups" : "Grupos excluídos", "When groups are selected/excluded, they use the following logic to determine if a user has 2FA enforced: If no groups are selected, 2FA is enabled for everyone except members of the excluded groups. If groups are selected, 2FA is enabled for all members of these. If a user is both in a selected and excluded group, the selected takes precedence and 2FA is enforced." : "Cando se seleccionan/exclúen os grupos, usase a seguinte lóxica para determinar se un usuario ten obrigada a A2F: Se non hai grupos seleccionados, a A2F está activa para todos agás os membros dos grupos excluídos. Se hai grupos seleccionados, a A2F está activa para todos os membros destes. Se un usuario está á vez nun grupo seleccionado e noutro excluído, o seleccionado ten preferencia e se lle obriga a A2F.", "Save changes" : "Gardar os cambios", + "Marked for remote wipe" : "Marcado para limpeza remota", "Device settings" : "Axustes do dispositivo", "Allow filesystem access" : "Permitir o acceso aos sistema de ficheiros", "Rename" : "Renomear", "Revoke" : "Revogar", + "Wipe device" : "Limpar o dispositivo", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "O revogado desta marca pode impedir a limpeza deste dispositivo se aínda non comezou.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -573,6 +578,7 @@ OC.L10N.register( "Error while updating device token scope" : "Produciuse un erro ao actualizar o ámbito da marca do dispositivo", "Error while updating device token name" : "Produciuse un erro ao actualizar o nome da marca do dispositivo", "Error while deleting the token" : "Produciuse un erro mentres eliminaba unha marca", + "Error while wiping the device with the token" : "Produciuse un erro ao limpar o dispositivo coa marca", "App name" : "Nome do aplicativo", "Create new app password" : "Crear un novo contrasinal de aplicativo", "Use the credentials below to configure your app or device." : "Use as seguintes credenciais para configurar o seu aplicativo ou dispositivo. ", diff --git a/settings/l10n/gl.json b/settings/l10n/gl.json index 2092ef9dcc0..1c2ec6bb143 100644 --- a/settings/l10n/gl.json +++ b/settings/l10n/gl.json @@ -24,6 +24,8 @@ "Security" : "Seguridade", "You successfully logged in using two-factor authentication (%1$s)" : "Accedeu satisfactoriamente usando autenticación de dous factores (%1$s)", "A login attempt using two-factor authentication failed (%1$s)" : "Fallou un intento de acceso usando autenticación de dous factores (%1$s)", + "Remote wipe was started on %1$s" : "Iniciouse a limpeza remota en %1$s", + "Remote wipe has finished on %1$s" : "Rematou a limpeza remota en %1$s", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Foi modificado o seu <strong>contrasinal</strong> ou o seu <strong>correo electrónico</strong>", "Couldn't remove app." : "Non foi posíbel retirar o aplicativo.", "Couldn't update app." : "Non foi posíbel actualizar o aplicativo.", @@ -70,7 +72,7 @@ "Set your password" : "Estabeleza o seu contrasinal", "Go to %s" : "Ira a %s", "Install Client" : "Instalar o cliente", - "Logged in user must be a subadmin" : "O usuario registrado debe ser un subadministrador", + "Logged in user must be a subadmin" : "O usuario rexistrado debe ser un subadministrador", "Migration in progress. Please wait until the migration is finished" : "A migración está en proceso. Agarde a que remate.", "Migration started …" : "Iniciada a migración ...", "Not saved" : "Sen gardar", @@ -545,10 +547,13 @@ "Excluded groups" : "Grupos excluídos", "When groups are selected/excluded, they use the following logic to determine if a user has 2FA enforced: If no groups are selected, 2FA is enabled for everyone except members of the excluded groups. If groups are selected, 2FA is enabled for all members of these. If a user is both in a selected and excluded group, the selected takes precedence and 2FA is enforced." : "Cando se seleccionan/exclúen os grupos, usase a seguinte lóxica para determinar se un usuario ten obrigada a A2F: Se non hai grupos seleccionados, a A2F está activa para todos agás os membros dos grupos excluídos. Se hai grupos seleccionados, a A2F está activa para todos os membros destes. Se un usuario está á vez nun grupo seleccionado e noutro excluído, o seleccionado ten preferencia e se lle obriga a A2F.", "Save changes" : "Gardar os cambios", + "Marked for remote wipe" : "Marcado para limpeza remota", "Device settings" : "Axustes do dispositivo", "Allow filesystem access" : "Permitir o acceso aos sistema de ficheiros", "Rename" : "Renomear", "Revoke" : "Revogar", + "Wipe device" : "Limpar o dispositivo", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "O revogado desta marca pode impedir a limpeza deste dispositivo se aínda non comezou.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -571,6 +576,7 @@ "Error while updating device token scope" : "Produciuse un erro ao actualizar o ámbito da marca do dispositivo", "Error while updating device token name" : "Produciuse un erro ao actualizar o nome da marca do dispositivo", "Error while deleting the token" : "Produciuse un erro mentres eliminaba unha marca", + "Error while wiping the device with the token" : "Produciuse un erro ao limpar o dispositivo coa marca", "App name" : "Nome do aplicativo", "Create new app password" : "Crear un novo contrasinal de aplicativo", "Use the credentials below to configure your app or device." : "Use as seguintes credenciais para configurar o seu aplicativo ou dispositivo. ", diff --git a/settings/l10n/is.js b/settings/l10n/is.js index 8d745914448..91ccfb5f196 100644 --- a/settings/l10n/is.js +++ b/settings/l10n/is.js @@ -584,6 +584,7 @@ OC.L10N.register( "Copied!" : "Afritað!", "Copy" : "Afrita", "Could not copy app password. Please copy it manually." : "Tókst ekki að afrita lykilorð forritsins. Afritaðu það handvirkt.", + "Supported" : "Stutt", "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Opinber forrit eru þróuð af og innan samfélagsins. Þau bjóða upp á ýmsa kjarnaeiginleika og eru tilbúin til notkunar í raunvinnslu.", "Official" : "Opinbert", "by" : "af", diff --git a/settings/l10n/is.json b/settings/l10n/is.json index 81ff10947a8..173b1de7a1c 100644 --- a/settings/l10n/is.json +++ b/settings/l10n/is.json @@ -582,6 +582,7 @@ "Copied!" : "Afritað!", "Copy" : "Afrita", "Could not copy app password. Please copy it manually." : "Tókst ekki að afrita lykilorð forritsins. Afritaðu það handvirkt.", + "Supported" : "Stutt", "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Opinber forrit eru þróuð af og innan samfélagsins. Þau bjóða upp á ýmsa kjarnaeiginleika og eru tilbúin til notkunar í raunvinnslu.", "Official" : "Opinbert", "by" : "af", diff --git a/settings/l10n/sl.js b/settings/l10n/sl.js index 3e1eb018496..eab4685fe53 100644 --- a/settings/l10n/sl.js +++ b/settings/l10n/sl.js @@ -25,11 +25,11 @@ OC.L10N.register( "Unable to change full name" : "Ni mogoče spremeniti polnega imena", "In order to verify your Twitter account, post the following tweet on Twitter (please make sure to post it without any line breaks):" : "Za overitev računa Twitter, objavite sporočilo (prepričajte se, da ni nobenega preloma vrstice):", "Your %s account was created" : "Račun %s je uspešno ustvarjen.", - "Set your password" : "Nastavi vaše geslo", + "Set your password" : "Določitev gesla", "Migration in progress. Please wait until the migration is finished" : "V teku je selitev. Počakajte, da se zaključi.", "Migration started …" : "Selitev je začeta ...", "Sending…" : "Poteka pošiljanje ...", - "Email sent" : "Elektronska pošta je poslana", + "Email sent" : "Elektronsko sporočilo je poslano", "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Prišlo je do napake. Uvoziti je treba ustrezno ASCII kodirano potrdilo PEM.", "Valid until {date}" : "Veljavno do {date}", "Delete" : "Izbriši", @@ -136,7 +136,7 @@ OC.L10N.register( "Developer documentation" : "Dokumentacija za razvijalce", "Update to {update}" : "Posodobi na {update}", "Results from other categories" : "Rezultati iskanja med drugimi kategorijami", - "No apps found for your version" : "Za to različico ni na voljo noben program", + "No apps found for your version" : "Za nameščeno različico oziroma iskalni niz ni nobenega programa", "Disable all" : "Onemogoči vse", "Enable all" : "Omogoči vse", "Download and enable" : "Prejmi in omogoči", diff --git a/settings/l10n/sl.json b/settings/l10n/sl.json index a39ac35dd66..8ce26c630df 100644 --- a/settings/l10n/sl.json +++ b/settings/l10n/sl.json @@ -23,11 +23,11 @@ "Unable to change full name" : "Ni mogoče spremeniti polnega imena", "In order to verify your Twitter account, post the following tweet on Twitter (please make sure to post it without any line breaks):" : "Za overitev računa Twitter, objavite sporočilo (prepričajte se, da ni nobenega preloma vrstice):", "Your %s account was created" : "Račun %s je uspešno ustvarjen.", - "Set your password" : "Nastavi vaše geslo", + "Set your password" : "Določitev gesla", "Migration in progress. Please wait until the migration is finished" : "V teku je selitev. Počakajte, da se zaključi.", "Migration started …" : "Selitev je začeta ...", "Sending…" : "Poteka pošiljanje ...", - "Email sent" : "Elektronska pošta je poslana", + "Email sent" : "Elektronsko sporočilo je poslano", "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Prišlo je do napake. Uvoziti je treba ustrezno ASCII kodirano potrdilo PEM.", "Valid until {date}" : "Veljavno do {date}", "Delete" : "Izbriši", @@ -134,7 +134,7 @@ "Developer documentation" : "Dokumentacija za razvijalce", "Update to {update}" : "Posodobi na {update}", "Results from other categories" : "Rezultati iskanja med drugimi kategorijami", - "No apps found for your version" : "Za to različico ni na voljo noben program", + "No apps found for your version" : "Za nameščeno različico oziroma iskalni niz ni nobenega programa", "Disable all" : "Onemogoči vse", "Enable all" : "Omogoči vse", "Download and enable" : "Prejmi in omogoči", diff --git a/settings/l10n/uk.js b/settings/l10n/uk.js index 68d4763e077..38bb77aeab2 100644 --- a/settings/l10n/uk.js +++ b/settings/l10n/uk.js @@ -1,6 +1,17 @@ OC.L10N.register( "settings", { + "{actor} added you to group {group}" : "{actor} додав вас до групи {group}", + "You added {user} to group {group}" : "Ви додали {user} до групи {group}", + "{actor} added {user} to group {group}" : "{actor} додав {user} до групи {group}", + "An administrator added you to group {group}" : "Адміністратор додав вас до групи {group}", + "An administrator added {user} to group {group}" : "Адміністратор додав {user} до групи {group}", + "{actor} removed you from group {group}" : "{actor} вилучив вас із групи {group}", + "You removed {user} from group {group}" : "Ви вилучили {user} з групи {group}", + "{actor} removed {user} from group {group}" : "{actor} вилучив {user} з групи {group}", + "An administrator removed you from group {group}" : "Адміністратор вилучив вас з групи {group}", + "An administrator removed {user} from group {group}" : "Адміністратор вилучив {user} з групи {group}", + "Your <strong>group memberships</strong> were modified" : "Парамеири вашої <strong>участі в групі</strong> оновлено", "{actor} changed your password" : "{actor} змінив ваш пароль", "You changed your password" : "Ви змінили свій пароль", "Your password was reset by an administrator" : "Ваш пароль був скинутий адміністратором", @@ -11,9 +22,9 @@ OC.L10N.register( "You successfully logged in using two-factor authentication (%1$s)" : "Ви успішно увійшли, використовуючи двофакторну аутентифікацію (%1$s)", "A login attempt using two-factor authentication failed (%1$s)" : "Помилка спроби входу в систему, використовуючи двофакторну аутентифікацію (%1$s)", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Ваш <strong>пароль</strong> чи <strong>електронна пошта</strong> були змінені", - "Couldn't remove app." : "Неможливо видалити додаток.", - "Couldn't update app." : "Не вдалося оновити додаток. ", - "Wrong password" : "Невірний пароль", + "Couldn't remove app." : "Неможливо вилучити застосунок.", + "Couldn't update app." : "Не вдалося оновити застосунок.", + "Wrong password" : "Неправильний пароль", "Saved" : "Збережено", "No user supplied" : "Користувача не вказано", "Unable to change password" : "Неможливо змінити пароль", diff --git a/settings/l10n/uk.json b/settings/l10n/uk.json index 55d4c529f91..e25c9197156 100644 --- a/settings/l10n/uk.json +++ b/settings/l10n/uk.json @@ -1,4 +1,15 @@ { "translations": { + "{actor} added you to group {group}" : "{actor} додав вас до групи {group}", + "You added {user} to group {group}" : "Ви додали {user} до групи {group}", + "{actor} added {user} to group {group}" : "{actor} додав {user} до групи {group}", + "An administrator added you to group {group}" : "Адміністратор додав вас до групи {group}", + "An administrator added {user} to group {group}" : "Адміністратор додав {user} до групи {group}", + "{actor} removed you from group {group}" : "{actor} вилучив вас із групи {group}", + "You removed {user} from group {group}" : "Ви вилучили {user} з групи {group}", + "{actor} removed {user} from group {group}" : "{actor} вилучив {user} з групи {group}", + "An administrator removed you from group {group}" : "Адміністратор вилучив вас з групи {group}", + "An administrator removed {user} from group {group}" : "Адміністратор вилучив {user} з групи {group}", + "Your <strong>group memberships</strong> were modified" : "Парамеири вашої <strong>участі в групі</strong> оновлено", "{actor} changed your password" : "{actor} змінив ваш пароль", "You changed your password" : "Ви змінили свій пароль", "Your password was reset by an administrator" : "Ваш пароль був скинутий адміністратором", @@ -9,9 +20,9 @@ "You successfully logged in using two-factor authentication (%1$s)" : "Ви успішно увійшли, використовуючи двофакторну аутентифікацію (%1$s)", "A login attempt using two-factor authentication failed (%1$s)" : "Помилка спроби входу в систему, використовуючи двофакторну аутентифікацію (%1$s)", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Ваш <strong>пароль</strong> чи <strong>електронна пошта</strong> були змінені", - "Couldn't remove app." : "Неможливо видалити додаток.", - "Couldn't update app." : "Не вдалося оновити додаток. ", - "Wrong password" : "Невірний пароль", + "Couldn't remove app." : "Неможливо вилучити застосунок.", + "Couldn't update app." : "Не вдалося оновити застосунок.", + "Wrong password" : "Неправильний пароль", "Saved" : "Збережено", "No user supplied" : "Користувача не вказано", "Unable to change password" : "Неможливо змінити пароль", diff --git a/settings/l10n/zh_CN.js b/settings/l10n/zh_CN.js index 4034abad60f..cf9914c6157 100644 --- a/settings/l10n/zh_CN.js +++ b/settings/l10n/zh_CN.js @@ -74,7 +74,7 @@ OC.L10N.register( "Set your password" : "设置您的密码", "Go to %s" : "访问 %s", "Install Client" : "安装客户端", - "Logged in user must be a subadmin" : "已登录的用户必须为子管理员", + "Logged in user must be a subadmin" : "当前登录用户必须为子管理员", "Migration in progress. Please wait until the migration is finished" : "正在进行迁移。请稍等,直到迁移完成", "Migration started …" : "迁移开始...", "Not saved" : "未保存", diff --git a/settings/l10n/zh_CN.json b/settings/l10n/zh_CN.json index 605fb40b970..d86bb48e872 100644 --- a/settings/l10n/zh_CN.json +++ b/settings/l10n/zh_CN.json @@ -72,7 +72,7 @@ "Set your password" : "设置您的密码", "Go to %s" : "访问 %s", "Install Client" : "安装客户端", - "Logged in user must be a subadmin" : "已登录的用户必须为子管理员", + "Logged in user must be a subadmin" : "当前登录用户必须为子管理员", "Migration in progress. Please wait until the migration is finished" : "正在进行迁移。请稍等,直到迁移完成", "Migration started …" : "迁移开始...", "Not saved" : "未保存", diff --git a/tests/Settings/Controller/AdminSettingsControllerTest.php b/tests/Settings/Controller/AdminSettingsControllerTest.php index 6c2b44f37e0..c86615ed590 100644 --- a/tests/Settings/Controller/AdminSettingsControllerTest.php +++ b/tests/Settings/Controller/AdminSettingsControllerTest.php @@ -25,9 +25,14 @@ namespace Tests\Settings\Controller; use OC\Settings\Personal\ServerDevNotice; use OC\Settings\Controller\AdminSettingsController; use OCP\AppFramework\Http\TemplateResponse; +use OCP\Group\ISubAdmin; +use OCP\IGroupManager; use OCP\INavigationManager; use OCP\IRequest; +use OCP\IUser; +use OCP\IUserSession; use OCP\Settings\IManager; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; /** @@ -38,29 +43,42 @@ use Test\TestCase; * @package Tests\Settings\Controller */ class AdminSettingsControllerTest extends TestCase { + /** @var AdminSettingsController */ private $adminSettingsController; - /** @var IRequest */ + /** @var IRequest|MockObject */ private $request; - /** @var INavigationManager */ + /** @var INavigationManager|MockObject */ private $navigationManager; - /** @var IManager|\PHPUnit_Framework_MockObject_MockObject */ + /** @var IManager|MockObject */ private $settingsManager; + /** @var IUserSession|MockObject */ + private $userSession; + /** @var IGroupManager|MockObject */ + private $groupManager; + /** @var ISubAdmin|MockObject */ + private $subAdmin; /** @var string */ private $adminUid = 'lololo'; public function setUp() { parent::setUp(); - $this->request = $this->getMockBuilder(IRequest::class)->getMock(); - $this->navigationManager = $this->getMockBuilder(INavigationManager::class)->getMock(); - $this->settingsManager = $this->getMockBuilder(IManager::class)->getMock(); + $this->request = $this->createMock(IRequest::class); + $this->navigationManager = $this->createMock(INavigationManager::class); + $this->settingsManager = $this->createMock(IManager::class); + $this->userSession = $this->createMock(IUserSession::class); + $this->groupManager = $this->createMock(IGroupManager::class); + $this->subAdmin = $this->createMock(ISubAdmin::class); $this->adminSettingsController = new AdminSettingsController( 'settings', $this->request, $this->navigationManager, - $this->settingsManager + $this->settingsManager, + $this->userSession, + $this->groupManager, + $this->subAdmin ); $user = \OC::$server->getUserManager()->createUser($this->adminUid, 'olo'); @@ -75,6 +93,19 @@ class AdminSettingsControllerTest extends TestCase { } public function testIndex() { + $user = $this->createMock(IUser::class); + $this->userSession + ->method('getUser') + ->willReturn($user); + $user->method('getUID')->willReturn('user123'); + $this->groupManager + ->method('isAdmin') + ->with('user123') + ->willReturn(true); + $this->subAdmin + ->method('isSubAdmin') + ->with($user) + ->willReturn(false); $this->settingsManager ->expects($this->once()) ->method('getAdminSections') @@ -89,7 +120,9 @@ class AdminSettingsControllerTest extends TestCase { ->with('test') ->willReturn([5 => new ServerDevNotice()]); + $idx = $this->adminSettingsController->index('test'); + $expected = new TemplateResponse('settings', 'settings/frame', ['forms' => ['personal' => [], 'admin' => []], 'content' => '']); - $this->assertEquals($expected, $this->adminSettingsController->index('test')); + $this->assertEquals($expected, $idx); } } diff --git a/tests/lib/AppFramework/AppTest.php b/tests/lib/AppFramework/AppTest.php index b31f4428777..3917cea68dd 100644 --- a/tests/lib/AppFramework/AppTest.php +++ b/tests/lib/AppFramework/AppTest.php @@ -90,7 +90,7 @@ class AppTest extends \Test\TestCase { public function testControllerNameAndMethodAreBeingPassed(){ - $return = array(null, array(), array(), null, new Response()); + $return = ['HTTP/2.0 200 OK', [], [], null, new Response()]; $this->dispatcher->expects($this->once()) ->method('dispatch') ->with($this->equalTo($this->controller), @@ -130,7 +130,7 @@ class AppTest extends \Test\TestCase { public function testOutputIsPrinted(){ - $return = [Http::STATUS_OK, [], [], $this->output, new Response()]; + $return = ['HTTP/2.0 200 OK', [], [], $this->output, new Response()]; $this->dispatcher->expects($this->once()) ->method('dispatch') ->with($this->equalTo($this->controller), @@ -144,16 +144,15 @@ class AppTest extends \Test\TestCase { public function dataNoOutput() { return [ - [Http::STATUS_NO_CONTENT], - [Http::STATUS_NOT_MODIFIED], + ['HTTP/2.0 204 No content'], + ['HTTP/2.0 304 Not modified'], ]; } /** * @dataProvider dataNoOutput - * @param int $statusCode */ - public function testNoOutput($statusCode) { + public function testNoOutput(string $statusCode) { $return = [$statusCode, [], [], $this->output, new Response()]; $this->dispatcher->expects($this->once()) ->method('dispatch') @@ -173,7 +172,7 @@ class AppTest extends \Test\TestCase { $mock = $this->getMockBuilder('OCP\AppFramework\Http\ICallbackResponse') ->getMock(); - $return = [null, [], [], $this->output, $mock]; + $return = ['HTTP/2.0 200 OK', [], [], $this->output, $mock]; $this->dispatcher->expects($this->once()) ->method('dispatch') ->with($this->equalTo($this->controller), @@ -188,7 +187,7 @@ class AppTest extends \Test\TestCase { $this->container['AppName'] = 'core'; $this->container['OC\Core\Controller\Foo'] = $this->controller; - $return = array(null, array(), array(), null, new Response()); + $return = ['HTTP/2.0 200 OK', [], [], null, new Response()]; $this->dispatcher->expects($this->once()) ->method('dispatch') ->with($this->equalTo($this->controller), @@ -205,7 +204,7 @@ class AppTest extends \Test\TestCase { $this->container['AppName'] = 'settings'; $this->container['OC\Settings\Controller\Foo'] = $this->controller; - $return = array(null, array(), array(), null, new Response()); + $return = ['HTTP/2.0 200 OK', [], [], null, new Response()]; $this->dispatcher->expects($this->once()) ->method('dispatch') ->with($this->equalTo($this->controller), @@ -222,7 +221,7 @@ class AppTest extends \Test\TestCase { $this->container['AppName'] = 'bar'; $this->container['OCA\Bar\Controller\Foo'] = $this->controller; - $return = array(null, array(), array(), null, new Response()); + $return = ['HTTP/2.0 200 OK', [], [], null, new Response()]; $this->dispatcher->expects($this->once()) ->method('dispatch') ->with($this->equalTo($this->controller), diff --git a/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php b/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php index 13c5379b142..ab243616be0 100644 --- a/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php +++ b/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php @@ -96,12 +96,12 @@ class SecurityMiddlewareTest extends \Test\TestCase { $this->csrfTokenManager = $this->createMock(CsrfTokenManager::class); $this->cspNonceManager = $this->createMock(ContentSecurityPolicyNonceManager::class); $this->l10n = $this->createMock(IL10N::class); - $this->middleware = $this->getMiddleware(true, true); + $this->middleware = $this->getMiddleware(true, true, false); $this->secException = new SecurityException('hey', false); $this->secAjaxException = new SecurityException('hey', true); } - private function getMiddleware(bool $isLoggedIn, bool $isAdminUser, bool $isAppEnabledForUser = true): SecurityMiddleware { + private function getMiddleware(bool $isLoggedIn, bool $isAdminUser, bool $isSubAdmin, bool $isAppEnabledForUser = true): SecurityMiddleware { $this->appManager = $this->createMock(IAppManager::class); $this->appManager->expects($this->any()) @@ -117,6 +117,7 @@ class SecurityMiddlewareTest extends \Test\TestCase { 'files', $isLoggedIn, $isAdminUser, + $isSubAdmin, $this->contentSecurityPolicyManager, $this->csrfTokenManager, $this->cspNonceManager, @@ -153,7 +154,7 @@ class SecurityMiddlewareTest extends \Test\TestCase { $isLoggedIn = true; } - $sec = $this->getMiddleware($isLoggedIn, $isAdminUser); + $sec = $this->getMiddleware($isLoggedIn, $isAdminUser, false); try { $this->reader->reflect(__CLASS__, $method); @@ -216,11 +217,6 @@ class SecurityMiddlewareTest extends \Test\TestCase { ); $this->ajaxExceptionStatus( __FUNCTION__, - 'isSubAdminUser', - 0 - ); - $this->ajaxExceptionStatus( - __FUNCTION__, 'passesCSRFCheck', 0 ); @@ -236,7 +232,7 @@ class SecurityMiddlewareTest extends \Test\TestCase { ->method('passesCSRFCheck') ->will($this->returnValue(false)); - $sec = $this->getMiddleware(false, false); + $sec = $this->getMiddleware(false, false, false); $this->reader->reflect(__CLASS__, __FUNCTION__); $sec->beforeController($this->controller, __FUNCTION__); @@ -257,7 +253,7 @@ class SecurityMiddlewareTest extends \Test\TestCase { $isAdminUser = false; } - $sec = $this->getMiddleware($isLoggedIn, $isAdminUser); + $sec = $this->getMiddleware($isLoggedIn, $isAdminUser, false); if($shouldFail) { $this->expectException(SecurityException::class); @@ -452,6 +448,41 @@ class SecurityMiddlewareTest extends \Test\TestCase { $this->securityCheck(__FUNCTION__, 'isAdminUser'); } + /** + * @NoCSRFRequired + * @SubAdminRequired + */ + public function testIsNotSubAdminCheck(){ + $this->reader->reflect(__CLASS__,__FUNCTION__); + $sec = $this->getMiddleware(true, false, false); + + $this->expectException(SecurityException::class); + $sec->beforeController($this, __METHOD__); + } + + /** + * @NoCSRFRequired + * @SubAdminRequired + */ + public function testIsSubAdminCheck(){ + $this->reader->reflect(__CLASS__,__FUNCTION__); + $sec = $this->getMiddleware(true, false, true); + + $sec->beforeController($this, __METHOD__); + $this->addToAssertionCount(1); + } + + /** + * @NoCSRFRequired + * @SubAdminRequired + */ + public function testIsSubAdminAndAdminCheck(){ + $this->reader->reflect(__CLASS__,__FUNCTION__); + $sec = $this->getMiddleware(true, true, true); + + $sec->beforeController($this, __METHOD__); + $this->addToAssertionCount(1); + } /** * @NoCSRFRequired @@ -479,7 +510,7 @@ class SecurityMiddlewareTest extends \Test\TestCase { $this->createMock(ISecureRandom::class), $this->createMock(IConfig::class) ); - $this->middleware = $this->getMiddleware(false, false); + $this->middleware = $this->getMiddleware(false, false, false); $this->urlGenerator ->expects($this->once()) ->method('linkToRoute') @@ -514,7 +545,7 @@ class SecurityMiddlewareTest extends \Test\TestCase { $this->createMock(IConfig::class) ); - $this->middleware = $this->getMiddleware(false, false); + $this->middleware = $this->getMiddleware(false, false, false); $response = $this->middleware->afterException( $this->controller, 'test', @@ -559,7 +590,7 @@ class SecurityMiddlewareTest extends \Test\TestCase { $this->createMock(ISecureRandom::class), $this->createMock(IConfig::class) ); - $this->middleware = $this->getMiddleware(false, false); + $this->middleware = $this->getMiddleware(false, false, false); $this->logger ->expects($this->once()) ->method('logException'); @@ -684,7 +715,7 @@ class SecurityMiddlewareTest extends \Test\TestCase { * @NoCSRFRequired */ public function testRestrictedAppLoggedInPublicPage() { - $middleware = $this->getMiddleware(true, false); + $middleware = $this->getMiddleware(true, false, false); $this->reader->reflect(__CLASS__,__FUNCTION__); $this->appManager->method('getAppPath') @@ -705,7 +736,7 @@ class SecurityMiddlewareTest extends \Test\TestCase { * @NoCSRFRequired */ public function testRestrictedAppNotLoggedInPublicPage() { - $middleware = $this->getMiddleware(false, false); + $middleware = $this->getMiddleware(false, false, false); $this->reader->reflect(__CLASS__,__FUNCTION__); $this->appManager->method('getAppPath') @@ -725,7 +756,7 @@ class SecurityMiddlewareTest extends \Test\TestCase { * @NoCSRFRequired */ public function testRestrictedAppLoggedIn() { - $middleware = $this->getMiddleware(true, false, false); + $middleware = $this->getMiddleware(true, false, false, false); $this->reader->reflect(__CLASS__,__FUNCTION__); $this->appManager->method('getAppPath') diff --git a/tests/lib/Settings/ManagerTest.php b/tests/lib/Settings/ManagerTest.php index 7372cae811b..4128e33aef1 100644 --- a/tests/lib/Settings/ManagerTest.php +++ b/tests/lib/Settings/ManagerTest.php @@ -23,6 +23,7 @@ namespace Tests\Settings; +use function get_class; use OC\Settings\Admin\Sharing; use OC\Settings\Manager; use OC\Settings\Mapper; @@ -34,6 +35,8 @@ use OCP\ILogger; use OCP\IServerContainer; use OCP\IURLGenerator; use OCP\L10N\IFactory; +use OCP\Settings\ISettings; +use OCP\Settings\ISubAdminSettings; use Test\TestCase; class ManagerTest extends TestCase { @@ -207,6 +210,35 @@ class ManagerTest extends TestCase { ], $settings); } + public function testGetAdminSettingsAsSubAdmin() { + $section = $this->createMock(Sharing::class); + $this->container->expects($this->once()) + ->method('query') + ->with(Sharing::class) + ->willReturn($section); + + $settings = $this->manager->getAdminSettings('sharing', true); + + $this->assertEquals([], $settings); + } + + public function testGetSubAdminSettingsAsSubAdmin() { + $section = $this->createMock(ISubAdminSettings::class); + $section->expects($this->once()) + ->method('getPriority') + ->willReturn(13); + $this->container->expects($this->once()) + ->method('query') + ->with(Sharing::class) + ->willReturn($section); + + $settings = $this->manager->getAdminSettings('sharing', true); + + $this->assertEquals([ + 13 => [$section] + ], $settings); + } + public function testGetPersonalSettings() { $section = $this->createMock(Security::class); $section->expects($this->once()) |