summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/admin_audit/appinfo/info.xml4
-rw-r--r--apps/comments/l10n/ca.js38
-rw-r--r--apps/comments/l10n/ca.json38
-rw-r--r--apps/comments/l10n/fr.js2
-rw-r--r--apps/comments/l10n/fr.json2
-rw-r--r--apps/comments/lib/Notification/Listener.php15
-rw-r--r--apps/comments/lib/Notification/Notifier.php6
-rw-r--r--apps/comments/tests/Unit/Notification/ListenerTest.php8
-rw-r--r--apps/dav/l10n/cs_CZ.js70
-rw-r--r--apps/dav/l10n/cs_CZ.json70
-rw-r--r--apps/dav/l10n/sq.js40
-rw-r--r--apps/dav/l10n/sq.json38
-rw-r--r--apps/dav/l10n/sv.js44
-rw-r--r--apps/dav/l10n/sv.json44
-rw-r--r--apps/dav/lib/CalDAV/Activity/Filter/Todo.php2
-rw-r--r--apps/dav/lib/CalDAV/Activity/Setting/Todo.php2
-rw-r--r--apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php6
-rw-r--r--apps/encryption/l10n/fr.js2
-rw-r--r--apps/encryption/l10n/fr.json2
-rw-r--r--apps/encryption/l10n/sk_SK.js9
-rw-r--r--apps/encryption/l10n/sk_SK.json9
-rw-r--r--apps/encryption/l10n/sv.js2
-rw-r--r--apps/encryption/l10n/sv.json2
-rw-r--r--apps/encryption/lib/Hooks/UserHooks.php61
-rw-r--r--apps/encryption/lib/KeyManager.php8
-rw-r--r--apps/encryption/tests/Hooks/UserHooksTest.php47
-rw-r--r--apps/encryption/tests/KeyManagerTest.php6
-rw-r--r--apps/federatedfilesharing/l10n/cs_CZ.js1
-rw-r--r--apps/federatedfilesharing/l10n/cs_CZ.json1
-rw-r--r--apps/federatedfilesharing/l10n/de.js2
-rw-r--r--apps/federatedfilesharing/l10n/de.json2
-rw-r--r--apps/federatedfilesharing/l10n/de_DE.js2
-rw-r--r--apps/federatedfilesharing/l10n/de_DE.json2
-rw-r--r--apps/federatedfilesharing/l10n/fr.js2
-rw-r--r--apps/federatedfilesharing/l10n/fr.json2
-rw-r--r--apps/federatedfilesharing/l10n/sq.js26
-rw-r--r--apps/federatedfilesharing/l10n/sq.json26
-rw-r--r--apps/federatedfilesharing/l10n/sv.js2
-rw-r--r--apps/federatedfilesharing/l10n/sv.json2
-rw-r--r--apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php46
-rw-r--r--apps/federation/l10n/cs_CZ.js3
-rw-r--r--apps/federation/l10n/cs_CZ.json3
-rw-r--r--apps/files/css/mobile.css2
-rw-r--r--apps/files/js/filelist.js10
-rw-r--r--apps/files/l10n/cs_CZ.js25
-rw-r--r--apps/files/l10n/cs_CZ.json25
-rw-r--r--apps/files/l10n/de.js2
-rw-r--r--apps/files/l10n/de.json2
-rw-r--r--apps/files/l10n/de_DE.js2
-rw-r--r--apps/files/l10n/de_DE.json2
-rw-r--r--apps/files/l10n/fr.js22
-rw-r--r--apps/files/l10n/fr.json22
-rw-r--r--apps/files/l10n/sv.js2
-rw-r--r--apps/files/l10n/sv.json2
-rw-r--r--apps/files/l10n/zh_CN.js132
-rw-r--r--apps/files/l10n/zh_CN.json132
-rw-r--r--apps/files_external/appinfo/info.xml6
-rw-r--r--apps/files_external/l10n/de_DE.js2
-rw-r--r--apps/files_external/l10n/de_DE.json2
-rw-r--r--apps/files_external/lib/Lib/Storage/AmazonS3.php16
-rw-r--r--apps/files_external/lib/Lib/Storage/Dropbox.php28
-rw-r--r--apps/files_external/lib/Lib/Storage/FTP.php16
-rw-r--r--apps/files_external/lib/Lib/Storage/Google.php144
-rw-r--r--apps/files_external/lib/Lib/Storage/Swift.php16
-rw-r--r--apps/files_sharing/l10n/cs_CZ.js184
-rw-r--r--apps/files_sharing/l10n/cs_CZ.json184
-rw-r--r--apps/files_sharing/l10n/fr.js2
-rw-r--r--apps/files_sharing/l10n/fr.json2
-rw-r--r--apps/files_sharing/l10n/pl.js161
-rw-r--r--apps/files_sharing/l10n/pl.json161
-rw-r--r--apps/files_sharing/l10n/ru.js50
-rw-r--r--apps/files_sharing/l10n/ru.json50
-rw-r--r--apps/files_sharing/lib/AppInfo/Application.php4
-rw-r--r--apps/files_sharing/lib/Middleware/SharingCheckMiddleware.php30
-rw-r--r--apps/files_sharing/tests/Middleware/SharingCheckMiddlewareTest.php34
-rw-r--r--apps/files_trashbin/l10n/zh_CN.js6
-rw-r--r--apps/files_trashbin/l10n/zh_CN.json6
-rw-r--r--apps/files_versions/l10n/cs_CZ.js1
-rw-r--r--apps/files_versions/l10n/cs_CZ.json1
-rw-r--r--apps/files_versions/l10n/de_DE.js2
-rw-r--r--apps/files_versions/l10n/de_DE.json2
-rw-r--r--apps/sharebymail/lib/ShareByMailProvider.php19
-rw-r--r--apps/systemtags/l10n/cs_CZ.js40
-rw-r--r--apps/systemtags/l10n/cs_CZ.json40
-rw-r--r--apps/theming/lib/Controller/ThemingController.php4
-rw-r--r--apps/theming/tests/Controller/ThemingControllerTest.php11
-rw-r--r--apps/twofactor_backupcodes/appinfo/app.php3
-rw-r--r--apps/twofactor_backupcodes/appinfo/routes.php2
-rw-r--r--apps/twofactor_backupcodes/l10n/cs_CZ.js4
-rw-r--r--apps/twofactor_backupcodes/l10n/cs_CZ.json4
-rw-r--r--apps/twofactor_backupcodes/l10n/de.js2
-rw-r--r--apps/twofactor_backupcodes/l10n/de.json2
-rw-r--r--apps/twofactor_backupcodes/lib/Activity/Provider.php5
-rw-r--r--apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php1
-rw-r--r--apps/twofactor_backupcodes/lib/Service/BackupCodeStorage.php11
-rw-r--r--apps/twofactor_backupcodes/settings/personal.php3
-rw-r--r--apps/twofactor_backupcodes/tests/Unit/Activity/GenericProviderTest.php132
-rw-r--r--apps/twofactor_backupcodes/tests/Unit/Activity/ProviderTest.php55
-rw-r--r--apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php37
-rw-r--r--apps/updatenotification/l10n/cs_CZ.js4
-rw-r--r--apps/updatenotification/l10n/cs_CZ.json4
-rw-r--r--apps/updatenotification/lib/Notification/BackgroundJob.php23
-rw-r--r--apps/updatenotification/lib/Notification/Notifier.php36
-rw-r--r--apps/updatenotification/tests/Notification/BackgroundJobTest.php49
-rw-r--r--apps/updatenotification/tests/Notification/NotifierTest.php14
-rw-r--r--apps/user_ldap/l10n/cs_CZ.js5
-rw-r--r--apps/user_ldap/l10n/cs_CZ.json5
-rw-r--r--apps/user_ldap/l10n/fr.js4
-rw-r--r--apps/user_ldap/l10n/fr.json4
-rw-r--r--apps/user_ldap/l10n/sv.js1
-rw-r--r--apps/user_ldap/l10n/sv.json1
-rw-r--r--apps/workflowengine/l10n/sk_SK.js58
-rw-r--r--apps/workflowengine/l10n/sk_SK.json56
113 files changed, 1902 insertions, 928 deletions
diff --git a/apps/admin_audit/appinfo/info.xml b/apps/admin_audit/appinfo/info.xml
index 98862554090..e5ec9db0689 100644
--- a/apps/admin_audit/appinfo/info.xml
+++ b/apps/admin_audit/appinfo/info.xml
@@ -2,9 +2,7 @@
<info>
<id>admin_audit</id>
<name>Auditing / Logging</name>
- <description>Provides logging abilities for Nextcloud such as logging file
- accesses or otherwise sensitive actions.
- </description>
+ <description>Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.</description>
<licence>AGPL</licence>
<author>Nextcloud</author>
<version>1.2.0</version>
diff --git a/apps/comments/l10n/ca.js b/apps/comments/l10n/ca.js
index 9ad9f962572..e97f85ec407 100644
--- a/apps/comments/l10n/ca.js
+++ b/apps/comments/l10n/ca.js
@@ -1,23 +1,39 @@
OC.L10N.register(
"comments",
{
- "Type in a new comment..." : "Escriu en un nou comentari...",
+ "Comments" : "Comentaris",
+ "Unknown user" : "Usuari desconegut",
+ "New comment …" : "Nou comentari...",
"Delete comment" : "Esborrar comentari",
"Post" : "Publica",
"Cancel" : "Cancel·la",
"Edit comment" : "Editar comentari",
"[Deleted user]" : "[usuari Esborrat]",
- "Comments" : "Comentaris",
- "No other comments available" : "No hi han altres comentaris disponibles",
- "More comments..." : "Més comentaris",
+ "No comments yet, start the conversation!" : "Encara no hi ha comentaris. Comenceu la conversa!",
+ "More comments …" : "Més comentaris...",
"Save" : "Desa",
- "Allowed characters {count} of {max}" : "caracters Permessos {count} de {max}",
- "{count} unread comments" : "{count} comentaris no llegits",
+ "Allowed characters {count} of {max}" : "{count} caràcters permesos de {max}",
+ "Error occurred while retrieving comment with id {id}" : "Hi ha hagut un error en extraure el comentari amb id {id}",
+ "Error occurred while updating comment with id {id}" : "Hi ha hagut un error en actualitzar el comentari amb id {id}",
+ "Error occurred while posting comment" : "Hi ha hagut un error en publicar el comentari",
+ "_%n unread comment_::_%n unread comments_" : ["%n comentari no llegit","%n comentaris no llegits"],
"Comment" : "Comentari",
- "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Comentaris</strong> per arxius <em>(sempre llistat en corrent)",
- "You commented" : "Has comentat",
- "%1$s commented" : "%1$s comentat",
- "You commented on %2$s" : "Has comentat a %2$s",
- "%1$s commented on %2$s" : "%1$s ha comentat a %2$s"
+ "You commented" : "Heu comentat",
+ "%1$s commented" : "%1$s ha comentat",
+ "{author} commented" : "{author} ha comentat",
+ "You commented on %1$s" : "Heu comentat a %1$s",
+ "You commented on {file}" : "Heu comentat a {file}",
+ "%1$s commented on %2$s" : "%1$s ha comentat a %2$s",
+ "{author} commented on {file}" : "{author} ha comentat a {file}",
+ "<strong>Comments</strong> for files" : "<strong>Comentaris</strong> per arxius",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Un usuari (ara) esborrat us ha nomenat en un comentari a “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuari (ara) esborrat us ha nomenat en un comentari de “{file}”",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s us ha nomenat en un comentari a “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} us ha nomenat en un comentari de “{file}”",
+ "Type in a new comment..." : "Escriviu un nou comentari...",
+ "No other comments available" : "No hi ha altres comentaris disponibles",
+ "More comments..." : "Més comentaris...",
+ "{count} unread comments" : "{count} comentaris no llegits",
+ "You commented on %2$s" : "Heu comentat a %2$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/comments/l10n/ca.json b/apps/comments/l10n/ca.json
index f6df3abce3b..599ff0afa10 100644
--- a/apps/comments/l10n/ca.json
+++ b/apps/comments/l10n/ca.json
@@ -1,21 +1,37 @@
{ "translations": {
- "Type in a new comment..." : "Escriu en un nou comentari...",
+ "Comments" : "Comentaris",
+ "Unknown user" : "Usuari desconegut",
+ "New comment …" : "Nou comentari...",
"Delete comment" : "Esborrar comentari",
"Post" : "Publica",
"Cancel" : "Cancel·la",
"Edit comment" : "Editar comentari",
"[Deleted user]" : "[usuari Esborrat]",
- "Comments" : "Comentaris",
- "No other comments available" : "No hi han altres comentaris disponibles",
- "More comments..." : "Més comentaris",
+ "No comments yet, start the conversation!" : "Encara no hi ha comentaris. Comenceu la conversa!",
+ "More comments …" : "Més comentaris...",
"Save" : "Desa",
- "Allowed characters {count} of {max}" : "caracters Permessos {count} de {max}",
- "{count} unread comments" : "{count} comentaris no llegits",
+ "Allowed characters {count} of {max}" : "{count} caràcters permesos de {max}",
+ "Error occurred while retrieving comment with id {id}" : "Hi ha hagut un error en extraure el comentari amb id {id}",
+ "Error occurred while updating comment with id {id}" : "Hi ha hagut un error en actualitzar el comentari amb id {id}",
+ "Error occurred while posting comment" : "Hi ha hagut un error en publicar el comentari",
+ "_%n unread comment_::_%n unread comments_" : ["%n comentari no llegit","%n comentaris no llegits"],
"Comment" : "Comentari",
- "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Comentaris</strong> per arxius <em>(sempre llistat en corrent)",
- "You commented" : "Has comentat",
- "%1$s commented" : "%1$s comentat",
- "You commented on %2$s" : "Has comentat a %2$s",
- "%1$s commented on %2$s" : "%1$s ha comentat a %2$s"
+ "You commented" : "Heu comentat",
+ "%1$s commented" : "%1$s ha comentat",
+ "{author} commented" : "{author} ha comentat",
+ "You commented on %1$s" : "Heu comentat a %1$s",
+ "You commented on {file}" : "Heu comentat a {file}",
+ "%1$s commented on %2$s" : "%1$s ha comentat a %2$s",
+ "{author} commented on {file}" : "{author} ha comentat a {file}",
+ "<strong>Comments</strong> for files" : "<strong>Comentaris</strong> per arxius",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Un usuari (ara) esborrat us ha nomenat en un comentari a “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuari (ara) esborrat us ha nomenat en un comentari de “{file}”",
+ "%1$s mentioned you in a comment on “%2$s”" : "%1$s us ha nomenat en un comentari a “%2$s”",
+ "{user} mentioned you in a comment on “{file}”" : "{user} us ha nomenat en un comentari de “{file}”",
+ "Type in a new comment..." : "Escriviu un nou comentari...",
+ "No other comments available" : "No hi ha altres comentaris disponibles",
+ "More comments..." : "Més comentaris...",
+ "{count} unread comments" : "{count} comentaris no llegits",
+ "You commented on %2$s" : "Heu comentat a %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/comments/l10n/fr.js b/apps/comments/l10n/fr.js
index 21641df269b..588f429babc 100644
--- a/apps/comments/l10n/fr.js
+++ b/apps/comments/l10n/fr.js
@@ -9,7 +9,7 @@ OC.L10N.register(
"Cancel" : "Annuler",
"Edit comment" : "Modifier le commentaire",
"[Deleted user]" : "[Utilisateur supprimé]",
- "No comments yet, start the conversation!" : "Il n'y a aucun commentaire, démarrer la conversation!",
+ "No comments yet, start the conversation!" : "Aucun commentaire actuellement, débutez une conversation !",
"More comments …" : "Plus de commentaires ...",
"Save" : "Enregistrer",
"Allowed characters {count} of {max}" : "{count} sur {max} caractères autorisés",
diff --git a/apps/comments/l10n/fr.json b/apps/comments/l10n/fr.json
index c8aa168fc3c..71e3823b84a 100644
--- a/apps/comments/l10n/fr.json
+++ b/apps/comments/l10n/fr.json
@@ -7,7 +7,7 @@
"Cancel" : "Annuler",
"Edit comment" : "Modifier le commentaire",
"[Deleted user]" : "[Utilisateur supprimé]",
- "No comments yet, start the conversation!" : "Il n'y a aucun commentaire, démarrer la conversation!",
+ "No comments yet, start the conversation!" : "Aucun commentaire actuellement, débutez une conversation !",
"More comments …" : "Plus de commentaires ...",
"Save" : "Enregistrer",
"Allowed characters {count} of {max}" : "{count} sur {max} caractères autorisés",
diff --git a/apps/comments/lib/Notification/Listener.php b/apps/comments/lib/Notification/Listener.php
index d30c59c93d5..365f93ce8dd 100644
--- a/apps/comments/lib/Notification/Listener.php
+++ b/apps/comments/lib/Notification/Listener.php
@@ -23,7 +23,6 @@ namespace OCA\Comments\Notification;
use OCP\Comments\CommentsEvent;
use OCP\Comments\IComment;
-use OCP\IURLGenerator;
use OCP\IUserManager;
use OCP\Notification\IManager;
@@ -34,25 +33,19 @@ class Listener {
/** @var IUserManager */
protected $userManager;
- /** @var IURLGenerator */
- protected $urlGenerator;
-
/**
* Listener constructor.
*
* @param IManager $notificationManager
* @param IUserManager $userManager
- * @param IURLGenerator $urlGenerator
*/
public function __construct(
IManager $notificationManager,
- IUserManager $userManager,
- IURLGenerator $urlGenerator
+ IUserManager $userManager
) {
$this->notificationManager = $notificationManager;
$this->userManager = $userManager;
- $this->urlGenerator = $urlGenerator;
}
/**
@@ -100,11 +93,7 @@ class Listener {
->setApp('comments')
->setObject('comment', $comment->getId())
->setSubject('mention', [ $comment->getObjectType(), $comment->getObjectId() ])
- ->setDateTime($comment->getCreationDateTime())
- ->setLink($this->urlGenerator->linkToRouteAbsolute(
- 'comments.Notifications.view',
- ['id' => $comment->getId()])
- );
+ ->setDateTime($comment->getCreationDateTime());
return $notification;
}
diff --git a/apps/comments/lib/Notification/Notifier.php b/apps/comments/lib/Notification/Notifier.php
index 170538512d8..a9daef3031f 100644
--- a/apps/comments/lib/Notification/Notifier.php
+++ b/apps/comments/lib/Notification/Notifier.php
@@ -139,7 +139,11 @@ class Notifier implements INotifier {
]
);
}
- $notification->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/comment.svg')));
+ $notification->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/comment.svg')))
+ ->setLink($this->url->linkToRouteAbsolute(
+ 'comments.Notifications.view',
+ ['id' => $comment->getId()])
+ );
return $notification;
break;
diff --git a/apps/comments/tests/Unit/Notification/ListenerTest.php b/apps/comments/tests/Unit/Notification/ListenerTest.php
index 3007b78cb3d..ef84d1c60de 100644
--- a/apps/comments/tests/Unit/Notification/ListenerTest.php
+++ b/apps/comments/tests/Unit/Notification/ListenerTest.php
@@ -46,14 +46,12 @@ class ListenerTest extends TestCase {
protected function setUp() {
parent::setUp();
- $this->notificationManager = $this->getMockBuilder('\OCP\Notification\IManager')->getMock();
- $this->userManager = $this->getMockBuilder('\OCP\IUserManager')->getMock();
- $this->urlGenerator = $this->getMockBuilder('OCP\IURLGenerator')->getMock();
+ $this->notificationManager = $this->createMock(\OCP\Notification\IManager::class);
+ $this->userManager = $this->createMock(\OCP\IUserManager::class);
$this->listener = new Listener(
$this->notificationManager,
- $this->userManager,
- $this->urlGenerator
+ $this->userManager
);
}
diff --git a/apps/dav/l10n/cs_CZ.js b/apps/dav/l10n/cs_CZ.js
index 3ffe09c4fe3..acd0b85b03f 100644
--- a/apps/dav/l10n/cs_CZ.js
+++ b/apps/dav/l10n/cs_CZ.js
@@ -1,44 +1,44 @@
OC.L10N.register(
"dav",
{
+ "Calendar" : "Kalendář",
+ "Todos" : "Úkoly",
+ "{actor} created calendar {calendar}" : "{actor} vytvořil(a) kalendář {calendar}",
+ "You created calendar {calendar}" : "Vytvořil(a",
+ "{actor} deleted calendar {calendar}" : "{actor} smazal(a) kalendář {calendar}",
+ "You deleted calendar {calendar}" : "Smazal(a) jste kalendář {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} aktualizoval(a) kalendář {calendar}",
+ "You updated calendar {calendar}" : "Aktualizoval(a) jste kalendář {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor} s vámi nasdílel(a) kalendář {calendar}",
+ "You shared calendar {calendar} with {user}" : "S uživatelem {user} jste začal(a) sdílet kalendář {calendar}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} začal sdílet kalendář {calendar} s uživatelem {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} s vámi přestal(a) sdílet kalendář {calendar}",
+ "You unshared calendar {calendar} from {user}" : "S uživatelem {user} jste přestal(a) sdílet kalendář {calendar}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} přestal(a) sdílet kalendář {calendar} s uživatelem {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} přestal sdílet kalendář {calendar} sám se sebou",
+ "You shared calendar {calendar} with group {group}" : "Se skupinou {group} jste začal(a) sdílet kalendář {calendar}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} nasdílel(a) kalendář {calendar} skupině {group}",
+ "You unshared calendar {calendar} from group {group}" : "Zrušil(a) jste sdílení kalendáře {calendar} skupině {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} přestal(a) sdílet kalendář {calendar} se skupinou {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} vytvořil(a) událost {event} v kalendáři {calendar}",
+ "You created event {event} in calendar {calendar}" : "V kalendáři {calendar} jste vytvořil(a) událost {event}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} z kalendáře {calendar} smazal(a) událost {event}",
+ "You deleted event {event} from calendar {calendar}" : "Smazal(a) jste událost {event} z kalendáře {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} aktualizoval(a) událost {event} v kalendáři {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Aktualizoval(a) jste událost {event} v kalendáři {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} vytvořil(a) v seznamu {calendar} vytvořila úkol {todo}",
+ "You created todo {todo} in list {calendar}" : "V seznamu {calendar} jste vytvořil(a) úkol {todo}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} smazal(a) úkol {todo} ze seznamu {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Ze seznamu {todo} jste smazal(a) úkol {todo}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} aktualizoval(a) úkol {todo} v seznamu {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Aktualizoval(a) jste úkol {todo} v seznamu {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} vyřešil(a) úkol {todo} v seznamu {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Vyřešil(a) jste úkol {todo} v seznamu {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} znovu otevřel(a) úkol {todo} v seznamu {calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Znovu jste otevřel(a) úkol {todo} v seznamu {calendar}",
"A <strong>calendar</strong> was modified" : "<strong>Kalendář</strong> byl změněn",
"A calendar <strong>event</strong> was modified" : "<strong>Událost</strong> v kalendáři byla změněna",
"A calendar <strong>todo</strong> was modified" : "<strong>Úkol</strong> v kalendáři byl změněn",
- "%1$s created calendar %2$s" : "%1$s vytvořil(a) kalendář %2$s",
- "You created calendar %2$s" : "Vytvořili jste kalendář %2$s",
- "%1$s deleted calendar %2$s" : "%1$s vymazal(a) kalendář %2$s",
- "You deleted calendar %2$s" : "Smazali jste kalendář %2$s",
- "%1$s updated calendar %2$s" : "%1$s aktualizoval(a) kalendář %2$s",
- "You updated calendar %2$s" : "Aktualizovali jste kalendář %2$s",
- "%1$s shared calendar %2$s with you" : "%1$s s vámi začal(a) sdílet kalendář %2$s",
- "You shared calendar %2$s with %1$s" : "S uživatelem %1$s jste začal(a) sdílet kalendář %2$s",
- "%3$s shared calendar %2$s with %1$s" : "%3$s nasdílel(a) s %1$s kalendář %2$s",
- "%1$s unshared calendar %2$s from you" : "%1$s s vámi přestal(a) sdílet kalendář %2$s",
- "You unshared calendar %2$s from %1$s" : "S %1$s jste přestal(a) sdílet kalendář %2$s",
- "%3$s unshared calendar %2$s from %1$s" : "%3$s přestal s %1$s sdílet kalendář %2$s",
- "%1$s unshared calendar %2$s from themselves" : "%1$s přestal sám se sebou sdílet kalendář %2$s",
- "You shared calendar %2$s with group %1$s" : "Se skupinou %1$s jste nasdílel(a) kalendář %2$s",
- "%3$s shared calendar %2$s with group %1$s" : "%3$s se skupinou %1$s začal(a) sdílet kalendář %2$s",
- "You unshared calendar %2$s from group %1$s" : "Se skupinou %1$s jste přestal(a) sdílet kalendář %2$s",
- "%3$s unshared calendar %2$s from group %1$s" : "%3$s přestal ve skupině %1$s sdílet kalendář %2$s",
- "%1$s created event %3$s in calendar %2$s" : "%1$s v kalendáři %2$s vytvořil událost %3$s",
- "You created event %3$s in calendar %2$s" : "V kalendáři %2$s jste vytvořil(a) událost %3$s",
- "%1$s deleted event %3$s from calendar %2$s" : "%1$s z kalendáře %2$s smazal(a) událost %3$s",
- "You deleted event %3$s from calendar %2$s" : "V kalendáři %2$s jste smazal(a) událost %3$s",
- "%1$s updated event %3$s in calendar %2$s" : "%1$s v kalendáři %2$s aktualizoval(a) událost %3$s",
- "You updated event %3$s in calendar %2$s" : "Aktualizoval(a) jste událost %3$s v kalendáři %2$s",
- "%1$s created todo %3$s in list %2$s" : "%1$s v seznamu %2$s vytvořil(a) úkol %3$s",
- "You created todo %3$s in list %2$s" : "V seznamu %2$s jste vytvořil(a) úkol %3$s",
- "%1$s deleted todo %3$s from list %2$s" : "%1$s ze seznamu %2$s smazal(a) úkol %3$s",
- "You deleted todo %3$s from list %2$s" : "Ze seznamu %2$s jste odstranil(a) úkol %3$s",
- "%1$s updated todo %3$s in list %2$s" : "%1$s v seznamu %2$s aktualizoval(a) úkol %3$s",
- "You updated todo %3$s in list %2$s" : "Aktualizoval(a) jste úkol %3$s v seznamu %2$s",
- "%1$s solved todo %3$s in list %2$s" : "%1$s v seznamu %2$s vyřešil(a) úkol %3$s",
- "You solved todo %3$s in list %2$s" : "Vyřešil(a) jste úkol %3$s v seznamu %2$s",
- "%1$s reopened todo %3$s in list %2$s" : "%1$s znovu otevřel úkol %3$s v seznamu %2$s",
- "You reopened todo %3$s in list %2$s" : "Znovu jste otevřel(a) úkol %3$s v seznamu %2$s",
- "Calendar" : "Kalendář",
- "Todos" : "Úkoly",
"Contact birthdays" : "Narozeniny kontaktů",
"Personal" : "Osobní",
"Contacts" : "Kontakty",
diff --git a/apps/dav/l10n/cs_CZ.json b/apps/dav/l10n/cs_CZ.json
index abe873a2094..c1a25b3401e 100644
--- a/apps/dav/l10n/cs_CZ.json
+++ b/apps/dav/l10n/cs_CZ.json
@@ -1,42 +1,42 @@
{ "translations": {
+ "Calendar" : "Kalendář",
+ "Todos" : "Úkoly",
+ "{actor} created calendar {calendar}" : "{actor} vytvořil(a) kalendář {calendar}",
+ "You created calendar {calendar}" : "Vytvořil(a",
+ "{actor} deleted calendar {calendar}" : "{actor} smazal(a) kalendář {calendar}",
+ "You deleted calendar {calendar}" : "Smazal(a) jste kalendář {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} aktualizoval(a) kalendář {calendar}",
+ "You updated calendar {calendar}" : "Aktualizoval(a) jste kalendář {calendar}",
+ "{actor} shared calendar {calendar} with you" : "{actor} s vámi nasdílel(a) kalendář {calendar}",
+ "You shared calendar {calendar} with {user}" : "S uživatelem {user} jste začal(a) sdílet kalendář {calendar}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} začal sdílet kalendář {calendar} s uživatelem {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} s vámi přestal(a) sdílet kalendář {calendar}",
+ "You unshared calendar {calendar} from {user}" : "S uživatelem {user} jste přestal(a) sdílet kalendář {calendar}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} přestal(a) sdílet kalendář {calendar} s uživatelem {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} přestal sdílet kalendář {calendar} sám se sebou",
+ "You shared calendar {calendar} with group {group}" : "Se skupinou {group} jste začal(a) sdílet kalendář {calendar}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} nasdílel(a) kalendář {calendar} skupině {group}",
+ "You unshared calendar {calendar} from group {group}" : "Zrušil(a) jste sdílení kalendáře {calendar} skupině {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} přestal(a) sdílet kalendář {calendar} se skupinou {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} vytvořil(a) událost {event} v kalendáři {calendar}",
+ "You created event {event} in calendar {calendar}" : "V kalendáři {calendar} jste vytvořil(a) událost {event}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} z kalendáře {calendar} smazal(a) událost {event}",
+ "You deleted event {event} from calendar {calendar}" : "Smazal(a) jste událost {event} z kalendáře {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} aktualizoval(a) událost {event} v kalendáři {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Aktualizoval(a) jste událost {event} v kalendáři {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} vytvořil(a) v seznamu {calendar} vytvořila úkol {todo}",
+ "You created todo {todo} in list {calendar}" : "V seznamu {calendar} jste vytvořil(a) úkol {todo}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} smazal(a) úkol {todo} ze seznamu {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Ze seznamu {todo} jste smazal(a) úkol {todo}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} aktualizoval(a) úkol {todo} v seznamu {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Aktualizoval(a) jste úkol {todo} v seznamu {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} vyřešil(a) úkol {todo} v seznamu {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Vyřešil(a) jste úkol {todo} v seznamu {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} znovu otevřel(a) úkol {todo} v seznamu {calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Znovu jste otevřel(a) úkol {todo} v seznamu {calendar}",
"A <strong>calendar</strong> was modified" : "<strong>Kalendář</strong> byl změněn",
"A calendar <strong>event</strong> was modified" : "<strong>Událost</strong> v kalendáři byla změněna",
"A calendar <strong>todo</strong> was modified" : "<strong>Úkol</strong> v kalendáři byl změněn",
- "%1$s created calendar %2$s" : "%1$s vytvořil(a) kalendář %2$s",
- "You created calendar %2$s" : "Vytvořili jste kalendář %2$s",
- "%1$s deleted calendar %2$s" : "%1$s vymazal(a) kalendář %2$s",
- "You deleted calendar %2$s" : "Smazali jste kalendář %2$s",
- "%1$s updated calendar %2$s" : "%1$s aktualizoval(a) kalendář %2$s",
- "You updated calendar %2$s" : "Aktualizovali jste kalendář %2$s",
- "%1$s shared calendar %2$s with you" : "%1$s s vámi začal(a) sdílet kalendář %2$s",
- "You shared calendar %2$s with %1$s" : "S uživatelem %1$s jste začal(a) sdílet kalendář %2$s",
- "%3$s shared calendar %2$s with %1$s" : "%3$s nasdílel(a) s %1$s kalendář %2$s",
- "%1$s unshared calendar %2$s from you" : "%1$s s vámi přestal(a) sdílet kalendář %2$s",
- "You unshared calendar %2$s from %1$s" : "S %1$s jste přestal(a) sdílet kalendář %2$s",
- "%3$s unshared calendar %2$s from %1$s" : "%3$s přestal s %1$s sdílet kalendář %2$s",
- "%1$s unshared calendar %2$s from themselves" : "%1$s přestal sám se sebou sdílet kalendář %2$s",
- "You shared calendar %2$s with group %1$s" : "Se skupinou %1$s jste nasdílel(a) kalendář %2$s",
- "%3$s shared calendar %2$s with group %1$s" : "%3$s se skupinou %1$s začal(a) sdílet kalendář %2$s",
- "You unshared calendar %2$s from group %1$s" : "Se skupinou %1$s jste přestal(a) sdílet kalendář %2$s",
- "%3$s unshared calendar %2$s from group %1$s" : "%3$s přestal ve skupině %1$s sdílet kalendář %2$s",
- "%1$s created event %3$s in calendar %2$s" : "%1$s v kalendáři %2$s vytvořil událost %3$s",
- "You created event %3$s in calendar %2$s" : "V kalendáři %2$s jste vytvořil(a) událost %3$s",
- "%1$s deleted event %3$s from calendar %2$s" : "%1$s z kalendáře %2$s smazal(a) událost %3$s",
- "You deleted event %3$s from calendar %2$s" : "V kalendáři %2$s jste smazal(a) událost %3$s",
- "%1$s updated event %3$s in calendar %2$s" : "%1$s v kalendáři %2$s aktualizoval(a) událost %3$s",
- "You updated event %3$s in calendar %2$s" : "Aktualizoval(a) jste událost %3$s v kalendáři %2$s",
- "%1$s created todo %3$s in list %2$s" : "%1$s v seznamu %2$s vytvořil(a) úkol %3$s",
- "You created todo %3$s in list %2$s" : "V seznamu %2$s jste vytvořil(a) úkol %3$s",
- "%1$s deleted todo %3$s from list %2$s" : "%1$s ze seznamu %2$s smazal(a) úkol %3$s",
- "You deleted todo %3$s from list %2$s" : "Ze seznamu %2$s jste odstranil(a) úkol %3$s",
- "%1$s updated todo %3$s in list %2$s" : "%1$s v seznamu %2$s aktualizoval(a) úkol %3$s",
- "You updated todo %3$s in list %2$s" : "Aktualizoval(a) jste úkol %3$s v seznamu %2$s",
- "%1$s solved todo %3$s in list %2$s" : "%1$s v seznamu %2$s vyřešil(a) úkol %3$s",
- "You solved todo %3$s in list %2$s" : "Vyřešil(a) jste úkol %3$s v seznamu %2$s",
- "%1$s reopened todo %3$s in list %2$s" : "%1$s znovu otevřel úkol %3$s v seznamu %2$s",
- "You reopened todo %3$s in list %2$s" : "Znovu jste otevřel(a) úkol %3$s v seznamu %2$s",
- "Calendar" : "Kalendář",
- "Todos" : "Úkoly",
"Contact birthdays" : "Narozeniny kontaktů",
"Personal" : "Osobní",
"Contacts" : "Kontakty",
diff --git a/apps/dav/l10n/sq.js b/apps/dav/l10n/sq.js
new file mode 100644
index 00000000000..e84a2e2354f
--- /dev/null
+++ b/apps/dav/l10n/sq.js
@@ -0,0 +1,40 @@
+OC.L10N.register(
+ "dav",
+ {
+ "Calendar" : "Kalendar",
+ "{actor} created calendar {calendar}" : "{actor} krijoj kalendarin {calendar}",
+ "You created calendar {calendar}" : "Ju krijuat kalendarin {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} fshiu kalendarin {calendar}",
+ "You deleted calendar {calendar}" : "Ju fshit kalendarin {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} përditësoi kalendarin {calendar}",
+ "You updated calendar {calendar}" : "Ju përditësuat kalendarin {calendar}",
+ "{actor} shared calendar {calendar} with you" : " {actor} ndau kalendarin {calendar} me ju",
+ "You shared calendar {calendar} with {user}" : "Ju ndat kalendarin {calendar} me {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} ndau kalendarin {calendar} me {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} ndaloj së ndari kalendarin {calendar} me ju",
+ "You unshared calendar {calendar} from {user}" : "Ju ndaluat së ndari kalendarin {calendar} me {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} ndaloj së ndari kalendarin {calendar} me {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} ndaloj së ndari kalendarin {calendar} me veten",
+ "You shared calendar {calendar} with group {group}" : "Ju ndat kalendarin {calendar} me grupin {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} ndau kalendarin {calendar} me grupin {group}",
+ "You unshared calendar {calendar} from group {group}" : "Ju ndaluat së ndari kalendarin {calendar} me grupin {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} ndaloj së ndari kalendarin {calendar} me grupin {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} krijoj eventin {event} në kalendarin {calendar}",
+ "You created event {event} in calendar {calendar}" : "Ju krijuat eventin {event} në kalendarin {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} fshiu eventin {event} nga kalendari {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Ju fshit eventin {event} nga kalndari {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} përditsoi eventin {event} në kalndarin {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Ju përditësuat eventin {event} në kalndarin {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} u krijua todo{todo} në listën {calendar}",
+ "You created todo {todo} in list {calendar}" : "Ju krijuat todo {todo} në listën {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} u fshi todo{ todo} nga lista{calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} u përditësua todo{todo} në listën{calendar}",
+ "A <strong>calendar</strong> was modified" : "Një <strong>kalendar</strong> u modifikua",
+ "A calendar <strong>event</strong> was modified" : "Një <strong>event</strong> në kalendar u modifikua",
+ "Personal" : "Personale",
+ "Contacts" : "Kontaktet",
+ "Technical details" : "Detaje teknike",
+ "Remote Address: %s" : "Adresa remote: %s",
+ "Request ID: %s" : "ID e kërkesës: %s"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/dav/l10n/sq.json b/apps/dav/l10n/sq.json
new file mode 100644
index 00000000000..922e7122069
--- /dev/null
+++ b/apps/dav/l10n/sq.json
@@ -0,0 +1,38 @@
+{ "translations": {
+ "Calendar" : "Kalendar",
+ "{actor} created calendar {calendar}" : "{actor} krijoj kalendarin {calendar}",
+ "You created calendar {calendar}" : "Ju krijuat kalendarin {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} fshiu kalendarin {calendar}",
+ "You deleted calendar {calendar}" : "Ju fshit kalendarin {calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} përditësoi kalendarin {calendar}",
+ "You updated calendar {calendar}" : "Ju përditësuat kalendarin {calendar}",
+ "{actor} shared calendar {calendar} with you" : " {actor} ndau kalendarin {calendar} me ju",
+ "You shared calendar {calendar} with {user}" : "Ju ndat kalendarin {calendar} me {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} ndau kalendarin {calendar} me {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} ndaloj së ndari kalendarin {calendar} me ju",
+ "You unshared calendar {calendar} from {user}" : "Ju ndaluat së ndari kalendarin {calendar} me {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} ndaloj së ndari kalendarin {calendar} me {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} ndaloj së ndari kalendarin {calendar} me veten",
+ "You shared calendar {calendar} with group {group}" : "Ju ndat kalendarin {calendar} me grupin {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} ndau kalendarin {calendar} me grupin {group}",
+ "You unshared calendar {calendar} from group {group}" : "Ju ndaluat së ndari kalendarin {calendar} me grupin {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} ndaloj së ndari kalendarin {calendar} me grupin {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} krijoj eventin {event} në kalendarin {calendar}",
+ "You created event {event} in calendar {calendar}" : "Ju krijuat eventin {event} në kalendarin {calendar}",
+ "{actor} deleted event {event} from calendar {calendar}" : "{actor} fshiu eventin {event} nga kalendari {calendar}",
+ "You deleted event {event} from calendar {calendar}" : "Ju fshit eventin {event} nga kalndari {calendar}",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} përditsoi eventin {event} në kalndarin {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Ju përditësuat eventin {event} në kalndarin {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} u krijua todo{todo} në listën {calendar}",
+ "You created todo {todo} in list {calendar}" : "Ju krijuat todo {todo} në listën {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} u fshi todo{ todo} nga lista{calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} u përditësua todo{todo} në listën{calendar}",
+ "A <strong>calendar</strong> was modified" : "Një <strong>kalendar</strong> u modifikua",
+ "A calendar <strong>event</strong> was modified" : "Një <strong>event</strong> në kalendar u modifikua",
+ "Personal" : "Personale",
+ "Contacts" : "Kontaktet",
+ "Technical details" : "Detaje teknike",
+ "Remote Address: %s" : "Adresa remote: %s",
+ "Request ID: %s" : "ID e kërkesës: %s"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/dav/l10n/sv.js b/apps/dav/l10n/sv.js
index 44ec2399e2b..25cd0d797c8 100644
--- a/apps/dav/l10n/sv.js
+++ b/apps/dav/l10n/sv.js
@@ -2,44 +2,44 @@ OC.L10N.register(
"dav",
{
"Calendar" : "Kalender",
- "Todos" : "Att göra",
+ "Todos" : "Uppgifter",
"{actor} created calendar {calendar}" : "{actor} skapade kalender {calendar}",
"You created calendar {calendar}" : "Du skapade kalender {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} raderade kalender {calendar}",
"You deleted calendar {calendar}" : "Du raderade kalender {calendar}",
- "{actor} updated calendar {calendar}" : "{actor} uppdaterade kalender{calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} uppdaterade kalender {calendar}",
"You updated calendar {calendar}" : "Du uppdaterade kalender {calendar}",
"{actor} shared calendar {calendar} with you" : "{actor} delade kalender {calendar} med dig",
"You shared calendar {calendar} with {user}" : "Du delade kalender {calendar} med {user}",
"{actor} shared calendar {calendar} with {user}" : "{actor} delade kalender {calendar} med {user}",
- "{actor} unshared calendar {calendar} from you" : "{actor} tog bort delning av kalender {calendar} från dig",
- "You unshared calendar {calendar} from {user}" : "Du tog bort delning av kalender {calendar} från {user}",
- "{actor} unshared calendar {calendar} from {user}" : "{actor} tog bort delning utav kalender {calendar} från {user}",
- "{actor} unshared calendar {calendar} from themselves" : "{actor} tog bort delning utav kalender {calendar} från sig själva",
+ "{actor} unshared calendar {calendar} from you" : "{actor} slutade dela kalender {calendar} med dig",
+ "You unshared calendar {calendar} from {user}" : "Du slutade dela kalender {calendar} med {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} slutade dela kalender {calendar} med {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} slutade dela kalender {calendar} med sig själv",
"You shared calendar {calendar} with group {group}" : "Du delade kalender {calendar} med grupp {group}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} delade kalender {calendar} med grupp {group}",
- "You unshared calendar {calendar} from group {group}" : "Du tog bort delning utav kalender {calendar} från grupp {group}",
- "{actor} unshared calendar {calendar} from group {group}" : "{actor} tog bort delning utav kalender {calendar} från grupp {group}",
+ "You unshared calendar {calendar} from group {group}" : "Du slutade dela kalender {calendar} med gruppen {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} slutade dela kalender {calendar} med gruppen {group}",
"{actor} created event {event} in calendar {calendar}" : "{actor} skapade händelse {event} i kalender {calendar}",
"You created event {event} in calendar {calendar}" : "Du skapade händelse {event} i kalender {calendar}",
"{actor} deleted event {event} from calendar {calendar}" : "{actor} raderade händelse {event} från kalender {calendar}",
"You deleted event {event} from calendar {calendar}" : "Du raderade händelse {event} från kalender {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} uppdaterade händelse {event} i kalender {calendar}",
- "You updated event {event} in calendar {calendar}" : "Du uppdaterade händelse {event} kalender {calendar}",
- "{actor} created todo {todo} in list {calendar}" : "{actor} skapade att göra {todo} i listan {calendar}",
- "You created todo {todo} in list {calendar}" : "Du skapade att-göra {todo} i listan {calendar}",
- "{actor} deleted todo {todo} from list {calendar}" : "{actor} raderade att-göra {todo} från listan {calendar}",
- "You deleted todo {todo} from list {calendar}" : "Du raderade att-göra {todo} från listan {calendar}",
- "{actor} updated todo {todo} in list {calendar}" : "{actor} uppdaterade {todo} i listan {calendar}",
- "You updated todo {todo} in list {calendar}" : "Du uppdaterade att-göra {todo} i listan {calendar}",
- "{actor} solved todo {todo} in list {calendar}" : "{actor} löste att-göra {todo} i listan {calendar}",
- "You solved todo {todo} in list {calendar}" : "Du löste att-göra {todo} i listan {calendar}",
- "{actor} reopened todo {todo} in list {calendar}" : "{actor} återupptog att-göra {todo} i listan {calendar}",
- "You reopened todo {todo} in list {calendar}" : "Du återupptog att-göra {todo} i listan {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Du uppdaterade händelse {event} i kalender {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} skapade uppgift {todo} i listan {calendar}",
+ "You created todo {todo} in list {calendar}" : "Du skapade uppgift {todo} i listan {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} raderade uppgift {todo} från listan {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Du raderade uppgift {todo} från listan {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} uppdaterade uppgift {todo} i listan {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Du uppdaterade uppgift {todo} i listan {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} löste uppgift {todo} i listan {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Du löste uppgift {todo} i listan {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} återupptog uppgift {todo} i listan {calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Du återupptog uppgift {todo} i listan {calendar}",
"A <strong>calendar</strong> was modified" : "En <strong>kalender</strong> modifierades",
- "A calendar <strong>event</strong> was modified" : "En kalender <strong>händelse</strong> modifierades",
- "A calendar <strong>todo</strong> was modified" : "En kalender <strong>att-göra</strong> modifierades",
- "Contact birthdays" : "Kontaktfödelsedagar",
+ "A calendar <strong>event</strong> was modified" : "En kalender-<strong>händelse</strong> modifierades",
+ "A calendar <strong>todo</strong> was modified" : "En kalender <strong>uppgift</strong> modifierades",
+ "Contact birthdays" : "Födelsedagar",
"Personal" : "Privat",
"Contacts" : "Kontakter",
"Technical details" : "Tekniska detaljer",
diff --git a/apps/dav/l10n/sv.json b/apps/dav/l10n/sv.json
index 6f77c0a7692..ba76ca55329 100644
--- a/apps/dav/l10n/sv.json
+++ b/apps/dav/l10n/sv.json
@@ -1,43 +1,43 @@
{ "translations": {
"Calendar" : "Kalender",
- "Todos" : "Att göra",
+ "Todos" : "Uppgifter",
"{actor} created calendar {calendar}" : "{actor} skapade kalender {calendar}",
"You created calendar {calendar}" : "Du skapade kalender {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} raderade kalender {calendar}",
"You deleted calendar {calendar}" : "Du raderade kalender {calendar}",
- "{actor} updated calendar {calendar}" : "{actor} uppdaterade kalender{calendar}",
+ "{actor} updated calendar {calendar}" : "{actor} uppdaterade kalender {calendar}",
"You updated calendar {calendar}" : "Du uppdaterade kalender {calendar}",
"{actor} shared calendar {calendar} with you" : "{actor} delade kalender {calendar} med dig",
"You shared calendar {calendar} with {user}" : "Du delade kalender {calendar} med {user}",
"{actor} shared calendar {calendar} with {user}" : "{actor} delade kalender {calendar} med {user}",
- "{actor} unshared calendar {calendar} from you" : "{actor} tog bort delning av kalender {calendar} från dig",
- "You unshared calendar {calendar} from {user}" : "Du tog bort delning av kalender {calendar} från {user}",
- "{actor} unshared calendar {calendar} from {user}" : "{actor} tog bort delning utav kalender {calendar} från {user}",
- "{actor} unshared calendar {calendar} from themselves" : "{actor} tog bort delning utav kalender {calendar} från sig själva",
+ "{actor} unshared calendar {calendar} from you" : "{actor} slutade dela kalender {calendar} med dig",
+ "You unshared calendar {calendar} from {user}" : "Du slutade dela kalender {calendar} med {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} slutade dela kalender {calendar} med {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} slutade dela kalender {calendar} med sig själv",
"You shared calendar {calendar} with group {group}" : "Du delade kalender {calendar} med grupp {group}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} delade kalender {calendar} med grupp {group}",
- "You unshared calendar {calendar} from group {group}" : "Du tog bort delning utav kalender {calendar} från grupp {group}",
- "{actor} unshared calendar {calendar} from group {group}" : "{actor} tog bort delning utav kalender {calendar} från grupp {group}",
+ "You unshared calendar {calendar} from group {group}" : "Du slutade dela kalender {calendar} med gruppen {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} slutade dela kalender {calendar} med gruppen {group}",
"{actor} created event {event} in calendar {calendar}" : "{actor} skapade händelse {event} i kalender {calendar}",
"You created event {event} in calendar {calendar}" : "Du skapade händelse {event} i kalender {calendar}",
"{actor} deleted event {event} from calendar {calendar}" : "{actor} raderade händelse {event} från kalender {calendar}",
"You deleted event {event} from calendar {calendar}" : "Du raderade händelse {event} från kalender {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} uppdaterade händelse {event} i kalender {calendar}",
- "You updated event {event} in calendar {calendar}" : "Du uppdaterade händelse {event} kalender {calendar}",
- "{actor} created todo {todo} in list {calendar}" : "{actor} skapade att göra {todo} i listan {calendar}",
- "You created todo {todo} in list {calendar}" : "Du skapade att-göra {todo} i listan {calendar}",
- "{actor} deleted todo {todo} from list {calendar}" : "{actor} raderade att-göra {todo} från listan {calendar}",
- "You deleted todo {todo} from list {calendar}" : "Du raderade att-göra {todo} från listan {calendar}",
- "{actor} updated todo {todo} in list {calendar}" : "{actor} uppdaterade {todo} i listan {calendar}",
- "You updated todo {todo} in list {calendar}" : "Du uppdaterade att-göra {todo} i listan {calendar}",
- "{actor} solved todo {todo} in list {calendar}" : "{actor} löste att-göra {todo} i listan {calendar}",
- "You solved todo {todo} in list {calendar}" : "Du löste att-göra {todo} i listan {calendar}",
- "{actor} reopened todo {todo} in list {calendar}" : "{actor} återupptog att-göra {todo} i listan {calendar}",
- "You reopened todo {todo} in list {calendar}" : "Du återupptog att-göra {todo} i listan {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Du uppdaterade händelse {event} i kalender {calendar}",
+ "{actor} created todo {todo} in list {calendar}" : "{actor} skapade uppgift {todo} i listan {calendar}",
+ "You created todo {todo} in list {calendar}" : "Du skapade uppgift {todo} i listan {calendar}",
+ "{actor} deleted todo {todo} from list {calendar}" : "{actor} raderade uppgift {todo} från listan {calendar}",
+ "You deleted todo {todo} from list {calendar}" : "Du raderade uppgift {todo} från listan {calendar}",
+ "{actor} updated todo {todo} in list {calendar}" : "{actor} uppdaterade uppgift {todo} i listan {calendar}",
+ "You updated todo {todo} in list {calendar}" : "Du uppdaterade uppgift {todo} i listan {calendar}",
+ "{actor} solved todo {todo} in list {calendar}" : "{actor} löste uppgift {todo} i listan {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Du löste uppgift {todo} i listan {calendar}",
+ "{actor} reopened todo {todo} in list {calendar}" : "{actor} återupptog uppgift {todo} i listan {calendar}",
+ "You reopened todo {todo} in list {calendar}" : "Du återupptog uppgift {todo} i listan {calendar}",
"A <strong>calendar</strong> was modified" : "En <strong>kalender</strong> modifierades",
- "A calendar <strong>event</strong> was modified" : "En kalender <strong>händelse</strong> modifierades",
- "A calendar <strong>todo</strong> was modified" : "En kalender <strong>att-göra</strong> modifierades",
- "Contact birthdays" : "Kontaktfödelsedagar",
+ "A calendar <strong>event</strong> was modified" : "En kalender-<strong>händelse</strong> modifierades",
+ "A calendar <strong>todo</strong> was modified" : "En kalender <strong>uppgift</strong> modifierades",
+ "Contact birthdays" : "Födelsedagar",
"Personal" : "Privat",
"Contacts" : "Kontakter",
"Technical details" : "Tekniska detaljer",
diff --git a/apps/dav/lib/CalDAV/Activity/Filter/Todo.php b/apps/dav/lib/CalDAV/Activity/Filter/Todo.php
index 312bb6c472d..42ee0740851 100644
--- a/apps/dav/lib/CalDAV/Activity/Filter/Todo.php
+++ b/apps/dav/lib/CalDAV/Activity/Filter/Todo.php
@@ -79,7 +79,7 @@ class Todo implements IFilter {
* @since 11.0.0
*/
public function filterTypes(array $types) {
- return array_intersect(['calendar_todos'], $types);
+ return array_intersect(['calendar_todo'], $types);
}
/**
diff --git a/apps/dav/lib/CalDAV/Activity/Setting/Todo.php b/apps/dav/lib/CalDAV/Activity/Setting/Todo.php
index 0c8215f4843..234774bfea4 100644
--- a/apps/dav/lib/CalDAV/Activity/Setting/Todo.php
+++ b/apps/dav/lib/CalDAV/Activity/Setting/Todo.php
@@ -42,7 +42,7 @@ class Todo implements ISetting {
* @since 11.0.0
*/
public function getIdentifier() {
- return 'calendar_todos';
+ return 'calendar_todo';
}
/**
diff --git a/apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php b/apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php
index 3c6ac2a5c55..54a5a6f5f9d 100644
--- a/apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php
+++ b/apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php
@@ -67,9 +67,9 @@ class TodoTest extends TestCase {
public function dataFilterTypes() {
return [
[[], []],
- [['calendar_todos'], ['calendar_todos']],
- [['calendar', 'calendar_event', 'calendar_todos'], ['calendar_todos']],
- [['calendar', 'calendar_todos', 'files'], ['calendar_todos']],
+ [['calendar_todo'], ['calendar_todo']],
+ [['calendar', 'calendar_event', 'calendar_todo'], ['calendar_todo']],
+ [['calendar', 'calendar_todo', 'files'], ['calendar_todo']],
];
}
diff --git a/apps/encryption/l10n/fr.js b/apps/encryption/l10n/fr.js
index 77a433ef58d..14b693baa28 100644
--- a/apps/encryption/l10n/fr.js
+++ b/apps/encryption/l10n/fr.js
@@ -12,7 +12,7 @@ OC.L10N.register(
"Please provide the old recovery password" : "Veuillez entrer l'ancien mot de passe de récupération",
"Please provide a new recovery password" : "Veuillez entrer un nouveau mot de passe de récupération",
"Please repeat the new recovery password" : "Veuillez répéter le nouveau mot de passe de récupération",
- "Password successfully changed." : "Mot de passe changé avec succès.",
+ "Password successfully changed." : "Mot de passe modifié avec succès.",
"Could not change the password. Maybe the old password was not correct." : "Erreur lors du changement de mot de passe. L'ancien mot de passe est peut-être incorrect.",
"Recovery Key disabled" : "Clé de récupération désactivée",
"Recovery Key enabled" : "Clef de récupération activée",
diff --git a/apps/encryption/l10n/fr.json b/apps/encryption/l10n/fr.json
index 2129bd43828..74c0b7492a8 100644
--- a/apps/encryption/l10n/fr.json
+++ b/apps/encryption/l10n/fr.json
@@ -10,7 +10,7 @@
"Please provide the old recovery password" : "Veuillez entrer l'ancien mot de passe de récupération",
"Please provide a new recovery password" : "Veuillez entrer un nouveau mot de passe de récupération",
"Please repeat the new recovery password" : "Veuillez répéter le nouveau mot de passe de récupération",
- "Password successfully changed." : "Mot de passe changé avec succès.",
+ "Password successfully changed." : "Mot de passe modifié avec succès.",
"Could not change the password. Maybe the old password was not correct." : "Erreur lors du changement de mot de passe. L'ancien mot de passe est peut-être incorrect.",
"Recovery Key disabled" : "Clé de récupération désactivée",
"Recovery Key enabled" : "Clef de récupération activée",
diff --git a/apps/encryption/l10n/sk_SK.js b/apps/encryption/l10n/sk_SK.js
index 798a5939ff9..7678ed60ac7 100644
--- a/apps/encryption/l10n/sk_SK.js
+++ b/apps/encryption/l10n/sk_SK.js
@@ -22,11 +22,19 @@ OC.L10N.register(
"The current log-in password was not correct, please try again." : "Toto heslo nebolo správne, prosím skúste to ešte raz.",
"Private key password successfully updated." : "Heslo súkromného kľúča je úspešne aktualizované.",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Musíte migrovať vaše šifrovacie kľúče zo starého šifrovania (ownCloud <= 8,0) na nové. Spustite „occ encryption:migrate“ alebo sa obráťte na správcu",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neplatný súkromný kľúč pre šifrovanie. Aktualizujte prosím heslo vášho súkromného kľúča v osobných nastaveniach pre obnovenie prístupu k vaším šifrovaným súborom.",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia pre šifrovanie je povolená, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.",
+ "Encryption app is enabled and ready" : "Aplikácia pre šifrovanie je povolená a pripravená",
+ "Bad Signature" : "Zlý podpis",
+ "Missing Signature" : "Chýbajúci podpis",
"one-time password for server-side-encryption" : "jednorazové heslo na šifrovanie na strane servera",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor nie je možné rozšifrovať, môže ísť o súbor sprístupnený iným používateľom. Požiadajte majiteľa súboru, aby vám ho sprístupnil ešte raz.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor nie je možné prečítať, môže ísť o súbor sprístupnený iným používateľom. Požiadajte majiteľa súboru, aby vám ho sprístupnil ešte raz.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Dobrý deň,\n\nAdministrátor povolil šifrovanie na strane servera. Vaše súbory boli zašifrované pomocou hesla '%s'.\n\nPrihláste sa prosím cez webový prehliadač, choďte do sekcie základného šifrovacieho modulu v osobných nastaveniach a zadajte horeuvedené heslo do políčka 'staré prihlasovacie heslo' a vaše súčasné prihlasovacie heslo.\n\n",
"The share will expire on %s." : "Sprístupnenie vyprší %s.",
"Cheers!" : "Pekný deň!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Dobrý deň,<br><br>Administrátor povolil šifrovanie na strane servera. Vaše súbory boli zašifrované pomocou hesla <strong>%s</strong>.<br><br>Prihláste sa prosím cez webový prehliadač, choďte do sekcie základného šifrovacieho modulu v osobných nastaveniach a zadajte horeuvedené heslo do políčka 'staré prihlasovacie heslo' a vaše súčasné prihlasovacie heslo.<br><br>",
+ "Default encryption module" : "Predvolený šifrovací modul",
"Encrypt the home storage" : "Šifrovať domáce úložisko",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Zapnutím tejto voľby zašifrujete všetky súbory v hlavnom úložisku, v opačnom prípade zašifrujete iba súbory na externom úložisku.",
"Enable recovery key" : "Povoliť obnovovací kľúč",
@@ -39,6 +47,7 @@ OC.L10N.register(
"New recovery key password" : "Nové heslo obnovovacieho kľúča",
"Repeat new recovery key password" : "Zopakujte nové heslo obnovovacieho kľúča",
"Change Password" : "Zmeniť heslo",
+ "Basic encryption module" : "Základný šifrovací modul",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.",
"Your private key password no longer matches your log-in password." : "Heslo vášho súkromného kľúča sa nezhoduje v vašim prihlasovacím heslom.",
"Set your old private key password to your current log-in password:" : "Zmeňte si vaše staré heslo súkromného kľúča na rovnaké, aké je vaše aktuálne prihlasovacie heslo:",
diff --git a/apps/encryption/l10n/sk_SK.json b/apps/encryption/l10n/sk_SK.json
index cf259c2223d..91fbf2aa577 100644
--- a/apps/encryption/l10n/sk_SK.json
+++ b/apps/encryption/l10n/sk_SK.json
@@ -20,11 +20,19 @@
"The current log-in password was not correct, please try again." : "Toto heslo nebolo správne, prosím skúste to ešte raz.",
"Private key password successfully updated." : "Heslo súkromného kľúča je úspešne aktualizované.",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Musíte migrovať vaše šifrovacie kľúče zo starého šifrovania (ownCloud <= 8,0) na nové. Spustite „occ encryption:migrate“ alebo sa obráťte na správcu",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neplatný súkromný kľúč pre šifrovanie. Aktualizujte prosím heslo vášho súkromného kľúča v osobných nastaveniach pre obnovenie prístupu k vaším šifrovaným súborom.",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia pre šifrovanie je povolená, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.",
+ "Encryption app is enabled and ready" : "Aplikácia pre šifrovanie je povolená a pripravená",
+ "Bad Signature" : "Zlý podpis",
+ "Missing Signature" : "Chýbajúci podpis",
"one-time password for server-side-encryption" : "jednorazové heslo na šifrovanie na strane servera",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor nie je možné rozšifrovať, môže ísť o súbor sprístupnený iným používateľom. Požiadajte majiteľa súboru, aby vám ho sprístupnil ešte raz.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor nie je možné prečítať, môže ísť o súbor sprístupnený iným používateľom. Požiadajte majiteľa súboru, aby vám ho sprístupnil ešte raz.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Dobrý deň,\n\nAdministrátor povolil šifrovanie na strane servera. Vaše súbory boli zašifrované pomocou hesla '%s'.\n\nPrihláste sa prosím cez webový prehliadač, choďte do sekcie základného šifrovacieho modulu v osobných nastaveniach a zadajte horeuvedené heslo do políčka 'staré prihlasovacie heslo' a vaše súčasné prihlasovacie heslo.\n\n",
"The share will expire on %s." : "Sprístupnenie vyprší %s.",
"Cheers!" : "Pekný deň!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Dobrý deň,<br><br>Administrátor povolil šifrovanie na strane servera. Vaše súbory boli zašifrované pomocou hesla <strong>%s</strong>.<br><br>Prihláste sa prosím cez webový prehliadač, choďte do sekcie základného šifrovacieho modulu v osobných nastaveniach a zadajte horeuvedené heslo do políčka 'staré prihlasovacie heslo' a vaše súčasné prihlasovacie heslo.<br><br>",
+ "Default encryption module" : "Predvolený šifrovací modul",
"Encrypt the home storage" : "Šifrovať domáce úložisko",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Zapnutím tejto voľby zašifrujete všetky súbory v hlavnom úložisku, v opačnom prípade zašifrujete iba súbory na externom úložisku.",
"Enable recovery key" : "Povoliť obnovovací kľúč",
@@ -37,6 +45,7 @@
"New recovery key password" : "Nové heslo obnovovacieho kľúča",
"Repeat new recovery key password" : "Zopakujte nové heslo obnovovacieho kľúča",
"Change Password" : "Zmeniť heslo",
+ "Basic encryption module" : "Základný šifrovací modul",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.",
"Your private key password no longer matches your log-in password." : "Heslo vášho súkromného kľúča sa nezhoduje v vašim prihlasovacím heslom.",
"Set your old private key password to your current log-in password:" : "Zmeňte si vaše staré heslo súkromného kľúča na rovnaké, aké je vaše aktuálne prihlasovacie heslo:",
diff --git a/apps/encryption/l10n/sv.js b/apps/encryption/l10n/sv.js
index 0689661768d..0b8530bf006 100644
--- a/apps/encryption/l10n/sv.js
+++ b/apps/encryption/l10n/sv.js
@@ -55,7 +55,7 @@ OC.L10N.register(
"Old log-in password" : "Gammalt inloggningslösenord",
"Current log-in password" : "Nuvarande inloggningslösenord",
"Update Private Key Password" : "Uppdatera lösenordet för din privata nyckel",
- "Enable password recovery:" : "Aktivera lösenordsåterställning",
+ "Enable password recovery:" : "Aktivera lösenordsåterställning:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Genom att aktivera detta alternativ kommer du kunna återfå tillgång till dina krypterade filer om du skulle förlora/glömma ditt lösenord",
"Enabled" : "Aktiverad",
"Disabled" : "Inaktiverad"
diff --git a/apps/encryption/l10n/sv.json b/apps/encryption/l10n/sv.json
index ab1134f64b7..976336ae068 100644
--- a/apps/encryption/l10n/sv.json
+++ b/apps/encryption/l10n/sv.json
@@ -53,7 +53,7 @@
"Old log-in password" : "Gammalt inloggningslösenord",
"Current log-in password" : "Nuvarande inloggningslösenord",
"Update Private Key Password" : "Uppdatera lösenordet för din privata nyckel",
- "Enable password recovery:" : "Aktivera lösenordsåterställning",
+ "Enable password recovery:" : "Aktivera lösenordsåterställning:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Genom att aktivera detta alternativ kommer du kunna återfå tillgång till dina krypterade filer om du skulle förlora/glömma ditt lösenord",
"Enabled" : "Aktiverad",
"Disabled" : "Inaktiverad"
diff --git a/apps/encryption/lib/Hooks/UserHooks.php b/apps/encryption/lib/Hooks/UserHooks.php
index 16e4e962432..d189ce3eeef 100644
--- a/apps/encryption/lib/Hooks/UserHooks.php
+++ b/apps/encryption/lib/Hooks/UserHooks.php
@@ -40,6 +40,13 @@ use OCA\Encryption\Session;
use OCA\Encryption\Recovery;
class UserHooks implements IHook {
+
+ /**
+ * list of user for which we perform a password reset
+ * @var array
+ */
+ protected static $passwordResetUsers = [];
+
/**
* @var KeyManager
*/
@@ -132,6 +139,16 @@ class UserHooks implements IHook {
$this,
'preSetPassphrase');
+ OCUtil::connectHook('\OC\Core\LostPassword\Controller\LostController',
+ 'post_passwordReset',
+ $this,
+ 'postPasswordReset');
+
+ OCUtil::connectHook('\OC\Core\LostPassword\Controller\LostController',
+ 'pre_passwordReset',
+ $this,
+ 'prePasswordReset');
+
OCUtil::connectHook('OC_User',
'post_createUser',
$this,
@@ -202,6 +219,22 @@ class UserHooks implements IHook {
}
}
+ public function prePasswordReset($params) {
+ if (App::isEnabled('encryption')) {
+ $user = $params['uid'];
+ self::$passwordResetUsers[$user] = true;
+ }
+ }
+
+ public function postPasswordReset($params) {
+ $uid = $params['uid'];
+ $password = $params['password'];
+ $this->keyManager->backupUserKeys('passwordReset', $uid);
+ $this->keyManager->deleteUserKeys($uid);
+ $this->userSetup->setupUser($uid, $password);
+ unset(self::$passwordResetUsers[$uid]);
+ }
+
/**
* If the password can't be changed within ownCloud, than update the key password in advance.
*
@@ -209,13 +242,10 @@ class UserHooks implements IHook {
* @return boolean|null
*/
public function preSetPassphrase($params) {
- if (App::isEnabled('encryption')) {
-
- $user = $this->userManager->get($params['uid']);
+ $user = $this->userManager->get($params['uid']);
- if ($user && !$user->canChangePassword()) {
- $this->setPassphrase($params);
- }
+ if ($user && !$user->canChangePassword()) {
+ $this->setPassphrase($params);
}
}
@@ -227,6 +257,12 @@ class UserHooks implements IHook {
*/
public function setPassphrase($params) {
+ // if we are in the process to resetting a user password, we have nothing
+ // to do here
+ if (isset(self::$passwordResetUsers[$params['uid']])) {
+ return true;
+ }
+
// Get existing decrypted private key
$privateKey = $this->session->getPrivateKey();
$user = $this->user->getUser();
@@ -299,19 +335,6 @@ class UserHooks implements IHook {
Filesystem::initMountPoints($user);
}
-
- /**
- * after password reset we create a new key pair for the user
- *
- * @param array $params
- */
- public function postPasswordReset($params) {
- $password = $params['password'];
-
- $this->keyManager->deleteUserKeys($params['uid']);
- $this->userSetup->setupUser($params['uid'], $password);
- }
-
/**
* setup file system for user
*
diff --git a/apps/encryption/lib/KeyManager.php b/apps/encryption/lib/KeyManager.php
index 26f023ed8f9..caae154b2d3 100644
--- a/apps/encryption/lib/KeyManager.php
+++ b/apps/encryption/lib/KeyManager.php
@@ -560,11 +560,10 @@ class KeyManager {
/**
* @param string $purpose
- * @param bool $timestamp
- * @param bool $includeUserKeys
+ * @param string $uid
*/
- public function backupAllKeys($purpose, $timestamp = true, $includeUserKeys = true) {
-// $backupDir = $this->keyStorage->;
+ public function backupUserKeys($purpose, $uid) {
+ $this->keyStorage->backupUserKeys(Encryption::ID, $purpose, $uid);
}
/**
@@ -573,7 +572,6 @@ class KeyManager {
* @param string $uid
*/
public function deleteUserKeys($uid) {
- $this->backupAllKeys('password_reset');
$this->deletePublicKey($uid);
$this->deletePrivateKey($uid);
}
diff --git a/apps/encryption/tests/Hooks/UserHooksTest.php b/apps/encryption/tests/Hooks/UserHooksTest.php
index 43cc54f8901..f9477e3e038 100644
--- a/apps/encryption/tests/Hooks/UserHooksTest.php
+++ b/apps/encryption/tests/Hooks/UserHooksTest.php
@@ -120,6 +120,31 @@ class UserHooksTest extends TestCase {
$this->assertTrue(true);
}
+ public function testPrePasswordReset() {
+ $params = ['uid' => 'user1'];
+ $expected = ['user1' => true];
+ $this->instance->prePasswordReset($params);
+ $passwordResetUsers = $this->invokePrivate($this->instance, 'passwordResetUsers');
+
+ $this->assertSame($expected, $passwordResetUsers);
+ }
+
+ public function testPostPasswordReset() {
+ $params = ['uid' => 'user1', 'password' => 'password'];
+ $this->invokePrivate($this->instance, 'passwordResetUsers', [['user1' => true]]);
+ $this->keyManagerMock->expects($this->once())->method('backupUserKeys')
+ ->with('passwordReset', 'user1');
+ $this->keyManagerMock->expects($this->once())->method('deleteUserKeys')
+ ->with('user1');
+ $this->userSetupMock->expects($this->once())->method('setupUser')
+ ->with('user1', 'password');
+
+ $this->instance->postPasswordReset($params);
+ $passwordResetUsers = $this->invokePrivate($this->instance, 'passwordResetUsers');
+ $this->assertEmpty($passwordResetUsers);
+
+ }
+
/**
* @dataProvider dataTestPreSetPassphrase
*/
@@ -252,6 +277,15 @@ class UserHooksTest extends TestCase {
$this->assertNull($this->instance->setPassphrase($this->params));
}
+ public function testSetPassphraseResetUserMode() {
+ $params = ['uid' => 'user1', 'password' => 'password'];
+ $this->invokePrivate($this->instance, 'passwordResetUsers', [[$params['uid'] => true]]);
+ $this->sessionMock->expects($this->never())->method('getPrivateKey');
+ $this->keyManagerMock->expects($this->never())->method('setPrivateKey');
+ $this->assertTrue($this->instance->setPassphrase($params));
+ $this->invokePrivate($this->instance, 'passwordResetUsers', [[]]);
+ }
+
public function testSetPasswordNoUser() {
$this->sessionMock->expects($this->once())
->method('getPrivateKey')
@@ -287,19 +321,6 @@ class UserHooksTest extends TestCase {
$this->assertNull($userHooks->setPassphrase($this->params));
}
- public function testPostPasswordReset() {
- $this->keyManagerMock->expects($this->once())
- ->method('deleteUserKeys')
- ->with('testUser');
-
- $this->userSetupMock->expects($this->once())
- ->method('setupUser')
- ->with('testUser', 'password');
-
- $this->instance->postPasswordReset($this->params);
- $this->assertTrue(true);
- }
-
protected function setUp() {
parent::setUp();
$this->loggerMock = $this->createMock(ILogger::class);
diff --git a/apps/encryption/tests/KeyManagerTest.php b/apps/encryption/tests/KeyManagerTest.php
index fec311afa35..40def135816 100644
--- a/apps/encryption/tests/KeyManagerTest.php
+++ b/apps/encryption/tests/KeyManagerTest.php
@@ -657,4 +657,10 @@ class KeyManagerTest extends TestCase {
$this->instance->setVersion('/admin/files/myfile.txt', 5, $view);
}
+ public function testBackupUserKeys() {
+ $this->keyStorageMock->expects($this->once())->method('backupUserKeys')
+ ->with('OC_DEFAULT_MODULE', 'test', 'user1');
+ $this->instance->backupUserKeys('test', 'user1');
+ }
+
}
diff --git a/apps/federatedfilesharing/l10n/cs_CZ.js b/apps/federatedfilesharing/l10n/cs_CZ.js
index b8189cb5b87..bb7b85319af 100644
--- a/apps/federatedfilesharing/l10n/cs_CZ.js
+++ b/apps/federatedfilesharing/l10n/cs_CZ.js
@@ -41,6 +41,7 @@ OC.L10N.register(
"Open documentation" : "Otevřít dokumentaci",
"Allow users on this server to send shares to other servers" : "Povolit uživatelům z tohoto serveru zasílat sdílení na jiné servery",
"Allow users on this server to receive shares from other servers" : "Povolit uživatelům na tomto serveru přijímat sdílení z jiných serverů",
+ "Search global and public address book for users" : "Hledat uživatele v globálním a veřejném adresáři",
"Federated Cloud" : "Sdružený cloud",
"Your Federated Cloud ID:" : "Vaše sdružené cloud ID:",
"Share it:" : "Sdílet:",
diff --git a/apps/federatedfilesharing/l10n/cs_CZ.json b/apps/federatedfilesharing/l10n/cs_CZ.json
index 44f052e8a84..f2784299888 100644
--- a/apps/federatedfilesharing/l10n/cs_CZ.json
+++ b/apps/federatedfilesharing/l10n/cs_CZ.json
@@ -39,6 +39,7 @@
"Open documentation" : "Otevřít dokumentaci",
"Allow users on this server to send shares to other servers" : "Povolit uživatelům z tohoto serveru zasílat sdílení na jiné servery",
"Allow users on this server to receive shares from other servers" : "Povolit uživatelům na tomto serveru přijímat sdílení z jiných serverů",
+ "Search global and public address book for users" : "Hledat uživatele v globálním a veřejném adresáři",
"Federated Cloud" : "Sdružený cloud",
"Your Federated Cloud ID:" : "Vaše sdružené cloud ID:",
"Share it:" : "Sdílet:",
diff --git a/apps/federatedfilesharing/l10n/de.js b/apps/federatedfilesharing/l10n/de.js
index ef4085d222a..1cf098f5b7e 100644
--- a/apps/federatedfilesharing/l10n/de.js
+++ b/apps/federatedfilesharing/l10n/de.js
@@ -41,7 +41,7 @@ OC.L10N.register(
"Open documentation" : "Dokumentation öffnen",
"Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben",
"Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben",
- "Search global and public address book for users" : "Globale Suche und ein öffentliches Adresbuch für Nutzer",
+ "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Nutzer",
"Federated Cloud" : "Federated Cloud",
"Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:",
"Share it:" : "Zum Teilen:",
diff --git a/apps/federatedfilesharing/l10n/de.json b/apps/federatedfilesharing/l10n/de.json
index 4e02478be20..060aa326652 100644
--- a/apps/federatedfilesharing/l10n/de.json
+++ b/apps/federatedfilesharing/l10n/de.json
@@ -39,7 +39,7 @@
"Open documentation" : "Dokumentation öffnen",
"Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben",
"Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben",
- "Search global and public address book for users" : "Globale Suche und ein öffentliches Adresbuch für Nutzer",
+ "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Nutzer",
"Federated Cloud" : "Federated Cloud",
"Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:",
"Share it:" : "Zum Teilen:",
diff --git a/apps/federatedfilesharing/l10n/de_DE.js b/apps/federatedfilesharing/l10n/de_DE.js
index 6bb9513d048..ff34a3cddcf 100644
--- a/apps/federatedfilesharing/l10n/de_DE.js
+++ b/apps/federatedfilesharing/l10n/de_DE.js
@@ -41,7 +41,7 @@ OC.L10N.register(
"Open documentation" : "Dokumentation öffnen",
"Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben",
"Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben",
- "Search global and public address book for users" : "Globale Suche und ein öffentliches Adresbuch für Nutzer",
+ "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Nutzer",
"Federated Cloud" : "Federated Cloud",
"Your Federated Cloud ID:" : "Ihre Federated-Cloud-ID:",
"Share it:" : "Zum Teilen:",
diff --git a/apps/federatedfilesharing/l10n/de_DE.json b/apps/federatedfilesharing/l10n/de_DE.json
index 6a9be77cda4..9531d53b801 100644
--- a/apps/federatedfilesharing/l10n/de_DE.json
+++ b/apps/federatedfilesharing/l10n/de_DE.json
@@ -39,7 +39,7 @@
"Open documentation" : "Dokumentation öffnen",
"Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben",
"Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben",
- "Search global and public address book for users" : "Globale Suche und ein öffentliches Adresbuch für Nutzer",
+ "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Nutzer",
"Federated Cloud" : "Federated Cloud",
"Your Federated Cloud ID:" : "Ihre Federated-Cloud-ID:",
"Share it:" : "Zum Teilen:",
diff --git a/apps/federatedfilesharing/l10n/fr.js b/apps/federatedfilesharing/l10n/fr.js
index 4a1d7767965..092b87fb9e8 100644
--- a/apps/federatedfilesharing/l10n/fr.js
+++ b/apps/federatedfilesharing/l10n/fr.js
@@ -29,7 +29,7 @@ OC.L10N.register(
"File is already shared with %s" : "Le fichier est déjà partagé avec %s",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Le partage de %s a échoué, impossible de trouver %s, le serveur est peut-être momentanément injoignable ou utilise un certificat auto-signé.",
"Could not find share" : "Impossible de trouver le partage",
- "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)",
"You received {share} as a remote share from {user} (on behalf of {behalf})" : "Vous avez reçu {share} comme partage distant de la part de {user} (de la part de {behalf})",
"You received \"%3$s\" as a remote share from %1$s" : "Vous avez reçu \"%3$s\" comme partage distant de %1$s",
"You received {share} as a remote share from {user}" : "Vous avez reçu {share} comme partage distant de la part de {user}",
diff --git a/apps/federatedfilesharing/l10n/fr.json b/apps/federatedfilesharing/l10n/fr.json
index 670a3bd043c..f90620b940d 100644
--- a/apps/federatedfilesharing/l10n/fr.json
+++ b/apps/federatedfilesharing/l10n/fr.json
@@ -27,7 +27,7 @@
"File is already shared with %s" : "Le fichier est déjà partagé avec %s",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Le partage de %s a échoué, impossible de trouver %s, le serveur est peut-être momentanément injoignable ou utilise un certificat auto-signé.",
"Could not find share" : "Impossible de trouver le partage",
- "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)",
+ "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous avez reçu \"%3$s\" en tant que partage distant de %1$s (de la part de %2$s)",
"You received {share} as a remote share from {user} (on behalf of {behalf})" : "Vous avez reçu {share} comme partage distant de la part de {user} (de la part de {behalf})",
"You received \"%3$s\" as a remote share from %1$s" : "Vous avez reçu \"%3$s\" comme partage distant de %1$s",
"You received {share} as a remote share from {user}" : "Vous avez reçu {share} comme partage distant de la part de {user}",
diff --git a/apps/federatedfilesharing/l10n/sq.js b/apps/federatedfilesharing/l10n/sq.js
index ae500204ce4..4e55e171b81 100644
--- a/apps/federatedfilesharing/l10n/sq.js
+++ b/apps/federatedfilesharing/l10n/sq.js
@@ -2,13 +2,26 @@ OC.L10N.register(
"federatedfilesharing",
{
"Federated sharing" : "Ndarje e federuar",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Doni që të shtoni ndarjen në remote {name} nga {owner}@{remote}?",
+ "Remote share" : "Ndarje në largësi",
+ "Remote share password" : "Fjalëkalim ndarjeje të largët",
+ "Cancel" : "Anulo",
+ "Copy" : "Kopjo",
+ "Copied!" : "U kopjua!",
+ "Not supported!" : "Nuk mbështetet!",
+ "Press ⌘-C to copy." : "Shtyp ⌘-C për të kopjuar.",
+ "Press Ctrl-C to copy." : "Shtypni Ctrl-C për të kopjuar",
"Invalid Federated Cloud ID" : "ID Federated Cloud e pavlefshme",
+ "Server to server sharing is not enabled on this server" : "Shpërndarja server në server nuk është e mundësuar në këtë server",
+ "Storage not valid" : "memorja nuk është e vlefshme",
+ "Couldn't add remote share" : "Nuk mund të shtohet ndarja në largësi",
"Sharing %s failed, because this item is already shared with %s" : "Ndarja për %s dështoi, ngaqë ky objekt është ndarë një herë me %s",
"Not allowed to create a federated share with the same user" : "S’i lejohet të krijojë një ndarje të federuar me të njëjtin përdorues",
- "File is already shared with %s" : "Kartelë e ndarë tashmë me %s",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Ndarja për %s dështoi, s’u gjet dot %s, ndoshta shërbyesi është hëpërhë jashtë pune.",
- "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s (në emër të %2$s)",
- "You received \"/%3$s\" as a remote share from %1$s" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s",
+ "File is already shared with %s" : "Skedari është ndarë tashmë me %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Ndarja e %s dështoi, nuk mund të gjendet %s, ndoshta serveri është për momentin i paaksesueshëm ose përdor një çertifikatë të vetë-nënshkruar",
+ "Could not find share" : "Nuk mund të gjenim ndarjen",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Ju ",
+ "You received \"%3$s\" as a remote share from %1$s" : "Ju pranuat \"%3$s\" si një shpërndarje në distancë nga %1$s",
"Accept" : "Pranoje",
"Decline" : "Hidhe poshtë",
"Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Ndani me mua përmes ID-së time për #Nextcloud Federated Cloud, shihni %s",
@@ -22,6 +35,9 @@ OC.L10N.register(
"Share it:" : "Ndajeni:",
"Add to your website" : "Shtojeni te sajti juaj",
"Share with me via Nextcloud" : "Ndani me mua përmes Nextcloud-it",
- "HTML Code:" : "Kod HTML:"
+ "HTML Code:" : "Kod HTML:",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Ndarja për %s dështoi, s’u gjet dot %s, ndoshta shërbyesi është hëpërhë jashtë pune.",
+ "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s (në emër të %2$s)",
+ "You received \"/%3$s\" as a remote share from %1$s" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/federatedfilesharing/l10n/sq.json b/apps/federatedfilesharing/l10n/sq.json
index 57961c2c2ae..07858aa6434 100644
--- a/apps/federatedfilesharing/l10n/sq.json
+++ b/apps/federatedfilesharing/l10n/sq.json
@@ -1,12 +1,25 @@
{ "translations": {
"Federated sharing" : "Ndarje e federuar",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Doni që të shtoni ndarjen në remote {name} nga {owner}@{remote}?",
+ "Remote share" : "Ndarje në largësi",
+ "Remote share password" : "Fjalëkalim ndarjeje të largët",
+ "Cancel" : "Anulo",
+ "Copy" : "Kopjo",
+ "Copied!" : "U kopjua!",
+ "Not supported!" : "Nuk mbështetet!",
+ "Press ⌘-C to copy." : "Shtyp ⌘-C për të kopjuar.",
+ "Press Ctrl-C to copy." : "Shtypni Ctrl-C për të kopjuar",
"Invalid Federated Cloud ID" : "ID Federated Cloud e pavlefshme",
+ "Server to server sharing is not enabled on this server" : "Shpërndarja server në server nuk është e mundësuar në këtë server",
+ "Storage not valid" : "memorja nuk është e vlefshme",
+ "Couldn't add remote share" : "Nuk mund të shtohet ndarja në largësi",
"Sharing %s failed, because this item is already shared with %s" : "Ndarja për %s dështoi, ngaqë ky objekt është ndarë një herë me %s",
"Not allowed to create a federated share with the same user" : "S’i lejohet të krijojë një ndarje të federuar me të njëjtin përdorues",
- "File is already shared with %s" : "Kartelë e ndarë tashmë me %s",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Ndarja për %s dështoi, s’u gjet dot %s, ndoshta shërbyesi është hëpërhë jashtë pune.",
- "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s (në emër të %2$s)",
- "You received \"/%3$s\" as a remote share from %1$s" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s",
+ "File is already shared with %s" : "Skedari është ndarë tashmë me %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Ndarja e %s dështoi, nuk mund të gjendet %s, ndoshta serveri është për momentin i paaksesueshëm ose përdor një çertifikatë të vetë-nënshkruar",
+ "Could not find share" : "Nuk mund të gjenim ndarjen",
+ "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Ju ",
+ "You received \"%3$s\" as a remote share from %1$s" : "Ju pranuat \"%3$s\" si një shpërndarje në distancë nga %1$s",
"Accept" : "Pranoje",
"Decline" : "Hidhe poshtë",
"Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Ndani me mua përmes ID-së time për #Nextcloud Federated Cloud, shihni %s",
@@ -20,6 +33,9 @@
"Share it:" : "Ndajeni:",
"Add to your website" : "Shtojeni te sajti juaj",
"Share with me via Nextcloud" : "Ndani me mua përmes Nextcloud-it",
- "HTML Code:" : "Kod HTML:"
+ "HTML Code:" : "Kod HTML:",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Ndarja për %s dështoi, s’u gjet dot %s, ndoshta shërbyesi është hëpërhë jashtë pune.",
+ "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s (në emër të %2$s)",
+ "You received \"/%3$s\" as a remote share from %1$s" : "\"/%3$s\" e morët si një ndarje të largët prej %1$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/federatedfilesharing/l10n/sv.js b/apps/federatedfilesharing/l10n/sv.js
index f205f0b5741..0f5b0798825 100644
--- a/apps/federatedfilesharing/l10n/sv.js
+++ b/apps/federatedfilesharing/l10n/sv.js
@@ -43,7 +43,7 @@ OC.L10N.register(
"Allow users on this server to receive shares from other servers" : "Tillåt användare på denna servern att ta emot utdelningar från andra servrar",
"Search global and public address book for users" : "Sök global och offentlig adressbok för användare",
"Federated Cloud" : "Federerat Moln",
- "Your Federated Cloud ID:" : "Ditt Federerade Moln-ID",
+ "Your Federated Cloud ID:" : "Ditt Federerade Moln-ID:",
"Share it:" : "Dela detta:",
"Add to your website" : "Lägg till på din hemsida",
"Share with me via Nextcloud" : "Dela med mig via Nextcloud",
diff --git a/apps/federatedfilesharing/l10n/sv.json b/apps/federatedfilesharing/l10n/sv.json
index 47c8ebf23b7..5eff9e9f0d2 100644
--- a/apps/federatedfilesharing/l10n/sv.json
+++ b/apps/federatedfilesharing/l10n/sv.json
@@ -41,7 +41,7 @@
"Allow users on this server to receive shares from other servers" : "Tillåt användare på denna servern att ta emot utdelningar från andra servrar",
"Search global and public address book for users" : "Sök global och offentlig adressbok för användare",
"Federated Cloud" : "Federerat Moln",
- "Your Federated Cloud ID:" : "Ditt Federerade Moln-ID",
+ "Your Federated Cloud ID:" : "Ditt Federerade Moln-ID:",
"Share it:" : "Dela detta:",
"Add to your website" : "Lägg till på din hemsida",
"Share with me via Nextcloud" : "Dela med mig via Nextcloud",
diff --git a/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php b/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
index 55329338a92..3c399268124 100644
--- a/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
+++ b/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
@@ -25,18 +25,24 @@
namespace OCA\FederatedFileSharing\Controller;
+use OC\Files\Filesystem;
use OC\HintException;
+use OC\Share\Helper;
use OCA\FederatedFileSharing\AddressHandler;
+use OCA\FederatedFileSharing\DiscoveryManager;
use OCA\FederatedFileSharing\FederatedShareProvider;
+use OCA\Files_Sharing\External\Manager;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\JSONResponse;
+use OCP\Files\StorageInvalidException;
use OCP\Http\Client\IClientService;
use OCP\IL10N;
use OCP\IRequest;
use OCP\ISession;
use OCP\IUserSession;
use OCP\Share\IManager;
+use OCP\Util;
/**
* Class MountPublicLinkController
@@ -107,6 +113,7 @@ class MountPublicLinkController extends Controller {
*
* @NoCSRFRequired
* @PublicPage
+ * @BruteForceProtection publicLink2FederatedShare
*
* @param string $shareWith
* @param string $token
@@ -226,22 +233,22 @@ class MountPublicLinkController extends Controller {
private function legacyMountPublicLink($token, $remote, $password, $name, $owner, $ownerDisplayName) {
// Check for invalid name
- if (!\OCP\Util::isValidFileName($name)) {
+ if (!Util::isValidFileName($name)) {
return new JSONResponse(['message' => $this->l->t('The mountpoint name contains invalid characters.')], Http::STATUS_BAD_REQUEST);
}
$currentUser = $this->userSession->getUser()->getUID();
$currentServer = $this->addressHandler->generateRemoteURL();
- if (\OC\Share\Helper::isSameUserOnSameServer($owner, $remote, $currentUser, $currentServer)) {
+ if (Helper::isSameUserOnSameServer($owner, $remote, $currentUser, $currentServer)) {
return new JSONResponse(['message' => $this->l->t('Not allowed to create a federated share with the owner.')], Http::STATUS_BAD_REQUEST);
}
- $discoveryManager = new \OCA\FederatedFileSharing\DiscoveryManager(
+ $discoveryManager = new DiscoveryManager(
\OC::$server->getMemCacheFactory(),
\OC::$server->getHTTPClientService()
);
- $externalManager = new \OCA\Files_Sharing\External\Manager(
+ $externalManager = new Manager(
\OC::$server->getDatabaseConnection(),
- \OC\Files\Filesystem::getMountManager(),
- \OC\Files\Filesystem::getLoader(),
+ Filesystem::getMountManager(),
+ Filesystem::getLoader(),
\OC::$server->getHTTPClientService(),
\OC::$server->getNotificationManager(),
$discoveryManager,
@@ -249,7 +256,8 @@ class MountPublicLinkController extends Controller {
);
// check for ssl cert
- if (substr($remote, 0, 5) === 'https') {
+
+ if (strpos($remote, 'https') === 0) {
try {
$client = $this->clientService->newClient();
$client->get($remote, [
@@ -268,19 +276,19 @@ class MountPublicLinkController extends Controller {
try {
// check if storage exists
$storage->checkStorageAvailability();
- } catch (\OCP\Files\StorageInvalidException $e) {
+ } catch (StorageInvalidException $e) {
// note: checkStorageAvailability will already remove the invalid share
- \OCP\Util::writeLog(
+ Util::writeLog(
'federatedfilesharing',
'Invalid remote storage: ' . get_class($e) . ': ' . $e->getMessage(),
- \OCP\Util::DEBUG
+ Util::DEBUG
);
return new JSONResponse(['message' => $this->l->t('Could not authenticate to remote share, password might be wrong')], Http::STATUS_BAD_REQUEST);
} catch (\Exception $e) {
- \OCP\Util::writeLog(
+ Util::writeLog(
'federatedfilesharing',
'Invalid remote storage: ' . get_class($e) . ': ' . $e->getMessage(),
- \OCP\Util::DEBUG
+ Util::DEBUG
);
$externalManager->removeShare($mount->getMountPoint());
return new JSONResponse(['message' => $this->l->t('Storage not valid')], Http::STATUS_BAD_REQUEST);
@@ -295,27 +303,27 @@ class MountPublicLinkController extends Controller {
'legacyMount' => '1'
]
);
- } catch (\OCP\Files\StorageInvalidException $e) {
- \OCP\Util::writeLog(
+ } catch (StorageInvalidException $e) {
+ Util::writeLog(
'federatedfilesharing',
'Invalid remote storage: ' . get_class($e) . ': ' . $e->getMessage(),
- \OCP\Util::DEBUG
+ Util::DEBUG
);
return new JSONResponse(['message' => $this->l->t('Storage not valid')], Http::STATUS_BAD_REQUEST);
} catch (\Exception $e) {
- \OCP\Util::writeLog(
+ Util::writeLog(
'federatedfilesharing',
'Invalid remote storage: ' . get_class($e) . ': ' . $e->getMessage(),
- \OCP\Util::DEBUG
+ Util::DEBUG
);
return new JSONResponse(['message' => $this->l->t('Couldn\'t add remote share')], Http::STATUS_BAD_REQUEST);
}
} else {
$externalManager->removeShare($mount->getMountPoint());
- \OCP\Util::writeLog(
+ Util::writeLog(
'federatedfilesharing',
'Couldn\'t add remote share',
- \OCP\Util::DEBUG
+ Util::DEBUG
);
return new JSONResponse(['message' => $this->l->t('Couldn\'t add remote share')], Http::STATUS_BAD_REQUEST);
}
diff --git a/apps/federation/l10n/cs_CZ.js b/apps/federation/l10n/cs_CZ.js
index 529cf164bfd..df0f9bbfb41 100644
--- a/apps/federation/l10n/cs_CZ.js
+++ b/apps/federation/l10n/cs_CZ.js
@@ -8,6 +8,9 @@ OC.L10N.register(
"Federation" : "Sdružování",
"Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Sdružování vám umožňuje se připojit k dalším důvěryhodným serverům za účelem výměny uživatelských adresářů. Používá se to např. pro automatické doplňování uživatelů při sdruženém sdílení.",
"Add server automatically once a federated share was created successfully" : "Přidat server automaticky jakmile je úspěšně vytvořeno sdružené sdílení",
+ "Trusted servers" : "Důvěryhodné servery",
+ "+ Add trusted server" : "+ Přidat důvěryhodný server",
+ "Trusted server" : "Důvěryhodný server",
"Add" : "Přidat",
"Trusted Servers" : "Důvěryhodné servery",
"+ Add Nextcloud server" : "+ Přidat Nextcloud server",
diff --git a/apps/federation/l10n/cs_CZ.json b/apps/federation/l10n/cs_CZ.json
index ccbc912ef5e..f28d002dc44 100644
--- a/apps/federation/l10n/cs_CZ.json
+++ b/apps/federation/l10n/cs_CZ.json
@@ -6,6 +6,9 @@
"Federation" : "Sdružování",
"Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Sdružování vám umožňuje se připojit k dalším důvěryhodným serverům za účelem výměny uživatelských adresářů. Používá se to např. pro automatické doplňování uživatelů při sdruženém sdílení.",
"Add server automatically once a federated share was created successfully" : "Přidat server automaticky jakmile je úspěšně vytvořeno sdružené sdílení",
+ "Trusted servers" : "Důvěryhodné servery",
+ "+ Add trusted server" : "+ Přidat důvěryhodný server",
+ "Trusted server" : "Důvěryhodný server",
"Add" : "Přidat",
"Trusted Servers" : "Důvěryhodné servery",
"+ Add Nextcloud server" : "+ Přidat Nextcloud server",
diff --git a/apps/files/css/mobile.css b/apps/files/css/mobile.css
index 2de99689839..4a37bf15a4b 100644
--- a/apps/files/css/mobile.css
+++ b/apps/files/css/mobile.css
@@ -58,7 +58,7 @@ table td.filename .nametext {
/* ellipsis on file names */
table td.filename .nametext .innernametext {
- max-width: 50%;
+ max-width: calc(100% - 175px);
}
/* proper notification area for multi line messages */
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index cd0eb390ee3..bb50814dfdc 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -1180,7 +1180,7 @@
var innernameSpan = $('<span></span>').addClass('innernametext').text(basename);
if (path && path !== '/') {
- var conflictingItems = this.$fileList.find('tr[data-file="' + name.replace( /(:|\.|\[|\]|,|=)/g, "\\$1") + '"]');
+ var conflictingItems = this.$fileList.find('tr[data-file="' + this._jqSelEscape(name) + '"]');
if (conflictingItems.length !== 0) {
if (conflictingItems.length === 1) {
// Update the path on the first conflicting item
@@ -1266,6 +1266,14 @@
return tr;
},
+ /* escape a selector expression for jQuery */
+ _jqSelEscape: function (expression) {
+ if (expression) {
+ return expression.replace(/[!"#$%&'()*+,.\/:;<=>?@\[\\\]^`{|}~]/g, '\\$&');
+ }
+ return null;
+ },
+
/**
* Adds an entry to the files array and also into the DOM
* in a sorted manner.
diff --git a/apps/files/l10n/cs_CZ.js b/apps/files/l10n/cs_CZ.js
index d2fea9773f0..0acc6a31af2 100644
--- a/apps/files/l10n/cs_CZ.js
+++ b/apps/files/l10n/cs_CZ.js
@@ -28,6 +28,7 @@ OC.L10N.register(
"Delete" : "Smazat",
"Disconnect storage" : "Odpojit úložiště",
"Unshare" : "Zrušit sdílení",
+ "Could not load info for file \"{file}\"" : "Nepodařilo se načíst informace pro soubor {file}",
"Details" : "Podrobnosti",
"Select" : "Vybrat",
"Pending" : "Nevyřízené",
@@ -72,7 +73,31 @@ OC.L10N.register(
"New folder" : "Nový adresář",
"Upload" : "Odeslat",
"An error occurred while trying to update the tags" : "Při pokusu o úpravu tagů nastala chyba",
+ "Added to favorites" : "Přidán k oblíbeným",
+ "Removed from favorites" : "Odebráno z oblíbených",
+ "You added {file} to your favorites" : "Do svých oblíbených jste přidal(a) {file}",
+ "You removed {file} from your favorites" : "Odstranil(a) jste {file} ze svých oblíbených",
"File changes" : "Změny souboru",
+ "Created by {user}" : "Vytvořil {user}",
+ "Changed by {user}" : "Změnil {user}",
+ "Deleted by {user}" : "Odstranil {user}",
+ "Restored by {user}" : "Obnovil {user}",
+ "Renamed by {user}" : "Přejmenoval {user}",
+ "Moved by {user}" : "Přesunul {user}",
+ "You created {file}" : "Vytvořil(a) jste {file}",
+ "{user} created {file}" : "{user} vytvořil(a) {file}",
+ "{file} was created in a public folder" : "Soubor {file} byl vytvořen ve veřejné složce",
+ "You changed {file}" : "Změnil(a) jste {file}",
+ "{user} changed {file}" : "{user} změnil(a) {file}",
+ "You deleted {file}" : "Odstranil(a) jste {file}",
+ "{user} deleted {file}" : "{user} smazal(a) {file}",
+ "You restored {file}" : "Obnovil(a) jste {file}",
+ "{user} restored {file}" : "{user} obnovil {file}",
+ "You renamed {oldfile} to {newfile}" : "Přejmenoval(a) jste {oldfile} na {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} přejmenoval {oldfile} na {newfile}",
+ "You moved {oldfile} to {newfile}" : "{oldfile} jste přesunul(a) do {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} přesunul(a) {oldfile} do {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Soubor byl přidán, nebo odstraněn z vašich <strong>oblíbených</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Soubor nebo adresář byl <strong>změněn</strong> nebo <strong>přejmenován</strong>",
"A new file or folder has been <strong>created</strong>" : "Byl <strong>vytvořen</strong> nový soubor nebo adresář",
"A new file or folder has been <strong>deleted</strong>" : "Nový soubor nebo adresář byl <strong>smazán</strong>",
diff --git a/apps/files/l10n/cs_CZ.json b/apps/files/l10n/cs_CZ.json
index 19f05a04bc4..49d2855cc2e 100644
--- a/apps/files/l10n/cs_CZ.json
+++ b/apps/files/l10n/cs_CZ.json
@@ -26,6 +26,7 @@
"Delete" : "Smazat",
"Disconnect storage" : "Odpojit úložiště",
"Unshare" : "Zrušit sdílení",
+ "Could not load info for file \"{file}\"" : "Nepodařilo se načíst informace pro soubor {file}",
"Details" : "Podrobnosti",
"Select" : "Vybrat",
"Pending" : "Nevyřízené",
@@ -70,7 +71,31 @@
"New folder" : "Nový adresář",
"Upload" : "Odeslat",
"An error occurred while trying to update the tags" : "Při pokusu o úpravu tagů nastala chyba",
+ "Added to favorites" : "Přidán k oblíbeným",
+ "Removed from favorites" : "Odebráno z oblíbených",
+ "You added {file} to your favorites" : "Do svých oblíbených jste přidal(a) {file}",
+ "You removed {file} from your favorites" : "Odstranil(a) jste {file} ze svých oblíbených",
"File changes" : "Změny souboru",
+ "Created by {user}" : "Vytvořil {user}",
+ "Changed by {user}" : "Změnil {user}",
+ "Deleted by {user}" : "Odstranil {user}",
+ "Restored by {user}" : "Obnovil {user}",
+ "Renamed by {user}" : "Přejmenoval {user}",
+ "Moved by {user}" : "Přesunul {user}",
+ "You created {file}" : "Vytvořil(a) jste {file}",
+ "{user} created {file}" : "{user} vytvořil(a) {file}",
+ "{file} was created in a public folder" : "Soubor {file} byl vytvořen ve veřejné složce",
+ "You changed {file}" : "Změnil(a) jste {file}",
+ "{user} changed {file}" : "{user} změnil(a) {file}",
+ "You deleted {file}" : "Odstranil(a) jste {file}",
+ "{user} deleted {file}" : "{user} smazal(a) {file}",
+ "You restored {file}" : "Obnovil(a) jste {file}",
+ "{user} restored {file}" : "{user} obnovil {file}",
+ "You renamed {oldfile} to {newfile}" : "Přejmenoval(a) jste {oldfile} na {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} přejmenoval {oldfile} na {newfile}",
+ "You moved {oldfile} to {newfile}" : "{oldfile} jste přesunul(a) do {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} přesunul(a) {oldfile} do {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Soubor byl přidán, nebo odstraněn z vašich <strong>oblíbených</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Soubor nebo adresář byl <strong>změněn</strong> nebo <strong>přejmenován</strong>",
"A new file or folder has been <strong>created</strong>" : "Byl <strong>vytvořen</strong> nový soubor nebo adresář",
"A new file or folder has been <strong>deleted</strong>" : "Nový soubor nebo adresář byl <strong>smazán</strong>",
diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js
index afd1f8142c2..8b373e82894 100644
--- a/apps/files/l10n/de.js
+++ b/apps/files/l10n/de.js
@@ -76,7 +76,7 @@ OC.L10N.register(
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
"You added {file} to your favorites" : "Du hast {file} zu deinen Favoriten hinzugefügt",
- "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten hentfernt",
+ "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten entfernt",
"File changes" : "Dateiänderungen",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json
index 30a2730b47c..8b131cd728d 100644
--- a/apps/files/l10n/de.json
+++ b/apps/files/l10n/de.json
@@ -74,7 +74,7 @@
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
"You added {file} to your favorites" : "Du hast {file} zu deinen Favoriten hinzugefügt",
- "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten hentfernt",
+ "You removed {file} from your favorites" : "Du hast {file} aus deinen Favoriten entfernt",
"File changes" : "Dateiänderungen",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js
index 9ef2aed2802..17961360c98 100644
--- a/apps/files/l10n/de_DE.js
+++ b/apps/files/l10n/de_DE.js
@@ -76,7 +76,7 @@ OC.L10N.register(
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
"You added {file} to your favorites" : "Sie haben {file} zu Ihren Favoriten hinzugefügt",
- "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten hentfernt",
+ "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten entfernt",
"File changes" : "Datei geändert",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json
index 3466d7ebd9a..926434c523c 100644
--- a/apps/files/l10n/de_DE.json
+++ b/apps/files/l10n/de_DE.json
@@ -74,7 +74,7 @@
"Added to favorites" : "Zu den Favoriten hinzugefügt",
"Removed from favorites" : "Aus den Favoriten entfernt",
"You added {file} to your favorites" : "Sie haben {file} zu Ihren Favoriten hinzugefügt",
- "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten hentfernt",
+ "You removed {file} from your favorites" : "Sie haben {file} aus Ihren Favoriten entfernt",
"File changes" : "Datei geändert",
"Created by {user}" : "Erstellt durch {user}",
"Changed by {user}" : "Geändert durch {user}",
diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js
index dcd0928ca25..123dcfdaa1a 100644
--- a/apps/files/l10n/fr.js
+++ b/apps/files/l10n/fr.js
@@ -1,24 +1,24 @@
OC.L10N.register(
"files",
{
- "Storage is temporarily not available" : "Le support de stockage est temporairement non disponible",
- "Storage invalid" : "Support de stockage non valable",
+ "Storage is temporarily not available" : "Le support de stockage est temporairement indisponible",
+ "Storage invalid" : "Support de stockage invalide",
"Unknown error" : "Erreur inconnue ",
"Files" : "Fichiers",
"All files" : "Tous les fichiers",
"Recent" : "Récent",
- "File could not be found" : "Ce fichier n'a pu être trouvé.",
+ "File could not be found" : "Fichier introuvable",
"Home" : "Mes fichiers",
"Close" : "Fermer",
"Favorites" : "Favoris",
"Could not create folder \"{dir}\"" : "Impossible de créer le dossier \"{dir}\"",
- "Upload cancelled." : "Envoi annulé.",
+ "Upload cancelled." : "Téléversement annulé.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossible d'envoyer {filename} car il s'agit d'un répertoire ou d'un fichier de taille nulle",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Espace libre insuffisant : vous tentez d'envoyer {size1} mais seulement {size2} sont disponibles",
"Target folder \"{dir}\" does not exist any more" : "Le dossier cible « {dir} » n'existe plus",
- "Not enough free space" : "Pas assez d'espace disponible",
+ "Not enough free space" : "Espace disponible insuffisant",
"Uploading..." : "Téléversement en cours…",
- "..." : "...",
+ "..." : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} sur {totalSize} ({bitrate})",
"Actions" : "Actions",
"Download" : "Télécharger",
@@ -34,7 +34,7 @@ OC.L10N.register(
"Pending" : "En attente",
"Unable to determine date" : "Impossible de déterminer la date",
"This operation is forbidden" : "Cette opération est interdite",
- "This directory is unavailable, please check the logs or contact the administrator" : "Ce répertoire n'est pas disponible. Consultez les logs ou contactez votre administrateur",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Ce dossier n'est pas disponible. Consultez les logs ou contactez votre administrateur",
"Could not move \"{file}\", target exists" : "Impossible de déplacer \"{file}\", la cible existe",
"Could not move \"{file}\"" : "Impossible de déplacer \"{file}\"",
"{newName} already exists" : "{newName} existe déjà",
@@ -53,13 +53,13 @@ OC.L10N.register(
"_%n file_::_%n files_" : ["%n fichier","%n fichiers"],
"{dirs} and {files}" : "{dirs} et {files}",
"_including %n hidden_::_including %n hidden_" : ["inclus %n caché","inclus %n cachés"],
- "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'ajouter des fichiers ici",
+ "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'envoyer ou de créer des fichiers ici",
"_Uploading %n file_::_Uploading %n files_" : ["Téléversement de %n fichier","Téléversement de %n fichiers"],
"New" : "Nouveau",
"\"{name}\" is an invalid file name." : "\"{name}\" n'est pas un nom de fichier valide.",
"File name cannot be empty." : "Le nom de fichier ne peut être vide.",
- "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ou synchronisés!",
- "Your storage is full, files can not be updated or synced anymore!" : "Votre espage de stockage est plein, les fichiers ne peuvent plus être ajoutés ou synchronisés !",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !",
+ "Your storage is full, files can not be updated or synced anymore!" : "Votre espace de stockage est plein. Les fichiers ne peuvent plus être ajoutés ni synchronisés !",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "L'espace de stockage de {owner} est presque plein ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Votre espace de stockage est presque plein ({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["correspond à '{filter}'","correspondent à '{filter}'"],
@@ -133,7 +133,7 @@ OC.L10N.register(
"Unable to set upload directory." : "Impossible de définir le dossier de destination.",
"Invalid Token" : "Jeton non valide",
"No file was uploaded. Unknown error" : "Aucun fichier n'a été envoyé. Erreur inconnue",
- "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès.",
+ "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Le fichier envoyé dépasse l'instruction upload_max_filesize située dans le fichier php.ini :",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier envoyé dépasse la valeur MAX_FILE_SIZE qui était spécifiée dans le formulaire HTML.",
"The uploaded file was only partially uploaded" : "Le fichier n'a été que partiellement envoyé.",
diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json
index e990093bbbb..8645a644dd7 100644
--- a/apps/files/l10n/fr.json
+++ b/apps/files/l10n/fr.json
@@ -1,22 +1,22 @@
{ "translations": {
- "Storage is temporarily not available" : "Le support de stockage est temporairement non disponible",
- "Storage invalid" : "Support de stockage non valable",
+ "Storage is temporarily not available" : "Le support de stockage est temporairement indisponible",
+ "Storage invalid" : "Support de stockage invalide",
"Unknown error" : "Erreur inconnue ",
"Files" : "Fichiers",
"All files" : "Tous les fichiers",
"Recent" : "Récent",
- "File could not be found" : "Ce fichier n'a pu être trouvé.",
+ "File could not be found" : "Fichier introuvable",
"Home" : "Mes fichiers",
"Close" : "Fermer",
"Favorites" : "Favoris",
"Could not create folder \"{dir}\"" : "Impossible de créer le dossier \"{dir}\"",
- "Upload cancelled." : "Envoi annulé.",
+ "Upload cancelled." : "Téléversement annulé.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "Impossible d'envoyer {filename} car il s'agit d'un répertoire ou d'un fichier de taille nulle",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Espace libre insuffisant : vous tentez d'envoyer {size1} mais seulement {size2} sont disponibles",
"Target folder \"{dir}\" does not exist any more" : "Le dossier cible « {dir} » n'existe plus",
- "Not enough free space" : "Pas assez d'espace disponible",
+ "Not enough free space" : "Espace disponible insuffisant",
"Uploading..." : "Téléversement en cours…",
- "..." : "...",
+ "..." : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} sur {totalSize} ({bitrate})",
"Actions" : "Actions",
"Download" : "Télécharger",
@@ -32,7 +32,7 @@
"Pending" : "En attente",
"Unable to determine date" : "Impossible de déterminer la date",
"This operation is forbidden" : "Cette opération est interdite",
- "This directory is unavailable, please check the logs or contact the administrator" : "Ce répertoire n'est pas disponible. Consultez les logs ou contactez votre administrateur",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Ce dossier n'est pas disponible. Consultez les logs ou contactez votre administrateur",
"Could not move \"{file}\", target exists" : "Impossible de déplacer \"{file}\", la cible existe",
"Could not move \"{file}\"" : "Impossible de déplacer \"{file}\"",
"{newName} already exists" : "{newName} existe déjà",
@@ -51,13 +51,13 @@
"_%n file_::_%n files_" : ["%n fichier","%n fichiers"],
"{dirs} and {files}" : "{dirs} et {files}",
"_including %n hidden_::_including %n hidden_" : ["inclus %n caché","inclus %n cachés"],
- "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'ajouter des fichiers ici",
+ "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'envoyer ou de créer des fichiers ici",
"_Uploading %n file_::_Uploading %n files_" : ["Téléversement de %n fichier","Téléversement de %n fichiers"],
"New" : "Nouveau",
"\"{name}\" is an invalid file name." : "\"{name}\" n'est pas un nom de fichier valide.",
"File name cannot be empty." : "Le nom de fichier ne peut être vide.",
- "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ou synchronisés!",
- "Your storage is full, files can not be updated or synced anymore!" : "Votre espage de stockage est plein, les fichiers ne peuvent plus être ajoutés ou synchronisés !",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !",
+ "Your storage is full, files can not be updated or synced anymore!" : "Votre espace de stockage est plein. Les fichiers ne peuvent plus être ajoutés ni synchronisés !",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "L'espace de stockage de {owner} est presque plein ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Votre espace de stockage est presque plein ({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["correspond à '{filter}'","correspondent à '{filter}'"],
@@ -131,7 +131,7 @@
"Unable to set upload directory." : "Impossible de définir le dossier de destination.",
"Invalid Token" : "Jeton non valide",
"No file was uploaded. Unknown error" : "Aucun fichier n'a été envoyé. Erreur inconnue",
- "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès.",
+ "There is no error, the file uploaded with success" : "Aucune erreur, le fichier a été envoyé avec succès",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Le fichier envoyé dépasse l'instruction upload_max_filesize située dans le fichier php.ini :",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier envoyé dépasse la valeur MAX_FILE_SIZE qui était spécifiée dans le formulaire HTML.",
"The uploaded file was only partially uploaded" : "Le fichier n'a été que partiellement envoyé.",
diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js
index 2325929ac21..a3dbb702802 100644
--- a/apps/files/l10n/sv.js
+++ b/apps/files/l10n/sv.js
@@ -75,7 +75,7 @@ OC.L10N.register(
"An error occurred while trying to update the tags" : "Ett fel uppstod när uppdatera taggarna",
"Added to favorites" : "Lades till i favoriter",
"Removed from favorites" : "Togs bort från favoriter",
- "You added {file} to your favorites" : "Du lade till {file} till dina favoriter",
+ "You added {file} to your favorites" : "Du la till {file} till dina favoriter",
"You removed {file} from your favorites" : "Du tog bort {file} från dina favoriter",
"File changes" : "Filändringar",
"Created by {user}" : "Skapad av {user}",
diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json
index cb66007b384..dbee5345bf0 100644
--- a/apps/files/l10n/sv.json
+++ b/apps/files/l10n/sv.json
@@ -73,7 +73,7 @@
"An error occurred while trying to update the tags" : "Ett fel uppstod när uppdatera taggarna",
"Added to favorites" : "Lades till i favoriter",
"Removed from favorites" : "Togs bort från favoriter",
- "You added {file} to your favorites" : "Du lade till {file} till dina favoriter",
+ "You added {file} to your favorites" : "Du la till {file} till dina favoriter",
"You removed {file} from your favorites" : "Du tog bort {file} från dina favoriter",
"File changes" : "Filändringar",
"Created by {user}" : "Skapad av {user}",
diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js
index 8f053b231d6..0a8e66d18c9 100644
--- a/apps/files/l10n/zh_CN.js
+++ b/apps/files/l10n/zh_CN.js
@@ -1,82 +1,82 @@
OC.L10N.register(
"files",
{
- "Storage is temporarily not available" : "存储器当前无法访问",
+ "Storage is temporarily not available" : "存储暂时不可用",
"Storage invalid" : "存储空间无效",
"Unknown error" : "未知错误",
"Files" : "文件",
"All files" : "全部文件",
"Recent" : "最近",
"File could not be found" : "文件未找到",
- "Home" : "家庭",
+ "Home" : "首页",
"Close" : "关闭",
"Favorites" : "收藏",
- "Could not create folder \"{dir}\"" : "不能创建文件夹 \"{dir}\"",
+ "Could not create folder \"{dir}\"" : "无法创建文件夹 \"{dir}\"",
"Upload cancelled." : "上传已取消",
- "Unable to upload {filename} as it is a directory or has 0 bytes" : "不能上传文件 {filename} ,由于它是一个目录或者为0字节",
- "Not enough free space, you are uploading {size1} but only {size2} is left" : "没有足够的可用空间,您正在上传 {size1} 的文件但是只有 {size2} 可用。",
- "Target folder \"{dir}\" does not exist any more" : "目标目录\"{dir}\" 不存在",
- "Not enough free space" : "没有足够空间",
- "Uploading..." : "上传中...",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "无法上传文件 {filename}, 因为其是一个目录或者长度为0字节",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "可用空间不足, 您上传的文件大小为 {size1}, 但可用空间仅剩 {size2}",
+ "Target folder \"{dir}\" does not exist any more" : "目标目录 \"{dir}\" 不存在",
+ "Not enough free space" : "可用空间不足",
+ "Uploading..." : "正在上传...",
"..." : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})",
- "Actions" : "动作",
+ "Actions" : "操作",
"Download" : "下载",
"Rename" : "重命名",
"Move" : "移动",
"Target folder" : "目标目录",
"Delete" : "删除",
- "Disconnect storage" : "断开储存连接",
+ "Disconnect storage" : "断开存储链接",
"Unshare" : "取消共享",
- "Could not load info for file \"{file}\"" : "无法载入\"{file}\"文件信息",
+ "Could not load info for file \"{file}\"" : "无法加载 \"{file}\" 文件信息",
"Details" : "详细信息",
"Select" : "选择",
"Pending" : "等待",
"Unable to determine date" : "无法确定日期",
"This operation is forbidden" : "操作被禁止",
- "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用,请检查日志或联系管理员",
- "Could not move \"{file}\", target exists" : "不能移动 \"{file}\",目标已存在。",
- "Could not move \"{file}\"" : "不能移动 \"{file}\"",
+ "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用, 请检查日志或联系管理员",
+ "Could not move \"{file}\", target exists" : "无法移动 \"{file}\", 目标已存在",
+ "Could not move \"{file}\"" : "无法移动 \"{file}\"",
"{newName} already exists" : "{newname} 已经存在",
- "Could not rename \"{fileName}\", it does not exist any more" : "不能重命名 \"{fileName}\",此文件已经不存在",
- "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "在文件夹 \"{dir}\" 中已经存在 \"{targetName}\" 。请换一个名字试下。",
- "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}'标签的结果",
+ "Could not rename \"{fileName}\", it does not exist any more" : "无法重命名 \"{fileName}\", 此文件已经不存在",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "文件夹 \"{dir}\" 中已经存在 \"{targetName}\". 请尝试其他的名称.",
+ "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" : "名称",
"Size" : "大小",
"Modified" : "修改日期",
- "_%n folder_::_%n folders_" : ["%n 文件夹"],
+ "_%n folder_::_%n folders_" : ["%n 个文件夹"],
"_%n file_::_%n files_" : ["%n个文件"],
"{dirs} and {files}" : "{dirs} 和 {files}",
- "_including %n hidden_::_including %n hidden_" : ["包括 %n 隐藏的"],
+ "_including %n hidden_::_including %n hidden_" : ["包括 %n 个隐藏文件"],
"You don’t have permission to upload or create files here" : "您没有权限在此上传或创建文件",
"_Uploading %n file_::_Uploading %n files_" : ["上传 %n 个文件"],
"New" : "新建",
- "\"{name}\" is an invalid file name." : "“{name}”是一个无效的文件名。",
- "File name cannot be empty." : "文件名不能为空。",
- "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} 的存储空间已满,文件将无法更新或同步!",
- "Your storage is full, files can not be updated or synced anymore!" : "您的存储空间已满,文件将无法更新或同步!",
+ "\"{name}\" is an invalid file name." : "\"{name}\" 是一个无效的文件名",
+ "File name cannot be empty." : "文件名不能为空.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} 的存储空间已满, 文件将无法更新或同步!",
+ "Your storage is full, files can not be updated or synced anymore!" : "您的存储空间已满, 文件将无法更新或同步!",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} 的存储空间即将用完 ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "您的存储空间即将用完 ({usedSpacePercent}%)",
- "_matches '{filter}'_::_match '{filter}'_" : ["匹配“{filter}”"],
- "View in folder" : "在文件夹里查看",
+ "_matches '{filter}'_::_match '{filter}'_" : ["匹配 '{filter}'"],
+ "View in folder" : "在文件夹中查看",
"Path" : "路径",
"_%n byte_::_%n bytes_" : ["%n 字节"],
"Favorited" : "已收藏",
"Favorite" : "收藏",
"Copy local link" : "复制本地链接",
"Folder" : "文件夹",
- "New folder" : "增加文件夹",
+ "New folder" : "新建文件夹",
"Upload" : "上传",
"An error occurred while trying to update the tags" : "更新标签时出错",
"Added to favorites" : "添加到收藏",
"Removed from favorites" : "取消收藏",
- "You added {file} to your favorites" : "您添加了 {file} 文件到您的收藏夹",
- "You removed {file} from your favorites" : "您从您的收藏夹删除了 {file} 文件",
+ "You added {file} to your favorites" : "您已经添加 {file} 到您的收藏夹",
+ "You removed {file} from your favorites" : "您已从收藏夹中删除 {file}",
"File changes" : "文件发生变化",
"Created by {user}" : "由 {user} 创建",
"Changed by {user}" : "由 {user} 更改",
@@ -97,29 +97,29 @@ OC.L10N.register(
"{user} renamed {oldfile} to {newfile}" : "{user} 将 {oldfile} 改名为 {newfile}",
"You moved {oldfile} to {newfile}" : "您移动 {oldfile} 到 {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} 移动 {oldfile} 到 {newfile}",
- "A file has been added to or removed from your <strong>favorites</strong>" : "一个文件从您的 <strong>收藏夹</strong> 添加或者删除",
- "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "一个文件或者文件夹被 <strong>更改</strong> 或者 <strong>重命名</strong>",
- "A new file or folder has been <strong>created</strong>" : "一个新的文件或文件夹已被<strong>创建</strong>",
- "A new file or folder has been <strong>deleted</strong>" : "一个新文件或者文件夹被 <strong>删除</strong>",
- "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "针对<strong>已收藏文件</strong>的新建和修改发送有限的通知 <em>(仅流)</em>",
- "A new file or folder has been <strong>restored</strong>" : "一个新文件或者文件夹被<strong>恢复</strong>",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "文件已经添加或删除到您的 <strong>收藏夹</strong> 中",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "文件/文件夹已经 <strong>更改</strong> 或者 <strong>重命名</strong>",
+ "A new file or folder has been <strong>created</strong>" : "新的文件/文件夹已经 <strong>创建</strong>",
+ "A new file or folder has been <strong>deleted</strong>" : "新的文件/文件夹已经 <strong>删除</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "仅限 <strong>收藏文件</strong>的创建和更改通知 <em>(仅限流)</em>",
+ "A new file or folder has been <strong>restored</strong>" : "新的文件/文件夹已经<strong>恢复</strong>",
"Upload (max. %s)" : "上传 (最大 %s)",
"File handling" : "文件处理",
"Maximum upload size" : "最大上传大小",
"max. possible: " : "最大允许: ",
"Save" : "保存",
- "With PHP-FPM it might take 5 minutes for changes to be applied." : "对于 PHP-FPM 这个值改变后可能需要 5 分钟才会生效。",
- "Missing permissions to edit from here." : "没有从这里进行编辑的权限",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "对于 PHP-FPM 这个值改变后可能需要 5 分钟才会生效.",
+ "Missing permissions to edit from here." : "没有权限编辑",
"Settings" : "设置",
"Show hidden files" : "显示隐藏文件",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "使用这个地址 <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">通过 WebDAV 访问您的文件</a>",
"No files in here" : "无文件",
- "Upload some content or sync with your devices!" : "上传一些内容或者与设备同步!",
- "No entries found in this folder" : "此文件夹中无项目",
+ "Upload some content or sync with your devices!" : "上传或从您的设备中同步!",
+ "No entries found in this folder" : "文件夹中无项目",
"Select all" : "全部选择",
"Upload too large" : "上传文件过大",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "您正尝试上传的文件超过了此服务器可以上传的最大容量限制",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "正在上传的文件超过了此服务器允许上传的最大容量限制",
"No favorites" : "无收藏",
"Files and folders you mark as favorite will show up here" : "收藏的文件和文件夹会在这里显示",
"Shared with you" : "与您分享",
@@ -130,43 +130,43 @@ OC.L10N.register(
"Text file" : "文本文件",
"New text file.txt" : "创建文本文件 .txt",
"Storage not available" : "存储空间不可用",
- "Unable to set upload directory." : "无法设置上传文件夹。",
+ "Unable to set upload directory." : "无法设置上传文件夹.",
"Invalid Token" : "无效密匙",
- "No file was uploaded. Unknown error" : "没有文件被上传。未知错误",
- "There is no error, the file uploaded with success" : "文件上传成功,没有错误发生",
- "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "上传文件大小已超过php.ini中upload_max_filesize所规定的值",
+ "No file was uploaded. Unknown error" : "没有文件被上传. 未知错误",
+ "There is no error, the file uploaded with success" : "文件上传成功, 没有任何错误",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "上传文件的大小已超过 php.ini 中 upload_max_filesize 设置的值",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "上传的文件长度超出了 HTML 表单中 MAX_FILE_SIZE 的限制",
- "The uploaded file was only partially uploaded" : "已上传文件只上传了部分(不完整)",
+ "The uploaded file was only partially uploaded" : "文件仅部分上传",
"No file was uploaded" : "没有文件被上传",
- "Missing a temporary folder" : "缺少临时目录",
+ "Missing a temporary folder" : "临时目录缺失",
"Failed to write to disk" : "写入磁盘失败",
"Not enough storage available" : "没有足够的存储空间",
- "The target folder has been moved or deleted." : "目标文件夹已经被移动或删除。",
- "Upload failed. Could not find uploaded file" : "上传失败。未发现上传的文件",
- "Upload failed. Could not get file info." : "上传失败。无法获取文件信息。",
- "Invalid directory." : "无效文件夹。",
+ "The target folder has been moved or deleted." : "目标文件夹已被移动或删除.",
+ "Upload failed. Could not find uploaded file" : "上传失败. 未发现上传的文件",
+ "Upload failed. Could not get file info." : "上传失败. 无法获取文件信息.",
+ "Invalid directory." : "无效文件夹.",
"Total file size {size1} exceeds upload limit {size2}" : "总文件大小 {size1} 超过上传限制 {size2}",
"Error uploading file \"{fileName}\": {message}" : "上传文件错误 \"{fileName}\": {message}",
- "Could not get result from server." : "不能从服务器得到结果",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "剩余时间:{hours}:{minutes}:{seconds} ",
+ "Could not get result from server." : "无法从服务器获取结果",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "剩余时间: {hours}:{minutes}:{seconds} ",
"{hours}:{minutes}h" : "{hours}:{minutes}",
- "{minutes}:{seconds} minute{plural_s} left" : "剩余分钟:{minutes}:{seconds} ",
+ "{minutes}:{seconds} minute{plural_s} left" : "剩余 {minutes}:{seconds} 分钟",
"{minutes}:{seconds}m" : "{minutes}:{seconds}",
- "{seconds} second{plural_s} left" : "剩下{seconds} 秒",
- "{seconds}s" : "{seconds}秒",
+ "{seconds} second{plural_s} left" : "剩余 {seconds} 秒",
+ "{seconds}s" : "{seconds}s",
"Any moment now..." : "现在任何时候...",
"Soon..." : "很快...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "文件正在上传中。现在离开此页会导致上传动作被取消。",
- "No entries in this folder match '{filter}'" : "此文件夹中无项目匹配“{filter}”",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "文件正在上传中. 离开此页将会取消上传.",
+ "No entries in this folder match '{filter}'" : "文件夹中不存在 \"{filter}\"",
"Local link" : "本地链接",
"{newname} already exists" : "{newname} 已经存在",
- "A file or folder has been <strong>changed</strong>" : "一个文件或文件夹已被<strong>修改</strong>",
- "A file or folder has been <strong>deleted</strong>" : "一个文件或文件夹已被<strong>删除</strong>",
- "A file or folder has been <strong>restored</strong>" : "一个文件或文件夹已经被 <strong>恢复</strong>",
- "You created %1$s" : "您创建了%1$s",
+ "A file or folder has been <strong>changed</strong>" : "文件/文件夹已经 <strong>修改</strong>",
+ "A file or folder has been <strong>deleted</strong>" : "文件/文件夹已经 <strong>删除</strong>",
+ "A file or folder has been <strong>restored</strong>" : "文件/文件夹已经 <strong>恢复</strong>",
+ "You created %1$s" : "您创建了 %1$s",
"%2$s created %1$s" : "%2$s 创建了 %1$s",
"%1$s was created in a public folder" : "%1$s 被创建在公开文件夹中",
- "You changed %1$s" : "您修改了%1$s",
+ "You changed %1$s" : "您修改了 %1$s",
"%2$s changed %1$s" : "%2$s 修改了 %1$s",
"You deleted %1$s" : "您删除了 %1$s",
"%2$s deleted %1$s" : "%2$s 删除了 %1$s",
diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json
index 68e15813cdb..26ed83ac15c 100644
--- a/apps/files/l10n/zh_CN.json
+++ b/apps/files/l10n/zh_CN.json
@@ -1,80 +1,80 @@
{ "translations": {
- "Storage is temporarily not available" : "存储器当前无法访问",
+ "Storage is temporarily not available" : "存储暂时不可用",
"Storage invalid" : "存储空间无效",
"Unknown error" : "未知错误",
"Files" : "文件",
"All files" : "全部文件",
"Recent" : "最近",
"File could not be found" : "文件未找到",
- "Home" : "家庭",
+ "Home" : "首页",
"Close" : "关闭",
"Favorites" : "收藏",
- "Could not create folder \"{dir}\"" : "不能创建文件夹 \"{dir}\"",
+ "Could not create folder \"{dir}\"" : "无法创建文件夹 \"{dir}\"",
"Upload cancelled." : "上传已取消",
- "Unable to upload {filename} as it is a directory or has 0 bytes" : "不能上传文件 {filename} ,由于它是一个目录或者为0字节",
- "Not enough free space, you are uploading {size1} but only {size2} is left" : "没有足够的可用空间,您正在上传 {size1} 的文件但是只有 {size2} 可用。",
- "Target folder \"{dir}\" does not exist any more" : "目标目录\"{dir}\" 不存在",
- "Not enough free space" : "没有足够空间",
- "Uploading..." : "上传中...",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "无法上传文件 {filename}, 因为其是一个目录或者长度为0字节",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "可用空间不足, 您上传的文件大小为 {size1}, 但可用空间仅剩 {size2}",
+ "Target folder \"{dir}\" does not exist any more" : "目标目录 \"{dir}\" 不存在",
+ "Not enough free space" : "可用空间不足",
+ "Uploading..." : "正在上传...",
"..." : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})",
- "Actions" : "动作",
+ "Actions" : "操作",
"Download" : "下载",
"Rename" : "重命名",
"Move" : "移动",
"Target folder" : "目标目录",
"Delete" : "删除",
- "Disconnect storage" : "断开储存连接",
+ "Disconnect storage" : "断开存储链接",
"Unshare" : "取消共享",
- "Could not load info for file \"{file}\"" : "无法载入\"{file}\"文件信息",
+ "Could not load info for file \"{file}\"" : "无法加载 \"{file}\" 文件信息",
"Details" : "详细信息",
"Select" : "选择",
"Pending" : "等待",
"Unable to determine date" : "无法确定日期",
"This operation is forbidden" : "操作被禁止",
- "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用,请检查日志或联系管理员",
- "Could not move \"{file}\", target exists" : "不能移动 \"{file}\",目标已存在。",
- "Could not move \"{file}\"" : "不能移动 \"{file}\"",
+ "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用, 请检查日志或联系管理员",
+ "Could not move \"{file}\", target exists" : "无法移动 \"{file}\", 目标已存在",
+ "Could not move \"{file}\"" : "无法移动 \"{file}\"",
"{newName} already exists" : "{newname} 已经存在",
- "Could not rename \"{fileName}\", it does not exist any more" : "不能重命名 \"{fileName}\",此文件已经不存在",
- "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "在文件夹 \"{dir}\" 中已经存在 \"{targetName}\" 。请换一个名字试下。",
- "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}'标签的结果",
+ "Could not rename \"{fileName}\", it does not exist any more" : "无法重命名 \"{fileName}\", 此文件已经不存在",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "文件夹 \"{dir}\" 中已经存在 \"{targetName}\". 请尝试其他的名称.",
+ "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" : "名称",
"Size" : "大小",
"Modified" : "修改日期",
- "_%n folder_::_%n folders_" : ["%n 文件夹"],
+ "_%n folder_::_%n folders_" : ["%n 个文件夹"],
"_%n file_::_%n files_" : ["%n个文件"],
"{dirs} and {files}" : "{dirs} 和 {files}",
- "_including %n hidden_::_including %n hidden_" : ["包括 %n 隐藏的"],
+ "_including %n hidden_::_including %n hidden_" : ["包括 %n 个隐藏文件"],
"You don’t have permission to upload or create files here" : "您没有权限在此上传或创建文件",
"_Uploading %n file_::_Uploading %n files_" : ["上传 %n 个文件"],
"New" : "新建",
- "\"{name}\" is an invalid file name." : "“{name}”是一个无效的文件名。",
- "File name cannot be empty." : "文件名不能为空。",
- "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} 的存储空间已满,文件将无法更新或同步!",
- "Your storage is full, files can not be updated or synced anymore!" : "您的存储空间已满,文件将无法更新或同步!",
+ "\"{name}\" is an invalid file name." : "\"{name}\" 是一个无效的文件名",
+ "File name cannot be empty." : "文件名不能为空.",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} 的存储空间已满, 文件将无法更新或同步!",
+ "Your storage is full, files can not be updated or synced anymore!" : "您的存储空间已满, 文件将无法更新或同步!",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} 的存储空间即将用完 ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "您的存储空间即将用完 ({usedSpacePercent}%)",
- "_matches '{filter}'_::_match '{filter}'_" : ["匹配“{filter}”"],
- "View in folder" : "在文件夹里查看",
+ "_matches '{filter}'_::_match '{filter}'_" : ["匹配 '{filter}'"],
+ "View in folder" : "在文件夹中查看",
"Path" : "路径",
"_%n byte_::_%n bytes_" : ["%n 字节"],
"Favorited" : "已收藏",
"Favorite" : "收藏",
"Copy local link" : "复制本地链接",
"Folder" : "文件夹",
- "New folder" : "增加文件夹",
+ "New folder" : "新建文件夹",
"Upload" : "上传",
"An error occurred while trying to update the tags" : "更新标签时出错",
"Added to favorites" : "添加到收藏",
"Removed from favorites" : "取消收藏",
- "You added {file} to your favorites" : "您添加了 {file} 文件到您的收藏夹",
- "You removed {file} from your favorites" : "您从您的收藏夹删除了 {file} 文件",
+ "You added {file} to your favorites" : "您已经添加 {file} 到您的收藏夹",
+ "You removed {file} from your favorites" : "您已从收藏夹中删除 {file}",
"File changes" : "文件发生变化",
"Created by {user}" : "由 {user} 创建",
"Changed by {user}" : "由 {user} 更改",
@@ -95,29 +95,29 @@
"{user} renamed {oldfile} to {newfile}" : "{user} 将 {oldfile} 改名为 {newfile}",
"You moved {oldfile} to {newfile}" : "您移动 {oldfile} 到 {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} 移动 {oldfile} 到 {newfile}",
- "A file has been added to or removed from your <strong>favorites</strong>" : "一个文件从您的 <strong>收藏夹</strong> 添加或者删除",
- "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "一个文件或者文件夹被 <strong>更改</strong> 或者 <strong>重命名</strong>",
- "A new file or folder has been <strong>created</strong>" : "一个新的文件或文件夹已被<strong>创建</strong>",
- "A new file or folder has been <strong>deleted</strong>" : "一个新文件或者文件夹被 <strong>删除</strong>",
- "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "针对<strong>已收藏文件</strong>的新建和修改发送有限的通知 <em>(仅流)</em>",
- "A new file or folder has been <strong>restored</strong>" : "一个新文件或者文件夹被<strong>恢复</strong>",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "文件已经添加或删除到您的 <strong>收藏夹</strong> 中",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "文件/文件夹已经 <strong>更改</strong> 或者 <strong>重命名</strong>",
+ "A new file or folder has been <strong>created</strong>" : "新的文件/文件夹已经 <strong>创建</strong>",
+ "A new file or folder has been <strong>deleted</strong>" : "新的文件/文件夹已经 <strong>删除</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "仅限 <strong>收藏文件</strong>的创建和更改通知 <em>(仅限流)</em>",
+ "A new file or folder has been <strong>restored</strong>" : "新的文件/文件夹已经<strong>恢复</strong>",
"Upload (max. %s)" : "上传 (最大 %s)",
"File handling" : "文件处理",
"Maximum upload size" : "最大上传大小",
"max. possible: " : "最大允许: ",
"Save" : "保存",
- "With PHP-FPM it might take 5 minutes for changes to be applied." : "对于 PHP-FPM 这个值改变后可能需要 5 分钟才会生效。",
- "Missing permissions to edit from here." : "没有从这里进行编辑的权限",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "对于 PHP-FPM 这个值改变后可能需要 5 分钟才会生效.",
+ "Missing permissions to edit from here." : "没有权限编辑",
"Settings" : "设置",
"Show hidden files" : "显示隐藏文件",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "使用这个地址 <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">通过 WebDAV 访问您的文件</a>",
"No files in here" : "无文件",
- "Upload some content or sync with your devices!" : "上传一些内容或者与设备同步!",
- "No entries found in this folder" : "此文件夹中无项目",
+ "Upload some content or sync with your devices!" : "上传或从您的设备中同步!",
+ "No entries found in this folder" : "文件夹中无项目",
"Select all" : "全部选择",
"Upload too large" : "上传文件过大",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "您正尝试上传的文件超过了此服务器可以上传的最大容量限制",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "正在上传的文件超过了此服务器允许上传的最大容量限制",
"No favorites" : "无收藏",
"Files and folders you mark as favorite will show up here" : "收藏的文件和文件夹会在这里显示",
"Shared with you" : "与您分享",
@@ -128,43 +128,43 @@
"Text file" : "文本文件",
"New text file.txt" : "创建文本文件 .txt",
"Storage not available" : "存储空间不可用",
- "Unable to set upload directory." : "无法设置上传文件夹。",
+ "Unable to set upload directory." : "无法设置上传文件夹.",
"Invalid Token" : "无效密匙",
- "No file was uploaded. Unknown error" : "没有文件被上传。未知错误",
- "There is no error, the file uploaded with success" : "文件上传成功,没有错误发生",
- "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "上传文件大小已超过php.ini中upload_max_filesize所规定的值",
+ "No file was uploaded. Unknown error" : "没有文件被上传. 未知错误",
+ "There is no error, the file uploaded with success" : "文件上传成功, 没有任何错误",
+ "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "上传文件的大小已超过 php.ini 中 upload_max_filesize 设置的值",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "上传的文件长度超出了 HTML 表单中 MAX_FILE_SIZE 的限制",
- "The uploaded file was only partially uploaded" : "已上传文件只上传了部分(不完整)",
+ "The uploaded file was only partially uploaded" : "文件仅部分上传",
"No file was uploaded" : "没有文件被上传",
- "Missing a temporary folder" : "缺少临时目录",
+ "Missing a temporary folder" : "临时目录缺失",
"Failed to write to disk" : "写入磁盘失败",
"Not enough storage available" : "没有足够的存储空间",
- "The target folder has been moved or deleted." : "目标文件夹已经被移动或删除。",
- "Upload failed. Could not find uploaded file" : "上传失败。未发现上传的文件",
- "Upload failed. Could not get file info." : "上传失败。无法获取文件信息。",
- "Invalid directory." : "无效文件夹。",
+ "The target folder has been moved or deleted." : "目标文件夹已被移动或删除.",
+ "Upload failed. Could not find uploaded file" : "上传失败. 未发现上传的文件",
+ "Upload failed. Could not get file info." : "上传失败. 无法获取文件信息.",
+ "Invalid directory." : "无效文件夹.",
"Total file size {size1} exceeds upload limit {size2}" : "总文件大小 {size1} 超过上传限制 {size2}",
"Error uploading file \"{fileName}\": {message}" : "上传文件错误 \"{fileName}\": {message}",
- "Could not get result from server." : "不能从服务器得到结果",
- "{hours}:{minutes}:{seconds} hour{plural_s} left" : "剩余时间:{hours}:{minutes}:{seconds} ",
+ "Could not get result from server." : "无法从服务器获取结果",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "剩余时间: {hours}:{minutes}:{seconds} ",
"{hours}:{minutes}h" : "{hours}:{minutes}",
- "{minutes}:{seconds} minute{plural_s} left" : "剩余分钟:{minutes}:{seconds} ",
+ "{minutes}:{seconds} minute{plural_s} left" : "剩余 {minutes}:{seconds} 分钟",
"{minutes}:{seconds}m" : "{minutes}:{seconds}",
- "{seconds} second{plural_s} left" : "剩下{seconds} 秒",
- "{seconds}s" : "{seconds}秒",
+ "{seconds} second{plural_s} left" : "剩余 {seconds} 秒",
+ "{seconds}s" : "{seconds}s",
"Any moment now..." : "现在任何时候...",
"Soon..." : "很快...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "文件正在上传中。现在离开此页会导致上传动作被取消。",
- "No entries in this folder match '{filter}'" : "此文件夹中无项目匹配“{filter}”",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "文件正在上传中. 离开此页将会取消上传.",
+ "No entries in this folder match '{filter}'" : "文件夹中不存在 \"{filter}\"",
"Local link" : "本地链接",
"{newname} already exists" : "{newname} 已经存在",
- "A file or folder has been <strong>changed</strong>" : "一个文件或文件夹已被<strong>修改</strong>",
- "A file or folder has been <strong>deleted</strong>" : "一个文件或文件夹已被<strong>删除</strong>",
- "A file or folder has been <strong>restored</strong>" : "一个文件或文件夹已经被 <strong>恢复</strong>",
- "You created %1$s" : "您创建了%1$s",
+ "A file or folder has been <strong>changed</strong>" : "文件/文件夹已经 <strong>修改</strong>",
+ "A file or folder has been <strong>deleted</strong>" : "文件/文件夹已经 <strong>删除</strong>",
+ "A file or folder has been <strong>restored</strong>" : "文件/文件夹已经 <strong>恢复</strong>",
+ "You created %1$s" : "您创建了 %1$s",
"%2$s created %1$s" : "%2$s 创建了 %1$s",
"%1$s was created in a public folder" : "%1$s 被创建在公开文件夹中",
- "You changed %1$s" : "您修改了%1$s",
+ "You changed %1$s" : "您修改了 %1$s",
"%2$s changed %1$s" : "%2$s 修改了 %1$s",
"You deleted %1$s" : "您删除了 %1$s",
"%2$s deleted %1$s" : "%2$s 删除了 %1$s",
diff --git a/apps/files_external/appinfo/info.xml b/apps/files_external/appinfo/info.xml
index b2f73dce621..8482b8b25ed 100644
--- a/apps/files_external/appinfo/info.xml
+++ b/apps/files_external/appinfo/info.xml
@@ -3,9 +3,9 @@
<id>files_external</id>
<name>External storage support</name>
<description>
- This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, Google Drive, Dropbox, other ownCloud servers, WebDAV servers, and more. Administrators can choose which types of storage to enable and can mount these storage locations for a user, a group, or the entire system. Users will see a new folder appear in their root ownCloud directory, which they can access and use like any other ownCloud folder. External storage also allows users to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file.
-
- External storage can be configured using the GUI or at the command line. This second option provides the advanced user with more flexibility for configuring bulk external storage mounts and setting mount priorities. More information is available in the external storage GUI documentation and the external storage Configuration File documentation.
+This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, Google Drive, Dropbox, other ownCloud servers, WebDAV servers, and more. Administrators can choose which types of storage to enable and can mount these storage locations for a user, a group, or the entire system. Users will see a new folder appear in their root ownCloud directory, which they can access and use like any other ownCloud folder. External storage also allows users to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file.
+
+External storage can be configured using the GUI or at the command line. This second option provides the advanced user with more flexibility for configuring bulk external storage mounts and setting mount priorities. More information is available in the external storage GUI documentation and the external storage Configuration File documentation.
</description>
<licence>AGPL</licence>
<author>Robin Appelman, Michael Gapczynski, Vincent Petry</author>
diff --git a/apps/files_external/l10n/de_DE.js b/apps/files_external/l10n/de_DE.js
index 56f581e7d2c..1dbb8d0bb47 100644
--- a/apps/files_external/l10n/de_DE.js
+++ b/apps/files_external/l10n/de_DE.js
@@ -114,7 +114,7 @@ OC.L10N.register(
"Enable encryption" : "Verschlüsselung aktivieren",
"Enable previews" : "Vorschau aktivieren",
"Enable sharing" : "Teilen aktivieren",
- "Check for changes" : "Auf Änderungen überprüfen",
+ "Check for changes" : "Auf Änderungen prüfen",
"Never" : "Nie",
"Once every direct access" : "Einmal bei jedem Direktzugriff",
"Folder name" : "Ordnername",
diff --git a/apps/files_external/l10n/de_DE.json b/apps/files_external/l10n/de_DE.json
index da4efa098ab..06141581b71 100644
--- a/apps/files_external/l10n/de_DE.json
+++ b/apps/files_external/l10n/de_DE.json
@@ -112,7 +112,7 @@
"Enable encryption" : "Verschlüsselung aktivieren",
"Enable previews" : "Vorschau aktivieren",
"Enable sharing" : "Teilen aktivieren",
- "Check for changes" : "Auf Änderungen überprüfen",
+ "Check for changes" : "Auf Änderungen prüfen",
"Never" : "Nie",
"Once every direct access" : "Einmal bei jedem Direktzugriff",
"Folder name" : "Ordnername",
diff --git a/apps/files_external/lib/Lib/Storage/AmazonS3.php b/apps/files_external/lib/Lib/Storage/AmazonS3.php
index e6e26e3547a..9dab25f7197 100644
--- a/apps/files_external/lib/Lib/Storage/AmazonS3.php
+++ b/apps/files_external/lib/Lib/Storage/AmazonS3.php
@@ -42,6 +42,7 @@ require_once 'aws-autoloader.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
+use Icewind\Streams\CallbackWrapper;
use Icewind\Streams\IteratorDirectory;
use OC\Files\ObjectStore\S3ConnectionTrait;
@@ -366,14 +367,15 @@ class AmazonS3 extends \OC\Files\Storage\Common {
$ext = '';
}
$tmpFile = \OCP\Files::tmpFile($ext);
- \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if ($this->file_exists($path)) {
$source = $this->fopen($path, 'r');
file_put_contents($tmpFile, $source);
}
- self::$tmpFiles[$tmpFile] = $path;
- return fopen('close://' . $tmpFile, $mode);
+ $handle = fopen($tmpFile, $mode);
+ return CallbackWrapper::wrap($handle, null, null, function() use ($path, $tmpFile) {
+ $this->writeBack($tmpFile, $path);
+ });
}
return false;
}
@@ -514,15 +516,11 @@ class AmazonS3 extends \OC\Files\Storage\Common {
return $this->id;
}
- public function writeBack($tmpFile) {
- if (!isset(self::$tmpFiles[$tmpFile])) {
- return false;
- }
-
+ public function writeBack($tmpFile, $path) {
try {
$this->getConnection()->putObject(array(
'Bucket' => $this->bucket,
- 'Key' => $this->cleanKey(self::$tmpFiles[$tmpFile]),
+ 'Key' => $this->cleanKey($path),
'SourceFile' => $tmpFile,
'ContentType' => \OC::$server->getMimeTypeDetector()->detect($tmpFile),
'ContentLength' => filesize($tmpFile)
diff --git a/apps/files_external/lib/Lib/Storage/Dropbox.php b/apps/files_external/lib/Lib/Storage/Dropbox.php
index 45bc6cd0e98..d2ba1cca751 100644
--- a/apps/files_external/lib/Lib/Storage/Dropbox.php
+++ b/apps/files_external/lib/Lib/Storage/Dropbox.php
@@ -31,6 +31,7 @@
namespace OCA\Files_External\Lib\Storage;
use GuzzleHttp\Exception\RequestException;
+use Icewind\Streams\CallbackWrapper;
use Icewind\Streams\IteratorDirectory;
use Icewind\Streams\RetryWrapper;
use OCP\Files\StorageNotAvailableException;
@@ -45,8 +46,6 @@ class Dropbox extends \OC\Files\Storage\Common {
private $metaData = array();
private $oauth;
- private static $tempFiles = array();
-
public function __construct($params) {
if (isset($params['configured']) && $params['configured'] == 'true'
&& isset($params['app_key'])
@@ -305,27 +304,26 @@ class Dropbox extends \OC\Files\Storage\Common {
$ext = '';
}
$tmpFile = \OCP\Files::tmpFile($ext);
- \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if ($this->file_exists($path)) {
$source = $this->fopen($path, 'r');
file_put_contents($tmpFile, $source);
}
- self::$tempFiles[$tmpFile] = $path;
- return fopen('close://'.$tmpFile, $mode);
+ $handle = fopen($tmpFile, $mode);
+ return CallbackWrapper::wrap($handle, null, null, function () use ($path, $tmpFile) {
+ $this->writeBack($tmpFile, $path);
+ });
}
return false;
}
- public function writeBack($tmpFile) {
- if (isset(self::$tempFiles[$tmpFile])) {
- $handle = fopen($tmpFile, 'r');
- try {
- $this->dropbox->putFile(self::$tempFiles[$tmpFile], $handle);
- unlink($tmpFile);
- $this->deleteMetaData(self::$tempFiles[$tmpFile]);
- } catch (\Exception $exception) {
- \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
- }
+ public function writeBack($tmpFile, $path) {
+ $handle = fopen($tmpFile, 'r');
+ try {
+ $this->dropbox->putFile($path, $handle);
+ unlink($tmpFile);
+ $this->deleteMetaData($path);
+ } catch (\Exception $exception) {
+ \OCP\Util::writeLog('files_external', $exception->getMessage(), \OCP\Util::ERROR);
}
}
diff --git a/apps/files_external/lib/Lib/Storage/FTP.php b/apps/files_external/lib/Lib/Storage/FTP.php
index 6f34416d111..22fe2090f30 100644
--- a/apps/files_external/lib/Lib/Storage/FTP.php
+++ b/apps/files_external/lib/Lib/Storage/FTP.php
@@ -33,6 +33,7 @@
namespace OCA\Files_External\Lib\Storage;
+use Icewind\Streams\CallbackWrapper;
use Icewind\Streams\RetryWrapper;
class FTP extends StreamWrapper{
@@ -127,21 +128,20 @@ class FTP extends StreamWrapper{
$ext='';
}
$tmpFile=\OCP\Files::tmpFile($ext);
- \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if ($this->file_exists($path)) {
$this->getFile($path, $tmpFile);
}
- self::$tempFiles[$tmpFile]=$path;
- return fopen('close://'.$tmpFile, $mode);
+ $handle = fopen($tmpFile, $mode);
+ return CallbackWrapper::wrap($handle, null, null, function () use ($path, $tmpFile) {
+ $this->writeBack($tmpFile, $path);
+ });
}
return false;
}
- public function writeBack($tmpFile) {
- if (isset(self::$tempFiles[$tmpFile])) {
- $this->uploadFile($tmpFile, self::$tempFiles[$tmpFile]);
- unlink($tmpFile);
- }
+ public function writeBack($tmpFile, $path) {
+ $this->uploadFile($tmpFile, $path);
+ unlink($tmpFile);
}
/**
diff --git a/apps/files_external/lib/Lib/Storage/Google.php b/apps/files_external/lib/Lib/Storage/Google.php
index a3133cb4743..b22b0c29263 100644
--- a/apps/files_external/lib/Lib/Storage/Google.php
+++ b/apps/files_external/lib/Lib/Storage/Google.php
@@ -36,6 +36,7 @@
namespace OCA\Files_External\Lib\Storage;
use GuzzleHttp\Exception\RequestException;
+use Icewind\Streams\CallbackWrapper;
use Icewind\Streams\IteratorDirectory;
use Icewind\Streams\RetryWrapper;
@@ -50,8 +51,6 @@ class Google extends \OC\Files\Storage\Common {
private $service;
private $driveFiles;
- private static $tempFiles = array();
-
// Google Doc mimetypes
const FOLDER = 'application/vnd.google-apps.folder';
const DOCUMENT = 'application/vnd.google-apps.document';
@@ -495,94 +494,91 @@ class Google extends \OC\Files\Storage\Common {
case 'c':
case 'c+':
$tmpFile = \OCP\Files::tmpFile($ext);
- \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
if ($this->file_exists($path)) {
$source = $this->fopen($path, 'rb');
file_put_contents($tmpFile, $source);
}
- self::$tempFiles[$tmpFile] = $path;
- return fopen('close://'.$tmpFile, $mode);
+ $handle = fopen($tmpFile, $mode);
+ return CallbackWrapper::wrap($handle, null, null, function () use ($path, $tmpFile) {
+ $this->writeBack($tmpFile, $path);
+ });
}
}
- public function writeBack($tmpFile) {
- if (isset(self::$tempFiles[$tmpFile])) {
- $path = self::$tempFiles[$tmpFile];
- $parentFolder = $this->getDriveFile(dirname($path));
- if ($parentFolder) {
- $mimetype = \OC::$server->getMimeTypeDetector()->detect($tmpFile);
- $params = array(
- 'mimeType' => $mimetype,
- 'uploadType' => 'media'
- );
- $result = false;
+ public function writeBack($tmpFile, $path) {
+ $parentFolder = $this->getDriveFile(dirname($path));
+ if ($parentFolder) {
+ $mimetype = \OC::$server->getMimeTypeDetector()->detect($tmpFile);
+ $params = array(
+ 'mimeType' => $mimetype,
+ 'uploadType' => 'media'
+ );
+ $result = false;
+
+ $chunkSizeBytes = 10 * 1024 * 1024;
+
+ $useChunking = false;
+ $size = filesize($tmpFile);
+ if ($size > $chunkSizeBytes) {
+ $useChunking = true;
+ } else {
+ $params['data'] = file_get_contents($tmpFile);
+ }
- $chunkSizeBytes = 10 * 1024 * 1024;
+ if ($this->file_exists($path)) {
+ $file = $this->getDriveFile($path);
+ $this->client->setDefer($useChunking);
+ $request = $this->service->files->update($file->getId(), $file, $params);
+ } else {
+ $file = new \Google_Service_Drive_DriveFile();
+ $file->setTitle(basename($path));
+ $file->setMimeType($mimetype);
+ $parent = new \Google_Service_Drive_ParentReference();
+ $parent->setId($parentFolder->getId());
+ $file->setParents(array($parent));
+ $this->client->setDefer($useChunking);
+ $request = $this->service->files->insert($file, $params);
+ }
- $useChunking = false;
- $size = filesize($tmpFile);
- if ($size > $chunkSizeBytes) {
- $useChunking = true;
- } else {
- $params['data'] = file_get_contents($tmpFile);
+ if ($useChunking) {
+ // Create a media file upload to represent our upload process.
+ $media = new \Google_Http_MediaFileUpload(
+ $this->client,
+ $request,
+ 'text/plain',
+ null,
+ true,
+ $chunkSizeBytes
+ );
+ $media->setFileSize($size);
+
+ // Upload the various chunks. $status will be false until the process is
+ // complete.
+ $status = false;
+ $handle = fopen($tmpFile, 'rb');
+ while (!$status && !feof($handle)) {
+ $chunk = fread($handle, $chunkSizeBytes);
+ $status = $media->nextChunk($chunk);
}
- if ($this->file_exists($path)) {
- $file = $this->getDriveFile($path);
- $this->client->setDefer($useChunking);
- $request = $this->service->files->update($file->getId(), $file, $params);
- } else {
- $file = new \Google_Service_Drive_DriveFile();
- $file->setTitle(basename($path));
- $file->setMimeType($mimetype);
- $parent = new \Google_Service_Drive_ParentReference();
- $parent->setId($parentFolder->getId());
- $file->setParents(array($parent));
- $this->client->setDefer($useChunking);
- $request = $this->service->files->insert($file, $params);
+ // The final value of $status will be the data from the API for the object
+ // that has been uploaded.
+ $result = false;
+ if ($status !== false) {
+ $result = $status;
}
- if ($useChunking) {
- // Create a media file upload to represent our upload process.
- $media = new \Google_Http_MediaFileUpload(
- $this->client,
- $request,
- 'text/plain',
- null,
- true,
- $chunkSizeBytes
- );
- $media->setFileSize($size);
-
- // Upload the various chunks. $status will be false until the process is
- // complete.
- $status = false;
- $handle = fopen($tmpFile, 'rb');
- while (!$status && !feof($handle)) {
- $chunk = fread($handle, $chunkSizeBytes);
- $status = $media->nextChunk($chunk);
- }
-
- // The final value of $status will be the data from the API for the object
- // that has been uploaded.
- $result = false;
- if ($status !== false) {
- $result = $status;
- }
-
- fclose($handle);
- } else {
- $result = $request;
- }
+ fclose($handle);
+ } else {
+ $result = $request;
+ }
- // Reset to the client to execute requests immediately in the future.
- $this->client->setDefer(false);
+ // Reset to the client to execute requests immediately in the future.
+ $this->client->setDefer(false);
- if ($result) {
- $this->setDriveFile($path, $result);
- }
+ if ($result) {
+ $this->setDriveFile($path, $result);
}
- unlink($tmpFile);
}
}
diff --git a/apps/files_external/lib/Lib/Storage/Swift.php b/apps/files_external/lib/Lib/Storage/Swift.php
index ba0b4898e2e..5fec278ef3d 100644
--- a/apps/files_external/lib/Lib/Storage/Swift.php
+++ b/apps/files_external/lib/Lib/Storage/Swift.php
@@ -37,6 +37,7 @@ namespace OCA\Files_External\Lib\Storage;
use Guzzle\Http\Url;
use Guzzle\Http\Exception\ClientErrorResponseException;
+use Icewind\Streams\CallbackWrapper;
use Icewind\Streams\IteratorDirectory;
use OpenCloud;
use OpenCloud\Common\Exceptions;
@@ -410,7 +411,6 @@ class Swift extends \OC\Files\Storage\Common {
$ext = '';
}
$tmpFile = \OCP\Files::tmpFile($ext);
- \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
// Fetch existing file if required
if ($mode[0] !== 'w' && $this->file_exists($path)) {
if ($mode[0] === 'x') {
@@ -424,9 +424,10 @@ class Swift extends \OC\Files\Storage\Common {
fseek($tmpFile, 0, SEEK_END);
}
}
- self::$tmpFiles[$tmpFile] = $path;
-
- return fopen('close://' . $tmpFile, $mode);
+ $handle = fopen($tmpFile, $mode);
+ return CallbackWrapper::wrap($handle, null, null, function () use ($path, $tmpFile) {
+ $this->writeBack($tmpFile, $path);
+ });
}
}
@@ -615,12 +616,9 @@ class Swift extends \OC\Files\Storage\Common {
return $this->container;
}
- public function writeBack($tmpFile) {
- if (!isset(self::$tmpFiles[$tmpFile])) {
- return false;
- }
+ public function writeBack($tmpFile, $path) {
$fileData = fopen($tmpFile, 'r');
- $this->getContainer()->uploadObject(self::$tmpFiles[$tmpFile], $fileData);
+ $this->getContainer()->uploadObject($path, $fileData);
// invalidate target object to force repopulation on fetch
$this->objectCache->remove(self::$tmpFiles[$tmpFile]);
unlink($tmpFile);
diff --git a/apps/files_sharing/l10n/cs_CZ.js b/apps/files_sharing/l10n/cs_CZ.js
index f2eba22fa17..4dff7b988e4 100644
--- a/apps/files_sharing/l10n/cs_CZ.js
+++ b/apps/files_sharing/l10n/cs_CZ.js
@@ -18,52 +18,82 @@ OC.L10N.register(
"No expiration date set" : "Není nastaveno datum vypršení platnosti",
"Shared by" : "Sdílí",
"Sharing" : "Sdílení",
- "A file or folder has been <strong>shared</strong>" : "Soubor nebo adresář byl <strong>nasdílen</strong>",
- "A file or folder was shared from <strong>another server</strong>" : "Soubor nebo adresář byl nasdílen z <strong>jiného serveru</strong>",
- "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Byl <strong>stažen</strong> soubor nebo adresář sdílený jako veřejný odkaz",
- "You received a new remote share %2$s from %1$s" : "Obdrželi jste nové vzdálené sdílení %2$s od uživatele %1$s",
- "You received a new remote share from %s" : "Obdrželi jste nové vzdálené sdílení z %s",
- "%1$s accepted remote share %2$s" : "%1$s přijal(a) vzdálené sdílení %2$s",
- "%1$s declined remote share %2$s" : "%1$s odmítl(a) vzdálené sdílení %2$s",
- "%1$s unshared %2$s from you" : "%1$s již více nesdílí %2$s",
- "Public shared folder %1$s was downloaded" : "Byl stažen veřejně sdílený adresář %1$s ",
- "Public shared file %1$s was downloaded" : "Byl stažen veřejně sdílený soubor %1$s ",
- "You shared %1$s with %2$s" : "Sdílíte %1$s s %2$s",
- "%2$s shared %1$s with %3$s" : "%2$s nasdílel(a) %1$s s %3$s",
- "You removed the share of %2$s for %1$s" : "Odstranil(a) jsi sdílení %2$s pro %1$s",
- "%2$s removed the share of %3$s for %1$s" : "%2$s odstranil(a) sdílení %3$s pro %1$s",
- "You shared %1$s with group %2$s" : "Sdílíte %1$s se skupinou %2$s",
- "%2$s shared %1$s with group %3$s" : "%2$s nasdílel(a) %1$s se skupinou %3$s",
- "You removed the share of group %2$s for %1$s" : "Odstranil(a) jsi sdílení skupině %2$s pro %1$s",
- "%2$s removed the share of group %3$s for %1$s" : "%2$s odstranil(a) sdílení skupině %3$s pro %1$s",
- "%2$s shared %1$s via link" : "%2$s nasdílel(a) %1$s jako odkaz",
- "You shared %1$s via link" : "Sdílíte %1$s přes odkaz",
- "You removed the public link for %1$s" : "Odstranil(a) jsi veřejný odkaz na %1$s",
- "%2$s removed the public link for %1$s" : "%2$s odstranil(a) veřejný odkaz na %1$s",
- "Your public link for %1$s expired" : "Veřejný odkaz pro %1$s vypršel",
- "The public link of %2$s for %1$s expired" : "Veřejný odkaz na %2$s pro %1$s vypršel",
- "%2$s shared %1$s with you" : "%2$s s vámi sdílí %1$s",
- "%2$s removed the share for %1$s" : "%2$s odstranil(a) sdílení pro %1$s",
- "File %1$s shared by email with %2$s was downloaded" : "Soubor %1$s sdílen pomocí emailu s %2$s byl stažen",
- "Folder %1$s shared by email with %2$s was downloaded" : "Adresář %1$s sdílen pomocí emailu s %2$s byl stažen",
+ "File shares" : "Sdílení souboru",
"Downloaded via public link" : "Staženo pomocí veřejného odkazu",
- "Shared with %2$s" : "Sdíleno s %2$s",
- "Shared with %3$s by %2$s" : "%2$s sdílí s %3$s",
- "Removed share for %2$s" : "Odstranil(a) sdílení pro %2$s",
- "%2$s removed share for %3$s" : "%2$s odstranil(a) sdílení pro %3$s",
- "Shared with group %2$s" : "Sdíleno se skupinou %2$s",
- "Shared with group %3$s by %2$s" : "%2$s sdílí se skupinou %3$s",
- "Removed share of group %2$s" : "Odstranil(a) sdílení skupině %2$s",
- "%2$s removed share of group %3$s" : "%2$s odstranil(a) sdílení skupině %3$s",
- "Shared via link by %2$s" : "%2$s sdílel(a) jako odkaz",
- "Shared via public link" : "Sdíleno jako veřejný odkaz",
+ "Downloaded by %1$s" : "Stáhnul(o) %1$s",
+ "Downloaded by {email}" : "Stáhl {email}",
+ "%1$s downloaded via public link" : "%1$s stažen pomocí veřejného odkazu",
+ "{file} downloaded via public link" : "{file} stažen pomocí veřejného odkazu",
+ "%1$s downloaded %2$s" : "%1$s stáhl(a) %2$s",
+ "{email} downloaded {file}" : "{email} stáhnul {file}",
+ "Shared with group %1$s" : "Sdíleno se skupinou %1$s",
+ "Shared with group {group}" : "Sdíleno se skupinou {group}",
+ "Removed share for group %1$s" : "Odstraněno sdílení pro skupinu %1$s",
+ "Removed share for group {group}" : "Odstranil sdílení pro skupinu {group}",
+ "%2$s shared with group %1$s" : "%2$s sdílel se skupinou %1$s",
+ "{actor} shared with group {group}" : "{actor} sdílel(a) se skupinou {group}",
+ "%2$s removed share for group %1$s" : "%2$s odstranil(a) sdílení pro skupinu %1$s",
+ "{actor} removed share for group {group}" : "{actor} odstranil(a) sdílení pro skupinu {group}",
+ "You shared %1$s with group %2$s" : "Sdílíte %1$s se skupinou %2$s",
+ "You shared {file} with group {group}" : "Se skupinou {group} jste nasdílel(a) {file}",
+ "You removed group %2$s from %1$s" : "Z %1$s jste odstranil(a) skupinu %2$s",
+ "You removed group {group} from {file}" : "Z {file} jste odstranil(a) skupinu {group}",
+ "%3$s shared %1$s with group %2$s" : "%3$s sdílel %1$s se skupinou %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} sdílel(a) {file} se skupinou {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s odstranil(a) z %1$s skupinu %2$s",
+ "{actor} removed group {group} from {file}" : "{actor} odstranil(a) skupinu {group} z {file}",
+ "Shared as public link" : "Sdíleno jako veřejný odkaz",
"Removed public link" : "Odstranil(a) veřejný odkaz",
- "%2$s removed public link" : "%2$s odstranil(a) veřejný odkaz",
- "Public link expired" : "Veřejný odkaz vypršel",
- "Public link of %2$s expired" : "Veřejný odkaz %2$s vypršel",
- "Shared by %2$s" : "%2$s sdílel(a)",
- "Downloaded by %2$s" : "Staženo uživatelem %2$s",
- "File shares" : "Sdílení souboru",
+ "%1$s shared as public link" : "%1$s sdílen jako veřejný odkaz",
+ "{actor} shared as public link" : "{actor} sdílel(a) jako veřejný odkaz",
+ "%1$s removed public link" : "%1$s odstranil(a) veřejný odkaz",
+ "{actor} removed public link" : "{actor} odstranil(a) veřejný odkaz",
+ "You shared %1$s as public link" : "Sdílel(a) jste %1$s jako veřejný odkaz",
+ "You shared {file} as public link" : "Sdílel(a) jste {file} jako veřejný odkaz",
+ "You removed public link for %1$s" : "Odstranil(a) jste veřejný odkaz pro %1$s",
+ "You removed public link for {file}" : "Odstranil(a) jste veřejný odkaz pro {file}",
+ "%2$s shared %1$s as public link" : "%2$s sdílel(a) %1$s jako veřejný odkaz",
+ "{actor} shared {file} as public link" : "{actor} sdílel(a) {file} jako veřejný odkaz",
+ "%2$s removed public link for %1$s" : "%2$s odstranil veřejný odkaz z %1$s",
+ "{actor} removed public link for {file}" : "{actor} odstranil(a) veřejný odkaz pro {file}",
+ "%1$s accepted the remote share" : "%1$s přijal(a) vzdálené sdílení",
+ "{user} accepted the remote share" : "{user} přijal(a) vzdálené sdílení",
+ "%1$s declined the remote share" : "%1$s odmítl(a) vzdálené sdílení",
+ "{user} declined the remote share" : "{user} odmítl vzdálené sdílení",
+ "You received a new remote share %1$s from %2$s" : "Obdržel(a) jste nové vzdálené sdílení %1$s z %2$s",
+ "You received a new remote share {file} from {user}" : "Obdržel(a) jste nové vzdálené sdílení souboru {file} od {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s přijal(a) vzdálené sdílení %1$s",
+ "{user} accepted the remote share of {file}" : "{user} přijal vzdálené sdílení souboru {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s odmítl vzdálené sdílení %1$s",
+ "{user} declined the remote share of {file}" : "{user} odmítl(a) vzdálené sdílení {file}",
+ "%2$s unshared %1$s from you" : "%2$s s vámi přestal(a) sdílet %1$s",
+ "{user} unshared {file} from you" : "{user} s vámi již nesdílí soubor {file}",
+ "Shared with %1$s" : "Sdíleno s %1$s",
+ "Shared with {user}" : "Sdíleno s {user}",
+ "Removed share for %1$s" : "Odstraněno sdílení %1$s",
+ "Removed share for {user}" : "Odstraněno sdílení pro {user}",
+ "%2$s shared with %1$s" : "%2$s sdíleno s %1$s",
+ "{actor} shared with {user}" : "{actor} sdílel(a) s {user}",
+ "%2$s removed share for %1$s" : "%2$s odstranil(a) sdílení pro %1$s",
+ "{actor} removed share for {user}" : "{actor} odstranil(a) sdílení pro {user}",
+ "Shared by %1$s" : "Sdíleno %1$s",
+ "Shared by {actor}" : "Sdílel {actor}",
+ "%1$s removed share" : "%1$s odstranil(a) sdílení",
+ "{actor} removed share" : "{actor} odebral(a) sdílení",
+ "You shared %1$s with %2$s" : "Sdílíte %1$s s %2$s",
+ "You shared {file} with {user}" : "Sdílel(a) jste {file} s {user}",
+ "You removed %2$s from %1$s" : "Odstranil(a) jste %2$s z %1$s",
+ "You removed {user} from {file}" : "Odstranil(a) jste uživatele {user} z {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s s %2$s sdílel(a) %1$s",
+ "{actor} removed {user} from {file}" : "{actor} odstranil(a) uživatele {user} z {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s odstranil(a) %2$s z %1$s",
+ "%2$s shared %1$s with you" : "%2$s s vámi sdílí %1$s",
+ "{actor} shared {file} with you" : "{actor} s vámi sdílel(a) soubor {file}",
+ "%2$s removed you from %1$s" : "%2$s vás odstranil(a) z %1$s",
+ "{actor} removed you from {file}" : "{actor} vás odstranil(a) ze souboru {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Byl <strong>stažen</strong> soubor nebo adresář sdílený jako veřejný odkaz",
+ "A file or folder was shared from <strong>another server</strong>" : "Soubor nebo adresář byl nasdílen z <strong>jiného serveru</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Soubor nebo adresář byl <strong>nasdílen</strong>",
"Wrong share ID, share doesn't exist" : "Špatné ID sdílení, sdílení neexistuje",
"could not delete share" : "nelze smazat sdílení",
"Could not delete share" : "Nelze smazat sdílení",
@@ -109,36 +139,40 @@ OC.L10N.register(
"Uploading files…" : "Probíhá nahrávání souborů...",
"Uploaded files:" : "Nahrané soubory:",
"A public shared file or folder was <strong>downloaded</strong>" : "Byl <strong>stažen</strong> veřejně sdílený soubor nebo adresář",
- "Shares" : "Sdílení",
- "Server to server sharing is not enabled on this server" : "Sdílení mezi servery není na tomto serveru povoleno",
- "The mountpoint name contains invalid characters." : "Jméno přípojného bodu obsahuje nepovolené znaky.",
- "Not allowed to create a federated share with the same user server" : "Není povoleno vytvořit propojené sdílení s tím samým serverem",
- "Invalid or untrusted SSL certificate" : "Neplatný nebo nedůvěryhodný SSL certifikát",
- "Could not authenticate to remote share, password might be wrong" : "Nezdařilo se přihlášení ke vzdálenému úložišti, nejspíše bylo zadáno chybné heslo",
- "Storage not valid" : "Úložiště není platné",
- "Couldn't add remote share" : "Nelze přidat vzdálené úložiště",
- "Federated sharing" : "Propojené sdílení",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete přidat vzdálené úložiště {name} uživatele {owner}@{remote}?",
- "Remote share" : "Vzdálené úložiště",
- "Remote share password" : "Heslo ke vzdálenému úložišti",
- "Cancel" : "Zrušit",
- "Add remote share" : "Přidat vzdálené úložiště",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nebyla nalezena instalace ownCloud (7 nebo vyšší) na {remote}",
- "Invalid ownCloud url" : "Neplatná ownCloud url",
- "You received \"/%2$s\" as a remote share from %1$s" : "Obdrželi jste \"/%2$s\" jako vzdálené sdílení od %1$s",
- "Accept" : "Přijmout",
- "Decline" : "Zamítnout",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Sdílej se mnou pomocí mého #ownCloud sdruženého cloud ID, více na %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Sdílej se mnou pomocí mého #ownCloud sdruženého cloud ID",
- "Federated Cloud Sharing" : "Propojené cloudové sdílení",
- "Open documentation" : "Otevřít dokumentaci",
- "Allow users on this server to send shares to other servers" : "Povolit uživatelům z tohoto serveru zasílat sdílení na jiné servery",
- "Allow users on this server to receive shares from other servers" : "Povolit uživatelům na tomto serveru přijímat sdílení z jiných serverů",
- "Federated Cloud" : "Sdružený cloud",
- "Your Federated Cloud ID:" : "Vaše sdružené cloud ID:",
- "Share it:" : "Sdílet:",
- "Add to your website" : "Přidat na svou webovou stránku",
- "Share with me via Nextcloud" : "Sdíleno se mnou přes Nextcloud",
- "HTML Code:" : "HTML kód:"
+ "You received a new remote share %2$s from %1$s" : "Obdrželi jste nové vzdálené sdílení %2$s od uživatele %1$s",
+ "You received a new remote share from %s" : "Obdrželi jste nové vzdálené sdílení z %s",
+ "%1$s accepted remote share %2$s" : "%1$s přijal(a) vzdálené sdílení %2$s",
+ "%1$s declined remote share %2$s" : "%1$s odmítl(a) vzdálené sdílení %2$s",
+ "%1$s unshared %2$s from you" : "%1$s již více nesdílí %2$s",
+ "Public shared folder %1$s was downloaded" : "Byl stažen veřejně sdílený adresář %1$s ",
+ "Public shared file %1$s was downloaded" : "Byl stažen veřejně sdílený soubor %1$s ",
+ "%2$s shared %1$s with %3$s" : "%2$s nasdílel(a) %1$s s %3$s",
+ "You removed the share of %2$s for %1$s" : "Odstranil(a) jsi sdílení %2$s pro %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s odstranil(a) sdílení %3$s pro %1$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s nasdílel(a) %1$s se skupinou %3$s",
+ "You removed the share of group %2$s for %1$s" : "Odstranil(a) jsi sdílení skupině %2$s pro %1$s",
+ "%2$s removed the share of group %3$s for %1$s" : "%2$s odstranil(a) sdílení skupině %3$s pro %1$s",
+ "%2$s shared %1$s via link" : "%2$s nasdílel(a) %1$s jako odkaz",
+ "You shared %1$s via link" : "Sdílíte %1$s přes odkaz",
+ "You removed the public link for %1$s" : "Odstranil(a) jsi veřejný odkaz na %1$s",
+ "%2$s removed the public link for %1$s" : "%2$s odstranil(a) veřejný odkaz na %1$s",
+ "Your public link for %1$s expired" : "Veřejný odkaz pro %1$s vypršel",
+ "The public link of %2$s for %1$s expired" : "Veřejný odkaz na %2$s pro %1$s vypršel",
+ "%2$s removed the share for %1$s" : "%2$s odstranil(a) sdílení pro %1$s",
+ "Shared with %2$s" : "Sdíleno s %2$s",
+ "Shared with %3$s by %2$s" : "%2$s sdílí s %3$s",
+ "Removed share for %2$s" : "Odstranil(a) sdílení pro %2$s",
+ "%2$s removed share for %3$s" : "%2$s odstranil(a) sdílení pro %3$s",
+ "Shared with group %2$s" : "Sdíleno se skupinou %2$s",
+ "Shared with group %3$s by %2$s" : "%2$s sdílí se skupinou %3$s",
+ "Removed share of group %2$s" : "Odstranil(a) sdílení skupině %2$s",
+ "%2$s removed share of group %3$s" : "%2$s odstranil(a) sdílení skupině %3$s",
+ "Shared via link by %2$s" : "%2$s sdílel(a) jako odkaz",
+ "Shared via public link" : "Sdíleno jako veřejný odkaz",
+ "%2$s removed public link" : "%2$s odstranil(a) veřejný odkaz",
+ "Public link expired" : "Veřejný odkaz vypršel",
+ "Public link of %2$s expired" : "Veřejný odkaz %2$s vypršel",
+ "Shared by %2$s" : "%2$s sdílel(a)",
+ "Shares" : "Sdílení"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/files_sharing/l10n/cs_CZ.json b/apps/files_sharing/l10n/cs_CZ.json
index 9d82343e895..a96d2fd6f7e 100644
--- a/apps/files_sharing/l10n/cs_CZ.json
+++ b/apps/files_sharing/l10n/cs_CZ.json
@@ -16,52 +16,82 @@
"No expiration date set" : "Není nastaveno datum vypršení platnosti",
"Shared by" : "Sdílí",
"Sharing" : "Sdílení",
- "A file or folder has been <strong>shared</strong>" : "Soubor nebo adresář byl <strong>nasdílen</strong>",
- "A file or folder was shared from <strong>another server</strong>" : "Soubor nebo adresář byl nasdílen z <strong>jiného serveru</strong>",
- "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Byl <strong>stažen</strong> soubor nebo adresář sdílený jako veřejný odkaz",
- "You received a new remote share %2$s from %1$s" : "Obdrželi jste nové vzdálené sdílení %2$s od uživatele %1$s",
- "You received a new remote share from %s" : "Obdrželi jste nové vzdálené sdílení z %s",
- "%1$s accepted remote share %2$s" : "%1$s přijal(a) vzdálené sdílení %2$s",
- "%1$s declined remote share %2$s" : "%1$s odmítl(a) vzdálené sdílení %2$s",
- "%1$s unshared %2$s from you" : "%1$s již více nesdílí %2$s",
- "Public shared folder %1$s was downloaded" : "Byl stažen veřejně sdílený adresář %1$s ",
- "Public shared file %1$s was downloaded" : "Byl stažen veřejně sdílený soubor %1$s ",
- "You shared %1$s with %2$s" : "Sdílíte %1$s s %2$s",
- "%2$s shared %1$s with %3$s" : "%2$s nasdílel(a) %1$s s %3$s",
- "You removed the share of %2$s for %1$s" : "Odstranil(a) jsi sdílení %2$s pro %1$s",
- "%2$s removed the share of %3$s for %1$s" : "%2$s odstranil(a) sdílení %3$s pro %1$s",
- "You shared %1$s with group %2$s" : "Sdílíte %1$s se skupinou %2$s",
- "%2$s shared %1$s with group %3$s" : "%2$s nasdílel(a) %1$s se skupinou %3$s",
- "You removed the share of group %2$s for %1$s" : "Odstranil(a) jsi sdílení skupině %2$s pro %1$s",
- "%2$s removed the share of group %3$s for %1$s" : "%2$s odstranil(a) sdílení skupině %3$s pro %1$s",
- "%2$s shared %1$s via link" : "%2$s nasdílel(a) %1$s jako odkaz",
- "You shared %1$s via link" : "Sdílíte %1$s přes odkaz",
- "You removed the public link for %1$s" : "Odstranil(a) jsi veřejný odkaz na %1$s",
- "%2$s removed the public link for %1$s" : "%2$s odstranil(a) veřejný odkaz na %1$s",
- "Your public link for %1$s expired" : "Veřejný odkaz pro %1$s vypršel",
- "The public link of %2$s for %1$s expired" : "Veřejný odkaz na %2$s pro %1$s vypršel",
- "%2$s shared %1$s with you" : "%2$s s vámi sdílí %1$s",
- "%2$s removed the share for %1$s" : "%2$s odstranil(a) sdílení pro %1$s",
- "File %1$s shared by email with %2$s was downloaded" : "Soubor %1$s sdílen pomocí emailu s %2$s byl stažen",
- "Folder %1$s shared by email with %2$s was downloaded" : "Adresář %1$s sdílen pomocí emailu s %2$s byl stažen",
+ "File shares" : "Sdílení souboru",
"Downloaded via public link" : "Staženo pomocí veřejného odkazu",
- "Shared with %2$s" : "Sdíleno s %2$s",
- "Shared with %3$s by %2$s" : "%2$s sdílí s %3$s",
- "Removed share for %2$s" : "Odstranil(a) sdílení pro %2$s",
- "%2$s removed share for %3$s" : "%2$s odstranil(a) sdílení pro %3$s",
- "Shared with group %2$s" : "Sdíleno se skupinou %2$s",
- "Shared with group %3$s by %2$s" : "%2$s sdílí se skupinou %3$s",
- "Removed share of group %2$s" : "Odstranil(a) sdílení skupině %2$s",
- "%2$s removed share of group %3$s" : "%2$s odstranil(a) sdílení skupině %3$s",
- "Shared via link by %2$s" : "%2$s sdílel(a) jako odkaz",
- "Shared via public link" : "Sdíleno jako veřejný odkaz",
+ "Downloaded by %1$s" : "Stáhnul(o) %1$s",
+ "Downloaded by {email}" : "Stáhl {email}",
+ "%1$s downloaded via public link" : "%1$s stažen pomocí veřejného odkazu",
+ "{file} downloaded via public link" : "{file} stažen pomocí veřejného odkazu",
+ "%1$s downloaded %2$s" : "%1$s stáhl(a) %2$s",
+ "{email} downloaded {file}" : "{email} stáhnul {file}",
+ "Shared with group %1$s" : "Sdíleno se skupinou %1$s",
+ "Shared with group {group}" : "Sdíleno se skupinou {group}",
+ "Removed share for group %1$s" : "Odstraněno sdílení pro skupinu %1$s",
+ "Removed share for group {group}" : "Odstranil sdílení pro skupinu {group}",
+ "%2$s shared with group %1$s" : "%2$s sdílel se skupinou %1$s",
+ "{actor} shared with group {group}" : "{actor} sdílel(a) se skupinou {group}",
+ "%2$s removed share for group %1$s" : "%2$s odstranil(a) sdílení pro skupinu %1$s",
+ "{actor} removed share for group {group}" : "{actor} odstranil(a) sdílení pro skupinu {group}",
+ "You shared %1$s with group %2$s" : "Sdílíte %1$s se skupinou %2$s",
+ "You shared {file} with group {group}" : "Se skupinou {group} jste nasdílel(a) {file}",
+ "You removed group %2$s from %1$s" : "Z %1$s jste odstranil(a) skupinu %2$s",
+ "You removed group {group} from {file}" : "Z {file} jste odstranil(a) skupinu {group}",
+ "%3$s shared %1$s with group %2$s" : "%3$s sdílel %1$s se skupinou %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} sdílel(a) {file} se skupinou {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s odstranil(a) z %1$s skupinu %2$s",
+ "{actor} removed group {group} from {file}" : "{actor} odstranil(a) skupinu {group} z {file}",
+ "Shared as public link" : "Sdíleno jako veřejný odkaz",
"Removed public link" : "Odstranil(a) veřejný odkaz",
- "%2$s removed public link" : "%2$s odstranil(a) veřejný odkaz",
- "Public link expired" : "Veřejný odkaz vypršel",
- "Public link of %2$s expired" : "Veřejný odkaz %2$s vypršel",
- "Shared by %2$s" : "%2$s sdílel(a)",
- "Downloaded by %2$s" : "Staženo uživatelem %2$s",
- "File shares" : "Sdílení souboru",
+ "%1$s shared as public link" : "%1$s sdílen jako veřejný odkaz",
+ "{actor} shared as public link" : "{actor} sdílel(a) jako veřejný odkaz",
+ "%1$s removed public link" : "%1$s odstranil(a) veřejný odkaz",
+ "{actor} removed public link" : "{actor} odstranil(a) veřejný odkaz",
+ "You shared %1$s as public link" : "Sdílel(a) jste %1$s jako veřejný odkaz",
+ "You shared {file} as public link" : "Sdílel(a) jste {file} jako veřejný odkaz",
+ "You removed public link for %1$s" : "Odstranil(a) jste veřejný odkaz pro %1$s",
+ "You removed public link for {file}" : "Odstranil(a) jste veřejný odkaz pro {file}",
+ "%2$s shared %1$s as public link" : "%2$s sdílel(a) %1$s jako veřejný odkaz",
+ "{actor} shared {file} as public link" : "{actor} sdílel(a) {file} jako veřejný odkaz",
+ "%2$s removed public link for %1$s" : "%2$s odstranil veřejný odkaz z %1$s",
+ "{actor} removed public link for {file}" : "{actor} odstranil(a) veřejný odkaz pro {file}",
+ "%1$s accepted the remote share" : "%1$s přijal(a) vzdálené sdílení",
+ "{user} accepted the remote share" : "{user} přijal(a) vzdálené sdílení",
+ "%1$s declined the remote share" : "%1$s odmítl(a) vzdálené sdílení",
+ "{user} declined the remote share" : "{user} odmítl vzdálené sdílení",
+ "You received a new remote share %1$s from %2$s" : "Obdržel(a) jste nové vzdálené sdílení %1$s z %2$s",
+ "You received a new remote share {file} from {user}" : "Obdržel(a) jste nové vzdálené sdílení souboru {file} od {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s přijal(a) vzdálené sdílení %1$s",
+ "{user} accepted the remote share of {file}" : "{user} přijal vzdálené sdílení souboru {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s odmítl vzdálené sdílení %1$s",
+ "{user} declined the remote share of {file}" : "{user} odmítl(a) vzdálené sdílení {file}",
+ "%2$s unshared %1$s from you" : "%2$s s vámi přestal(a) sdílet %1$s",
+ "{user} unshared {file} from you" : "{user} s vámi již nesdílí soubor {file}",
+ "Shared with %1$s" : "Sdíleno s %1$s",
+ "Shared with {user}" : "Sdíleno s {user}",
+ "Removed share for %1$s" : "Odstraněno sdílení %1$s",
+ "Removed share for {user}" : "Odstraněno sdílení pro {user}",
+ "%2$s shared with %1$s" : "%2$s sdíleno s %1$s",
+ "{actor} shared with {user}" : "{actor} sdílel(a) s {user}",
+ "%2$s removed share for %1$s" : "%2$s odstranil(a) sdílení pro %1$s",
+ "{actor} removed share for {user}" : "{actor} odstranil(a) sdílení pro {user}",
+ "Shared by %1$s" : "Sdíleno %1$s",
+ "Shared by {actor}" : "Sdílel {actor}",
+ "%1$s removed share" : "%1$s odstranil(a) sdílení",
+ "{actor} removed share" : "{actor} odebral(a) sdílení",
+ "You shared %1$s with %2$s" : "Sdílíte %1$s s %2$s",
+ "You shared {file} with {user}" : "Sdílel(a) jste {file} s {user}",
+ "You removed %2$s from %1$s" : "Odstranil(a) jste %2$s z %1$s",
+ "You removed {user} from {file}" : "Odstranil(a) jste uživatele {user} z {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s s %2$s sdílel(a) %1$s",
+ "{actor} removed {user} from {file}" : "{actor} odstranil(a) uživatele {user} z {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s odstranil(a) %2$s z %1$s",
+ "%2$s shared %1$s with you" : "%2$s s vámi sdílí %1$s",
+ "{actor} shared {file} with you" : "{actor} s vámi sdílel(a) soubor {file}",
+ "%2$s removed you from %1$s" : "%2$s vás odstranil(a) z %1$s",
+ "{actor} removed you from {file}" : "{actor} vás odstranil(a) ze souboru {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Byl <strong>stažen</strong> soubor nebo adresář sdílený jako veřejný odkaz",
+ "A file or folder was shared from <strong>another server</strong>" : "Soubor nebo adresář byl nasdílen z <strong>jiného serveru</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Soubor nebo adresář byl <strong>nasdílen</strong>",
"Wrong share ID, share doesn't exist" : "Špatné ID sdílení, sdílení neexistuje",
"could not delete share" : "nelze smazat sdílení",
"Could not delete share" : "Nelze smazat sdílení",
@@ -107,36 +137,40 @@
"Uploading files…" : "Probíhá nahrávání souborů...",
"Uploaded files:" : "Nahrané soubory:",
"A public shared file or folder was <strong>downloaded</strong>" : "Byl <strong>stažen</strong> veřejně sdílený soubor nebo adresář",
- "Shares" : "Sdílení",
- "Server to server sharing is not enabled on this server" : "Sdílení mezi servery není na tomto serveru povoleno",
- "The mountpoint name contains invalid characters." : "Jméno přípojného bodu obsahuje nepovolené znaky.",
- "Not allowed to create a federated share with the same user server" : "Není povoleno vytvořit propojené sdílení s tím samým serverem",
- "Invalid or untrusted SSL certificate" : "Neplatný nebo nedůvěryhodný SSL certifikát",
- "Could not authenticate to remote share, password might be wrong" : "Nezdařilo se přihlášení ke vzdálenému úložišti, nejspíše bylo zadáno chybné heslo",
- "Storage not valid" : "Úložiště není platné",
- "Couldn't add remote share" : "Nelze přidat vzdálené úložiště",
- "Federated sharing" : "Propojené sdílení",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete přidat vzdálené úložiště {name} uživatele {owner}@{remote}?",
- "Remote share" : "Vzdálené úložiště",
- "Remote share password" : "Heslo ke vzdálenému úložišti",
- "Cancel" : "Zrušit",
- "Add remote share" : "Přidat vzdálené úložiště",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nebyla nalezena instalace ownCloud (7 nebo vyšší) na {remote}",
- "Invalid ownCloud url" : "Neplatná ownCloud url",
- "You received \"/%2$s\" as a remote share from %1$s" : "Obdrželi jste \"/%2$s\" jako vzdálené sdílení od %1$s",
- "Accept" : "Přijmout",
- "Decline" : "Zamítnout",
- "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Sdílej se mnou pomocí mého #ownCloud sdruženého cloud ID, více na %s",
- "Share with me through my #ownCloud Federated Cloud ID" : "Sdílej se mnou pomocí mého #ownCloud sdruženého cloud ID",
- "Federated Cloud Sharing" : "Propojené cloudové sdílení",
- "Open documentation" : "Otevřít dokumentaci",
- "Allow users on this server to send shares to other servers" : "Povolit uživatelům z tohoto serveru zasílat sdílení na jiné servery",
- "Allow users on this server to receive shares from other servers" : "Povolit uživatelům na tomto serveru přijímat sdílení z jiných serverů",
- "Federated Cloud" : "Sdružený cloud",
- "Your Federated Cloud ID:" : "Vaše sdružené cloud ID:",
- "Share it:" : "Sdílet:",
- "Add to your website" : "Přidat na svou webovou stránku",
- "Share with me via Nextcloud" : "Sdíleno se mnou přes Nextcloud",
- "HTML Code:" : "HTML kód:"
+ "You received a new remote share %2$s from %1$s" : "Obdrželi jste nové vzdálené sdílení %2$s od uživatele %1$s",
+ "You received a new remote share from %s" : "Obdrželi jste nové vzdálené sdílení z %s",
+ "%1$s accepted remote share %2$s" : "%1$s přijal(a) vzdálené sdílení %2$s",
+ "%1$s declined remote share %2$s" : "%1$s odmítl(a) vzdálené sdílení %2$s",
+ "%1$s unshared %2$s from you" : "%1$s již více nesdílí %2$s",
+ "Public shared folder %1$s was downloaded" : "Byl stažen veřejně sdílený adresář %1$s ",
+ "Public shared file %1$s was downloaded" : "Byl stažen veřejně sdílený soubor %1$s ",
+ "%2$s shared %1$s with %3$s" : "%2$s nasdílel(a) %1$s s %3$s",
+ "You removed the share of %2$s for %1$s" : "Odstranil(a) jsi sdílení %2$s pro %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s odstranil(a) sdílení %3$s pro %1$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s nasdílel(a) %1$s se skupinou %3$s",
+ "You removed the share of group %2$s for %1$s" : "Odstranil(a) jsi sdílení skupině %2$s pro %1$s",
+ "%2$s removed the share of group %3$s for %1$s" : "%2$s odstranil(a) sdílení skupině %3$s pro %1$s",
+ "%2$s shared %1$s via link" : "%2$s nasdílel(a) %1$s jako odkaz",
+ "You shared %1$s via link" : "Sdílíte %1$s přes odkaz",
+ "You removed the public link for %1$s" : "Odstranil(a) jsi veřejný odkaz na %1$s",
+ "%2$s removed the public link for %1$s" : "%2$s odstranil(a) veřejný odkaz na %1$s",
+ "Your public link for %1$s expired" : "Veřejný odkaz pro %1$s vypršel",
+ "The public link of %2$s for %1$s expired" : "Veřejný odkaz na %2$s pro %1$s vypršel",
+ "%2$s removed the share for %1$s" : "%2$s odstranil(a) sdílení pro %1$s",
+ "Shared with %2$s" : "Sdíleno s %2$s",
+ "Shared with %3$s by %2$s" : "%2$s sdílí s %3$s",
+ "Removed share for %2$s" : "Odstranil(a) sdílení pro %2$s",
+ "%2$s removed share for %3$s" : "%2$s odstranil(a) sdílení pro %3$s",
+ "Shared with group %2$s" : "Sdíleno se skupinou %2$s",
+ "Shared with group %3$s by %2$s" : "%2$s sdílí se skupinou %3$s",
+ "Removed share of group %2$s" : "Odstranil(a) sdílení skupině %2$s",
+ "%2$s removed share of group %3$s" : "%2$s odstranil(a) sdílení skupině %3$s",
+ "Shared via link by %2$s" : "%2$s sdílel(a) jako odkaz",
+ "Shared via public link" : "Sdíleno jako veřejný odkaz",
+ "%2$s removed public link" : "%2$s odstranil(a) veřejný odkaz",
+ "Public link expired" : "Veřejný odkaz vypršel",
+ "Public link of %2$s expired" : "Veřejný odkaz %2$s vypršel",
+ "Shared by %2$s" : "%2$s sdílel(a)",
+ "Shares" : "Sdílení"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js
index ce7f6154280..095483d6167 100644
--- a/apps/files_sharing/l10n/fr.js
+++ b/apps/files_sharing/l10n/fr.js
@@ -13,7 +13,7 @@ OC.L10N.register(
"You can upload into this folder" : "Vous pouvez téléverser dans ce dossier",
"No compatible server found at {remote}" : "Aucun serveur compatible trouvé sur {remote}",
"Invalid server URL" : "URL serveur invalide",
- "Failed to add the public link to your Nextcloud" : "Echec de l'ajout du lien public à votre Nextcloud",
+ "Failed to add the public link to your Nextcloud" : "Échec de l'ajout du lien public à votre Nextcloud",
"Share" : "Partager",
"No expiration date set" : "Aucune date d'expiration définie",
"Shared by" : "Partagé par",
diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json
index ba1cc34f790..024e9f7983d 100644
--- a/apps/files_sharing/l10n/fr.json
+++ b/apps/files_sharing/l10n/fr.json
@@ -11,7 +11,7 @@
"You can upload into this folder" : "Vous pouvez téléverser dans ce dossier",
"No compatible server found at {remote}" : "Aucun serveur compatible trouvé sur {remote}",
"Invalid server URL" : "URL serveur invalide",
- "Failed to add the public link to your Nextcloud" : "Echec de l'ajout du lien public à votre Nextcloud",
+ "Failed to add the public link to your Nextcloud" : "Échec de l'ajout du lien public à votre Nextcloud",
"Share" : "Partager",
"No expiration date set" : "Aucune date d'expiration définie",
"Shared by" : "Partagé par",
diff --git a/apps/files_sharing/l10n/pl.js b/apps/files_sharing/l10n/pl.js
index e1bec669533..0e2339b6581 100644
--- a/apps/files_sharing/l10n/pl.js
+++ b/apps/files_sharing/l10n/pl.js
@@ -1,55 +1,168 @@
OC.L10N.register(
"files_sharing",
{
- "Server to server sharing is not enabled on this server" : "Współdzielenie między serwerami nie jest uruchomione na tym serwerze",
- "The mountpoint name contains invalid characters." : "Nazwa zamontowanego zasobu zawiera niedozwolone znaki.",
- "Invalid or untrusted SSL certificate" : "Niewłaściwy lub niezaufany certyfikat SSL",
- "Could not authenticate to remote share, password might be wrong" : "Nie można zalogować do zdalnego zasobu, hasło może być niepoprawne",
- "Storage not valid" : "Zasób nie jest prawidłowy",
- "Couldn't add remote share" : "Nie można dodać zdalnego folderu",
"Shared with you" : "Współdzielony z Tobą",
"Shared with others" : "Współdzielony z innymi",
"Shared by link" : "Współdzielony linkiem",
"Nothing shared with you yet" : "Nie masz jeszcze nic udostępnionego",
"Files and folders others share with you will show up here" : "Pliki i foldery udostępnione Tobie przez innych wyświetlą się tutaj",
"Nothing shared yet" : "Jeszcze nic nie udostępniono",
- "Files and folders you share will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
+ "Files and folders you share will show up here" : "Pliki i foldery, które udostępniasz, pokażą się tutaj",
"No shared links" : "Brak udostępnionych odnośników",
- "Files and folders you share by link will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Czy chcesz dodać udział zdalny {name} od {owner}@{remote}?",
- "Remote share" : "Zdalny zasób",
- "Remote share password" : "Hasło do zdalnego zasobu",
- "Cancel" : "Anuluj",
- "Add remote share" : "Dodaj zdalny zasób",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nie znaleziono instalacji ownCloud (w wersji 7 lub nowszej) na {remote}",
- "Invalid ownCloud url" : "Błędny adres URL",
+ "Files and folders you share by link will show up here" : "Pliki i foldery, które udostępniasz, pokażą się tutaj",
+ "You can upload into this folder" : "Możesz przesłać do tego folderu",
+ "No compatible server found at {remote}" : "Nie znaleziono kompatybilnego serwera na {remote}",
+ "Invalid server URL" : "Błędny adres serwera",
+ "Failed to add the public link to your Nextcloud" : "Nie udało się dodać linku do publicznego Nextcloud",
+ "Share" : "Udostępnij",
+ "No expiration date set" : "Nie ustawiono daty wygaśnięcia",
"Shared by" : "Udostępniane przez",
"Sharing" : "Udostępnianie",
+ "File shares" : "Udziały",
+ "Downloaded via public link" : "Pobierane poprzez link publiczny",
+ "Downloaded by %1$s" : "Pobierane przez %1$s",
+ "Downloaded by {email}" : "Pobierane przez {email}",
+ "%1$s downloaded via public link" : "%1$s pobierane za pośrednictwem łącza publicznego",
+ "{file} downloaded via public link" : "{file} pobierane za pośrednictwem łącza publicznego",
+ "%1$s downloaded %2$s" : "%1$s pobierane %2$s",
+ "{email} downloaded {file}" : "{email} pobierane {file}",
+ "Shared with group %1$s" : "Udostępnione grupie %1$s",
+ "Shared with group {group}" : "Udostępnione grupie {group}",
+ "Removed share for group %1$s" : "Zakończono udostępnianie grupie %1$s",
+ "Removed share for group {group}" : "Zakończono udostępnianie grupie {group}",
+ "%2$s shared with group %1$s" : "%2$s jest udostępniane grupie %1$s",
+ "{actor} shared with group {group}" : "{actor} udostępnił grupie {group}",
+ "%2$s removed share for group %1$s" : "%2$s zakończył udostępnianie grupie %1$s",
+ "{actor} removed share for group {group}" : "{actor} zakończył udostępnianie grupie {group}",
+ "You shared %1$s with group %2$s" : "Współdzielisz %1$s z grupą %2$s",
+ "You shared {file} with group {group}" : "Udostępniasz {file} grupie {group}",
+ "You removed group %2$s from %1$s" : "Usunąłeś grupę %2$s z %1$s",
+ "You removed group {group} from {file}" : "Usunąłeś grupę {group} z {file}",
+ "%3$s shared %1$s with group %2$s" : "%3$s udostępnił %1$s grupie %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} udostępnił {file} grupie {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s usunął grupę %2$s z %1$s",
+ "{actor} removed group {group} from {file}" : "{actor} usunął grupę {group} z {file}",
+ "Shared as public link" : "Udostępnione jako publiczny link",
+ "Removed public link" : "Usunięto link publiczny",
+ "%1$s shared as public link" : "%1$s udostępnione jako publiczny link",
+ "{actor} shared as public link" : "{actor} udostępniony jako publiczny link",
+ "%1$s removed public link" : "%1$s usunąłeś publiczny link",
+ "{actor} removed public link" : "{actor} usunął publiczny link",
+ "You shared %1$s as public link" : "Udostępniasz %1$s jako publiczny link",
+ "You shared {file} as public link" : "Udostępniasz {file} jako publiczny link",
+ "You removed public link for %1$s" : "Usuwasz link publiczny dla %1$s",
+ "You removed public link for {file}" : "Usuwasz link publiczny dla {file}",
+ "%2$s shared %1$s as public link" : "%2$s udostępnił %1$s jako publiczne łącze",
+ "{actor} shared {file} as public link" : "{actor} udostępnił {file} jako publiczne łącze",
+ "%2$s removed public link for %1$s" : "%2$s usunął publiczne łącze do %1$s",
+ "{actor} removed public link for {file}" : "{actor} usunął publiczne łącze do {file}",
+ "%1$s accepted the remote share" : "%1$s zaakceptował zdalny udział",
+ "{user} accepted the remote share" : "{user} zaakceptował zdalny udział",
+ "%1$s declined the remote share" : "%1$s odrzucił zdalny udział",
+ "{user} declined the remote share" : "{user} odrzucił zdalny udział",
+ "You received a new remote share %1$s from %2$s" : "Otrzymałeś nowy zdalny udział %1$s od użytkownika %2$s",
+ "You received a new remote share {file} from {user}" : "Otrzymałeś nowy zdalny udział {file} od użytkownika {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s zaakceptował zdalny udział %1$s",
+ "{user} accepted the remote share of {file}" : "{user} zaakceptował zdalny udział {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s odrzucił zdalny udział %1$s",
+ "{user} declined the remote share of {file}" : "{user} odrzucił zadalny udział {file}",
+ "%2$s unshared %1$s from you" : "%2$s przestał ci udostępniać %1$s",
+ "{user} unshared {file} from you" : "{user} przestał ci udostępniać {file}",
+ "Shared with %1$s" : "Udostępnione %1$s",
+ "Shared with {user}" : "Udostępnione użytkownikowi {user}",
+ "Removed share for %1$s" : "Zakończono udostępnianie użytkownikowi %1$s",
+ "Removed share for {user}" : "Zakończono udostępnianie użytkownikowi {user}",
+ "%2$s shared with %1$s" : "%2$s udostępnia użytkownikowi %1$s",
+ "{actor} shared with {user}" : "{actor} udostępnia użytkownikowi {user}",
+ "%2$s removed share for %1$s" : "%2$s usuwa udostępnienie dla użytkownika %1$s",
+ "{actor} removed share for {user}" : "{actor} usuwa udostępnienie dla użytkownika {user}",
+ "Shared by %1$s" : "Udostępnione przez użytkownika %1$s",
+ "Shared by {actor}" : "Udostępnione przez użytkownika {actor}",
+ "%1$s removed share" : "%1$s usunął udostępnienie",
+ "{actor} removed share" : "{actor} usunął udostępnienie",
+ "You shared %1$s with %2$s" : "Współdzielisz %1$s z %2$s",
+ "You shared {file} with {user}" : "Współdzielisz {file} z {user}",
+ "You removed %2$s from %1$s" : "Usunąłeś użytkownika %2$s z %1$s",
+ "You removed {user} from {file}" : "Usunąłeś użytkownika {user} z {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s udostępnił %1$s użytkownikowi %2$s",
+ "{actor} removed {user} from {file}" : "{actor} usunął użytkownika {user} z {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s usunął użytkownika %2$s z %1$s",
+ "%2$s shared %1$s with you" : "%2$s współdzieli %1$s z Tobą",
+ "{actor} shared {file} with you" : "{actor} udostępnił ci {file}",
+ "%2$s removed you from %1$s" : "%2$s usunął cię z %1$s",
+ "{actor} removed you from {file}" : "{actor} usunął cie z {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Plik lub folder udostępniony za pomocą maila lub publicznego łącza został <strong>pobrany</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Plik lub folder został udostępniony z <strong>innego serwera</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Plik lub folder stał się <strong>współdzielony</strong>",
+ "Wrong share ID, share doesn't exist" : "Złe ID udziału, udział nie istnieje",
+ "could not delete share" : "nie można usunąć udział",
+ "Could not delete share" : "Nie można usunąć udział",
+ "Please specify a file or folder path" : "Proszę podać pliku lub ścieżkę do folderu",
+ "Wrong path, file/folder doesn't exist" : "Ścieżka nieprawidłowa, plik/folder nie istnieje",
+ "Could not create share" : "Nie można utworzyć udział",
+ "invalid permissions" : "nieprawidłowe uprawnienia",
+ "Please specify a valid user" : "Proszę podać poprawnego użytkownika",
+ "Group sharing is disabled by the administrator" : "Udostępnianie grupy zostało wyłączone przez administratora",
+ "Please specify a valid group" : "Proszę podać prawidłową grupę",
"Public link sharing is disabled by the administrator" : "Udostępnianie linków publicznych zostało zablokowane przez twojego administratora",
"Public upload disabled by the administrator" : "Publiczne wczytywanie zostało zablokowane przez twojego administratora",
"Public upload is only possible for publicly shared folders" : "Publiczne wczytywanie jest możliwe wyłącznie do katalogów publicznych",
- "A file or folder has been <strong>shared</strong>" : "Plik lub folder stał się <strong>współdzielony</strong>",
- "You shared %1$s with %2$s" : "Współdzielisz %1$s z %2$s",
- "You shared %1$s with group %2$s" : "Współdzielisz %1$s z grupą %2$s",
- "You shared %1$s via link" : "Udostępniasz %1$s przez link",
- "%2$s shared %1$s with you" : "%2$s współdzieli %1$s z Tobą",
- "%2$s removed the share for %1$s" : "%2$s usunął udział dla %1$s",
- "Shares" : "Udziały",
+ "Invalid date, date format must be YYYY-MM-DD" : "Nieprawidłowa data, format daty musi być YYYY-MM-DD",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "Udostępnienie %s nie powiodło się ponieważ backend nie zezwala na udziały typu %s",
+ "Unknown share type" : "Nieznany typ udziału",
+ "Not a directory" : "Nie jest katalogiem",
+ "Could not lock path" : "Nie udało się zablokować ścieżki",
+ "Wrong or no update parameter given" : "Brakujący lub błędny parametr aktualizacji",
+ "Can't change permissions for public share links" : "Nie można zmienić uprawnień dla publicznych udziałów",
+ "Cannot increase permissions" : "Nie można zwiększyć uprawnień",
+ "%s is publicly shared" : "%s jest publicznie dostępny",
+ "Share API is disabled" : "API udostępniania jest wyłączone",
"This share is password-protected" : "Udział ten jest chroniony hasłem",
"The password is wrong. Try again." : "To hasło jest niewłaściwe. Spróbuj ponownie.",
"Password" : "Hasło",
"No entries found in this folder" : "Brak wpisów w tym folderze",
"Name" : "Nazwa",
"Share time" : "Czas współdzielenia",
+ "Expiration date" : "Data wygaśnięcia",
"Sorry, this link doesn’t seem to work anymore." : "Przepraszamy ale wygląda na to, że ten link już nie działa.",
"Reasons might be:" : "Możliwe powody:",
"the item was removed" : "element został usunięty",
"the link expired" : "link wygasł",
"sharing is disabled" : "udostępnianie jest wyłączone",
"For more info, please ask the person who sent this link." : "Aby uzyskać więcej informacji proszę poprosić osobę, która wysłał ten link.",
- "Add to your ownCloud" : "Dodaj do twojego ownCloud",
+ "Add to your Nextcloud" : "Dodaj do swojego Nextcloud",
"Download" : "Pobierz",
"Download %s" : "Pobierz %s",
- "Direct link" : "Bezpośredni link"
+ "Direct link" : "Bezpośredni link",
+ "Upload files to %s" : "Prześlij pliki do %s",
+ "Select or drop files" : "Wybierz i upuść pliki",
+ "Uploading files…" : "Wysyłanie plików...",
+ "Uploaded files:" : "Wysłane pliki:",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Publicznie udostępniony plik lub katalog został <strong>pobrany</strong>",
+ "You received a new remote share %2$s from %1$s" : "Otrzymałeś nowy udział zdalny %2$s z %1$s",
+ "You received a new remote share from %s" : "Otrzymałeś nowy zdalny udział z %s",
+ "%1$s accepted remote share %2$s" : "%1$s zaakceptował zdalny udział %2$s",
+ "%1$s declined remote share %2$s" : "%1$s odrzucił zdalny udział %2$s",
+ "%1$s unshared %2$s from you" : "%1$s zakończył udostępnianie Ci %2$s",
+ "Public shared folder %1$s was downloaded" : "Udostępniony publicznie folder %1$s został pobrany",
+ "Public shared file %1$s was downloaded" : "Udostępniony publicznie plik %1$s został pobrany",
+ "%2$s shared %1$s with %3$s" : "%2$s udostępnił %1$s użytkownikowi %3$s",
+ "You removed the share of %2$s for %1$s" : "Zakończyłeś udostępnianie %2$s użytkownikowi %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s zakończył udostępnianie %3$s użytkownikowi %1$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s udostępnił %1$s grupie %3$s",
+ "%2$s shared %1$s via link" : "%2$s udostępnił %1$s poprzez łącze",
+ "You shared %1$s via link" : "Udostępniasz %1$s przez link",
+ "Your public link for %1$s expired" : "Twoje publiczne łącze do %1$s wygasło",
+ "%2$s removed the share for %1$s" : "%2$s usunął udział dla %1$s",
+ "Shared with %2$s" : "Współdzielone z %2$s",
+ "Shared with %3$s by %2$s" : "Udostępniono użytkownikowi %3$s przez %2$s",
+ "Shared with group %2$s" : "Udostępniono grupie %2$s",
+ "Shared with group %3$s by %2$s" : "Udostępniono grupie %3$s przez użytkownika %2$s",
+ "Shared via link by %2$s" : "Udostępniono za pomocą łącza przez użytkownika %2$s",
+ "Shared via public link" : "Udostępniono przez publiczne łącze",
+ "%2$s removed public link" : "%2$s usunął publiczne łącze",
+ "Public link expired" : "Link publiczny wygasł",
+ "Shared by %2$s" : "Udostępniane przez %2$s",
+ "Shares" : "Udziały"
},
"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files_sharing/l10n/pl.json b/apps/files_sharing/l10n/pl.json
index 6190871b16f..955222647b3 100644
--- a/apps/files_sharing/l10n/pl.json
+++ b/apps/files_sharing/l10n/pl.json
@@ -1,53 +1,166 @@
{ "translations": {
- "Server to server sharing is not enabled on this server" : "Współdzielenie między serwerami nie jest uruchomione na tym serwerze",
- "The mountpoint name contains invalid characters." : "Nazwa zamontowanego zasobu zawiera niedozwolone znaki.",
- "Invalid or untrusted SSL certificate" : "Niewłaściwy lub niezaufany certyfikat SSL",
- "Could not authenticate to remote share, password might be wrong" : "Nie można zalogować do zdalnego zasobu, hasło może być niepoprawne",
- "Storage not valid" : "Zasób nie jest prawidłowy",
- "Couldn't add remote share" : "Nie można dodać zdalnego folderu",
"Shared with you" : "Współdzielony z Tobą",
"Shared with others" : "Współdzielony z innymi",
"Shared by link" : "Współdzielony linkiem",
"Nothing shared with you yet" : "Nie masz jeszcze nic udostępnionego",
"Files and folders others share with you will show up here" : "Pliki i foldery udostępnione Tobie przez innych wyświetlą się tutaj",
"Nothing shared yet" : "Jeszcze nic nie udostępniono",
- "Files and folders you share will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
+ "Files and folders you share will show up here" : "Pliki i foldery, które udostępniasz, pokażą się tutaj",
"No shared links" : "Brak udostępnionych odnośników",
- "Files and folders you share by link will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Czy chcesz dodać udział zdalny {name} od {owner}@{remote}?",
- "Remote share" : "Zdalny zasób",
- "Remote share password" : "Hasło do zdalnego zasobu",
- "Cancel" : "Anuluj",
- "Add remote share" : "Dodaj zdalny zasób",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nie znaleziono instalacji ownCloud (w wersji 7 lub nowszej) na {remote}",
- "Invalid ownCloud url" : "Błędny adres URL",
+ "Files and folders you share by link will show up here" : "Pliki i foldery, które udostępniasz, pokażą się tutaj",
+ "You can upload into this folder" : "Możesz przesłać do tego folderu",
+ "No compatible server found at {remote}" : "Nie znaleziono kompatybilnego serwera na {remote}",
+ "Invalid server URL" : "Błędny adres serwera",
+ "Failed to add the public link to your Nextcloud" : "Nie udało się dodać linku do publicznego Nextcloud",
+ "Share" : "Udostępnij",
+ "No expiration date set" : "Nie ustawiono daty wygaśnięcia",
"Shared by" : "Udostępniane przez",
"Sharing" : "Udostępnianie",
+ "File shares" : "Udziały",
+ "Downloaded via public link" : "Pobierane poprzez link publiczny",
+ "Downloaded by %1$s" : "Pobierane przez %1$s",
+ "Downloaded by {email}" : "Pobierane przez {email}",
+ "%1$s downloaded via public link" : "%1$s pobierane za pośrednictwem łącza publicznego",
+ "{file} downloaded via public link" : "{file} pobierane za pośrednictwem łącza publicznego",
+ "%1$s downloaded %2$s" : "%1$s pobierane %2$s",
+ "{email} downloaded {file}" : "{email} pobierane {file}",
+ "Shared with group %1$s" : "Udostępnione grupie %1$s",
+ "Shared with group {group}" : "Udostępnione grupie {group}",
+ "Removed share for group %1$s" : "Zakończono udostępnianie grupie %1$s",
+ "Removed share for group {group}" : "Zakończono udostępnianie grupie {group}",
+ "%2$s shared with group %1$s" : "%2$s jest udostępniane grupie %1$s",
+ "{actor} shared with group {group}" : "{actor} udostępnił grupie {group}",
+ "%2$s removed share for group %1$s" : "%2$s zakończył udostępnianie grupie %1$s",
+ "{actor} removed share for group {group}" : "{actor} zakończył udostępnianie grupie {group}",
+ "You shared %1$s with group %2$s" : "Współdzielisz %1$s z grupą %2$s",
+ "You shared {file} with group {group}" : "Udostępniasz {file} grupie {group}",
+ "You removed group %2$s from %1$s" : "Usunąłeś grupę %2$s z %1$s",
+ "You removed group {group} from {file}" : "Usunąłeś grupę {group} z {file}",
+ "%3$s shared %1$s with group %2$s" : "%3$s udostępnił %1$s grupie %2$s",
+ "{actor} shared {file} with group {group}" : "{actor} udostępnił {file} grupie {group}",
+ "%3$s removed group %2$s from %1$s" : "%3$s usunął grupę %2$s z %1$s",
+ "{actor} removed group {group} from {file}" : "{actor} usunął grupę {group} z {file}",
+ "Shared as public link" : "Udostępnione jako publiczny link",
+ "Removed public link" : "Usunięto link publiczny",
+ "%1$s shared as public link" : "%1$s udostępnione jako publiczny link",
+ "{actor} shared as public link" : "{actor} udostępniony jako publiczny link",
+ "%1$s removed public link" : "%1$s usunąłeś publiczny link",
+ "{actor} removed public link" : "{actor} usunął publiczny link",
+ "You shared %1$s as public link" : "Udostępniasz %1$s jako publiczny link",
+ "You shared {file} as public link" : "Udostępniasz {file} jako publiczny link",
+ "You removed public link for %1$s" : "Usuwasz link publiczny dla %1$s",
+ "You removed public link for {file}" : "Usuwasz link publiczny dla {file}",
+ "%2$s shared %1$s as public link" : "%2$s udostępnił %1$s jako publiczne łącze",
+ "{actor} shared {file} as public link" : "{actor} udostępnił {file} jako publiczne łącze",
+ "%2$s removed public link for %1$s" : "%2$s usunął publiczne łącze do %1$s",
+ "{actor} removed public link for {file}" : "{actor} usunął publiczne łącze do {file}",
+ "%1$s accepted the remote share" : "%1$s zaakceptował zdalny udział",
+ "{user} accepted the remote share" : "{user} zaakceptował zdalny udział",
+ "%1$s declined the remote share" : "%1$s odrzucił zdalny udział",
+ "{user} declined the remote share" : "{user} odrzucił zdalny udział",
+ "You received a new remote share %1$s from %2$s" : "Otrzymałeś nowy zdalny udział %1$s od użytkownika %2$s",
+ "You received a new remote share {file} from {user}" : "Otrzymałeś nowy zdalny udział {file} od użytkownika {user}",
+ "%2$s accepted the remote share of %1$s" : "%2$s zaakceptował zdalny udział %1$s",
+ "{user} accepted the remote share of {file}" : "{user} zaakceptował zdalny udział {file}",
+ "%2$s declined the remote share of %1$s" : "%2$s odrzucił zdalny udział %1$s",
+ "{user} declined the remote share of {file}" : "{user} odrzucił zadalny udział {file}",
+ "%2$s unshared %1$s from you" : "%2$s przestał ci udostępniać %1$s",
+ "{user} unshared {file} from you" : "{user} przestał ci udostępniać {file}",
+ "Shared with %1$s" : "Udostępnione %1$s",
+ "Shared with {user}" : "Udostępnione użytkownikowi {user}",
+ "Removed share for %1$s" : "Zakończono udostępnianie użytkownikowi %1$s",
+ "Removed share for {user}" : "Zakończono udostępnianie użytkownikowi {user}",
+ "%2$s shared with %1$s" : "%2$s udostępnia użytkownikowi %1$s",
+ "{actor} shared with {user}" : "{actor} udostępnia użytkownikowi {user}",
+ "%2$s removed share for %1$s" : "%2$s usuwa udostępnienie dla użytkownika %1$s",
+ "{actor} removed share for {user}" : "{actor} usuwa udostępnienie dla użytkownika {user}",
+ "Shared by %1$s" : "Udostępnione przez użytkownika %1$s",
+ "Shared by {actor}" : "Udostępnione przez użytkownika {actor}",
+ "%1$s removed share" : "%1$s usunął udostępnienie",
+ "{actor} removed share" : "{actor} usunął udostępnienie",
+ "You shared %1$s with %2$s" : "Współdzielisz %1$s z %2$s",
+ "You shared {file} with {user}" : "Współdzielisz {file} z {user}",
+ "You removed %2$s from %1$s" : "Usunąłeś użytkownika %2$s z %1$s",
+ "You removed {user} from {file}" : "Usunąłeś użytkownika {user} z {file}",
+ "%3$s shared %1$s with %2$s" : "%3$s udostępnił %1$s użytkownikowi %2$s",
+ "{actor} removed {user} from {file}" : "{actor} usunął użytkownika {user} z {file}",
+ "%3$s removed %2$s from %1$s" : "%3$s usunął użytkownika %2$s z %1$s",
+ "%2$s shared %1$s with you" : "%2$s współdzieli %1$s z Tobą",
+ "{actor} shared {file} with you" : "{actor} udostępnił ci {file}",
+ "%2$s removed you from %1$s" : "%2$s usunął cię z %1$s",
+ "{actor} removed you from {file}" : "{actor} usunął cie z {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Plik lub folder udostępniony za pomocą maila lub publicznego łącza został <strong>pobrany</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Plik lub folder został udostępniony z <strong>innego serwera</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Plik lub folder stał się <strong>współdzielony</strong>",
+ "Wrong share ID, share doesn't exist" : "Złe ID udziału, udział nie istnieje",
+ "could not delete share" : "nie można usunąć udział",
+ "Could not delete share" : "Nie można usunąć udział",
+ "Please specify a file or folder path" : "Proszę podać pliku lub ścieżkę do folderu",
+ "Wrong path, file/folder doesn't exist" : "Ścieżka nieprawidłowa, plik/folder nie istnieje",
+ "Could not create share" : "Nie można utworzyć udział",
+ "invalid permissions" : "nieprawidłowe uprawnienia",
+ "Please specify a valid user" : "Proszę podać poprawnego użytkownika",
+ "Group sharing is disabled by the administrator" : "Udostępnianie grupy zostało wyłączone przez administratora",
+ "Please specify a valid group" : "Proszę podać prawidłową grupę",
"Public link sharing is disabled by the administrator" : "Udostępnianie linków publicznych zostało zablokowane przez twojego administratora",
"Public upload disabled by the administrator" : "Publiczne wczytywanie zostało zablokowane przez twojego administratora",
"Public upload is only possible for publicly shared folders" : "Publiczne wczytywanie jest możliwe wyłącznie do katalogów publicznych",
- "A file or folder has been <strong>shared</strong>" : "Plik lub folder stał się <strong>współdzielony</strong>",
- "You shared %1$s with %2$s" : "Współdzielisz %1$s z %2$s",
- "You shared %1$s with group %2$s" : "Współdzielisz %1$s z grupą %2$s",
- "You shared %1$s via link" : "Udostępniasz %1$s przez link",
- "%2$s shared %1$s with you" : "%2$s współdzieli %1$s z Tobą",
- "%2$s removed the share for %1$s" : "%2$s usunął udział dla %1$s",
- "Shares" : "Udziały",
+ "Invalid date, date format must be YYYY-MM-DD" : "Nieprawidłowa data, format daty musi być YYYY-MM-DD",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "Udostępnienie %s nie powiodło się ponieważ backend nie zezwala na udziały typu %s",
+ "Unknown share type" : "Nieznany typ udziału",
+ "Not a directory" : "Nie jest katalogiem",
+ "Could not lock path" : "Nie udało się zablokować ścieżki",
+ "Wrong or no update parameter given" : "Brakujący lub błędny parametr aktualizacji",
+ "Can't change permissions for public share links" : "Nie można zmienić uprawnień dla publicznych udziałów",
+ "Cannot increase permissions" : "Nie można zwiększyć uprawnień",
+ "%s is publicly shared" : "%s jest publicznie dostępny",
+ "Share API is disabled" : "API udostępniania jest wyłączone",
"This share is password-protected" : "Udział ten jest chroniony hasłem",
"The password is wrong. Try again." : "To hasło jest niewłaściwe. Spróbuj ponownie.",
"Password" : "Hasło",
"No entries found in this folder" : "Brak wpisów w tym folderze",
"Name" : "Nazwa",
"Share time" : "Czas współdzielenia",
+ "Expiration date" : "Data wygaśnięcia",
"Sorry, this link doesn’t seem to work anymore." : "Przepraszamy ale wygląda na to, że ten link już nie działa.",
"Reasons might be:" : "Możliwe powody:",
"the item was removed" : "element został usunięty",
"the link expired" : "link wygasł",
"sharing is disabled" : "udostępnianie jest wyłączone",
"For more info, please ask the person who sent this link." : "Aby uzyskać więcej informacji proszę poprosić osobę, która wysłał ten link.",
- "Add to your ownCloud" : "Dodaj do twojego ownCloud",
+ "Add to your Nextcloud" : "Dodaj do swojego Nextcloud",
"Download" : "Pobierz",
"Download %s" : "Pobierz %s",
- "Direct link" : "Bezpośredni link"
+ "Direct link" : "Bezpośredni link",
+ "Upload files to %s" : "Prześlij pliki do %s",
+ "Select or drop files" : "Wybierz i upuść pliki",
+ "Uploading files…" : "Wysyłanie plików...",
+ "Uploaded files:" : "Wysłane pliki:",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Publicznie udostępniony plik lub katalog został <strong>pobrany</strong>",
+ "You received a new remote share %2$s from %1$s" : "Otrzymałeś nowy udział zdalny %2$s z %1$s",
+ "You received a new remote share from %s" : "Otrzymałeś nowy zdalny udział z %s",
+ "%1$s accepted remote share %2$s" : "%1$s zaakceptował zdalny udział %2$s",
+ "%1$s declined remote share %2$s" : "%1$s odrzucił zdalny udział %2$s",
+ "%1$s unshared %2$s from you" : "%1$s zakończył udostępnianie Ci %2$s",
+ "Public shared folder %1$s was downloaded" : "Udostępniony publicznie folder %1$s został pobrany",
+ "Public shared file %1$s was downloaded" : "Udostępniony publicznie plik %1$s został pobrany",
+ "%2$s shared %1$s with %3$s" : "%2$s udostępnił %1$s użytkownikowi %3$s",
+ "You removed the share of %2$s for %1$s" : "Zakończyłeś udostępnianie %2$s użytkownikowi %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s zakończył udostępnianie %3$s użytkownikowi %1$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s udostępnił %1$s grupie %3$s",
+ "%2$s shared %1$s via link" : "%2$s udostępnił %1$s poprzez łącze",
+ "You shared %1$s via link" : "Udostępniasz %1$s przez link",
+ "Your public link for %1$s expired" : "Twoje publiczne łącze do %1$s wygasło",
+ "%2$s removed the share for %1$s" : "%2$s usunął udział dla %1$s",
+ "Shared with %2$s" : "Współdzielone z %2$s",
+ "Shared with %3$s by %2$s" : "Udostępniono użytkownikowi %3$s przez %2$s",
+ "Shared with group %2$s" : "Udostępniono grupie %2$s",
+ "Shared with group %3$s by %2$s" : "Udostępniono grupie %3$s przez użytkownika %2$s",
+ "Shared via link by %2$s" : "Udostępniono za pomocą łącza przez użytkownika %2$s",
+ "Shared via public link" : "Udostępniono przez publiczne łącze",
+ "%2$s removed public link" : "%2$s usunął publiczne łącze",
+ "Public link expired" : "Link publiczny wygasł",
+ "Shared by %2$s" : "Udostępniane przez %2$s",
+ "Shares" : "Udziały"
},"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js
index 88e750943d0..e12622cd00e 100644
--- a/apps/files_sharing/l10n/ru.js
+++ b/apps/files_sharing/l10n/ru.js
@@ -13,7 +13,7 @@ OC.L10N.register(
"You can upload into this folder" : "Вы можете загружать в этот каталог",
"No compatible server found at {remote}" : "Не найден совместимый сервер на {remote}",
"Invalid server URL" : "Неверный URL сервера",
- "Failed to add the public link to your Nextcloud" : "Не получилось добавить публичную ссылку на ваш Nextcloud",
+ "Failed to add the public link to your Nextcloud" : "Не получилось добавить общедоступную ссылку в ваш Nextcloud",
"Share" : "Поделиться",
"No expiration date set" : "Дата истечения не установлена",
"Shared by" : "Поделился",
@@ -22,8 +22,8 @@ OC.L10N.register(
"Downloaded via public link" : "Скачано по открытой ссылке",
"Downloaded by %1$s" : "Скачано %1$s",
"Downloaded by {email}" : "Скачано {email}",
- "%1$s downloaded via public link" : "%1$s скачано по публичной ссылке",
- "{file} downloaded via public link" : "{file} скачан по публичной ссылке",
+ "%1$s downloaded via public link" : "%1$s скачано по общедоступной ссылке",
+ "{file} downloaded via public link" : "{file} скачан по общедоступной ссылке",
"%1$s downloaded %2$s" : "%1$s скачан %2$s",
"{email} downloaded {file}" : "{email} скачал {file}",
"Shared with group %1$s" : "Поделился с группой %1$s",
@@ -42,20 +42,20 @@ OC.L10N.register(
"{actor} shared {file} with group {group}" : "{actor} поделился {file} с группой {group}",
"%3$s removed group %2$s from %1$s" : "%3$s удалил группу %2$s из %1$s",
"{actor} removed group {group} from {file}" : "{actor} удалил группу {group} из {file}",
- "Shared as public link" : "Поделился публичной ссылкой",
- "Removed public link" : "Удалена публичная ссылка",
- "%1$s shared as public link" : "%1$s поделился публичной ссылкой",
- "{actor} shared as public link" : "{actor} поделился публичной ссылкой",
- "%1$s removed public link" : "%1$s удалил публичную сслыку",
- "{actor} removed public link" : "{actor} удалил публичную ссылку",
- "You shared %1$s as public link" : "Вы поделись %1$s в виде публичной ссылки",
- "You shared {file} as public link" : "Вы поделись {file} в виде публичной ссылки",
- "You removed public link for %1$s" : "Вы удалили публичную ссылку к %1$s",
- "You removed public link for {file}" : "Вы удалили публичную ссылку к {file}",
- "%2$s shared %1$s as public link" : "%2$s поделился %1$s в виде публичной ссылки",
- "{actor} shared {file} as public link" : "{actor} поделился {file} в виде публичной ссылки",
- "%2$s removed public link for %1$s" : "%2$s удалил публичную ссылку к %1$s",
- "{actor} removed public link for {file}" : "{actor} удалил публичную ссылку к {file}",
+ "Shared as public link" : "Поделился общедоступной ссылкой",
+ "Removed public link" : "Удалена общедоступная ссылка",
+ "%1$s shared as public link" : "%1$s поделился общедоступной ссылкой",
+ "{actor} shared as public link" : "{actor} поделился общедоступной ссылкой",
+ "%1$s removed public link" : "%1$s удалил общедоступной сслыку",
+ "{actor} removed public link" : "{actor} удалил общедоступной ссылку",
+ "You shared %1$s as public link" : "Вы поделись %1$s в виде общедоступной ссылки",
+ "You shared {file} as public link" : "Вы поделись {file} в виде общедоступной ссылки",
+ "You removed public link for %1$s" : "Вы удалили общедоступную ссылку к %1$s",
+ "You removed public link for {file}" : "Вы удалили общедоступную ссылку к {file}",
+ "%2$s shared %1$s as public link" : "%2$s поделился %1$s в виде общедоступной ссылки",
+ "{actor} shared {file} as public link" : "{actor} поделился {file} в виде общедоступной ссылки",
+ "%2$s removed public link for %1$s" : "%2$s удалил общедоступную ссылку к %1$s",
+ "{actor} removed public link for {file}" : "{actor} удалил общедоступную ссылку к {file}",
"%1$s accepted the remote share" : "%1$s принял удаленный общий ресурс",
"{user} accepted the remote share" : "{user} принял удаленный общий ресурс",
"%1$s declined the remote share" : "%1$s отклонил удаленный общий ресурс",
@@ -91,7 +91,7 @@ OC.L10N.register(
"{actor} shared {file} with you" : "{actor} поделился {file} с вами",
"%2$s removed you from %1$s" : "%2$s удалил вас из %1$s",
"{actor} removed you from {file}" : "{actor} удалил вас из {file}",
- "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Файл или папка, которыми поделились по электронной почте или публичной ссылке, были <strong>скачаны</strong>",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Файл или папка, которыми поделились по электронной почте или общедоступной ссылке, были <strong>скачаны</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Файлом или каталогом поделились с <strong>удаленного сервера</strong>",
"A file or folder has been <strong>shared</strong>" : "<strong>Опубликован</strong> файл или каталог",
"Wrong share ID, share doesn't exist" : "Неверный идентификатор публикации, публикация не существует",
@@ -154,10 +154,10 @@ OC.L10N.register(
"%2$s removed the share of group %3$s for %1$s" : "%2$s удалил общий доступ к группе %3$s для %1$s",
"%2$s shared %1$s via link" : "%2$s поделился %1$s по ссылке",
"You shared %1$s via link" : "Вы поделились %1$s с помощью ссылки",
- "You removed the public link for %1$s" : "Вы удалили публичную ссылку к %1$s",
- "%2$s removed the public link for %1$s" : "%2$s удалил публичную ссылку к %1$s",
- "Your public link for %1$s expired" : "Срок действия Вашей публичной ссылки к %1$s закончился",
- "The public link of %2$s for %1$s expired" : "Срок действия публичной ссылки к %2$s для %1$s закончился",
+ "You removed the public link for %1$s" : "Вы удалили общедоступную ссылку к %1$s",
+ "%2$s removed the public link for %1$s" : "%2$s удалил общедоступную ссылку к %1$s",
+ "Your public link for %1$s expired" : "Срок действия Вашей общедоступной ссылки к %1$s закончился",
+ "The public link of %2$s for %1$s expired" : "Срок действия общедоступной ссылки к %2$s для %1$s закончился",
"%2$s removed the share for %1$s" : "%2$s удалил общий доступ к %1$s",
"Shared with %2$s" : "Поделился с %2$s",
"Shared with %3$s by %2$s" : "Поделился %2$s с %3$s",
@@ -169,9 +169,9 @@ OC.L10N.register(
"%2$s removed share of group %3$s" : "%2$s удалил общий доступ к группе %3$s",
"Shared via link by %2$s" : "Поделился ссылкой %2$s",
"Shared via public link" : "Поделился открытой ссылкой",
- "%2$s removed public link" : "%2$s удалил публичную ссылку",
- "Public link expired" : "Срок действия публичной ссылки закончился",
- "Public link of %2$s expired" : "Срок действия публичной ссылки к %2$s закончился",
+ "%2$s removed public link" : "%2$s удалил общедоступную ссылку",
+ "Public link expired" : "Срок действия общедоступнной ссылки закончился",
+ "Public link of %2$s expired" : "Срок действия общедоступной ссылки к %2$s закончился",
"Shared by %2$s" : "Поделился %2$s",
"Shares" : "События обмена файлами"
},
diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json
index 3f5a707ed7b..fe9b1660292 100644
--- a/apps/files_sharing/l10n/ru.json
+++ b/apps/files_sharing/l10n/ru.json
@@ -11,7 +11,7 @@
"You can upload into this folder" : "Вы можете загружать в этот каталог",
"No compatible server found at {remote}" : "Не найден совместимый сервер на {remote}",
"Invalid server URL" : "Неверный URL сервера",
- "Failed to add the public link to your Nextcloud" : "Не получилось добавить публичную ссылку на ваш Nextcloud",
+ "Failed to add the public link to your Nextcloud" : "Не получилось добавить общедоступную ссылку в ваш Nextcloud",
"Share" : "Поделиться",
"No expiration date set" : "Дата истечения не установлена",
"Shared by" : "Поделился",
@@ -20,8 +20,8 @@
"Downloaded via public link" : "Скачано по открытой ссылке",
"Downloaded by %1$s" : "Скачано %1$s",
"Downloaded by {email}" : "Скачано {email}",
- "%1$s downloaded via public link" : "%1$s скачано по публичной ссылке",
- "{file} downloaded via public link" : "{file} скачан по публичной ссылке",
+ "%1$s downloaded via public link" : "%1$s скачано по общедоступной ссылке",
+ "{file} downloaded via public link" : "{file} скачан по общедоступной ссылке",
"%1$s downloaded %2$s" : "%1$s скачан %2$s",
"{email} downloaded {file}" : "{email} скачал {file}",
"Shared with group %1$s" : "Поделился с группой %1$s",
@@ -40,20 +40,20 @@
"{actor} shared {file} with group {group}" : "{actor} поделился {file} с группой {group}",
"%3$s removed group %2$s from %1$s" : "%3$s удалил группу %2$s из %1$s",
"{actor} removed group {group} from {file}" : "{actor} удалил группу {group} из {file}",
- "Shared as public link" : "Поделился публичной ссылкой",
- "Removed public link" : "Удалена публичная ссылка",
- "%1$s shared as public link" : "%1$s поделился публичной ссылкой",
- "{actor} shared as public link" : "{actor} поделился публичной ссылкой",
- "%1$s removed public link" : "%1$s удалил публичную сслыку",
- "{actor} removed public link" : "{actor} удалил публичную ссылку",
- "You shared %1$s as public link" : "Вы поделись %1$s в виде публичной ссылки",
- "You shared {file} as public link" : "Вы поделись {file} в виде публичной ссылки",
- "You removed public link for %1$s" : "Вы удалили публичную ссылку к %1$s",
- "You removed public link for {file}" : "Вы удалили публичную ссылку к {file}",
- "%2$s shared %1$s as public link" : "%2$s поделился %1$s в виде публичной ссылки",
- "{actor} shared {file} as public link" : "{actor} поделился {file} в виде публичной ссылки",
- "%2$s removed public link for %1$s" : "%2$s удалил публичную ссылку к %1$s",
- "{actor} removed public link for {file}" : "{actor} удалил публичную ссылку к {file}",
+ "Shared as public link" : "Поделился общедоступной ссылкой",
+ "Removed public link" : "Удалена общедоступная ссылка",
+ "%1$s shared as public link" : "%1$s поделился общедоступной ссылкой",
+ "{actor} shared as public link" : "{actor} поделился общедоступной ссылкой",
+ "%1$s removed public link" : "%1$s удалил общедоступной сслыку",
+ "{actor} removed public link" : "{actor} удалил общедоступной ссылку",
+ "You shared %1$s as public link" : "Вы поделись %1$s в виде общедоступной ссылки",
+ "You shared {file} as public link" : "Вы поделись {file} в виде общедоступной ссылки",
+ "You removed public link for %1$s" : "Вы удалили общедоступную ссылку к %1$s",
+ "You removed public link for {file}" : "Вы удалили общедоступную ссылку к {file}",
+ "%2$s shared %1$s as public link" : "%2$s поделился %1$s в виде общедоступной ссылки",
+ "{actor} shared {file} as public link" : "{actor} поделился {file} в виде общедоступной ссылки",
+ "%2$s removed public link for %1$s" : "%2$s удалил общедоступную ссылку к %1$s",
+ "{actor} removed public link for {file}" : "{actor} удалил общедоступную ссылку к {file}",
"%1$s accepted the remote share" : "%1$s принял удаленный общий ресурс",
"{user} accepted the remote share" : "{user} принял удаленный общий ресурс",
"%1$s declined the remote share" : "%1$s отклонил удаленный общий ресурс",
@@ -89,7 +89,7 @@
"{actor} shared {file} with you" : "{actor} поделился {file} с вами",
"%2$s removed you from %1$s" : "%2$s удалил вас из %1$s",
"{actor} removed you from {file}" : "{actor} удалил вас из {file}",
- "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Файл или папка, которыми поделились по электронной почте или публичной ссылке, были <strong>скачаны</strong>",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Файл или папка, которыми поделились по электронной почте или общедоступной ссылке, были <strong>скачаны</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Файлом или каталогом поделились с <strong>удаленного сервера</strong>",
"A file or folder has been <strong>shared</strong>" : "<strong>Опубликован</strong> файл или каталог",
"Wrong share ID, share doesn't exist" : "Неверный идентификатор публикации, публикация не существует",
@@ -152,10 +152,10 @@
"%2$s removed the share of group %3$s for %1$s" : "%2$s удалил общий доступ к группе %3$s для %1$s",
"%2$s shared %1$s via link" : "%2$s поделился %1$s по ссылке",
"You shared %1$s via link" : "Вы поделились %1$s с помощью ссылки",
- "You removed the public link for %1$s" : "Вы удалили публичную ссылку к %1$s",
- "%2$s removed the public link for %1$s" : "%2$s удалил публичную ссылку к %1$s",
- "Your public link for %1$s expired" : "Срок действия Вашей публичной ссылки к %1$s закончился",
- "The public link of %2$s for %1$s expired" : "Срок действия публичной ссылки к %2$s для %1$s закончился",
+ "You removed the public link for %1$s" : "Вы удалили общедоступную ссылку к %1$s",
+ "%2$s removed the public link for %1$s" : "%2$s удалил общедоступную ссылку к %1$s",
+ "Your public link for %1$s expired" : "Срок действия Вашей общедоступной ссылки к %1$s закончился",
+ "The public link of %2$s for %1$s expired" : "Срок действия общедоступной ссылки к %2$s для %1$s закончился",
"%2$s removed the share for %1$s" : "%2$s удалил общий доступ к %1$s",
"Shared with %2$s" : "Поделился с %2$s",
"Shared with %3$s by %2$s" : "Поделился %2$s с %3$s",
@@ -167,9 +167,9 @@
"%2$s removed share of group %3$s" : "%2$s удалил общий доступ к группе %3$s",
"Shared via link by %2$s" : "Поделился ссылкой %2$s",
"Shared via public link" : "Поделился открытой ссылкой",
- "%2$s removed public link" : "%2$s удалил публичную ссылку",
- "Public link expired" : "Срок действия публичной ссылки закончился",
- "Public link of %2$s expired" : "Срок действия публичной ссылки к %2$s закончился",
+ "%2$s removed public link" : "%2$s удалил общедоступную ссылку",
+ "Public link expired" : "Срок действия общедоступнной ссылки закончился",
+ "Public link of %2$s expired" : "Срок действия общедоступной ссылки к %2$s закончился",
"Shared by %2$s" : "Поделился %2$s",
"Shares" : "События обмена файлами"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
diff --git a/apps/files_sharing/lib/AppInfo/Application.php b/apps/files_sharing/lib/AppInfo/Application.php
index 922db7dac75..403d30ae2e6 100644
--- a/apps/files_sharing/lib/AppInfo/Application.php
+++ b/apps/files_sharing/lib/AppInfo/Application.php
@@ -111,7 +111,9 @@ class Application extends App {
$c->query('AppName'),
$server->getConfig(),
$server->getAppManager(),
- $c['ControllerMethodReflector']
+ $c['ControllerMethodReflector'],
+ $server->getShareManager(),
+ $server->getRequest()
);
});
diff --git a/apps/files_sharing/lib/Middleware/SharingCheckMiddleware.php b/apps/files_sharing/lib/Middleware/SharingCheckMiddleware.php
index 7e9109bf2d1..5712b96b97d 100644
--- a/apps/files_sharing/lib/Middleware/SharingCheckMiddleware.php
+++ b/apps/files_sharing/lib/Middleware/SharingCheckMiddleware.php
@@ -25,6 +25,8 @@
namespace OCA\Files_Sharing\Middleware;
+use OCA\Files_Sharing\Controller\ExternalSharesController;
+use OCA\Files_Sharing\Controller\ShareController;
use OCP\App\IAppManager;
use OCP\AppFramework\Http\NotFoundResponse;
use OCP\AppFramework\Middleware;
@@ -33,6 +35,8 @@ use OCP\IConfig;
use OCP\AppFramework\Utility\IControllerMethodReflector;
use OCA\Files_Sharing\Exceptions\S2SException;
use OCP\AppFramework\Http\JSONResponse;
+use OCP\IRequest;
+use OCP\Share\IManager;
/**
* Checks whether the "sharing check" is enabled
@@ -49,21 +53,32 @@ class SharingCheckMiddleware extends Middleware {
protected $appManager;
/** @var IControllerMethodReflector */
protected $reflector;
+ /** @var IManager */
+ protected $shareManager;
+ /** @var IRequest */
+ protected $request;
/***
* @param string $appName
* @param IConfig $config
* @param IAppManager $appManager
+ * @param IControllerMethodReflector $reflector
+ * @param IManager $shareManager
+ * @param IRequest $request
*/
public function __construct($appName,
IConfig $config,
IAppManager $appManager,
- IControllerMethodReflector $reflector
+ IControllerMethodReflector $reflector,
+ IManager $shareManager,
+ IRequest $request
) {
$this->appName = $appName;
$this->config = $config;
$this->appManager = $appManager;
$this->reflector = $reflector;
+ $this->shareManager = $shareManager;
+ $this->request = $request;
}
/**
@@ -72,18 +87,23 @@ class SharingCheckMiddleware extends Middleware {
* @param \OCP\AppFramework\Controller $controller
* @param string $methodName
* @throws NotFoundException
+ * @throws S2SException
*/
public function beforeController($controller, $methodName) {
if(!$this->isSharingEnabled()) {
throw new NotFoundException('Sharing is disabled.');
}
- if ($controller instanceof \OCA\Files_Sharing\Controller\ExternalSharesController &&
+ if ($controller instanceof ExternalSharesController &&
!$this->externalSharesChecks()) {
throw new S2SException('Federated sharing not allowed');
- } else if ($controller instanceof \OCA\Files_Sharing\Controller\ShareController &&
- !$this->isLinkSharingEnabled()) {
- throw new NotFoundException('Link sharing is disabled');
+ } else if ($controller instanceof ShareController) {
+ $token = $this->request->getParam('token');
+ $share = $this->shareManager->getShareByToken($token);
+ if ($share->getShareType() === \OCP\Share::SHARE_TYPE_LINK
+ && !$this->isLinkSharingEnabled()) {
+ throw new NotFoundException('Link sharing is disabled');
+ }
}
}
diff --git a/apps/files_sharing/tests/Middleware/SharingCheckMiddlewareTest.php b/apps/files_sharing/tests/Middleware/SharingCheckMiddlewareTest.php
index c2965d04b6b..8d7d42722b9 100644
--- a/apps/files_sharing/tests/Middleware/SharingCheckMiddlewareTest.php
+++ b/apps/files_sharing/tests/Middleware/SharingCheckMiddlewareTest.php
@@ -34,6 +34,9 @@ use OCP\AppFramework\Utility\IControllerMethodReflector;
use OCA\Files_Sharing\Exceptions\S2SException;
use OCP\AppFramework\Http\JSONResponse;
use OCP\IConfig;
+use OCP\IRequest;
+use OCP\Share\IManager;
+use OCP\Share\IShare;
/**
* @package OCA\Files_Sharing\Middleware\SharingCheckMiddleware
@@ -50,6 +53,10 @@ class SharingCheckMiddlewareTest extends \Test\TestCase {
private $controllerMock;
/** @var IControllerMethodReflector|\PHPUnit_Framework_MockObject_MockObject */
private $reflector;
+ /** @var IManager | \PHPUnit_Framework_MockObject_MockObject */
+ private $shareManager;
+ /** @var IRequest | \PHPUnit_Framework_MockObject_MockObject */
+ private $request;
protected function setUp() {
parent::setUp();
@@ -58,12 +65,16 @@ class SharingCheckMiddlewareTest extends \Test\TestCase {
$this->appManager = $this->createMock(IAppManager::class);
$this->controllerMock = $this->createMock(Controller::class);
$this->reflector = $this->createMock(IControllerMethodReflector::class);
+ $this->shareManager = $this->createMock(IManager::class);
+ $this->request = $this->createMock(IRequest::class);
$this->sharingCheckMiddleware = new SharingCheckMiddleware(
'files_sharing',
$this->config,
$this->appManager,
- $this->reflector);
+ $this->reflector,
+ $this->shareManager,
+ $this->request);
}
public function testIsSharingEnabledWithAppEnabled() {
@@ -215,6 +226,9 @@ class SharingCheckMiddlewareTest extends \Test\TestCase {
}
public function testBeforeControllerWithShareControllerWithSharingEnabled() {
+
+ $share = $this->createMock(IShare::class);
+
$this->appManager
->expects($this->once())
->method('isEnabledForUser')
@@ -233,6 +247,13 @@ class SharingCheckMiddlewareTest extends \Test\TestCase {
->with('core', 'shareapi_allow_links', 'yes')
->will($this->returnValue('yes'));
+ $this->request->expects($this->once())->method('getParam')->with('token')
+ ->willReturn('token');
+ $this->shareManager->expects($this->once())->method('getShareByToken')
+ ->with('token')->willReturn($share);
+
+ $share->expects($this->once())->method('getShareType')->willReturn(\OCP\Share::SHARE_TYPE_LINK);
+
$controller = $this->createMock(ShareController::class);
$this->sharingCheckMiddleware->beforeController($controller, 'myMethod');
@@ -243,6 +264,9 @@ class SharingCheckMiddlewareTest extends \Test\TestCase {
* @expectedExceptionMessage Link sharing is disabled
*/
public function testBeforeControllerWithShareControllerWithSharingEnabledAPIDisabled() {
+
+ $share = $this->createMock(IShare::class);
+
$this->appManager
->expects($this->once())
->method('isEnabledForUser')
@@ -251,6 +275,14 @@ class SharingCheckMiddlewareTest extends \Test\TestCase {
$controller = $this->createMock(ShareController::class);
+ $this->request->expects($this->once())->method('getParam')->with('token')
+ ->willReturn('token');
+ $this->shareManager->expects($this->once())->method('getShareByToken')
+ ->with('token')->willReturn($share);
+
+ $share->expects($this->once())->method('getShareType')->willReturn(\OCP\Share::SHARE_TYPE_LINK);
+
+
$this->sharingCheckMiddleware->beforeController($controller, 'myMethod');
}
diff --git a/apps/files_trashbin/l10n/zh_CN.js b/apps/files_trashbin/l10n/zh_CN.js
index be1eeab9348..8e1d4317ca4 100644
--- a/apps/files_trashbin/l10n/zh_CN.js
+++ b/apps/files_trashbin/l10n/zh_CN.js
@@ -1,15 +1,15 @@
OC.L10N.register(
"files_trashbin",
{
- "Couldn't delete %s permanently" : "无法彻底删除文件%s",
- "Couldn't restore %s" : "无法恢复%s",
+ "Couldn't delete %s permanently" : "无法彻底删除文件 %s",
+ "Couldn't restore %s" : "无法恢复 %s",
"Deleted files" : "已删除文件",
"Restore" : "恢复",
"Delete" : "删除",
"Delete permanently" : "永久删除",
"Error" : "错误",
"This operation is forbidden" : "操作被禁止",
- "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用,请检查日志或联系管理员",
+ "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用, 请检查日志或联系管理员",
"restored" : "已恢复",
"No deleted files" : "无已删除文件",
"You will be able to recover deleted files from here" : "你可以在此处恢复已删除的文件",
diff --git a/apps/files_trashbin/l10n/zh_CN.json b/apps/files_trashbin/l10n/zh_CN.json
index 5d458254b87..b7d27ce5168 100644
--- a/apps/files_trashbin/l10n/zh_CN.json
+++ b/apps/files_trashbin/l10n/zh_CN.json
@@ -1,13 +1,13 @@
{ "translations": {
- "Couldn't delete %s permanently" : "无法彻底删除文件%s",
- "Couldn't restore %s" : "无法恢复%s",
+ "Couldn't delete %s permanently" : "无法彻底删除文件 %s",
+ "Couldn't restore %s" : "无法恢复 %s",
"Deleted files" : "已删除文件",
"Restore" : "恢复",
"Delete" : "删除",
"Delete permanently" : "永久删除",
"Error" : "错误",
"This operation is forbidden" : "操作被禁止",
- "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用,请检查日志或联系管理员",
+ "This directory is unavailable, please check the logs or contact the administrator" : "此目录不可用, 请检查日志或联系管理员",
"restored" : "已恢复",
"No deleted files" : "无已删除文件",
"You will be able to recover deleted files from here" : "你可以在此处恢复已删除的文件",
diff --git a/apps/files_versions/l10n/cs_CZ.js b/apps/files_versions/l10n/cs_CZ.js
index e833455da0b..bb1700c74fb 100644
--- a/apps/files_versions/l10n/cs_CZ.js
+++ b/apps/files_versions/l10n/cs_CZ.js
@@ -6,6 +6,7 @@ OC.L10N.register(
"Failed to revert {file} to revision {timestamp}." : "Selhalo vrácení souboru {file} na verzi {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtů"],
"Restore" : "Obnovit",
+ "No versions available" : "Nejsou dostupné žádné verze",
"More versions..." : "Více verzí...",
"No other versions available" : "Žádné další verze nejsou dostupné"
},
diff --git a/apps/files_versions/l10n/cs_CZ.json b/apps/files_versions/l10n/cs_CZ.json
index 5e79397e24f..47cc35a03fc 100644
--- a/apps/files_versions/l10n/cs_CZ.json
+++ b/apps/files_versions/l10n/cs_CZ.json
@@ -4,6 +4,7 @@
"Failed to revert {file} to revision {timestamp}." : "Selhalo vrácení souboru {file} na verzi {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtů"],
"Restore" : "Obnovit",
+ "No versions available" : "Nejsou dostupné žádné verze",
"More versions..." : "Více verzí...",
"No other versions available" : "Žádné další verze nejsou dostupné"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
diff --git a/apps/files_versions/l10n/de_DE.js b/apps/files_versions/l10n/de_DE.js
index 22a2fb3034c..4b3c9135857 100644
--- a/apps/files_versions/l10n/de_DE.js
+++ b/apps/files_versions/l10n/de_DE.js
@@ -6,7 +6,7 @@ OC.L10N.register(
"Failed to revert {file} to revision {timestamp}." : "Konnte {file} nicht auf Revision {timestamp} zurücksetzen.",
"_%n byte_::_%n bytes_" : ["%n Byte","%n Bytes"],
"Restore" : "Wiederherstellen",
- "No versions available" : "Neue Versionen verfügbar",
+ "No versions available" : "Keine Versionen verfügbar",
"More versions..." : "Weitere Versionen…",
"No other versions available" : "Keine anderen Versionen verfügbar"
},
diff --git a/apps/files_versions/l10n/de_DE.json b/apps/files_versions/l10n/de_DE.json
index 9351b4d829c..caedef871c7 100644
--- a/apps/files_versions/l10n/de_DE.json
+++ b/apps/files_versions/l10n/de_DE.json
@@ -4,7 +4,7 @@
"Failed to revert {file} to revision {timestamp}." : "Konnte {file} nicht auf Revision {timestamp} zurücksetzen.",
"_%n byte_::_%n bytes_" : ["%n Byte","%n Bytes"],
"Restore" : "Wiederherstellen",
- "No versions available" : "Neue Versionen verfügbar",
+ "No versions available" : "Keine Versionen verfügbar",
"More versions..." : "Weitere Versionen…",
"No other versions available" : "Keine anderen Versionen verfügbar"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/sharebymail/lib/ShareByMailProvider.php b/apps/sharebymail/lib/ShareByMailProvider.php
index cb013acd4de..e09ca308f31 100644
--- a/apps/sharebymail/lib/ShareByMailProvider.php
+++ b/apps/sharebymail/lib/ShareByMailProvider.php
@@ -31,6 +31,7 @@ use OCP\IDBConnection;
use OCP\IL10N;
use OCP\ILogger;
use OCP\IURLGenerator;
+use OCP\IUser;
use OCP\IUserManager;
use OCP\Mail\IMailer;
use OCP\Security\ISecureRandom;
@@ -167,14 +168,14 @@ class ShareByMailProvider implements IShareProvider {
if ($share->getShareOwner() !== $share->getSharedBy()) {
$ownerFolder = $this->rootFolder->getUserFolder($share->getShareOwner());
$fileId = $share->getNode()->getId();
- $node = $ownerFolder->getById($fileId);
- $ownerPath = $node[0]->getPath();
+ $nodes = $ownerFolder->getById($fileId);
+ $ownerPath = $nodes[0]->getPath();
$this->publishActivity(
Activity::SUBJECT_SHARED_EMAIL_BY,
[$ownerFolder->getRelativePath($ownerPath), $share->getSharedWith(), $share->getSharedBy()],
$share->getShareOwner(),
$fileId,
- $userFolder->getRelativePath($ownerPath)
+ $ownerFolder->getRelativePath($ownerPath)
);
}
@@ -240,15 +241,19 @@ class ShareByMailProvider implements IShareProvider {
}
protected function sendMailNotification($filename, $link, $owner, $initiator, $shareWith) {
+ $ownerUser = $this->userManager->get($owner);
+ $initiatorUser = $this->userManager->get($initiator);
+ $ownerDisplayName = ($ownerUser instanceof IUser) ? $ownerUser->getDisplayName() : $owner;
+ $initiatorDisplayName = ($initiatorUser instanceof IUser) ? $initiatorUser->getDisplayName() : $initiator;
if ($owner === $initiator) {
- $subject = (string)$this->l->t('%s shared »%s« with you', array($owner, $filename));
+ $subject = (string)$this->l->t('%s shared »%s« with you', array($ownerDisplayName, $filename));
} else {
- $subject = (string)$this->l->t('%s shared »%s« with you on behalf of %s', array($owner, $filename, $initiator));
+ $subject = (string)$this->l->t('%s shared »%s« with you on behalf of %s', array($ownerDisplayName, $filename, $initiatorDisplayName));
}
$message = $this->mailer->createMessage();
- $htmlBody = $this->createMailBody('mail', $filename, $link, $owner, $initiator);
- $textBody = $this->createMailBody('altmail', $filename, $link, $owner, $initiator);
+ $htmlBody = $this->createMailBody('mail', $filename, $link, $ownerDisplayName, $initiatorDisplayName);
+ $textBody = $this->createMailBody('altmail', $filename, $link, $ownerDisplayName, $initiatorDisplayName);
$message->setTo([$shareWith]);
$message->setSubject($subject);
$message->setBody($textBody, 'text/plain');
diff --git a/apps/systemtags/l10n/cs_CZ.js b/apps/systemtags/l10n/cs_CZ.js
index a58f4456d74..1cd9e4224c6 100644
--- a/apps/systemtags/l10n/cs_CZ.js
+++ b/apps/systemtags/l10n/cs_CZ.js
@@ -10,23 +10,37 @@ OC.L10N.register(
"No tags found" : "Nebyly nalezeny žádné tagy",
"Please select tags to filter by" : "Vyberte prosím tagy pro filtrování",
"No files found for the selected tags" : "Nebyly nalezeny žádné soubory s vybranými tagy",
- "<strong>System tags</strong> for a file have been modified" : "<strong>Systémové tagy</strong> souboru byly upraveny",
- "You added system tag %3$s" : "Přidal jste systémový štítek %3$s",
- "%1$s added system tag %3$s" : "%1$s přidal systémový štítek %3$s",
- "You removed system tag %3$s" : "Odstranil jste systémový tag %3$s",
- "%1$s removed system tag %3$s" : "%1$s odstranil systémový štítek %3$s",
- "You created system tag %2$s" : "Vytvořili jste systémový tag %2$s",
+ "Added system tag %1$s" : "Přidán systémový tag %1$s",
+ "Added system tag {systemtag}" : "Přidán systémový tag {systemtag}",
+ "%1$s added system tag %2$s" : "%1$s přidal(a) systémový tag %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} přidal(a) systémový tag {systemtag}",
+ "Removed system tag %1$s" : "Odstraněn systémový tag %1$s",
+ "Removed system tag {systemtag}" : "Odstraněn systémový tag {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s odstranil(a) systémový tag %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} odstranil(a) systémový tag {systemtag}",
+ "You created system tag %1$s" : "Vytvořil(a) jste systémový tag %1$s",
+ "You created system tag {systemtag}" : "Vytvořil(a) jste systémový tag {systemtag}",
"%1$s created system tag %2$s" : "%1$s vytvořil systémový tag %2$s",
- "You deleted system tag %2$s" : "Smazali jste systémový tag %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} vytvořil(a) systémový tag {systemtag}",
+ "You deleted system tag %1$s" : "Odstranil(a) jste systémový tag %1$s",
+ "You deleted system tag {systemtag}" : "Odstranil(a) jste systémový tag {systemtag}",
"%1$s deleted system tag %2$s" : "%1$s smazal systémový tag %2$s",
- "You updated system tag %3$s to %2$s" : "Aktualizovali jste systémový tag %3$s na %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} odstranil(a) systémový tag {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Aktualizoval(a) jste systémový tag %2$s na %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Aktualizoval(a) jste systémový tag {oldsystemtag} na {newsystemtag}",
"%1$s updated system tag %3$s to %2$s" : "%1$s aktualizoval systémový tag %3$s na %2$s",
- "You added system tag %3$s to %2$s" : "K %2$s jste přidal systémový štítek %3$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} aktualizoval(a) systémový tag {oldsystemtag} na { newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Přidal(a) jste systémový tag %2$s k %1$s",
+ "You added system tag {systemtag} to {file}" : "K {file} jste přidal(a) systémový tag {systemtag}",
"%1$s added system tag %3$s to %2$s" : "%1$s k %2$s přidal systémový štítek %3$s",
- "You removed system tag %3$s from %2$s" : "Z %2$s jste odstranil systémový štítek %3$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} přidal(a) systémový tag {systemtag} k {file}",
+ "You removed system tag %2$s from %1$s" : "Z %2$s jste odstranil(a) systémový tag %1$s",
+ "You removed system tag {systemtag} from {file}" : "Z {file} jste odstranil(a) systémový tag {systemtag}",
"%1$s removed system tag %3$s from %2$s" : "%1$s odstranil systémový štítek %3$s z %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} odstranil(a) systémotý tag {systemtag} z {file}",
"%s (restricted)" : "%s (omezeno)",
"%s (invisible)" : "%s (neviditelný)",
+ "<strong>System tags</strong> for a file have been modified" : "<strong>Systémové tagy</strong> souboru byly upraveny",
"Collaborative tags" : "Značky pro spolupráci",
"Name" : "Název",
"Delete" : "Smazat",
@@ -42,10 +56,12 @@ OC.L10N.register(
"%1$s assigned system tag %3$s" : "%1$s přiřadil systémový tag %3$s",
"You unassigned system tag %3$s" : "Odebrali jste systémový tag %3$s",
"%1$s unassigned system tag %3$s" : "%1$s odebral systémový tag %3$s",
+ "You created system tag %2$s" : "Vytvořili jste systémový tag %2$s",
+ "You deleted system tag %2$s" : "Smazali jste systémový tag %2$s",
+ "You updated system tag %3$s to %2$s" : "Aktualizovali jste systémový tag %3$s na %2$s",
"You assigned system tag %3$s to %2$s" : "Přiřadili jste systémový tag %3$s na %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s přiřadil systémový tag %3$s na %2$s",
"You unassigned system tag %3$s from %2$s" : "Odebrali jste systémový tag %3$s z %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s odebral systémový tag %3$s ze %2$s",
- "%s (not-assignable)" : "%s (nepřiřaditelné)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s odebral systémový tag %3$s ze %2$s"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/systemtags/l10n/cs_CZ.json b/apps/systemtags/l10n/cs_CZ.json
index 4c431198836..4f37860393e 100644
--- a/apps/systemtags/l10n/cs_CZ.json
+++ b/apps/systemtags/l10n/cs_CZ.json
@@ -8,23 +8,37 @@
"No tags found" : "Nebyly nalezeny žádné tagy",
"Please select tags to filter by" : "Vyberte prosím tagy pro filtrování",
"No files found for the selected tags" : "Nebyly nalezeny žádné soubory s vybranými tagy",
- "<strong>System tags</strong> for a file have been modified" : "<strong>Systémové tagy</strong> souboru byly upraveny",
- "You added system tag %3$s" : "Přidal jste systémový štítek %3$s",
- "%1$s added system tag %3$s" : "%1$s přidal systémový štítek %3$s",
- "You removed system tag %3$s" : "Odstranil jste systémový tag %3$s",
- "%1$s removed system tag %3$s" : "%1$s odstranil systémový štítek %3$s",
- "You created system tag %2$s" : "Vytvořili jste systémový tag %2$s",
+ "Added system tag %1$s" : "Přidán systémový tag %1$s",
+ "Added system tag {systemtag}" : "Přidán systémový tag {systemtag}",
+ "%1$s added system tag %2$s" : "%1$s přidal(a) systémový tag %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} přidal(a) systémový tag {systemtag}",
+ "Removed system tag %1$s" : "Odstraněn systémový tag %1$s",
+ "Removed system tag {systemtag}" : "Odstraněn systémový tag {systemtag}",
+ "%1$s removed system tag %2$s" : "%1$s odstranil(a) systémový tag %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} odstranil(a) systémový tag {systemtag}",
+ "You created system tag %1$s" : "Vytvořil(a) jste systémový tag %1$s",
+ "You created system tag {systemtag}" : "Vytvořil(a) jste systémový tag {systemtag}",
"%1$s created system tag %2$s" : "%1$s vytvořil systémový tag %2$s",
- "You deleted system tag %2$s" : "Smazali jste systémový tag %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} vytvořil(a) systémový tag {systemtag}",
+ "You deleted system tag %1$s" : "Odstranil(a) jste systémový tag %1$s",
+ "You deleted system tag {systemtag}" : "Odstranil(a) jste systémový tag {systemtag}",
"%1$s deleted system tag %2$s" : "%1$s smazal systémový tag %2$s",
- "You updated system tag %3$s to %2$s" : "Aktualizovali jste systémový tag %3$s na %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} odstranil(a) systémový tag {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Aktualizoval(a) jste systémový tag %2$s na %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Aktualizoval(a) jste systémový tag {oldsystemtag} na {newsystemtag}",
"%1$s updated system tag %3$s to %2$s" : "%1$s aktualizoval systémový tag %3$s na %2$s",
- "You added system tag %3$s to %2$s" : "K %2$s jste přidal systémový štítek %3$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} aktualizoval(a) systémový tag {oldsystemtag} na { newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Přidal(a) jste systémový tag %2$s k %1$s",
+ "You added system tag {systemtag} to {file}" : "K {file} jste přidal(a) systémový tag {systemtag}",
"%1$s added system tag %3$s to %2$s" : "%1$s k %2$s přidal systémový štítek %3$s",
- "You removed system tag %3$s from %2$s" : "Z %2$s jste odstranil systémový štítek %3$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} přidal(a) systémový tag {systemtag} k {file}",
+ "You removed system tag %2$s from %1$s" : "Z %2$s jste odstranil(a) systémový tag %1$s",
+ "You removed system tag {systemtag} from {file}" : "Z {file} jste odstranil(a) systémový tag {systemtag}",
"%1$s removed system tag %3$s from %2$s" : "%1$s odstranil systémový štítek %3$s z %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} odstranil(a) systémotý tag {systemtag} z {file}",
"%s (restricted)" : "%s (omezeno)",
"%s (invisible)" : "%s (neviditelný)",
+ "<strong>System tags</strong> for a file have been modified" : "<strong>Systémové tagy</strong> souboru byly upraveny",
"Collaborative tags" : "Značky pro spolupráci",
"Name" : "Název",
"Delete" : "Smazat",
@@ -40,10 +54,12 @@
"%1$s assigned system tag %3$s" : "%1$s přiřadil systémový tag %3$s",
"You unassigned system tag %3$s" : "Odebrali jste systémový tag %3$s",
"%1$s unassigned system tag %3$s" : "%1$s odebral systémový tag %3$s",
+ "You created system tag %2$s" : "Vytvořili jste systémový tag %2$s",
+ "You deleted system tag %2$s" : "Smazali jste systémový tag %2$s",
+ "You updated system tag %3$s to %2$s" : "Aktualizovali jste systémový tag %3$s na %2$s",
"You assigned system tag %3$s to %2$s" : "Přiřadili jste systémový tag %3$s na %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s přiřadil systémový tag %3$s na %2$s",
"You unassigned system tag %3$s from %2$s" : "Odebrali jste systémový tag %3$s z %2$s",
- "%1$s unassigned system tag %3$s from %2$s" : "%1$s odebral systémový tag %3$s ze %2$s",
- "%s (not-assignable)" : "%s (nepřiřaditelné)"
+ "%1$s unassigned system tag %3$s from %2$s" : "%1$s odebral systémový tag %3$s ze %2$s"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/theming/lib/Controller/ThemingController.php b/apps/theming/lib/Controller/ThemingController.php
index 73e3ed3a4b4..24ac1c7d8d5 100644
--- a/apps/theming/lib/Controller/ThemingController.php
+++ b/apps/theming/lib/Controller/ThemingController.php
@@ -374,6 +374,7 @@ class ThemingController extends Controller {
';
$responseCss .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color);
$responseCss .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color);
+ $responseCss .= sprintf('#app-navigation li:hover > a, #app-navigation li:focus > a, #app-navigation a:focus, #app-navigation .selected, #app-navigation .selected a, #app-navigation .active, #app-navigation .active a {box-shadow: inset 2px 0 %s}' . "\n", $color);
}
$logo = $this->config->getAppValue($this->appName, 'logoMime');
@@ -445,8 +446,7 @@ class ThemingController extends Controller {
cacheBuster: ' . json_encode($cacheBusterValue). '
};
})();';
- $response = new Http\DataDisplayResponse($responseJS);
- $response->addHeader('Content-type', 'text/javascript');
+ $response = new DataDownloadResponse($responseJS, 'javascript', 'text/javascript');
$response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime()));
$response->addHeader('Pragma', 'cache');
$response->cacheFor(3600);
diff --git a/apps/theming/tests/Controller/ThemingControllerTest.php b/apps/theming/tests/Controller/ThemingControllerTest.php
index d42e5afb245..97a5e985860 100644
--- a/apps/theming/tests/Controller/ThemingControllerTest.php
+++ b/apps/theming/tests/Controller/ThemingControllerTest.php
@@ -487,6 +487,7 @@ class ThemingControllerTest extends TestCase {
';
$expectedData .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color);
$expectedData .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color);
+ $expectedData .= sprintf('#app-navigation li:hover > a, #app-navigation li:focus > a, #app-navigation a:focus, #app-navigation .selected, #app-navigation .selected a, #app-navigation .active, #app-navigation .active a {box-shadow: inset 2px 0 %s}' . "\n", $color);
$expectedData .= '.nc-theming-contrast {color: #ffffff}' . "\n";
$expectedData .= '.icon-file,.icon-filetype-text {' .
'background-image: url(\'./img/core/filetypes/text.svg?v=0\');' . "}\n" .
@@ -581,6 +582,7 @@ class ThemingControllerTest extends TestCase {
';
$expectedData .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color);
$expectedData .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color);
+ $expectedData .= sprintf('#app-navigation li:hover > a, #app-navigation li:focus > a, #app-navigation a:focus, #app-navigation .selected, #app-navigation .selected a, #app-navigation .active, #app-navigation .active a {box-shadow: inset 2px 0 %s}' . "\n", $color);
$expectedData .= '#header .header-appname, #expandDisplayName { color: #000000; }' . "\n";
$expectedData .= '#header .icon-caret { background-image: url(\'' . \OC::$WEBROOT . '/core/img/actions/caret-dark.svg\'); }' . "\n";
$expectedData .= '.searchbox input[type="search"] { background: transparent url(\'' . \OC::$WEBROOT . '/core/img/actions/search.svg\') no-repeat 6px center; color: #000; }' . "\n";
@@ -768,6 +770,7 @@ class ThemingControllerTest extends TestCase {
';
$expectedData .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color);
$expectedData .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color);
+ $expectedData .= sprintf('#app-navigation li:hover > a, #app-navigation li:focus > a, #app-navigation a:focus, #app-navigation .selected, #app-navigation .selected a, #app-navigation .active, #app-navigation .active a {box-shadow: inset 2px 0 %s}' . "\n", $color);
$expectedData .= sprintf(
'#header .logo {' .
'background-image: url(\'./logo?v=0\');' .
@@ -879,6 +882,7 @@ class ThemingControllerTest extends TestCase {
';
$expectedData .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color);
$expectedData .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color);
+ $expectedData .= sprintf('#app-navigation li:hover > a, #app-navigation li:focus > a, #app-navigation a:focus, #app-navigation .selected, #app-navigation .selected a, #app-navigation .active, #app-navigation .active a {box-shadow: inset 2px 0 %s}' . "\n", $color);
$expectedData .= sprintf(
'#header .logo {' .
'background-image: url(\'./logo?v=0\');' .
@@ -910,7 +914,6 @@ class ThemingControllerTest extends TestCase {
'background-image: url(\'./img/core/filetypes/folder.svg?v=0\');' . "}\n" .
'.icon-filetype-folder-drag-accept {' .
'background-image: url(\'./img/core/filetypes/folder-drag-accept.svg?v=0\')!important;' . "}\n";
- $expected = new Http\DataDownloadResponse($expectedData, 'style', 'text/css');
$expected = new Http\DataDownloadResponse($expectedData, 'style', 'text/css');
$expected->cacheFor(3600);
@@ -948,8 +951,7 @@ class ThemingControllerTest extends TestCase {
cacheBuster: null
};
})();';
- $expected = new Http\DataDisplayResponse($expectedResponse);
- $expected->addHeader("Content-type","text/javascript");
+ $expected = new Http\DataDownloadResponse($expectedResponse, 'javascript', 'text/javascript');
$expected->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime()));
$expected->addHeader('Pragma', 'cache');
$expected->cacheFor(3600);
@@ -983,8 +985,7 @@ class ThemingControllerTest extends TestCase {
cacheBuster: null
};
})();';
- $expected = new Http\DataDisplayResponse($expectedResponse);
- $expected->addHeader("Content-type","text/javascript");
+ $expected = new Http\DataDownloadResponse($expectedResponse, 'javascript', 'text/javascript');
$expected->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime()));
$expected->addHeader('Pragma', 'cache');
$expected->cacheFor(3600);
diff --git a/apps/twofactor_backupcodes/appinfo/app.php b/apps/twofactor_backupcodes/appinfo/app.php
index 31f9b6b8eae..0cb10531360 100644
--- a/apps/twofactor_backupcodes/appinfo/app.php
+++ b/apps/twofactor_backupcodes/appinfo/app.php
@@ -19,4 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
+
+// @codeCoverageIgnoreStart
OC_App::registerPersonal('twofactor_backupcodes', 'settings/personal');
+// @codeCoverageIgnoreEnd
diff --git a/apps/twofactor_backupcodes/appinfo/routes.php b/apps/twofactor_backupcodes/appinfo/routes.php
index f2af12e9b45..0119bfd0b08 100644
--- a/apps/twofactor_backupcodes/appinfo/routes.php
+++ b/apps/twofactor_backupcodes/appinfo/routes.php
@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
+// @codeCoverageIgnoreStart
return [
'routes' => [
[
@@ -33,3 +34,4 @@ return [
],
]
];
+// @codeCoverageIgnoreEnd
diff --git a/apps/twofactor_backupcodes/l10n/cs_CZ.js b/apps/twofactor_backupcodes/l10n/cs_CZ.js
index 346fc3ab1ca..126b5b20ec1 100644
--- a/apps/twofactor_backupcodes/l10n/cs_CZ.js
+++ b/apps/twofactor_backupcodes/l10n/cs_CZ.js
@@ -10,6 +10,10 @@ OC.L10N.register(
"If you regenerate backup codes, you automatically invalidate old codes." : "Pokud vytvoříte nové záložní kódy, staré budou automaticky zrušeny.",
"An error occurred while generating your backup codes" : "Při pokusu o vytvoření záložních kódů nastala chyba.",
"Nextcloud backup codes" : "Nextcloud záložní kódy",
+ "Two-factor authentication" : "Dvoufázová autentizace",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Úspěšně jste se přihlásil(a) pomocí dvoufázové autentizace (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Pokus o přihlášení s použitím dvoufázové autentizace selhal (%1$s)",
+ "You created two-factor backup codes for your account" : "Vytvořil(a) jste záložní kódy dvoufázové autentizace pro váš účet",
"Backup code" : "Záložní kód",
"Use backup code" : "Použít záložní kód",
"Second-factor backup codes" : "Dvoufázové záložní kódy"
diff --git a/apps/twofactor_backupcodes/l10n/cs_CZ.json b/apps/twofactor_backupcodes/l10n/cs_CZ.json
index a397a5ba8db..98005f8e6ee 100644
--- a/apps/twofactor_backupcodes/l10n/cs_CZ.json
+++ b/apps/twofactor_backupcodes/l10n/cs_CZ.json
@@ -8,6 +8,10 @@
"If you regenerate backup codes, you automatically invalidate old codes." : "Pokud vytvoříte nové záložní kódy, staré budou automaticky zrušeny.",
"An error occurred while generating your backup codes" : "Při pokusu o vytvoření záložních kódů nastala chyba.",
"Nextcloud backup codes" : "Nextcloud záložní kódy",
+ "Two-factor authentication" : "Dvoufázová autentizace",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Úspěšně jste se přihlásil(a) pomocí dvoufázové autentizace (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Pokus o přihlášení s použitím dvoufázové autentizace selhal (%1$s)",
+ "You created two-factor backup codes for your account" : "Vytvořil(a) jste záložní kódy dvoufázové autentizace pro váš účet",
"Backup code" : "Záložní kód",
"Use backup code" : "Použít záložní kód",
"Second-factor backup codes" : "Dvoufázové záložní kódy"
diff --git a/apps/twofactor_backupcodes/l10n/de.js b/apps/twofactor_backupcodes/l10n/de.js
index 96e1fca0759..039b8bea68b 100644
--- a/apps/twofactor_backupcodes/l10n/de.js
+++ b/apps/twofactor_backupcodes/l10n/de.js
@@ -13,7 +13,7 @@ OC.L10N.register(
"Two-factor authentication" : "Zwei-Faktor Authentifizierung",
"You successfully logged in using two-factor authentication (%1$s)" : "Erfolgreich mittels Zwei-Faktorauthentifizierung angemeldet (%1$s)",
"A login attempt using two-factor authentication failed (%1$s)" : "Ein Anmeldeversuch mittels Zwei-Faktorauthentifizierung gescheitert (%1$s)",
- "You created two-factor backup codes for your account" : "Du hast Zwei-Faktor Sicherungs-Codes für Ihr Konto erstellt",
+ "You created two-factor backup codes for your account" : "Du hast Zwei-Faktor Sicherungs-Codes für Dein Konto erstellt",
"Backup code" : "Backup-Code",
"Use backup code" : "Backup-Code verwenden",
"Second-factor backup codes" : "Zweitfaktor-Backup-Codes"
diff --git a/apps/twofactor_backupcodes/l10n/de.json b/apps/twofactor_backupcodes/l10n/de.json
index 6f582fc8bf0..6afdfa52ac4 100644
--- a/apps/twofactor_backupcodes/l10n/de.json
+++ b/apps/twofactor_backupcodes/l10n/de.json
@@ -11,7 +11,7 @@
"Two-factor authentication" : "Zwei-Faktor Authentifizierung",
"You successfully logged in using two-factor authentication (%1$s)" : "Erfolgreich mittels Zwei-Faktorauthentifizierung angemeldet (%1$s)",
"A login attempt using two-factor authentication failed (%1$s)" : "Ein Anmeldeversuch mittels Zwei-Faktorauthentifizierung gescheitert (%1$s)",
- "You created two-factor backup codes for your account" : "Du hast Zwei-Faktor Sicherungs-Codes für Ihr Konto erstellt",
+ "You created two-factor backup codes for your account" : "Du hast Zwei-Faktor Sicherungs-Codes für Dein Konto erstellt",
"Backup code" : "Backup-Code",
"Use backup code" : "Backup-Code verwenden",
"Second-factor backup codes" : "Zweitfaktor-Backup-Codes"
diff --git a/apps/twofactor_backupcodes/lib/Activity/Provider.php b/apps/twofactor_backupcodes/lib/Activity/Provider.php
index cfb16c9f8d3..9c7aaeae630 100644
--- a/apps/twofactor_backupcodes/lib/Activity/Provider.php
+++ b/apps/twofactor_backupcodes/lib/Activity/Provider.php
@@ -40,6 +40,11 @@ class Provider implements IProvider {
/** @var ILogger */
private $logger;
+ /**
+ * @param L10nFactory $l10n
+ * @param IURLGenerator $urlGenerator
+ * @param ILogger $logger
+ */
public function __construct(L10nFactory $l10n, IURLGenerator $urlGenerator, ILogger $logger) {
$this->logger = $logger;
$this->urlGenerator = $urlGenerator;
diff --git a/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php b/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php
index f64e2e9e60b..85cc174fb6a 100644
--- a/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php
+++ b/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php
@@ -22,7 +22,6 @@
namespace OCA\TwoFactorBackupCodes\Db;
use OCP\AppFramework\Db\Mapper;
-use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDBConnection;
use OCP\IUser;
diff --git a/apps/twofactor_backupcodes/lib/Service/BackupCodeStorage.php b/apps/twofactor_backupcodes/lib/Service/BackupCodeStorage.php
index ecb16305e92..1cf62d18801 100644
--- a/apps/twofactor_backupcodes/lib/Service/BackupCodeStorage.php
+++ b/apps/twofactor_backupcodes/lib/Service/BackupCodeStorage.php
@@ -33,6 +33,8 @@ use OCP\Security\ISecureRandom;
class BackupCodeStorage {
+ private static $CODE_LENGTH = 16;
+
/** @var BackupCodeMapper */
private $mapper;
@@ -48,6 +50,13 @@ class BackupCodeStorage {
/** @var ILogger */
private $logger;
+ /**
+ * @param BackupCodeMapper $mapper
+ * @param ISecureRandom $random
+ * @param IHasher $hasher
+ * @param IManager $activityManager
+ * @param ILogger $logger
+ */
public function __construct(BackupCodeMapper $mapper, ISecureRandom $random, IHasher $hasher,
IManager $activityManager, ILogger $logger) {
$this->mapper = $mapper;
@@ -69,7 +78,7 @@ class BackupCodeStorage {
$uid = $user->getUID();
foreach (range(1, min([$number, 20])) as $i) {
- $code = $this->random->generate(10, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789');
+ $code = $this->random->generate(self::$CODE_LENGTH, ISecureRandom::CHAR_UPPER . ISecureRandom::CHAR_DIGITS);
$dbCode = new BackupCode();
$dbCode->setUserId($uid);
diff --git a/apps/twofactor_backupcodes/settings/personal.php b/apps/twofactor_backupcodes/settings/personal.php
index 037516e39a3..0a018c0ff28 100644
--- a/apps/twofactor_backupcodes/settings/personal.php
+++ b/apps/twofactor_backupcodes/settings/personal.php
@@ -1,5 +1,6 @@
<?php
-
+// @codeCoverageIgnoreStart
$tmpl = new \OCP\Template('twofactor_backupcodes', 'personal');
return $tmpl->fetchPage();
+// @codeCoverageIgnoreEnd
diff --git a/apps/twofactor_backupcodes/tests/Unit/Activity/GenericProviderTest.php b/apps/twofactor_backupcodes/tests/Unit/Activity/GenericProviderTest.php
new file mode 100644
index 00000000000..242c4ab4e8d
--- /dev/null
+++ b/apps/twofactor_backupcodes/tests/Unit/Activity/GenericProviderTest.php
@@ -0,0 +1,132 @@
+<?php
+
+/**
+ * @author Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * Two-factor backup codes
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * 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, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\TwoFactorBackupCodes\Test\Unit\Activity;
+
+use InvalidArgumentException;
+use OCA\TwoFactorBackupCodes\Activity\GenericProvider;
+use OCP\Activity\IEvent;
+use OCP\IL10N;
+use OCP\ILogger;
+use OCP\IURLGenerator;
+use OCP\L10N\IFactory;
+use PHPUnit_Framework_MockObject_MockObject;
+use Test\TestCase;
+
+class GenericProviderTest extends TestCase {
+
+ /** @var IL10N|PHPUnit_Framework_MockObject_MockObject */
+ private $l10n;
+
+ /** @var IURLGenerator|PHPUnit_Framework_MockObject_MockObject */
+ private $urlGenerator;
+
+ /** @var ILogger|PHPUnit_Framework_MockObject_MockObject */
+ private $logger;
+
+ /** @var GenericProvider */
+ private $provider;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->l10n = $this->createMock(IFactory::class);
+ $this->urlGenerator = $this->createMock(IURLGenerator::class);
+ $this->logger = $this->createMock(ILogger::class);
+
+ $this->provider = new GenericProvider($this->l10n, $this->urlGenerator, $this->logger);
+ }
+
+ public function testParseUnrelated() {
+ $lang = 'ru';
+ $event = $this->createMock(IEvent::class);
+ $event->expects($this->once())
+ ->method('getType')
+ ->willReturn('comments');
+ $this->setExpectedException(InvalidArgumentException::class);
+
+ $this->provider->parse($lang, $event);
+ }
+
+ public function subjectData() {
+ return [
+ ['twofactor_success'],
+ ['twofactor_failed'],
+ ];
+ }
+
+ /**
+ * @dataProvider subjectData
+ */
+ public function testParse($subject) {
+ $lang = 'ru';
+ $event = $this->createMock(IEvent::class);
+ $l = $this->createMock(IL10N::class);
+
+ $event->expects($this->once())
+ ->method('getType')
+ ->willReturn('twofactor');
+ $this->l10n->expects($this->once())
+ ->method('get')
+ ->with('core', $lang)
+ ->willReturn($l);
+ $this->urlGenerator->expects($this->once())
+ ->method('imagePath')
+ ->with('core', 'actions/password.svg')
+ ->willReturn('path/to/image');
+ $this->urlGenerator->expects($this->once())
+ ->method('getAbsoluteURL')
+ ->with('path/to/image')
+ ->willReturn('absolute/path/to/image');
+ $event->expects($this->once())
+ ->method('setIcon')
+ ->with('absolute/path/to/image');
+ $event->expects($this->once())
+ ->method('getSubject')
+ ->willReturn($subject);
+ $event->expects($this->once())
+ ->method('setParsedSubject');
+
+ $this->provider->parse($lang, $event);
+ }
+
+ public function testParseInvalidSubject() {
+ $lang = 'ru';
+ $l = $this->createMock(IL10N::class);
+ $event = $this->createMock(IEvent::class);
+
+ $event->expects($this->once())
+ ->method('getType')
+ ->willReturn('twofactor');
+ $this->l10n->expects($this->once())
+ ->method('get')
+ ->with('core', $lang)
+ ->willReturn($l);
+ $event->expects($this->once())
+ ->method('getSubject')
+ ->willReturn('unrelated');
+
+ $this->expectException(InvalidArgumentException::class);
+ $this->provider->parse($lang, $event);
+ }
+
+}
diff --git a/apps/twofactor_backupcodes/tests/Unit/Activity/ProviderTest.php b/apps/twofactor_backupcodes/tests/Unit/Activity/ProviderTest.php
index 36e85ec1872..e1a13c89c10 100644
--- a/apps/twofactor_backupcodes/tests/Unit/Activity/ProviderTest.php
+++ b/apps/twofactor_backupcodes/tests/Unit/Activity/ProviderTest.php
@@ -2,7 +2,7 @@
/**
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
- * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @copyright Copyright (c) 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
*
* Two-factor backup codes
*
@@ -23,21 +23,27 @@
namespace OCA\TwoFactorBackupCodes\Test\Unit\Activity;
use InvalidArgumentException;
-use OCA\TwoFactorBackupCodes\Activity\GenericProvider;
+use OCA\TwoFactorBackupCodes\Activity\Provider;
use OCP\Activity\IEvent;
use OCP\IL10N;
use OCP\ILogger;
use OCP\IURLGenerator;
use OCP\L10N\IFactory;
+use PHPUnit_Framework_MockObject_MockObject;
use Test\TestCase;
class ProviderTest extends TestCase {
+ /** @var IL10N|PHPUnit_Framework_MockObject_MockObject */
private $l10n;
+
+ /** @var IURLGenerator|PHPUnit_Framework_MockObject_MockObject */
private $urlGenerator;
+
+ /** @var ILogger|PHPUnit_Framework_MockObject_MockObject */
private $logger;
- /** @var GenericProvider */
+ /** @var Provider */
private $provider;
protected function setUp() {
@@ -47,15 +53,15 @@ class ProviderTest extends TestCase {
$this->urlGenerator = $this->createMock(IURLGenerator::class);
$this->logger = $this->createMock(ILogger::class);
- $this->provider = new GenericProvider($this->l10n, $this->urlGenerator, $this->logger);
+ $this->provider = new Provider($this->l10n, $this->urlGenerator, $this->logger);
}
public function testParseUnrelated() {
$lang = 'ru';
$event = $this->createMock(IEvent::class);
$event->expects($this->once())
- ->method('getType')
- ->will($this->returnValue('comments'));
+ ->method('getApp')
+ ->willReturn('comments');
$this->setExpectedException(InvalidArgumentException::class);
$this->provider->parse($lang, $event);
@@ -63,8 +69,7 @@ class ProviderTest extends TestCase {
public function subjectData() {
return [
- ['twofactor_success'],
- ['twofactor_failed'],
+ ['codes_generated'],
];
}
@@ -77,30 +82,50 @@ class ProviderTest extends TestCase {
$l = $this->createMock(IL10N::class);
$event->expects($this->once())
- ->method('getType')
- ->will($this->returnValue('twofactor'));
+ ->method('getApp')
+ ->willReturn('twofactor_backupcodes');
$this->l10n->expects($this->once())
->method('get')
- ->with('core', $lang)
- ->will($this->returnValue($l));
+ ->with('twofactor_backupcodes', $lang)
+ ->willReturn($l);
$this->urlGenerator->expects($this->once())
->method('imagePath')
->with('core', 'actions/password.svg')
- ->will($this->returnValue('path/to/image'));
+ ->willReturn('path/to/image');
$this->urlGenerator->expects($this->once())
->method('getAbsoluteURL')
->with('path/to/image')
- ->will($this->returnValue('absolute/path/to/image'));
+ ->willReturn('absolute/path/to/image');
$event->expects($this->once())
->method('setIcon')
->with('absolute/path/to/image');
$event->expects($this->once())
->method('getSubject')
- ->will($this->returnValue($subject));
+ ->willReturn($subject);
$event->expects($this->once())
->method('setParsedSubject');
$this->provider->parse($lang, $event);
}
+ public function testParseInvalidSubject() {
+ $lang = 'ru';
+ $l = $this->createMock(IL10N::class);
+ $event = $this->createMock(IEvent::class);
+
+ $event->expects($this->once())
+ ->method('getApp')
+ ->willReturn('twofactor_backupcodes');
+ $this->l10n->expects($this->once())
+ ->method('get')
+ ->with('twofactor_backupcodes', $lang)
+ ->willReturn($l);
+ $event->expects($this->once())
+ ->method('getSubject')
+ ->willReturn('unrelated');
+
+ $this->expectException(InvalidArgumentException::class);
+ $this->provider->parse($lang, $event);
+ }
+
}
diff --git a/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php b/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php
index 54738f74600..109db7f688c 100644
--- a/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php
+++ b/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php
@@ -31,23 +31,24 @@ use OCP\ILogger;
use OCP\IUser;
use OCP\Security\IHasher;
use OCP\Security\ISecureRandom;
+use PHPUnit_Framework_MockObject_MockObject;
use Test\TestCase;
class BackupCodeStorageTest extends TestCase {
- /** @var BackupCodeMapper|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var BackupCodeMapper|PHPUnit_Framework_MockObject_MockObject */
private $mapper;
- /** @var ISecureRandom|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var ISecureRandom|PHPUnit_Framework_MockObject_MockObject */
private $random;
- /** @var IHasher|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var IHasher|PHPUnit_Framework_MockObject_MockObject */
private $hasher;
- /** @var IManager|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var IManager|PHPUnit_Framework_MockObject_MockObject */
private $activityManager;
- /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var ILogger|PHPUnit_Framework_MockObject_MockObject */
private $logger;
/** @var BackupCodeStorage */
@@ -56,11 +57,9 @@ class BackupCodeStorageTest extends TestCase {
protected function setUp() {
parent::setUp();
- $this->mapper = $this->getMockBuilder(BackupCodeMapper::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->random = $this->getMockBuilder(ISecureRandom::class)->getMock();
- $this->hasher = $this->getMockBuilder(IHasher::class)->getMock();
+ $this->mapper = $this->createMock(BackupCodeMapper::class);
+ $this->random = $this->createMock(ISecureRandom::class);
+ $this->hasher = $this->createMock(IHasher::class);
$this->activityManager = $this->createMock(IManager::class);
$this->logger = $this->createMock(ILogger::class);
@@ -68,7 +67,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testCreateCodes() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$number = 5;
$event = $this->createMock(IEvent::class);
@@ -77,7 +76,7 @@ class BackupCodeStorageTest extends TestCase {
->will($this->returnValue('fritz'));
$this->random->expects($this->exactly($number))
->method('generate')
- ->with(10, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
+ ->with(16, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
->will($this->returnValue('CODEABCDEF'));
$this->hasher->expects($this->exactly($number))
->method('hash')
@@ -121,7 +120,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testHasBackupCodes() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$codes = [
new BackupCode(),
new BackupCode(),
@@ -136,7 +135,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testHasBackupCodesNoCodes() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$codes = [];
$this->mapper->expects($this->once())
@@ -148,7 +147,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testGetBackupCodeState() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$code1 = new BackupCode();
$code1->setUsed(1);
@@ -173,7 +172,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testGetBackupCodeDisabled() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$codes = [];
@@ -191,7 +190,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testValidateCode() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$code = new BackupCode();
$code->setUsed(0);
$code->setCode('HASHEDVALUE');
@@ -217,7 +216,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testValidateUsedCode() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$code = new BackupCode();
$code->setUsed('1');
$code->setCode('HASHEDVALUE');
@@ -238,7 +237,7 @@ class BackupCodeStorageTest extends TestCase {
}
public function testValidateCodeWithWrongHash() {
- $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user = $this->createMock(IUser::class);
$code = new BackupCode();
$code->setUsed(0);
$code->setCode('HASHEDVALUE');
diff --git a/apps/updatenotification/l10n/cs_CZ.js b/apps/updatenotification/l10n/cs_CZ.js
index e155238cb85..b8fcc5a8e92 100644
--- a/apps/updatenotification/l10n/cs_CZ.js
+++ b/apps/updatenotification/l10n/cs_CZ.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"Channel updated" : "Kanál aktualizován",
"Update to %1$s is available." : "Je dostupná aktualizace na %1$s.",
"Update for %1$s to version %2$s is available." : "Je dostupná aktualizace pro %1$s na verzi %2$s.",
+ "Update for {app} to version %s is available." : "Pro {app} je dostupná aktualizace na verzi %s.",
"A new version is available: %s" : "Je dostupná nová verze: %s",
"Open updater" : "Otevřít aktualizátor",
"Download now" : "Stáhnout nyní",
@@ -17,6 +18,7 @@ OC.L10N.register(
"Notify members of the following groups about available updates:" : "Upozorňovat členy následujících skupin na dostupné aktualizace:",
"Only notification for app updates are available." : "Je možné pouze upozornění na dostupné aktualizace aplikací.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Zvolený kanál aktualizací označuje dedikovaná upozornění pro server za zastaralá.",
- "The selected update channel does not support updates of the server." : "Vybraný kanál aktualizací nepodporuje aktualizace serveru."
+ "The selected update channel does not support updates of the server." : "Vybraný kanál aktualizací nepodporuje aktualizace serveru.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Provozujete PHP %s. Abyste mohl provozovat Nextcloud 11 a vyšší, musíte mít aspoň PHP 5.6. Přijímat oznámení o těchto novějších verzích budete moct až po aktualizaci verze PHP."
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/updatenotification/l10n/cs_CZ.json b/apps/updatenotification/l10n/cs_CZ.json
index 8fea09b7524..cdb176f8d0f 100644
--- a/apps/updatenotification/l10n/cs_CZ.json
+++ b/apps/updatenotification/l10n/cs_CZ.json
@@ -5,6 +5,7 @@
"Channel updated" : "Kanál aktualizován",
"Update to %1$s is available." : "Je dostupná aktualizace na %1$s.",
"Update for %1$s to version %2$s is available." : "Je dostupná aktualizace pro %1$s na verzi %2$s.",
+ "Update for {app} to version %s is available." : "Pro {app} je dostupná aktualizace na verzi %s.",
"A new version is available: %s" : "Je dostupná nová verze: %s",
"Open updater" : "Otevřít aktualizátor",
"Download now" : "Stáhnout nyní",
@@ -15,6 +16,7 @@
"Notify members of the following groups about available updates:" : "Upozorňovat členy následujících skupin na dostupné aktualizace:",
"Only notification for app updates are available." : "Je možné pouze upozornění na dostupné aktualizace aplikací.",
"The selected update channel makes dedicated notifications for the server obsolete." : "Zvolený kanál aktualizací označuje dedikovaná upozornění pro server za zastaralá.",
- "The selected update channel does not support updates of the server." : "Vybraný kanál aktualizací nepodporuje aktualizace serveru."
+ "The selected update channel does not support updates of the server." : "Vybraný kanál aktualizací nepodporuje aktualizace serveru.",
+ "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Provozujete PHP %s. Abyste mohl provozovat Nextcloud 11 a vyšší, musíte mít aspoň PHP 5.6. Přijímat oznámení o těchto novějších verzích budete moct až po aktualizaci verze PHP."
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/updatenotification/lib/Notification/BackgroundJob.php b/apps/updatenotification/lib/Notification/BackgroundJob.php
index 7bcc0e86905..83a9bdb599a 100644
--- a/apps/updatenotification/lib/Notification/BackgroundJob.php
+++ b/apps/updatenotification/lib/Notification/BackgroundJob.php
@@ -30,8 +30,6 @@ use OCP\Http\Client\IClientService;
use OCP\IConfig;
use OCP\IGroup;
use OCP\IGroupManager;
-use OCP\IURLGenerator;
-use OCP\IUser;
use OCP\Notification\IManager;
class BackgroundJob extends TimedJob {
@@ -51,10 +49,7 @@ class BackgroundJob extends TimedJob {
/** @var IClientService */
protected $client;
- /** @var IURLGenerator */
- protected $urlGenerator;
-
- /** @var IUser[] */
+ /** @var string[] */
protected $users;
/**
@@ -65,9 +60,8 @@ class BackgroundJob extends TimedJob {
* @param IGroupManager $groupManager
* @param IAppManager $appManager
* @param IClientService $client
- * @param IURLGenerator $urlGenerator
*/
- public function __construct(IConfig $config, IManager $notificationManager, IGroupManager $groupManager, IAppManager $appManager, IClientService $client, IURLGenerator $urlGenerator) {
+ public function __construct(IConfig $config, IManager $notificationManager, IGroupManager $groupManager, IAppManager $appManager, IClientService $client) {
// Run once a day
$this->setInterval(60 * 60 * 24);
@@ -76,7 +70,6 @@ class BackgroundJob extends TimedJob {
$this->groupManager = $groupManager;
$this->appManager = $appManager;
$this->client = $client;
- $this->urlGenerator = $urlGenerator;
}
protected function run($argument) {
@@ -97,8 +90,7 @@ class BackgroundJob extends TimedJob {
$status = $updater->check();
if (isset($status['version'])) {
- $url = $this->urlGenerator->linkToRouteAbsolute('settings.AdminSettings.index') . '#updater';
- $this->createNotifications('core', $status['version'], $url, $status['versionstring']);
+ $this->createNotifications('core', $status['version'], $status['versionstring']);
}
}
@@ -110,8 +102,7 @@ class BackgroundJob extends TimedJob {
foreach ($apps as $app) {
$update = $this->isUpdateAvailable($app);
if ($update !== false) {
- $url = $this->urlGenerator->linkToRouteAbsolute('settings.AppSettings.viewApps') . '#app-' . $app;
- $this->createNotifications($app, $update, $url);
+ $this->createNotifications($app, $update);
}
}
}
@@ -121,10 +112,9 @@ class BackgroundJob extends TimedJob {
*
* @param string $app
* @param string $version
- * @param string $url
* @param string $visibleVersion
*/
- protected function createNotifications($app, $version, $url, $visibleVersion = '') {
+ protected function createNotifications($app, $version, $visibleVersion = '') {
$lastNotification = $this->config->getAppValue('updatenotification', $app, false);
if ($lastNotification === $version) {
// We already notified about this update
@@ -138,8 +128,7 @@ class BackgroundJob extends TimedJob {
$notification = $this->notificationManager->createNotification();
$notification->setApp('updatenotification')
->setDateTime(new \DateTime())
- ->setObject($app, $version)
- ->setLink($url);
+ ->setObject($app, $version);
if ($visibleVersion !== '') {
$notification->setSubject('update_available', ['version' => $visibleVersion]);
diff --git a/apps/updatenotification/lib/Notification/Notifier.php b/apps/updatenotification/lib/Notification/Notifier.php
index 00cc94095ca..079ec4c5e0a 100644
--- a/apps/updatenotification/lib/Notification/Notifier.php
+++ b/apps/updatenotification/lib/Notification/Notifier.php
@@ -24,7 +24,10 @@
namespace OCA\UpdateNotification\Notification;
+use OCP\IGroupManager;
use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserSession;
use OCP\L10N\IFactory;
use OCP\Notification\IManager;
use OCP\Notification\INotification;
@@ -41,6 +44,12 @@ class Notifier implements INotifier {
/** @var IFactory */
protected $l10NFactory;
+ /** @var IUserSession */
+ protected $userSession;
+
+ /** @var IGroupManager */
+ protected $groupManager;
+
/** @var string[] */
protected $appVersions;
@@ -50,11 +59,15 @@ class Notifier implements INotifier {
* @param IURLGenerator $url
* @param IManager $notificationManager
* @param IFactory $l10NFactory
+ * @param IUserSession $userSession
+ * @param IGroupManager $groupManager
*/
- public function __construct(IURLGenerator $url, IManager $notificationManager, IFactory $l10NFactory) {
+ public function __construct(IURLGenerator $url, IManager $notificationManager, IFactory $l10NFactory, IUserSession $userSession, IGroupManager $groupManager) {
$this->url = $url;
$this->notificationManager = $notificationManager;
$this->l10NFactory = $l10NFactory;
+ $this->userSession = $userSession;
+ $this->groupManager = $groupManager;
$this->appVersions = $this->getAppVersions();
}
@@ -76,6 +89,10 @@ class Notifier implements INotifier {
$parameters = $notification->getSubjectParameters();
$notification->setParsedSubject($l->t('Update to %1$s is available.', [$parameters['version']]));
+
+ if ($this->isAdmin()) {
+ $notification->setLink($this->url->linkToRouteAbsolute('settings.AdminSettings.index') . '#updater');
+ }
} else {
$appInfo = $this->getAppInfo($notification->getObjectType());
$appName = ($appInfo === null) ? $notification->getObjectType() : $appInfo['name'];
@@ -92,6 +109,10 @@ class Notifier implements INotifier {
'name' => $appName,
]
]);
+
+ if ($this->isAdmin()) {
+ $notification->setLink($this->url->linkToRouteAbsolute('settings.AppSettings.viewApps') . '#app-' . $notification->getObjectType());
+ }
}
$notification->setIcon($this->url->getAbsoluteURL($this->url->imagePath('updatenotification', 'notification.svg')));
@@ -113,6 +134,19 @@ class Notifier implements INotifier {
}
}
+ /**
+ * @return bool
+ */
+ protected function isAdmin() {
+ $user = $this->userSession->getUser();
+
+ if ($user instanceof IUser) {
+ return $this->groupManager->isAdmin($user->getUID());
+ }
+
+ return false;
+ }
+
protected function getCoreVersions() {
return implode('.', \OCP\Util::getVersion());
}
diff --git a/apps/updatenotification/tests/Notification/BackgroundJobTest.php b/apps/updatenotification/tests/Notification/BackgroundJobTest.php
index 911b1cc8e2f..57771ec0ae9 100644
--- a/apps/updatenotification/tests/Notification/BackgroundJobTest.php
+++ b/apps/updatenotification/tests/Notification/BackgroundJobTest.php
@@ -45,18 +45,15 @@ class BackgroundJobTest extends TestCase {
protected $appManager;
/** @var IClientService|\PHPUnit_Framework_MockObject_MockObject */
protected $client;
- /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */
- protected $urlGenerator;
public function setUp() {
parent::setUp();
- $this->config = $this->getMockBuilder('OCP\IConfig')->getMock();
- $this->notificationManager = $this->getMockBuilder('OCP\Notification\IManager')->getMock();
- $this->groupManager = $this->getMockBuilder('OCP\IGroupManager')->getMock();
- $this->appManager = $this->getMockBuilder('OCP\App\IAppManager')->getMock();
- $this->client = $this->getMockBuilder('OCP\Http\Client\IClientService')->getMock();
- $this->urlGenerator = $this->getMockBuilder('OCP\IURLGenerator')->getMock();
+ $this->config = $this->createMock(\OCP\IConfig::class);
+ $this->notificationManager = $this->createMock(\OCP\Notification\IManager::class);
+ $this->groupManager = $this->createMock(\OCP\IGroupManager::class);
+ $this->appManager = $this->createMock(\OCP\App\IAppManager::class);
+ $this->client = $this->createMock(\OCP\Http\Client\IClientService::class);
}
/**
@@ -70,8 +67,7 @@ class BackgroundJobTest extends TestCase {
$this->notificationManager,
$this->groupManager,
$this->appManager,
- $this->client,
- $this->urlGenerator
+ $this->client
);
} {
return $this->getMockBuilder('OCA\UpdateNotification\Notification\BackgroundJob')
@@ -81,7 +77,6 @@ class BackgroundJobTest extends TestCase {
$this->groupManager,
$this->appManager,
$this->client,
- $this->urlGenerator,
])
->setMethods($methods)
->getMock();
@@ -160,20 +155,12 @@ class BackgroundJobTest extends TestCase {
}
if ($notification === null) {
- $this->urlGenerator->expects($this->never())
- ->method('linkToRouteAbsolute');
-
$job->expects($this->never())
->method('createNotifications');
} else {
- $this->urlGenerator->expects($this->once())
- ->method('linkToRouteAbsolute')
- ->with('settings.AdminSettings.index')
- ->willReturn('admin-url');
-
$job->expects($this->once())
->method('createNotifications')
- ->willReturn('core', $notification, 'admin-url#updater', $readableVersion);
+ ->willReturn('core', $notification, $readableVersion);
}
$this->invokePrivate($job, 'checkCoreUpdate');
@@ -188,7 +175,7 @@ class BackgroundJobTest extends TestCase {
['app2', '1.9.2'],
],
[
- ['app2', '1.9.2', 'apps-url#app-app2'],
+ ['app2', '1.9.2'],
],
],
];
@@ -215,11 +202,6 @@ class BackgroundJobTest extends TestCase {
->method('isUpdateAvailable')
->willReturnMap($isUpdateAvailable);
- $this->urlGenerator->expects($this->exactly(sizeof($notifications)))
- ->method('linkToRouteAbsolute')
- ->with('settings.AppSettings.viewApps')
- ->willReturn('apps-url');
-
$mockedMethod = $job->expects($this->exactly(sizeof($notifications)))
->method('createNotifications');
call_user_func_array([$mockedMethod, 'withConsecutive'], $notifications);
@@ -229,9 +211,9 @@ class BackgroundJobTest extends TestCase {
public function dataCreateNotifications() {
return [
- ['app1', '1.0.0', 'link1', '1.0.0', false, false, null, null],
- ['app2', '1.0.1', 'link2', '1.0.0', '1.0.0', true, ['user1'], [['user1']]],
- ['app3', '1.0.1', 'link3', false, false, true, ['user2', 'user3'], [['user2'], ['user3']]],
+ ['app1', '1.0.0', '1.0.0', false, false, null, null],
+ ['app2', '1.0.1', '1.0.0', '1.0.0', true, ['user1'], [['user1']]],
+ ['app3', '1.0.1', false, false, true, ['user2', 'user3'], [['user2'], ['user3']]],
];
}
@@ -240,14 +222,13 @@ class BackgroundJobTest extends TestCase {
*
* @param string $app
* @param string $version
- * @param string $url
* @param string|false $lastNotification
* @param string|false $callDelete
* @param bool $createNotification
* @param string[]|null $users
* @param array|null $userNotifications
*/
- public function testCreateNotifications($app, $version, $url, $lastNotification, $callDelete, $createNotification, $users, $userNotifications) {
+ public function testCreateNotifications($app, $version, $lastNotification, $callDelete, $createNotification, $users, $userNotifications) {
$job = $this->getJob([
'deleteOutdatedNotifications',
'getUsersToNotify',
@@ -299,10 +280,6 @@ class BackgroundJobTest extends TestCase {
->method('setSubject')
->with('update_available')
->willReturnSelf();
- $notification->expects($this->once())
- ->method('setLink')
- ->with($url)
- ->willReturnSelf();
if ($userNotifications !== null) {
$mockedMethod = $notification->expects($this->exactly(sizeof($userNotifications)))
@@ -323,7 +300,7 @@ class BackgroundJobTest extends TestCase {
->method('createNotification');
}
- $this->invokePrivate($job, 'createNotifications', [$app, $version, $url]);
+ $this->invokePrivate($job, 'createNotifications', [$app, $version]);
}
public function dataGetUsersToNotify() {
diff --git a/apps/updatenotification/tests/Notification/NotifierTest.php b/apps/updatenotification/tests/Notification/NotifierTest.php
index 421fcada689..e809ce11635 100644
--- a/apps/updatenotification/tests/Notification/NotifierTest.php
+++ b/apps/updatenotification/tests/Notification/NotifierTest.php
@@ -24,7 +24,9 @@ namespace OCA\UpdateNotification\Tests\Notification;
use OCA\UpdateNotification\Notification\Notifier;
+use OCP\IGroupManager;
use OCP\IURLGenerator;
+use OCP\IUserSession;
use OCP\L10N\IFactory;
use OCP\Notification\IManager;
use OCP\Notification\INotification;
@@ -38,6 +40,10 @@ class NotifierTest extends TestCase {
protected $notificationManager;
/** @var IFactory|\PHPUnit_Framework_MockObject_MockObject */
protected $l10nFactory;
+ /** @var IUserSession|\PHPUnit_Framework_MockObject_MockObject */
+ protected $userSession;
+ /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */
+ protected $groupManager;
public function setUp() {
parent::setUp();
@@ -45,6 +51,8 @@ class NotifierTest extends TestCase {
$this->urlGenerator = $this->createMock(IURLGenerator::class);
$this->notificationManager = $this->createMock(IManager::class);
$this->l10nFactory = $this->createMock(IFactory::class);
+ $this->userSession = $this->createMock(IUserSession::class);
+ $this->groupManager = $this->createMock(IGroupManager::class);
}
/**
@@ -56,7 +64,9 @@ class NotifierTest extends TestCase {
return new Notifier(
$this->urlGenerator,
$this->notificationManager,
- $this->l10nFactory
+ $this->l10nFactory,
+ $this->userSession,
+ $this->groupManager
);
} {
return $this->getMockBuilder(Notifier::class)
@@ -64,6 +74,8 @@ class NotifierTest extends TestCase {
$this->urlGenerator,
$this->notificationManager,
$this->l10nFactory,
+ $this->userSession,
+ $this->groupManager,
])
->setMethods($methods)
->getMock();
diff --git a/apps/user_ldap/l10n/cs_CZ.js b/apps/user_ldap/l10n/cs_CZ.js
index f788628e851..c9fc3c62586 100644
--- a/apps/user_ldap/l10n/cs_CZ.js
+++ b/apps/user_ldap/l10n/cs_CZ.js
@@ -40,12 +40,14 @@ OC.L10N.register(
"Select attributes" : "Vyberte atributy",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Uživatel nenalezen. Zkontrolujte prosím své přihlašovací údaje a jméno. Použitý filtr (pro zkopírování a ověření v příkazovém řádku): <br/>",
"User found and settings verified." : "Uživatel nalezen a nastavení ověřeno.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavení ověřena, ale byl nalezen víc než jeden uživatel. Jen ten první se bude moci přihlásit. Zvažte užší filtr.",
"An unspecified error occurred. Please check the settings and the log." : "Došlo k nespecifikované chybě. Zkontrolujte prosím nastavení a soubor logu.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtr vyhledávání je neplatný, pravděpodobně z důvodu chybné syntax jako třeba neuzavřené závorky. Ověřte to.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Došlo k chybě připojení k LDAP / AD, zkontrolujte prosím host, port a přihlašovací údaje.",
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Chybí zástupný znak %uid. Bude nahrazen přihlašovacím jménem při dotazování LDAP / AD.",
"Please provide a login name to test against" : "Zadejte prosím přihlašovací jméno pro otestování",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Skupinové pole bylo vypnuto, protože LDAP / AD server nepodporuje memberOf.",
+ "Password change rejected. Hint: " : "Změna hesla zamítnuta. Nápověda: ",
"LDAP / AD integration" : "LDAP / AD propojení",
"_%s group found_::_%s groups found_" : ["nalezena %s skupina","nalezeny %s skupiny","nalezeno %s skupin"],
"_%s user found_::_%s users found_" : ["nalezen %s uživatel","nalezeni %s uživatelé","nalezeno %s uživatelů"],
@@ -141,6 +143,9 @@ OC.L10N.register(
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Pokud zapnuto, je možno používat skupiny, které obsahují jiné skupiny. (Funguje pouze pokud atribut člena skupiny obsahuje DN.)",
"Paging chunksize" : "Velikost bloku stránkování",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Velikost bloku použitá pro stránkování vyhledávání v LDAP, které může vracet objemné výsledky jako třeba výčet uživatelů či skupin. (Nastavení na 0 zakáže stránkovaná vyhledávání pro tyto situace.)",
+ "Enable LDAP password changes per user" : "Povolit změny LDAP hesla pro každého uživatele",
+ "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Povolit LDAP uživatelům změnu jejich hesla a povolit Super Administrátorům a skupinovým Administrátorům změnu hesel jejich LDAP uživatelů. Funguje pouze, pokud jsou na LDAP serveru příslušně nakonfigurovány seznamy řízení přístupu. Protože hesla jsou LDAP serveru zasílána v čisté podobě, musí být použito šifrování při transportu a na LDAP serveru by mělo být nakonfigurováno hashování hesel.",
+ "(New password is sent as plain text to LDAP)" : "(Nové heslo je LDAPu zasláno jako prostý text)",
"Special Attributes" : "Speciální atributy",
"Quota Field" : "Pole pro kvótu",
"Quota Default" : "Výchozí kvóta",
diff --git a/apps/user_ldap/l10n/cs_CZ.json b/apps/user_ldap/l10n/cs_CZ.json
index 9ed158e2bce..6f374d73d7f 100644
--- a/apps/user_ldap/l10n/cs_CZ.json
+++ b/apps/user_ldap/l10n/cs_CZ.json
@@ -38,12 +38,14 @@
"Select attributes" : "Vyberte atributy",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Uživatel nenalezen. Zkontrolujte prosím své přihlašovací údaje a jméno. Použitý filtr (pro zkopírování a ověření v příkazovém řádku): <br/>",
"User found and settings verified." : "Uživatel nalezen a nastavení ověřeno.",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavení ověřena, ale byl nalezen víc než jeden uživatel. Jen ten první se bude moci přihlásit. Zvažte užší filtr.",
"An unspecified error occurred. Please check the settings and the log." : "Došlo k nespecifikované chybě. Zkontrolujte prosím nastavení a soubor logu.",
"The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtr vyhledávání je neplatný, pravděpodobně z důvodu chybné syntax jako třeba neuzavřené závorky. Ověřte to.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Došlo k chybě připojení k LDAP / AD, zkontrolujte prosím host, port a přihlašovací údaje.",
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Chybí zástupný znak %uid. Bude nahrazen přihlašovacím jménem při dotazování LDAP / AD.",
"Please provide a login name to test against" : "Zadejte prosím přihlašovací jméno pro otestování",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Skupinové pole bylo vypnuto, protože LDAP / AD server nepodporuje memberOf.",
+ "Password change rejected. Hint: " : "Změna hesla zamítnuta. Nápověda: ",
"LDAP / AD integration" : "LDAP / AD propojení",
"_%s group found_::_%s groups found_" : ["nalezena %s skupina","nalezeny %s skupiny","nalezeno %s skupin"],
"_%s user found_::_%s users found_" : ["nalezen %s uživatel","nalezeni %s uživatelé","nalezeno %s uživatelů"],
@@ -139,6 +141,9 @@
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Pokud zapnuto, je možno používat skupiny, které obsahují jiné skupiny. (Funguje pouze pokud atribut člena skupiny obsahuje DN.)",
"Paging chunksize" : "Velikost bloku stránkování",
"Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Velikost bloku použitá pro stránkování vyhledávání v LDAP, které může vracet objemné výsledky jako třeba výčet uživatelů či skupin. (Nastavení na 0 zakáže stránkovaná vyhledávání pro tyto situace.)",
+ "Enable LDAP password changes per user" : "Povolit změny LDAP hesla pro každého uživatele",
+ "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Povolit LDAP uživatelům změnu jejich hesla a povolit Super Administrátorům a skupinovým Administrátorům změnu hesel jejich LDAP uživatelů. Funguje pouze, pokud jsou na LDAP serveru příslušně nakonfigurovány seznamy řízení přístupu. Protože hesla jsou LDAP serveru zasílána v čisté podobě, musí být použito šifrování při transportu a na LDAP serveru by mělo být nakonfigurováno hashování hesel.",
+ "(New password is sent as plain text to LDAP)" : "(Nové heslo je LDAPu zasláno jako prostý text)",
"Special Attributes" : "Speciální atributy",
"Quota Field" : "Pole pro kvótu",
"Quota Default" : "Výchozí kvóta",
diff --git a/apps/user_ldap/l10n/fr.js b/apps/user_ldap/l10n/fr.js
index cbbe871d9cc..9539e20adf8 100644
--- a/apps/user_ldap/l10n/fr.js
+++ b/apps/user_ldap/l10n/fr.js
@@ -10,7 +10,7 @@ OC.L10N.register(
"No action specified" : "Aucune action spécifiée",
"No configuration specified" : "Aucune configuration spécifiée",
"No data specified" : "Aucune donnée spécifiée",
- " Could not set configuration %s" : "Impossible de spécifier la configuration %s",
+ " Could not set configuration %s" : "Impossible d'appliquer la configuration %s",
"Action does not exist" : "L'action n'existe pas",
"The Base DN appears to be wrong" : "Le DN de base est erroné",
"Testing configuration…" : "Test de configuration",
@@ -36,7 +36,7 @@ OC.L10N.register(
"LDAP Operations error. Anonymous bind might not be allowed." : "Erreur LDAP. La connexion anonyme au serveur n'est probablement pas acceptée.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "La sauvegarde a échoué. Veuillez vérifier que la base de données est opérationnelle. Rechargez avant de poursuivre.",
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Changer de mode activera les requêtes LDAP automatiques. Selon la taille de votre annuaire LDAP, cela peut prendre du temps. Voulez-vous toujours changer de mode ?",
- "Mode switch" : "Changer de mode",
+ "Mode switch" : "Basculer de mode",
"Select attributes" : "Sélectionner les attributs",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Utilisateur introuvable. Veuillez vérifier les attributs de login et le nom d'utilisateur. Filtre effectif (à copier-coller pour valider en ligne de commande):<br/>",
"User found and settings verified." : "Utilisateur trouvé et paramètres vérifiés.",
diff --git a/apps/user_ldap/l10n/fr.json b/apps/user_ldap/l10n/fr.json
index e31c5f7fbe2..4e15829e84a 100644
--- a/apps/user_ldap/l10n/fr.json
+++ b/apps/user_ldap/l10n/fr.json
@@ -8,7 +8,7 @@
"No action specified" : "Aucune action spécifiée",
"No configuration specified" : "Aucune configuration spécifiée",
"No data specified" : "Aucune donnée spécifiée",
- " Could not set configuration %s" : "Impossible de spécifier la configuration %s",
+ " Could not set configuration %s" : "Impossible d'appliquer la configuration %s",
"Action does not exist" : "L'action n'existe pas",
"The Base DN appears to be wrong" : "Le DN de base est erroné",
"Testing configuration…" : "Test de configuration",
@@ -34,7 +34,7 @@
"LDAP Operations error. Anonymous bind might not be allowed." : "Erreur LDAP. La connexion anonyme au serveur n'est probablement pas acceptée.",
"Saving failed. Please make sure the database is in Operation. Reload before continuing." : "La sauvegarde a échoué. Veuillez vérifier que la base de données est opérationnelle. Rechargez avant de poursuivre.",
"Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Changer de mode activera les requêtes LDAP automatiques. Selon la taille de votre annuaire LDAP, cela peut prendre du temps. Voulez-vous toujours changer de mode ?",
- "Mode switch" : "Changer de mode",
+ "Mode switch" : "Basculer de mode",
"Select attributes" : "Sélectionner les attributs",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Utilisateur introuvable. Veuillez vérifier les attributs de login et le nom d'utilisateur. Filtre effectif (à copier-coller pour valider en ligne de commande):<br/>",
"User found and settings verified." : "Utilisateur trouvé et paramètres vérifiés.",
diff --git a/apps/user_ldap/l10n/sv.js b/apps/user_ldap/l10n/sv.js
index aba8488f0d1..9a1768fe01e 100644
--- a/apps/user_ldap/l10n/sv.js
+++ b/apps/user_ldap/l10n/sv.js
@@ -44,6 +44,7 @@ OC.L10N.register(
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Ett anslutningsfel till LDAP / AD uppstod. Var god granska värd, port och inloggningsuppgifter.",
"Please provide a login name to test against" : "Vänligen ange ett inloggningsnamn att försöka ansluta med",
"Password change rejected. Hint: " : "Lösenordsbyte nekad. Anledning/tips: ",
+ "LDAP / AD integration" : "LDAP / AD integration",
"_%s group found_::_%s groups found_" : ["%s grupp hittad","%s grupper hittade"],
"_%s user found_::_%s users found_" : ["%s användare hittad","%s användare hittade"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunde inte upptäcka attributet användarvisningsnamn. Vänligen ange det själv i de avancerade LDAP-inställningarna.",
diff --git a/apps/user_ldap/l10n/sv.json b/apps/user_ldap/l10n/sv.json
index 8f5b48cbf7e..a4019761f96 100644
--- a/apps/user_ldap/l10n/sv.json
+++ b/apps/user_ldap/l10n/sv.json
@@ -42,6 +42,7 @@
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Ett anslutningsfel till LDAP / AD uppstod. Var god granska värd, port och inloggningsuppgifter.",
"Please provide a login name to test against" : "Vänligen ange ett inloggningsnamn att försöka ansluta med",
"Password change rejected. Hint: " : "Lösenordsbyte nekad. Anledning/tips: ",
+ "LDAP / AD integration" : "LDAP / AD integration",
"_%s group found_::_%s groups found_" : ["%s grupp hittad","%s grupper hittade"],
"_%s user found_::_%s users found_" : ["%s användare hittad","%s användare hittade"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunde inte upptäcka attributet användarvisningsnamn. Vänligen ange det själv i de avancerade LDAP-inställningarna.",
diff --git a/apps/workflowengine/l10n/sk_SK.js b/apps/workflowengine/l10n/sk_SK.js
new file mode 100644
index 00000000000..b524bd9d956
--- /dev/null
+++ b/apps/workflowengine/l10n/sk_SK.js
@@ -0,0 +1,58 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "Successfully saved" : "Úspešne uložené",
+ "Saving failed:" : "Ukladanie neúspešné:",
+ "File mime type" : "Mime typ súboru",
+ "is" : "je",
+ "is not" : "nie je",
+ "matches" : "súhlasí",
+ "does not match" : "nesúhlasí",
+ "File size (upload)" : "Veľkosť súboru (upload)",
+ "less" : "menej",
+ "less or equals" : "menej alebo rovné",
+ "greater or equals" : "viac alebo rovné",
+ "greater" : "viac",
+ "File system tag" : "Štítok súborového systému",
+ "is tagged with" : "je označený",
+ "is not tagged with" : "nie je označený",
+ "Select tag…" : "Vyber štítok...",
+ "Request remote address" : "Vyžiadať vzdialenú adresu",
+ "matches IPv4" : "súhlasí s IPv4",
+ "does not match IPv4" : "nesúhlasí s IPv4",
+ "matches IPv6" : "súhlasí s IPv6",
+ "does not match IPv6" : "nesúhlasí s IPv6",
+ "between" : "medzi",
+ "not between" : "nie je medzi",
+ "Start" : "Začiatok",
+ "End" : "Koniec",
+ "Request URL" : "Vyžiadať URL",
+ "Files WebDAV" : "WebDAV súbory",
+ "Sync clients" : "Synchronizovať klientov",
+ "Android client" : "Android klient",
+ "iOS client" : "iOS klient",
+ "Desktop client" : "Desktopový klient",
+ "is member of" : "Je členom",
+ "is not member of" : "Nie je členom",
+ "The given file size is invalid" : "Zadaná veľkosť súboru je neplatná",
+ "The given tag id is invalid" : "Zadaný identifikátor štítku je neplatný",
+ "The given IP range is invalid" : "Zadaný rozsah IP je neplatný",
+ "The given IP range is not valid for IPv4" : "Zadaný IP rozsah nie je platný pre IPv4",
+ "The given IP range is not valid for IPv6" : "Zadaný IP rozsah nie je platný pre IPv6",
+ "The given time span is invalid" : "Zadané časové rozpätie nie je platné",
+ "The given start time is invalid" : "Zadaný čas začatia nie je platný",
+ "The given end time is invalid" : "Zadaný čas ukončenia nie je platný",
+ "The given group does not exist" : "Zadaná skupina neexistuje",
+ "Operation #%s does not exist" : "Operácia #%s neexistuje",
+ "Operation %s does not exist" : "Operácia %s neexistuje",
+ "Operation %s is invalid" : "Operácia #%s nie je platná",
+ "Open documentation" : "Otvoriť dokumentáciu",
+ "Add rule group" : "Pridať skupinu pravidiel",
+ "Short rule description" : "Zobraziť popis pravidla",
+ "Add rule" : "Pridať pravidlo",
+ "Reset" : "Vynulovať",
+ "Save" : "Uložiť",
+ "Saving…" : "Ukladá sa...",
+ "Loading…" : "Načítava sa..."
+},
+"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/workflowengine/l10n/sk_SK.json b/apps/workflowengine/l10n/sk_SK.json
new file mode 100644
index 00000000000..4cad6608288
--- /dev/null
+++ b/apps/workflowengine/l10n/sk_SK.json
@@ -0,0 +1,56 @@
+{ "translations": {
+ "Successfully saved" : "Úspešne uložené",
+ "Saving failed:" : "Ukladanie neúspešné:",
+ "File mime type" : "Mime typ súboru",
+ "is" : "je",
+ "is not" : "nie je",
+ "matches" : "súhlasí",
+ "does not match" : "nesúhlasí",
+ "File size (upload)" : "Veľkosť súboru (upload)",
+ "less" : "menej",
+ "less or equals" : "menej alebo rovné",
+ "greater or equals" : "viac alebo rovné",
+ "greater" : "viac",
+ "File system tag" : "Štítok súborového systému",
+ "is tagged with" : "je označený",
+ "is not tagged with" : "nie je označený",
+ "Select tag…" : "Vyber štítok...",
+ "Request remote address" : "Vyžiadať vzdialenú adresu",
+ "matches IPv4" : "súhlasí s IPv4",
+ "does not match IPv4" : "nesúhlasí s IPv4",
+ "matches IPv6" : "súhlasí s IPv6",
+ "does not match IPv6" : "nesúhlasí s IPv6",
+ "between" : "medzi",
+ "not between" : "nie je medzi",
+ "Start" : "Začiatok",
+ "End" : "Koniec",
+ "Request URL" : "Vyžiadať URL",
+ "Files WebDAV" : "WebDAV súbory",
+ "Sync clients" : "Synchronizovať klientov",
+ "Android client" : "Android klient",
+ "iOS client" : "iOS klient",
+ "Desktop client" : "Desktopový klient",
+ "is member of" : "Je členom",
+ "is not member of" : "Nie je členom",
+ "The given file size is invalid" : "Zadaná veľkosť súboru je neplatná",
+ "The given tag id is invalid" : "Zadaný identifikátor štítku je neplatný",
+ "The given IP range is invalid" : "Zadaný rozsah IP je neplatný",
+ "The given IP range is not valid for IPv4" : "Zadaný IP rozsah nie je platný pre IPv4",
+ "The given IP range is not valid for IPv6" : "Zadaný IP rozsah nie je platný pre IPv6",
+ "The given time span is invalid" : "Zadané časové rozpätie nie je platné",
+ "The given start time is invalid" : "Zadaný čas začatia nie je platný",
+ "The given end time is invalid" : "Zadaný čas ukončenia nie je platný",
+ "The given group does not exist" : "Zadaná skupina neexistuje",
+ "Operation #%s does not exist" : "Operácia #%s neexistuje",
+ "Operation %s does not exist" : "Operácia %s neexistuje",
+ "Operation %s is invalid" : "Operácia #%s nie je platná",
+ "Open documentation" : "Otvoriť dokumentáciu",
+ "Add rule group" : "Pridať skupinu pravidiel",
+ "Short rule description" : "Zobraziť popis pravidla",
+ "Add rule" : "Pridať pravidlo",
+ "Reset" : "Vynulovať",
+ "Save" : "Uložiť",
+ "Saving…" : "Ukladá sa...",
+ "Loading…" : "Načítava sa..."
+},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
+} \ No newline at end of file