summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.drone.yml13
-rw-r--r--apps/comments/l10n/pt_BR.js22
-rw-r--r--apps/comments/l10n/pt_BR.json22
-rw-r--r--apps/dav/l10n/pt_BR.js8
-rw-r--r--apps/dav/l10n/pt_BR.json8
-rw-r--r--apps/dav/l10n/sk.js38
-rw-r--r--apps/dav/l10n/sk.json36
-rw-r--r--apps/encryption/l10n/es.js6
-rw-r--r--apps/encryption/l10n/es.json6
-rw-r--r--apps/encryption/l10n/nb.js8
-rw-r--r--apps/encryption/l10n/nb.json8
-rw-r--r--apps/encryption/l10n/pt_BR.js52
-rw-r--r--apps/encryption/l10n/pt_BR.json52
-rw-r--r--apps/federatedfilesharing/l10n/nb.js6
-rw-r--r--apps/federatedfilesharing/l10n/nb.json6
-rw-r--r--apps/federatedfilesharing/l10n/pt_BR.js16
-rw-r--r--apps/federatedfilesharing/l10n/pt_BR.json16
-rw-r--r--apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php2
-rw-r--r--apps/federation/l10n/pt_BR.js6
-rw-r--r--apps/federation/l10n/pt_BR.json6
-rw-r--r--apps/files/js/mainfileinfodetailview.js2
-rw-r--r--apps/files/l10n/bg.js4
-rw-r--r--apps/files/l10n/bg.json4
-rw-r--r--apps/files/l10n/ca.js4
-rw-r--r--apps/files/l10n/ca.json4
-rw-r--r--apps/files/l10n/cs.js4
-rw-r--r--apps/files/l10n/cs.json4
-rw-r--r--apps/files/l10n/de.js5
-rw-r--r--apps/files/l10n/de.json5
-rw-r--r--apps/files/l10n/de_DE.js5
-rw-r--r--apps/files/l10n/de_DE.json5
-rw-r--r--apps/files/l10n/es.js5
-rw-r--r--apps/files/l10n/es.json5
-rw-r--r--apps/files/l10n/es_MX.js4
-rw-r--r--apps/files/l10n/es_MX.json4
-rw-r--r--apps/files/l10n/eu.js4
-rw-r--r--apps/files/l10n/eu.json4
-rw-r--r--apps/files/l10n/fi.js4
-rw-r--r--apps/files/l10n/fi.json4
-rw-r--r--apps/files/l10n/fr.js5
-rw-r--r--apps/files/l10n/fr.json5
-rw-r--r--apps/files/l10n/hu.js4
-rw-r--r--apps/files/l10n/hu.json4
-rw-r--r--apps/files/l10n/ia.js4
-rw-r--r--apps/files/l10n/ia.json4
-rw-r--r--apps/files/l10n/is.js4
-rw-r--r--apps/files/l10n/is.json4
-rw-r--r--apps/files/l10n/it.js4
-rw-r--r--apps/files/l10n/it.json4
-rw-r--r--apps/files/l10n/ja.js4
-rw-r--r--apps/files/l10n/ja.json4
-rw-r--r--apps/files/l10n/ko.js4
-rw-r--r--apps/files/l10n/ko.json4
-rw-r--r--apps/files/l10n/lb.js4
-rw-r--r--apps/files/l10n/lb.json4
-rw-r--r--apps/files/l10n/lt_LT.js4
-rw-r--r--apps/files/l10n/lt_LT.json4
-rw-r--r--apps/files/l10n/lv.js4
-rw-r--r--apps/files/l10n/lv.json4
-rw-r--r--apps/files/l10n/nb.js14
-rw-r--r--apps/files/l10n/nb.json14
-rw-r--r--apps/files/l10n/nl.js5
-rw-r--r--apps/files/l10n/nl.json5
-rw-r--r--apps/files/l10n/pl.js5
-rw-r--r--apps/files/l10n/pl.json5
-rw-r--r--apps/files/l10n/pt_BR.js69
-rw-r--r--apps/files/l10n/pt_BR.json69
-rw-r--r--apps/files/l10n/ru.js5
-rw-r--r--apps/files/l10n/ru.json5
-rw-r--r--apps/files/l10n/sk.js4
-rw-r--r--apps/files/l10n/sk.json4
-rw-r--r--apps/files/l10n/sq.js4
-rw-r--r--apps/files/l10n/sq.json4
-rw-r--r--apps/files/l10n/sv.js4
-rw-r--r--apps/files/l10n/sv.json4
-rw-r--r--apps/files/l10n/tr.js5
-rw-r--r--apps/files/l10n/tr.json5
-rw-r--r--apps/files/l10n/vi.js4
-rw-r--r--apps/files/l10n/vi.json4
-rw-r--r--apps/files/l10n/zh_CN.js4
-rw-r--r--apps/files/l10n/zh_CN.json4
-rw-r--r--apps/files_external/l10n/nb.js50
-rw-r--r--apps/files_external/l10n/nb.json50
-rw-r--r--apps/files_external/l10n/pt_BR.js44
-rw-r--r--apps/files_external/l10n/pt_BR.json44
-rw-r--r--apps/files_sharing/css/sharebreadcrumb.scss4
-rw-r--r--apps/files_sharing/js/app.js5
-rw-r--r--apps/files_sharing/js/share.js2
-rw-r--r--apps/files_sharing/js/sharebreadcrumbview.js8
-rw-r--r--apps/files_sharing/l10n/nb.js2
-rw-r--r--apps/files_sharing/l10n/nb.json2
-rw-r--r--apps/files_sharing/l10n/pt_BR.js94
-rw-r--r--apps/files_sharing/l10n/pt_BR.json94
-rw-r--r--apps/files_sharing/lib/Controller/ShareController.php2
-rw-r--r--apps/files_sharing/tests/js/shareSpec.js20
-rw-r--r--apps/files_sharing/tests/js/sharedbreadcrumviewSpec.js24
-rw-r--r--apps/files_trashbin/l10n/pt_BR.js4
-rw-r--r--apps/files_trashbin/l10n/pt_BR.json4
-rw-r--r--apps/files_versions/l10n/nb.js2
-rw-r--r--apps/files_versions/l10n/nb.json2
-rw-r--r--apps/sharebymail/l10n/de.js11
-rw-r--r--apps/sharebymail/l10n/de.json11
-rw-r--r--apps/sharebymail/l10n/de_DE.js7
-rw-r--r--apps/sharebymail/l10n/de_DE.json7
-rw-r--r--apps/sharebymail/l10n/es.js7
-rw-r--r--apps/sharebymail/l10n/es.json7
-rw-r--r--apps/sharebymail/l10n/fr.js7
-rw-r--r--apps/sharebymail/l10n/fr.json7
-rw-r--r--apps/sharebymail/l10n/nb.js10
-rw-r--r--apps/sharebymail/l10n/nb.json10
-rw-r--r--apps/sharebymail/l10n/nl.js7
-rw-r--r--apps/sharebymail/l10n/nl.json7
-rw-r--r--apps/sharebymail/l10n/pl.js7
-rw-r--r--apps/sharebymail/l10n/pl.json7
-rw-r--r--apps/sharebymail/l10n/pt_BR.js7
-rw-r--r--apps/sharebymail/l10n/pt_BR.json7
-rw-r--r--apps/sharebymail/l10n/ru.js7
-rw-r--r--apps/sharebymail/l10n/ru.json7
-rw-r--r--apps/sharebymail/l10n/tr.js7
-rw-r--r--apps/sharebymail/l10n/tr.json7
-rw-r--r--apps/systemtags/l10n/nb.js4
-rw-r--r--apps/systemtags/l10n/nb.json4
-rw-r--r--apps/testing/appinfo/routes.php20
-rw-r--r--apps/testing/lib/Controller/RateLimitTestController.php52
-rw-r--r--apps/theming/l10n/el.js27
-rw-r--r--apps/theming/l10n/el.json25
-rw-r--r--apps/theming/l10n/nb.js26
-rw-r--r--apps/theming/l10n/nb.json24
-rw-r--r--apps/updatenotification/l10n/nb.js2
-rw-r--r--apps/updatenotification/l10n/nb.json2
-rw-r--r--apps/user_ldap/l10n/da.js8
-rw-r--r--apps/user_ldap/l10n/da.json8
-rw-r--r--apps/user_ldap/l10n/nb.js95
-rw-r--r--apps/user_ldap/l10n/nb.json95
-rw-r--r--apps/user_ldap/l10n/sk.js4
-rw-r--r--apps/user_ldap/l10n/sk.json4
-rw-r--r--apps/user_ldap/lib/Access.php22
-rw-r--r--apps/user_ldap/lib/Group_LDAP.php6
-rw-r--r--apps/user_ldap/lib/User_LDAP.php2
-rw-r--r--apps/user_ldap/tests/Group_LDAPTest.php8
-rw-r--r--apps/user_ldap/tests/User_LDAPTest.php2
-rw-r--r--apps/workflowengine/l10n/es.js4
-rw-r--r--apps/workflowengine/l10n/es.json4
-rw-r--r--apps/workflowengine/l10n/nb.js6
-rw-r--r--apps/workflowengine/l10n/nb.json6
-rw-r--r--build/integration/features/ratelimiting.feature58
-rw-r--r--core/Controller/LoginController.php41
-rw-r--r--core/Controller/LostController.php24
-rw-r--r--core/css/icons.scss6
-rw-r--r--core/css/inputs.scss5
-rw-r--r--core/js/share.js12
-rw-r--r--core/l10n/bg.js2
-rw-r--r--core/l10n/bg.json2
-rw-r--r--core/l10n/ca.js2
-rw-r--r--core/l10n/ca.json2
-rw-r--r--core/l10n/cs.js2
-rw-r--r--core/l10n/cs.json2
-rw-r--r--core/l10n/da.js2
-rw-r--r--core/l10n/da.json2
-rw-r--r--core/l10n/de.js6
-rw-r--r--core/l10n/de.json6
-rw-r--r--core/l10n/de_DE.js6
-rw-r--r--core/l10n/de_DE.json6
-rw-r--r--core/l10n/el.js192
-rw-r--r--core/l10n/el.json192
-rw-r--r--core/l10n/en_GB.js2
-rw-r--r--core/l10n/en_GB.json2
-rw-r--r--core/l10n/es.js11
-rw-r--r--core/l10n/es.json11
-rw-r--r--core/l10n/es_MX.js2
-rw-r--r--core/l10n/es_MX.json2
-rw-r--r--core/l10n/eu.js2
-rw-r--r--core/l10n/eu.json2
-rw-r--r--core/l10n/fi.js3
-rw-r--r--core/l10n/fi.json3
-rw-r--r--core/l10n/fr.js6
-rw-r--r--core/l10n/fr.json6
-rw-r--r--core/l10n/he.js2
-rw-r--r--core/l10n/he.json2
-rw-r--r--core/l10n/hu.js2
-rw-r--r--core/l10n/hu.json2
-rw-r--r--core/l10n/id.js2
-rw-r--r--core/l10n/id.json2
-rw-r--r--core/l10n/is.js2
-rw-r--r--core/l10n/is.json2
-rw-r--r--core/l10n/it.js2
-rw-r--r--core/l10n/it.json2
-rw-r--r--core/l10n/ja.js2
-rw-r--r--core/l10n/ja.json2
-rw-r--r--core/l10n/ko.js2
-rw-r--r--core/l10n/ko.json2
-rw-r--r--core/l10n/lv.js2
-rw-r--r--core/l10n/lv.json2
-rw-r--r--core/l10n/nb.js58
-rw-r--r--core/l10n/nb.json58
-rw-r--r--core/l10n/nl.js6
-rw-r--r--core/l10n/nl.json6
-rw-r--r--core/l10n/pl.js6
-rw-r--r--core/l10n/pl.json6
-rw-r--r--core/l10n/pt_BR.js100
-rw-r--r--core/l10n/pt_BR.json100
-rw-r--r--core/l10n/pt_PT.js2
-rw-r--r--core/l10n/pt_PT.json2
-rw-r--r--core/l10n/ro.js2
-rw-r--r--core/l10n/ro.json2
-rw-r--r--core/l10n/ru.js6
-rw-r--r--core/l10n/ru.json6
-rw-r--r--core/l10n/sk.js26
-rw-r--r--core/l10n/sk.json26
-rw-r--r--core/l10n/sl.js2
-rw-r--r--core/l10n/sl.json2
-rw-r--r--core/l10n/sq.js2
-rw-r--r--core/l10n/sq.json2
-rw-r--r--core/l10n/sv.js2
-rw-r--r--core/l10n/sv.json2
-rw-r--r--core/l10n/tr.js6
-rw-r--r--core/l10n/tr.json6
-rw-r--r--core/l10n/zh_CN.js2
-rw-r--r--core/l10n/zh_CN.json2
-rw-r--r--core/l10n/zh_TW.js2
-rw-r--r--core/l10n/zh_TW.json2
-rw-r--r--core/templates/lostpassword/email.php21
-rw-r--r--lib/base.php3
-rw-r--r--lib/composer/composer/autoload_classmap.php10
-rw-r--r--lib/composer/composer/autoload_static.php10
-rw-r--r--lib/l10n/cs.js2
-rw-r--r--lib/l10n/cs.json2
-rw-r--r--lib/l10n/de.js2
-rw-r--r--lib/l10n/de.json2
-rw-r--r--lib/l10n/de_DE.js2
-rw-r--r--lib/l10n/de_DE.json2
-rw-r--r--lib/l10n/es.js2
-rw-r--r--lib/l10n/es.json2
-rw-r--r--lib/l10n/es_MX.js2
-rw-r--r--lib/l10n/es_MX.json2
-rw-r--r--lib/l10n/eu.js2
-rw-r--r--lib/l10n/eu.json2
-rw-r--r--lib/l10n/fi.js2
-rw-r--r--lib/l10n/fi.json2
-rw-r--r--lib/l10n/fr.js2
-rw-r--r--lib/l10n/fr.json2
-rw-r--r--lib/l10n/he.js2
-rw-r--r--lib/l10n/he.json2
-rw-r--r--lib/l10n/hu.js2
-rw-r--r--lib/l10n/hu.json2
-rw-r--r--lib/l10n/is.js2
-rw-r--r--lib/l10n/is.json2
-rw-r--r--lib/l10n/it.js2
-rw-r--r--lib/l10n/it.json2
-rw-r--r--lib/l10n/ja.js2
-rw-r--r--lib/l10n/ja.json2
-rw-r--r--lib/l10n/nb.js50
-rw-r--r--lib/l10n/nb.json50
-rw-r--r--lib/l10n/nl.js2
-rw-r--r--lib/l10n/nl.json2
-rw-r--r--lib/l10n/pl.js2
-rw-r--r--lib/l10n/pl.json2
-rw-r--r--lib/l10n/pt_BR.js2
-rw-r--r--lib/l10n/pt_BR.json2
-rw-r--r--lib/l10n/ru.js2
-rw-r--r--lib/l10n/ru.json2
-rw-r--r--lib/l10n/sk.js2
-rw-r--r--lib/l10n/sk.json2
-rw-r--r--lib/l10n/sq.js2
-rw-r--r--lib/l10n/sq.json2
-rw-r--r--lib/l10n/sv.js2
-rw-r--r--lib/l10n/sv.json2
-rw-r--r--lib/l10n/tr.js2
-rw-r--r--lib/l10n/tr.json2
-rw-r--r--lib/l10n/zh_CN.js2
-rw-r--r--lib/l10n/zh_CN.json2
-rw-r--r--lib/l10n/zh_TW.js2
-rw-r--r--lib/l10n/zh_TW.json2
-rw-r--r--lib/private/AppFramework/DependencyInjection/DIContainer.php31
-rw-r--r--lib/private/AppFramework/Http/Request.php3
-rw-r--r--lib/private/AppFramework/Middleware/Security/BruteForceMiddleware.php83
-rw-r--r--lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php134
-rw-r--r--lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php15
-rw-r--r--lib/private/AppFramework/Utility/ControllerMethodReflector.php55
-rw-r--r--lib/private/Log.php1
-rw-r--r--lib/private/Log/File.php8
-rw-r--r--lib/private/Mail/EMailTemplate.php15
-rw-r--r--lib/private/Security/Bruteforce/Throttler.php72
-rw-r--r--lib/private/Security/Normalizer/IpAddress.php106
-rw-r--r--lib/private/Security/RateLimiting/Backend/IBackend.php54
-rw-r--r--lib/private/Security/RateLimiting/Backend/MemoryCache.php116
-rw-r--r--lib/private/Security/RateLimiting/Exception/RateLimitExceededException.php31
-rw-r--r--lib/private/Security/RateLimiting/Limiter.php106
-rw-r--r--lib/private/Server.php19
-rw-r--r--lib/private/ServerContainer.php9
-rw-r--r--lib/private/User/Session.php97
-rw-r--r--lib/private/User/User.php7
-rw-r--r--lib/public/AppFramework/Http/Response.php19
-rw-r--r--lib/public/Mail/IEMailTemplate.php4
-rw-r--r--resources/config/ca-bundle.crt301
-rw-r--r--settings/Activity/Provider.php178
-rw-r--r--settings/Activity/Setting.php96
-rw-r--r--settings/Application.php41
-rw-r--r--settings/Hooks.php165
-rw-r--r--settings/l10n/nb.js88
-rw-r--r--settings/l10n/nb.json88
-rw-r--r--settings/l10n/sk.js14
-rw-r--r--settings/l10n/sk.json14
-rw-r--r--settings/templates/apps.php1
-rw-r--r--tests/Core/Controller/LoginControllerTest.php159
-rw-r--r--tests/Core/Controller/LostControllerTest.php58
-rw-r--r--tests/data/emails/new-account-email-single-button.txt2
-rw-r--r--tests/lib/AppFramework/Http/ResponseTest.php5
-rw-r--r--tests/lib/AppFramework/Middleware/Security/BruteForceMiddlewareTest.php190
-rw-r--r--tests/lib/AppFramework/Middleware/Security/RateLimitingMiddlewareTest.php283
-rw-r--r--tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php76
-rw-r--r--tests/lib/AppFramework/Utility/ControllerMethodReflectorTest.php24
-rw-r--r--tests/lib/Mail/EMailTemplateTest.php3
-rw-r--r--tests/lib/Security/Bruteforce/ThrottlerTest.php45
-rw-r--r--tests/lib/Security/Normalizer/IpAddressTest.php59
-rw-r--r--tests/lib/Security/RateLimiting/Backend/MemoryCacheTest.php146
-rw-r--r--tests/lib/Security/RateLimiting/LimiterTest.php161
317 files changed, 4450 insertions, 1882 deletions
diff --git a/.drone.yml b/.drone.yml
index 24e06dd1b25..2d4134957ad 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -277,6 +277,18 @@ pipeline:
when:
matrix:
TESTS: integration-maintenance-mode
+ integration-ratelimiting:
+ image: nextcloudci/integration-php7.0:integration-php7.0-3
+ commands:
+ - ./occ maintenance:install --admin-pass=admin
+ - ./occ config:system:set --type string --value "\\OC\\Memcache\\Redis" memcache.local
+ - ./occ config:system:set --type string --value "\\OC\\Memcache\\Redis" memcache.distributed
+ - ./occ app:enable testing
+ - cd build/integration
+ - ./run.sh features/ratelimiting.feature
+ when:
+ matrix:
+ TESTS: integration-ratelimiting
integration-carddav:
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
@@ -516,6 +528,7 @@ matrix:
- TESTS: integration-capabilities_features
- TESTS: integration-federation_features
- TESTS: integration-maintenance-mode
+ - TESTS: integration-ratelimiting
- TESTS: integration-auth
- TESTS: integration-carddav
- TESTS: integration-dav-v2
diff --git a/apps/comments/l10n/pt_BR.js b/apps/comments/l10n/pt_BR.js
index b8210cdd248..cf9cb31f153 100644
--- a/apps/comments/l10n/pt_BR.js
+++ b/apps/comments/l10n/pt_BR.js
@@ -4,7 +4,7 @@ OC.L10N.register(
"Comments" : "Comentários",
"Unknown user" : "Usuário desconhecido",
"New comment …" : "Novo comentário",
- "Delete comment" : "Apagar comentário",
+ "Delete comment" : "Excluir comentário",
"Post" : "Postar",
"Cancel" : "Cancelar",
"Edit comment" : "Editar comentário",
@@ -12,22 +12,22 @@ OC.L10N.register(
"No comments yet, start the conversation!" : "Nenhum comentário ainda, inicie uma conversa!",
"More comments …" : "Mais comentários ...",
"Save" : "Salvar",
- "Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
- "Error occurred while retrieving comment with id {id}" : "Ocorreu um erro durante a recuperação do comentário com o id {id}",
- "Error occurred while updating comment with id {id}" : "Ocorreu um erro durante a atualização do comentário com o id {id}",
+ "Allowed characters {count} of {max}" : "{count} de {max} caracteres permitidos",
+ "Error occurred while retrieving comment with id {id}" : "Ocorreu um erro durante a recuperação do comentário com id {id}",
+ "Error occurred while updating comment with id {id}" : "Ocorreu um erro durante a atualização do comentário com id {id}",
"Error occurred while posting comment" : "Ocorreu um erro durante a postagem do comentário",
"_%n unread comment_::_%n unread comments_" : ["%n comentários não lidos","%n comentários não lidos"],
- "Comment" : "Comentário",
+ "Comment" : "Comentar",
"You commented" : "Você comentou",
- "%1$s commented" : "%1$s comentado",
- "{author} commented" : "{author} comentado",
+ "%1$s commented" : "%1$s comentaram",
+ "{author} commented" : "{author} comentou",
"You commented on %1$s" : "Você comentou em %1$s",
"You commented on {file}" : "Você comentou sobre {file}",
- "%1$s commented on %2$s" : "%1$s comentado em %2$s",
- "{author} commented on {file}" : "{author} comentado em {file}",
+ "%1$s commented on %2$s" : "%1$s comentaram em %2$s",
+ "{author} commented on {file}" : "{author} comentou em {file}",
"<strong>Comments</strong> for files" : "<strong>Comentários</strong> para arquivos",
- "A (now) deleted user mentioned you in a comment on “%s”" : "Um usuário excluído (agora) mencionou você em um comentário sobre “%s”",
- "A (now) deleted user mentioned you in a comment on “{file}”" : "Um usuário excluído (agora) mencionou você em um comentário sobre “{file}”",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Um usuário excluído agora mencionou você em um comentário sobre “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Um usuário excluído agora mencionou você em um comentário sobre “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s mencionou você em um comentário sobre “%2$s”",
"{user} mentioned you in a comment on “{file}”" : "{user} mencionou você em um comentário sobre “{file}”"
},
diff --git a/apps/comments/l10n/pt_BR.json b/apps/comments/l10n/pt_BR.json
index 751a00a1b85..eb907ecbe1f 100644
--- a/apps/comments/l10n/pt_BR.json
+++ b/apps/comments/l10n/pt_BR.json
@@ -2,7 +2,7 @@
"Comments" : "Comentários",
"Unknown user" : "Usuário desconhecido",
"New comment …" : "Novo comentário",
- "Delete comment" : "Apagar comentário",
+ "Delete comment" : "Excluir comentário",
"Post" : "Postar",
"Cancel" : "Cancelar",
"Edit comment" : "Editar comentário",
@@ -10,22 +10,22 @@
"No comments yet, start the conversation!" : "Nenhum comentário ainda, inicie uma conversa!",
"More comments …" : "Mais comentários ...",
"Save" : "Salvar",
- "Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
- "Error occurred while retrieving comment with id {id}" : "Ocorreu um erro durante a recuperação do comentário com o id {id}",
- "Error occurred while updating comment with id {id}" : "Ocorreu um erro durante a atualização do comentário com o id {id}",
+ "Allowed characters {count} of {max}" : "{count} de {max} caracteres permitidos",
+ "Error occurred while retrieving comment with id {id}" : "Ocorreu um erro durante a recuperação do comentário com id {id}",
+ "Error occurred while updating comment with id {id}" : "Ocorreu um erro durante a atualização do comentário com id {id}",
"Error occurred while posting comment" : "Ocorreu um erro durante a postagem do comentário",
"_%n unread comment_::_%n unread comments_" : ["%n comentários não lidos","%n comentários não lidos"],
- "Comment" : "Comentário",
+ "Comment" : "Comentar",
"You commented" : "Você comentou",
- "%1$s commented" : "%1$s comentado",
- "{author} commented" : "{author} comentado",
+ "%1$s commented" : "%1$s comentaram",
+ "{author} commented" : "{author} comentou",
"You commented on %1$s" : "Você comentou em %1$s",
"You commented on {file}" : "Você comentou sobre {file}",
- "%1$s commented on %2$s" : "%1$s comentado em %2$s",
- "{author} commented on {file}" : "{author} comentado em {file}",
+ "%1$s commented on %2$s" : "%1$s comentaram em %2$s",
+ "{author} commented on {file}" : "{author} comentou em {file}",
"<strong>Comments</strong> for files" : "<strong>Comentários</strong> para arquivos",
- "A (now) deleted user mentioned you in a comment on “%s”" : "Um usuário excluído (agora) mencionou você em um comentário sobre “%s”",
- "A (now) deleted user mentioned you in a comment on “{file}”" : "Um usuário excluído (agora) mencionou você em um comentário sobre “{file}”",
+ "A (now) deleted user mentioned you in a comment on “%s”" : "Um usuário excluído agora mencionou você em um comentário sobre “%s”",
+ "A (now) deleted user mentioned you in a comment on “{file}”" : "Um usuário excluído agora mencionou você em um comentário sobre “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s mencionou você em um comentário sobre “%2$s”",
"{user} mentioned you in a comment on “{file}”" : "{user} mencionou você em um comentário sobre “{file}”"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
diff --git a/apps/dav/l10n/pt_BR.js b/apps/dav/l10n/pt_BR.js
index fe3843d40f8..731bc73c782 100644
--- a/apps/dav/l10n/pt_BR.js
+++ b/apps/dav/l10n/pt_BR.js
@@ -3,9 +3,9 @@ OC.L10N.register(
{
"Calendar" : "Calendário",
"Todos" : "Tarefas",
- "{actor} created calendar {calendar}" : "{actor} calendário criado {calendar}",
- "You created calendar {calendar}" : "Seu calendário criado {calendar}",
- "{actor} deleted calendar {calendar}" : "{actor} calendário excluído {calendar}",
+ "{actor} created calendar {calendar}" : "{actor} criou o calendário {calendar}",
+ "You created calendar {calendar}" : "Voce criou o calendário {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} excluiu o calendário {calendar}",
"You deleted calendar {calendar}" : "Você excluiu o calendário {calendar}",
"{actor} updated calendar {calendar}" : "{actor} atualizou o calendário {calendar}",
"You updated calendar {calendar}" : "Você atualizou o calendário {calendar}",
@@ -33,7 +33,7 @@ OC.L10N.register(
"{actor} updated todo {todo} in list {calendar}" : "{actor} atualizou a tarefa {todo} na lista {calendar}",
"You updated todo {todo} in list {calendar}" : "Você atualizou a tarefa {todo} na lista {calendar}",
"{actor} solved todo {todo} in list {calendar}" : "{actor} tarefa resolvida {todo} na lista {calendar}",
- "You solved todo {todo} in list {calendar}" : "Você resolveu a tarefa {todo} na lista {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Você terminou a tarefa {todo} na lista {calendar}",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} reabriu tarefa {todo} na lista {calendar}",
"You reopened todo {todo} in list {calendar}" : "Você reabriu a terefa {todo} na lista {calendar}",
"A <strong>calendar</strong> was modified" : "Um <strong>calendário</strong> foi modificado",
diff --git a/apps/dav/l10n/pt_BR.json b/apps/dav/l10n/pt_BR.json
index b49e8a6df1e..75efd572620 100644
--- a/apps/dav/l10n/pt_BR.json
+++ b/apps/dav/l10n/pt_BR.json
@@ -1,9 +1,9 @@
{ "translations": {
"Calendar" : "Calendário",
"Todos" : "Tarefas",
- "{actor} created calendar {calendar}" : "{actor} calendário criado {calendar}",
- "You created calendar {calendar}" : "Seu calendário criado {calendar}",
- "{actor} deleted calendar {calendar}" : "{actor} calendário excluído {calendar}",
+ "{actor} created calendar {calendar}" : "{actor} criou o calendário {calendar}",
+ "You created calendar {calendar}" : "Voce criou o calendário {calendar}",
+ "{actor} deleted calendar {calendar}" : "{actor} excluiu o calendário {calendar}",
"You deleted calendar {calendar}" : "Você excluiu o calendário {calendar}",
"{actor} updated calendar {calendar}" : "{actor} atualizou o calendário {calendar}",
"You updated calendar {calendar}" : "Você atualizou o calendário {calendar}",
@@ -31,7 +31,7 @@
"{actor} updated todo {todo} in list {calendar}" : "{actor} atualizou a tarefa {todo} na lista {calendar}",
"You updated todo {todo} in list {calendar}" : "Você atualizou a tarefa {todo} na lista {calendar}",
"{actor} solved todo {todo} in list {calendar}" : "{actor} tarefa resolvida {todo} na lista {calendar}",
- "You solved todo {todo} in list {calendar}" : "Você resolveu a tarefa {todo} na lista {calendar}",
+ "You solved todo {todo} in list {calendar}" : "Você terminou a tarefa {todo} na lista {calendar}",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} reabriu tarefa {todo} na lista {calendar}",
"You reopened todo {todo} in list {calendar}" : "Você reabriu a terefa {todo} na lista {calendar}",
"A <strong>calendar</strong> was modified" : "Um <strong>calendário</strong> foi modificado",
diff --git a/apps/dav/l10n/sk.js b/apps/dav/l10n/sk.js
new file mode 100644
index 00000000000..aa3cf120eca
--- /dev/null
+++ b/apps/dav/l10n/sk.js
@@ -0,0 +1,38 @@
+OC.L10N.register(
+ "dav",
+ {
+ "Calendar" : "Kalendár",
+ "{actor} created calendar {calendar}" : "[actor] vytvoril kalendár [calendar]",
+ "You created calendar {calendar}" : "Vytvorili ste kalendár [calendar]",
+ "{actor} deleted calendar {calendar}" : "[actor] zmazal kalendár [calendar]",
+ "You deleted calendar {calendar}" : "Zmazali ste kalendár [calendar]",
+ "{actor} updated calendar {calendar}" : "[actor] upravil kalendár [calendar]",
+ "You updated calendar {calendar}" : "Upravili ste kalendár [calendar]",
+ "{actor} shared calendar {calendar} with you" : "{actor} vám sprístupnil kalendár {calendar}",
+ "You shared calendar {calendar} with {user}" : "Sprístupnili ste kalendár {calendar} s {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} sprístupnil kalendár {calendar} s {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} vám prestal sprístupňovať kalendár {calendar}",
+ "You unshared calendar {calendar} from {user}" : "Prestali ste sprístupňovať kalendár {calendar} od používateľa {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} zrušil zdieľanie kalendára {calendar} s používateľom {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} zrušil zdieľanie kalendára {calendar} so sebou samým",
+ "You shared calendar {calendar} with group {group}" : "Sprístupnili ste kalendár {calendar} so skupinou {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} vyzdieľal kalendár {calendar} so skupinou {group}",
+ "You unshared calendar {calendar} from group {group}" : "Zrušili ste zdieľanie kalendára {calendar} so skupinou {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} zrušil zdieľanie kalendára {calendar} so skupinou {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} vytvoril udalosť {event} v kalendári {calendar}",
+ "You created event {event} in calendar {calendar}" : "Vytvorili ste udalosť [event] v kalendári [calendar]",
+ "{actor} deleted event {event} from calendar {calendar}" : "[actor] zmazal udalosť [event] z kalendára [calendar]",
+ "You deleted event {event} from calendar {calendar}" : "Zmazali ste udalosť [event] z kalendára [calendar]",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} aktualizoval udalosť {event} v kalendári {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Aktualizovali ste udalosť {event} v kalendári {calendar}",
+ "A <strong>calendar</strong> was modified" : "<strong>kalendár</strong> bol upravený",
+ "A calendar <strong>event</strong> was modified" : "<strong>Udalosť</strong> v kalendári bola upravená",
+ "A calendar <strong>todo</strong> was modified" : "<>",
+ "Contact birthdays" : "Narodeniny kontaktu",
+ "Personal" : "Osobné",
+ "Contacts" : "Kontakty",
+ "Technical details" : "Technické podrobnosti",
+ "Remote Address: %s" : "Vzdialená adresa: %s",
+ "Request ID: %s" : "ID požiadavky: %s"
+},
+"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/dav/l10n/sk.json b/apps/dav/l10n/sk.json
new file mode 100644
index 00000000000..c2cfae27b39
--- /dev/null
+++ b/apps/dav/l10n/sk.json
@@ -0,0 +1,36 @@
+{ "translations": {
+ "Calendar" : "Kalendár",
+ "{actor} created calendar {calendar}" : "[actor] vytvoril kalendár [calendar]",
+ "You created calendar {calendar}" : "Vytvorili ste kalendár [calendar]",
+ "{actor} deleted calendar {calendar}" : "[actor] zmazal kalendár [calendar]",
+ "You deleted calendar {calendar}" : "Zmazali ste kalendár [calendar]",
+ "{actor} updated calendar {calendar}" : "[actor] upravil kalendár [calendar]",
+ "You updated calendar {calendar}" : "Upravili ste kalendár [calendar]",
+ "{actor} shared calendar {calendar} with you" : "{actor} vám sprístupnil kalendár {calendar}",
+ "You shared calendar {calendar} with {user}" : "Sprístupnili ste kalendár {calendar} s {user}",
+ "{actor} shared calendar {calendar} with {user}" : "{actor} sprístupnil kalendár {calendar} s {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} vám prestal sprístupňovať kalendár {calendar}",
+ "You unshared calendar {calendar} from {user}" : "Prestali ste sprístupňovať kalendár {calendar} od používateľa {user}",
+ "{actor} unshared calendar {calendar} from {user}" : "{actor} zrušil zdieľanie kalendára {calendar} s používateľom {user}",
+ "{actor} unshared calendar {calendar} from themselves" : "{actor} zrušil zdieľanie kalendára {calendar} so sebou samým",
+ "You shared calendar {calendar} with group {group}" : "Sprístupnili ste kalendár {calendar} so skupinou {group}",
+ "{actor} shared calendar {calendar} with group {group}" : "{actor} vyzdieľal kalendár {calendar} so skupinou {group}",
+ "You unshared calendar {calendar} from group {group}" : "Zrušili ste zdieľanie kalendára {calendar} so skupinou {group}",
+ "{actor} unshared calendar {calendar} from group {group}" : "{actor} zrušil zdieľanie kalendára {calendar} so skupinou {group}",
+ "{actor} created event {event} in calendar {calendar}" : "{actor} vytvoril udalosť {event} v kalendári {calendar}",
+ "You created event {event} in calendar {calendar}" : "Vytvorili ste udalosť [event] v kalendári [calendar]",
+ "{actor} deleted event {event} from calendar {calendar}" : "[actor] zmazal udalosť [event] z kalendára [calendar]",
+ "You deleted event {event} from calendar {calendar}" : "Zmazali ste udalosť [event] z kalendára [calendar]",
+ "{actor} updated event {event} in calendar {calendar}" : "{actor} aktualizoval udalosť {event} v kalendári {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Aktualizovali ste udalosť {event} v kalendári {calendar}",
+ "A <strong>calendar</strong> was modified" : "<strong>kalendár</strong> bol upravený",
+ "A calendar <strong>event</strong> was modified" : "<strong>Udalosť</strong> v kalendári bola upravená",
+ "A calendar <strong>todo</strong> was modified" : "<>",
+ "Contact birthdays" : "Narodeniny kontaktu",
+ "Personal" : "Osobné",
+ "Contacts" : "Kontakty",
+ "Technical details" : "Technické podrobnosti",
+ "Remote Address: %s" : "Vzdialená adresa: %s",
+ "Request ID: %s" : "ID požiadavky: %s"
+},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
+} \ No newline at end of file
diff --git a/apps/encryption/l10n/es.js b/apps/encryption/l10n/es.js
index 1650ae0107b..5b91875f1be 100644
--- a/apps/encryption/l10n/es.js
+++ b/apps/encryption/l10n/es.js
@@ -40,7 +40,7 @@ OC.L10N.register(
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Al activar esta opción se encriptarán todos los archivos almacenados en la memoria principal, de lo contrario serán cifrados sólo los archivos de almacenamiento externo",
"Enable recovery key" : "Activa la clave de recuperación",
"Disable recovery key" : "Desactiva la clave de recuperación",
- "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clave de recuperación es una clave de cifrado extra que se usa para cifrar ficheros. Permite la recuperación de los ficheros de un usuario si él o ella olvida su contraseña.",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clave de recuperación es una clave de cifrado extra que se usa para cifrar archivos . Permite la recuperación de los archivos de un usuario si él o ella olvida su contraseña.",
"Recovery key password" : "Contraseña de clave de recuperación",
"Repeat recovery key password" : "Repita la contraseña de recuperación",
"Change recovery key password:" : "Cambiar la contraseña de la clave de recuperación",
@@ -51,12 +51,12 @@ OC.L10N.register(
"Basic encryption module" : "Módulo básico de cifrado",
"Your private key password no longer matches your log-in password." : "Su contraseña de clave privada ya no coincide con su contraseña de acceso.",
"Set your old private key password to your current log-in password:" : "Establezca la contraseña de clave privada antigua para su contraseña de inicio de sesión actual:",
- " If you don't remember your old password you can ask your administrator to recover your files." : "Si no recuerda su antigua contraseña puede pedir a su administrador que le recupere sus ficheros.",
+ " If you don't remember your old password you can ask your administrator to recover your files." : "Si no recuerda su antigua contraseña puede pedir a su administrador que le recupere sus archivos.",
"Old log-in password" : "Contraseña de acceso antigua",
"Current log-in password" : "Contraseña de acceso actual",
"Update Private Key Password" : "Actualizar contraseña de clave privada",
"Enable password recovery:" : "Habilitar la recuperación de contraseña:",
- "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción le permitirá volver a tener acceso a sus ficheros cifrados en caso de pérdida de contraseña",
+ "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción le permitirá volver a tener acceso a sus archivos cifrados en caso de pérdida de contraseña",
"Enabled" : "Habilitar",
"Disabled" : "Deshabilitado",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de cifrado está habilitada pero sus claves no se han inicializado, por favor, cierre la sesión y vuelva a iniciarla de nuevo."
diff --git a/apps/encryption/l10n/es.json b/apps/encryption/l10n/es.json
index 014c6f07a6e..907b03487a4 100644
--- a/apps/encryption/l10n/es.json
+++ b/apps/encryption/l10n/es.json
@@ -38,7 +38,7 @@
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Al activar esta opción se encriptarán todos los archivos almacenados en la memoria principal, de lo contrario serán cifrados sólo los archivos de almacenamiento externo",
"Enable recovery key" : "Activa la clave de recuperación",
"Disable recovery key" : "Desactiva la clave de recuperación",
- "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clave de recuperación es una clave de cifrado extra que se usa para cifrar ficheros. Permite la recuperación de los ficheros de un usuario si él o ella olvida su contraseña.",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clave de recuperación es una clave de cifrado extra que se usa para cifrar archivos . Permite la recuperación de los archivos de un usuario si él o ella olvida su contraseña.",
"Recovery key password" : "Contraseña de clave de recuperación",
"Repeat recovery key password" : "Repita la contraseña de recuperación",
"Change recovery key password:" : "Cambiar la contraseña de la clave de recuperación",
@@ -49,12 +49,12 @@
"Basic encryption module" : "Módulo básico de cifrado",
"Your private key password no longer matches your log-in password." : "Su contraseña de clave privada ya no coincide con su contraseña de acceso.",
"Set your old private key password to your current log-in password:" : "Establezca la contraseña de clave privada antigua para su contraseña de inicio de sesión actual:",
- " If you don't remember your old password you can ask your administrator to recover your files." : "Si no recuerda su antigua contraseña puede pedir a su administrador que le recupere sus ficheros.",
+ " If you don't remember your old password you can ask your administrator to recover your files." : "Si no recuerda su antigua contraseña puede pedir a su administrador que le recupere sus archivos.",
"Old log-in password" : "Contraseña de acceso antigua",
"Current log-in password" : "Contraseña de acceso actual",
"Update Private Key Password" : "Actualizar contraseña de clave privada",
"Enable password recovery:" : "Habilitar la recuperación de contraseña:",
- "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción le permitirá volver a tener acceso a sus ficheros cifrados en caso de pérdida de contraseña",
+ "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción le permitirá volver a tener acceso a sus archivos cifrados en caso de pérdida de contraseña",
"Enabled" : "Habilitar",
"Disabled" : "Deshabilitado",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de cifrado está habilitada pero sus claves no se han inicializado, por favor, cierre la sesión y vuelva a iniciarla de nuevo."
diff --git a/apps/encryption/l10n/nb.js b/apps/encryption/l10n/nb.js
index 6cf1760c535..7f5cc3eccaa 100644
--- a/apps/encryption/l10n/nb.js
+++ b/apps/encryption/l10n/nb.js
@@ -21,7 +21,7 @@ OC.L10N.register(
"The old password was not correct, please try again." : "Det gamle passordet var feil. Prøv igjen.",
"The current log-in password was not correct, please try again." : "Det nåværende innloggingspassordet var feil. Prøv igjen.",
"Private key password successfully updated." : "Passord for privat nøkkel ble oppdatert.",
- "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" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye. Vennligst kjør 'occ encryption:migrate' eller kontakt en administrator",
+ "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" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye. Kjør 'occ encryption:migrate' eller kontakt en administrator",
"Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøkkel for Krypteringsappen. Oppdater passordet for din private nøkkel i dine personlige innstillinger for å gjenopprette tilgang til de krypterte filene dine.",
"Encryption app is enabled and ready" : "Krypteringsappen er aktivert og klar",
"Bad Signature" : "Feil signatur",
@@ -29,10 +29,10 @@ OC.L10N.register(
"one-time password for server-side-encryption" : "engangspassord for tjenerkryptering",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke dekryptere denne filen. Dette er sannsynligvis en delt fil. Spør eieren av filen om å dele den med deg på nytt.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke lese denne filen, som sannsynligvis er en delt fil. Be eieren av filen om å dele den med deg på nytt.",
- "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" : "Hei,\n\nAdministratoren har aktivert serverkryptering. Filene dine er blitt kryptert med passordet '%s'.\n\nVennligst logg inn på web-grensesnittet, gå til seksjonen 'grunnleggende krypteringsmodul' i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet 'gammelt påloggingspassord' sammen med ditt nåværende påloggingspassord.\n\n",
+ "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" : "Hei,\n\nAdministratoren har aktivert tjenerkryptering. Filene dine er blitt kryptert med passordet '%s'.\n\nlogg inn på vev-grensesnittet, gå til seksjonen 'grunnleggende krypteringsmodul' i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet 'gammelt påloggingspassord' sammen med ditt nåværende påloggingspassord.\n",
"The share will expire on %s." : "Delingen vil opphøre %s.",
"Cheers!" : "Ha det!",
- "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>" : "Hei,<br><br>Administratoren har aktivert serverkryptering. Filene dine er blitt kryptert med passordet <strong>%s</strong>.<br><br>Vennligst logg inn på web-grensesnittet, gå til seksjonen \"grunnleggende krypteringsmodul\" i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet \"gammelt påloggingspassord\" sammen med ditt nåværende påloggingspassord.<br><br>",
+ "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>" : "Hei,<br><br>Administratoren har skrudd på tjenerkryptering. Filene dine er blitt kryptert med passordet <strong>%s</strong>.<br><br>Logg inn på vev-grensesnittet, gå til seksjonen \"grunnleggende krypteringsmodul\" i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet \"gammelt påloggingspassord\" sammen med ditt nåværende påloggingspassord.<br><br>",
"Default encryption module" : "Standard krypteringsmodul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen.",
"Encrypt the home storage" : "Krypter hjemmelageret",
@@ -58,6 +58,6 @@ OC.L10N.register(
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Aktivering av dette valget tillater deg å gjenerobre tilgang til dine krypterte filer i tilfelle du mister passordet ditt.",
"Enabled" : "Aktiv",
"Disabled" : "Inaktiv",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen."
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Program for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og inn igjen."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/nb.json b/apps/encryption/l10n/nb.json
index d4a5b4d78c4..e23fd405eae 100644
--- a/apps/encryption/l10n/nb.json
+++ b/apps/encryption/l10n/nb.json
@@ -19,7 +19,7 @@
"The old password was not correct, please try again." : "Det gamle passordet var feil. Prøv igjen.",
"The current log-in password was not correct, please try again." : "Det nåværende innloggingspassordet var feil. Prøv igjen.",
"Private key password successfully updated." : "Passord for privat nøkkel ble oppdatert.",
- "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" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye. Vennligst kjør 'occ encryption:migrate' eller kontakt en administrator",
+ "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" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye. Kjør 'occ encryption:migrate' eller kontakt en administrator",
"Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøkkel for Krypteringsappen. Oppdater passordet for din private nøkkel i dine personlige innstillinger for å gjenopprette tilgang til de krypterte filene dine.",
"Encryption app is enabled and ready" : "Krypteringsappen er aktivert og klar",
"Bad Signature" : "Feil signatur",
@@ -27,10 +27,10 @@
"one-time password for server-side-encryption" : "engangspassord for tjenerkryptering",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke dekryptere denne filen. Dette er sannsynligvis en delt fil. Spør eieren av filen om å dele den med deg på nytt.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke lese denne filen, som sannsynligvis er en delt fil. Be eieren av filen om å dele den med deg på nytt.",
- "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" : "Hei,\n\nAdministratoren har aktivert serverkryptering. Filene dine er blitt kryptert med passordet '%s'.\n\nVennligst logg inn på web-grensesnittet, gå til seksjonen 'grunnleggende krypteringsmodul' i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet 'gammelt påloggingspassord' sammen med ditt nåværende påloggingspassord.\n\n",
+ "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" : "Hei,\n\nAdministratoren har aktivert tjenerkryptering. Filene dine er blitt kryptert med passordet '%s'.\n\nlogg inn på vev-grensesnittet, gå til seksjonen 'grunnleggende krypteringsmodul' i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet 'gammelt påloggingspassord' sammen med ditt nåværende påloggingspassord.\n",
"The share will expire on %s." : "Delingen vil opphøre %s.",
"Cheers!" : "Ha det!",
- "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>" : "Hei,<br><br>Administratoren har aktivert serverkryptering. Filene dine er blitt kryptert med passordet <strong>%s</strong>.<br><br>Vennligst logg inn på web-grensesnittet, gå til seksjonen \"grunnleggende krypteringsmodul\" i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet \"gammelt påloggingspassord\" sammen med ditt nåværende påloggingspassord.<br><br>",
+ "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>" : "Hei,<br><br>Administratoren har skrudd på tjenerkryptering. Filene dine er blitt kryptert med passordet <strong>%s</strong>.<br><br>Logg inn på vev-grensesnittet, gå til seksjonen \"grunnleggende krypteringsmodul\" i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet \"gammelt påloggingspassord\" sammen med ditt nåværende påloggingspassord.<br><br>",
"Default encryption module" : "Standard krypteringsmodul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen.",
"Encrypt the home storage" : "Krypter hjemmelageret",
@@ -56,6 +56,6 @@
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Aktivering av dette valget tillater deg å gjenerobre tilgang til dine krypterte filer i tilfelle du mister passordet ditt.",
"Enabled" : "Aktiv",
"Disabled" : "Inaktiv",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen."
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Program for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og inn igjen."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/pt_BR.js b/apps/encryption/l10n/pt_BR.js
index f8bb3026a8c..6f360224bc4 100644
--- a/apps/encryption/l10n/pt_BR.js
+++ b/apps/encryption/l10n/pt_BR.js
@@ -3,62 +3,62 @@ OC.L10N.register(
{
"Missing recovery key password" : "Está faltando a senha da chave de recuperação",
"Please repeat the recovery key password" : "Por favor, repita a senha da chave de recuperação",
- "Repeated recovery key password does not match the provided recovery key password" : "A senha repetida da chave de recuperação não corresponde a senha da chave de recuperação fornecida",
- "Recovery key successfully enabled" : "Recuperação de chave habilitada com sucesso",
- "Could not enable recovery key. Please check your recovery key password!" : "Impossível habilitar recuperação de chave. Por favor, verifique sua senha para recuperação de chave!",
- "Recovery key successfully disabled" : "Recuperação de chave desabilitada com sucesso",
- "Could not disable recovery key. Please check your recovery key password!" : "Impossível desabilitar recuperação de chave. Por favor, verifique sua senha para recuperação de chave!",
+ "Repeated recovery key password does not match the provided recovery key password" : "A senha repetida não corresponde à senha da chave de recuperação fornecida",
+ "Recovery key successfully enabled" : "Chave de recuperação habilitada com sucesso",
+ "Could not enable recovery key. Please check your recovery key password!" : "Impossível habilitar a chave de recuperação. Por favor, verifique a senha da chave de recuperação!",
+ "Recovery key successfully disabled" : "Chave de recuperação desabilitada com sucesso",
+ "Could not disable recovery key. Please check your recovery key password!" : "Impossível desabilitar a chave de recuperação. Por favor, verifique a senha da chave de recuperação!",
"Missing parameters" : "Parâmetros faltantes",
"Please provide the old recovery password" : "Por favor, forneça a antiga senha de recuperação",
"Please provide a new recovery password" : "Por favor, forneça a nova senha de recuperação",
"Please repeat the new recovery password" : "Por favor, repita a nova senha de recuperação",
"Password successfully changed." : "Senha alterada com sucesso.",
"Could not change the password. Maybe the old password was not correct." : "Não foi possível alterar a senha. Talvez a senha antiga não estivesse correta.",
- "Recovery Key disabled" : "Recuperação de chave desativada",
- "Recovery Key enabled" : "Recuperação de chave ativada",
- "Could not enable the recovery key, please try again or contact your administrator" : "Não foi possível ativar a recuperação de chave. Tente novamente ou entre em contato com seu administrador",
+ "Recovery Key disabled" : "Chave de recuperação desativada",
+ "Recovery Key enabled" : "Chave de recuperação ativada",
+ "Could not enable the recovery key, please try again or contact your administrator" : "Não foi possível ativar a chave de recuperação. Tente novamente ou entre em contato com o administrador",
"Could not update the private key password." : "Não foi possível atualizar a senha da chave privada.",
"The old password was not correct, please try again." : "A senha antiga não estava correta, por favor tente novamente.",
"The current log-in password was not correct, please try again." : "A senha atual de acesso não estava correta, por favor tente novamente.",
"Private key password successfully updated." : "Senha de chave privada atualizada com sucesso.",
- "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" : "Você precisa migrar suas chaves de criptografia a partir da antiga criptografia (ownCloud <= 8,0) para a nova. Por favor, execute 'occ encryption:migrate' ou contate o seu administrador",
+ "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" : "Você precisa migrar suas chaves de criptografia a partir da antiga criptografia (ownCloud <= 8,0) para a nova. Por favor, execute 'occ encryption:migrate' ou contate o administrador",
"Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave privada inválida para o aplicativo de criptografia. Atualize a senha da sua chave privada nas configurações pessoais para recuperar o acesso aos seus arquivos criptografados.",
- "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "O aplicativo de criptografia está habilitada mas suas chaves não foram inicializadas. Por favor, saia e entre novamente.",
- "Encryption app is enabled and ready" : "O aplicativo de criptografia está ativo e pronto",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "O aplicativo de criptografia está habilitado mas suas chaves não foram inicializadas. Por favor, saia e entre novamente.",
+ "Encryption app is enabled and ready" : "O aplicativo de criptografia está habilitado e pronto",
"Bad Signature" : "Assinatura ruim",
"Missing Signature" : "Assinatura faltante",
"one-time password for server-side-encryption" : "senha de uso único para criptografia do lado do servidor",
- "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Este arquivo não pode ser decriptografado pois provavelmente é um arquivo compartilhado. Por favor, peça ao dono do arquivo para compartilhá-lo com você.",
- "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este arquivo pois provavelmente é um arquivo compartilhado. Por favor, peça ao dono do arquivo para recompartilhar o arquivo com você.",
- "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" : "Olá,\n\nO administrador habilitou a criptografia do lado do servidor. Os seus arquivos foram criptografados usando a senha '%s'.\n\nPor favor faça o login para a interface da Web, vá para a seção 'módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua senha de login atual.\n\n",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Este arquivo não pode ser descriptografado pois provavelmente é um arquivo compartilhado. Por favor, peça ao dono do arquivo para recompartilhá-lo com você.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este arquivo pois provavelmente é um arquivo compartilhado. Por favor, peça ao dono do arquivo para recompartilhá-lo com você.",
+ "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" : "Olá,\n\nO administrador habilitou a criptografia do lado do servidor. Os seus arquivos foram criptografados usando a senha '%s'.\n\nPor favor faça o login na interface da Web, vá para a seção 'módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua senha de login atual.\n\n",
"The share will expire on %s." : "O compartilhamento irá expirar em %s.",
- "Cheers!" : "Saudações!",
- "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>" : "Olá,<br><br>o administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha <strong>%s</strong>.<br><br>Por favor, faça o login para a interface da Web, vá para a seção 'módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login.<br><br>",
+ "Cheers!" : "Saú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>" : "Olá,<br><br>o administrador habilitou a criptografia do lado do servidor. Os seus arquivos foram criptografados usando a senha <strong>%s</strong>.<br><br>Por favor, faça o login na interface da Web, vá para a seção 'módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua senha de login atual.<br><br>",
"Default encryption module" : "Módulo de criptografia padrão",
- "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "O aplicativo de criptografia está ativo, mas suas chaves não foram inicializadas. Autentique-se novamente.",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "O aplicativo de criptografia está habilitado, mas suas chaves não foram inicializadas. Por favor, saia e entre novamente.",
"Encrypt the home storage" : "Criptografar a pasta de armazenamento home",
- "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ativar essa opção de criptografia para todos os arquivos armazenados no armazenamento principal, caso contrário, apenas arquivos no armazenamento externo serão criptografados",
- "Enable recovery key" : "Habilitar recuperação de chave",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ativar essa opção irá criptografar todos os arquivos do armazenamento principal, caso contrário, apenas arquivos no armazenamento externo serão criptografados",
+ "Enable recovery key" : "Habilitar chave de recuperação",
"Disable recovery key" : "Dasabilitar chave de recuperação",
- "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperação é uma chave de criptografia extra que é utilizada para criptografar arquivos. Ela permite a recuperação de arquivos se um usuário esquecer a senha.",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperação é uma chave de criptografia extra que é utilizada para criptografar arquivos. Ela permite a recuperação de arquivos se um usuário esquecer sua senha.",
"Recovery key password" : "Senha da chave de recuperação",
"Repeat recovery key password" : "Repita a senha da chave de recuperação",
"Change recovery key password:" : "Mudar a senha da chave de recuperação:",
"Old recovery key password" : "Senha da chave de recuperação antiga",
- "New recovery key password" : "Nova senha da chave de recuperação",
- "Repeat new recovery key password" : "Repita a nova senha da chave de recuperação",
+ "New recovery key password" : "Senha nova da chave de recuperação",
+ "Repeat new recovery key password" : "Repita a senha nova da chave de recuperação",
"Change Password" : "Trocar senha",
"Basic encryption module" : "Módulo de criptografia básico",
"Your private key password no longer matches your log-in password." : "A sua senha de chave privada não corresponde a sua senha de login.",
- "Set your old private key password to your current log-in password:" : "Defina a sua antiga senha da chave privada para sua senha de login atual:",
- " If you don't remember your old password you can ask your administrator to recover your files." : "Se você não se lembra de sua antiga senha você pode pedir ao administrador que recupere seus arquivos.",
+ "Set your old private key password to your current log-in password:" : "Defina a sua senha antiga da chave privada para sua senha de login atual:",
+ " If you don't remember your old password you can ask your administrator to recover your files." : "Se você não se lembra de sua senha antiga você pode pedir ao administrador que recupere seus arquivos.",
"Old log-in password" : "Senha antiga de login",
"Current log-in password" : "Senha atual de login",
- "Update Private Key Password" : "Atualizar senha de chave privada",
+ "Update Private Key Password" : "Atualizar senha da chave privada",
"Enable password recovery:" : "Habilitar recuperação de senha:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ativar essa opção vai permitir que você obtenha novamente acesso aos seus arquivos criptografados em caso de perda de senha",
"Enabled" : "Habilitado",
"Disabled" : "Desabilitado",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "O aplicativo criptografia está ativado, mas as chaves não estão inicializadas. Por favor saia e entre novamente"
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "O aplicativo de criptografia está habilitado, mas as chaves não estão inicializadas. Por favor, saia e entre novamente"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/encryption/l10n/pt_BR.json b/apps/encryption/l10n/pt_BR.json
index c03061ae608..4c2d46e5d73 100644
--- a/apps/encryption/l10n/pt_BR.json
+++ b/apps/encryption/l10n/pt_BR.json
@@ -1,62 +1,62 @@
{ "translations": {
"Missing recovery key password" : "Está faltando a senha da chave de recuperação",
"Please repeat the recovery key password" : "Por favor, repita a senha da chave de recuperação",
- "Repeated recovery key password does not match the provided recovery key password" : "A senha repetida da chave de recuperação não corresponde a senha da chave de recuperação fornecida",
- "Recovery key successfully enabled" : "Recuperação de chave habilitada com sucesso",
- "Could not enable recovery key. Please check your recovery key password!" : "Impossível habilitar recuperação de chave. Por favor, verifique sua senha para recuperação de chave!",
- "Recovery key successfully disabled" : "Recuperação de chave desabilitada com sucesso",
- "Could not disable recovery key. Please check your recovery key password!" : "Impossível desabilitar recuperação de chave. Por favor, verifique sua senha para recuperação de chave!",
+ "Repeated recovery key password does not match the provided recovery key password" : "A senha repetida não corresponde à senha da chave de recuperação fornecida",
+ "Recovery key successfully enabled" : "Chave de recuperação habilitada com sucesso",
+ "Could not enable recovery key. Please check your recovery key password!" : "Impossível habilitar a chave de recuperação. Por favor, verifique a senha da chave de recuperação!",
+ "Recovery key successfully disabled" : "Chave de recuperação desabilitada com sucesso",
+ "Could not disable recovery key. Please check your recovery key password!" : "Impossível desabilitar a chave de recuperação. Por favor, verifique a senha da chave de recuperação!",
"Missing parameters" : "Parâmetros faltantes",
"Please provide the old recovery password" : "Por favor, forneça a antiga senha de recuperação",
"Please provide a new recovery password" : "Por favor, forneça a nova senha de recuperação",
"Please repeat the new recovery password" : "Por favor, repita a nova senha de recuperação",
"Password successfully changed." : "Senha alterada com sucesso.",
"Could not change the password. Maybe the old password was not correct." : "Não foi possível alterar a senha. Talvez a senha antiga não estivesse correta.",
- "Recovery Key disabled" : "Recuperação de chave desativada",
- "Recovery Key enabled" : "Recuperação de chave ativada",
- "Could not enable the recovery key, please try again or contact your administrator" : "Não foi possível ativar a recuperação de chave. Tente novamente ou entre em contato com seu administrador",
+ "Recovery Key disabled" : "Chave de recuperação desativada",
+ "Recovery Key enabled" : "Chave de recuperação ativada",
+ "Could not enable the recovery key, please try again or contact your administrator" : "Não foi possível ativar a chave de recuperação. Tente novamente ou entre em contato com o administrador",
"Could not update the private key password." : "Não foi possível atualizar a senha da chave privada.",
"The old password was not correct, please try again." : "A senha antiga não estava correta, por favor tente novamente.",
"The current log-in password was not correct, please try again." : "A senha atual de acesso não estava correta, por favor tente novamente.",
"Private key password successfully updated." : "Senha de chave privada atualizada com sucesso.",
- "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" : "Você precisa migrar suas chaves de criptografia a partir da antiga criptografia (ownCloud <= 8,0) para a nova. Por favor, execute 'occ encryption:migrate' ou contate o seu administrador",
+ "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" : "Você precisa migrar suas chaves de criptografia a partir da antiga criptografia (ownCloud <= 8,0) para a nova. Por favor, execute 'occ encryption:migrate' ou contate o administrador",
"Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave privada inválida para o aplicativo de criptografia. Atualize a senha da sua chave privada nas configurações pessoais para recuperar o acesso aos seus arquivos criptografados.",
- "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "O aplicativo de criptografia está habilitada mas suas chaves não foram inicializadas. Por favor, saia e entre novamente.",
- "Encryption app is enabled and ready" : "O aplicativo de criptografia está ativo e pronto",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "O aplicativo de criptografia está habilitado mas suas chaves não foram inicializadas. Por favor, saia e entre novamente.",
+ "Encryption app is enabled and ready" : "O aplicativo de criptografia está habilitado e pronto",
"Bad Signature" : "Assinatura ruim",
"Missing Signature" : "Assinatura faltante",
"one-time password for server-side-encryption" : "senha de uso único para criptografia do lado do servidor",
- "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Este arquivo não pode ser decriptografado pois provavelmente é um arquivo compartilhado. Por favor, peça ao dono do arquivo para compartilhá-lo com você.",
- "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este arquivo pois provavelmente é um arquivo compartilhado. Por favor, peça ao dono do arquivo para recompartilhar o arquivo com você.",
- "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" : "Olá,\n\nO administrador habilitou a criptografia do lado do servidor. Os seus arquivos foram criptografados usando a senha '%s'.\n\nPor favor faça o login para a interface da Web, vá para a seção 'módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua senha de login atual.\n\n",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Este arquivo não pode ser descriptografado pois provavelmente é um arquivo compartilhado. Por favor, peça ao dono do arquivo para recompartilhá-lo com você.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este arquivo pois provavelmente é um arquivo compartilhado. Por favor, peça ao dono do arquivo para recompartilhá-lo com você.",
+ "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" : "Olá,\n\nO administrador habilitou a criptografia do lado do servidor. Os seus arquivos foram criptografados usando a senha '%s'.\n\nPor favor faça o login na interface da Web, vá para a seção 'módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua senha de login atual.\n\n",
"The share will expire on %s." : "O compartilhamento irá expirar em %s.",
- "Cheers!" : "Saudações!",
- "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>" : "Olá,<br><br>o administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha <strong>%s</strong>.<br><br>Por favor, faça o login para a interface da Web, vá para a seção 'módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login.<br><br>",
+ "Cheers!" : "Saú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>" : "Olá,<br><br>o administrador habilitou a criptografia do lado do servidor. Os seus arquivos foram criptografados usando a senha <strong>%s</strong>.<br><br>Por favor, faça o login na interface da Web, vá para a seção 'módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua senha de login atual.<br><br>",
"Default encryption module" : "Módulo de criptografia padrão",
- "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "O aplicativo de criptografia está ativo, mas suas chaves não foram inicializadas. Autentique-se novamente.",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "O aplicativo de criptografia está habilitado, mas suas chaves não foram inicializadas. Por favor, saia e entre novamente.",
"Encrypt the home storage" : "Criptografar a pasta de armazenamento home",
- "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ativar essa opção de criptografia para todos os arquivos armazenados no armazenamento principal, caso contrário, apenas arquivos no armazenamento externo serão criptografados",
- "Enable recovery key" : "Habilitar recuperação de chave",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ativar essa opção irá criptografar todos os arquivos do armazenamento principal, caso contrário, apenas arquivos no armazenamento externo serão criptografados",
+ "Enable recovery key" : "Habilitar chave de recuperação",
"Disable recovery key" : "Dasabilitar chave de recuperação",
- "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperação é uma chave de criptografia extra que é utilizada para criptografar arquivos. Ela permite a recuperação de arquivos se um usuário esquecer a senha.",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperação é uma chave de criptografia extra que é utilizada para criptografar arquivos. Ela permite a recuperação de arquivos se um usuário esquecer sua senha.",
"Recovery key password" : "Senha da chave de recuperação",
"Repeat recovery key password" : "Repita a senha da chave de recuperação",
"Change recovery key password:" : "Mudar a senha da chave de recuperação:",
"Old recovery key password" : "Senha da chave de recuperação antiga",
- "New recovery key password" : "Nova senha da chave de recuperação",
- "Repeat new recovery key password" : "Repita a nova senha da chave de recuperação",
+ "New recovery key password" : "Senha nova da chave de recuperação",
+ "Repeat new recovery key password" : "Repita a senha nova da chave de recuperação",
"Change Password" : "Trocar senha",
"Basic encryption module" : "Módulo de criptografia básico",
"Your private key password no longer matches your log-in password." : "A sua senha de chave privada não corresponde a sua senha de login.",
- "Set your old private key password to your current log-in password:" : "Defina a sua antiga senha da chave privada para sua senha de login atual:",
- " If you don't remember your old password you can ask your administrator to recover your files." : "Se você não se lembra de sua antiga senha você pode pedir ao administrador que recupere seus arquivos.",
+ "Set your old private key password to your current log-in password:" : "Defina a sua senha antiga da chave privada para sua senha de login atual:",
+ " If you don't remember your old password you can ask your administrator to recover your files." : "Se você não se lembra de sua senha antiga você pode pedir ao administrador que recupere seus arquivos.",
"Old log-in password" : "Senha antiga de login",
"Current log-in password" : "Senha atual de login",
- "Update Private Key Password" : "Atualizar senha de chave privada",
+ "Update Private Key Password" : "Atualizar senha da chave privada",
"Enable password recovery:" : "Habilitar recuperação de senha:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ativar essa opção vai permitir que você obtenha novamente acesso aos seus arquivos criptografados em caso de perda de senha",
"Enabled" : "Habilitado",
"Disabled" : "Desabilitado",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "O aplicativo criptografia está ativado, mas as chaves não estão inicializadas. Por favor saia e entre novamente"
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "O aplicativo de criptografia está habilitado, mas as chaves não estão inicializadas. Por favor, saia e entre novamente"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/federatedfilesharing/l10n/nb.js b/apps/federatedfilesharing/l10n/nb.js
index ba56ec474e0..213fd2d345f 100644
--- a/apps/federatedfilesharing/l10n/nb.js
+++ b/apps/federatedfilesharing/l10n/nb.js
@@ -24,7 +24,7 @@ OC.L10N.register(
"Storage not valid" : "Lagringsplass ikke gyldig",
"Federated Share successfully added" : "Forent ressurs ble lagt til",
"Couldn't add remote share" : "Kunne ikke legge til ekstern ressurs",
- "Sharing %s failed, because this item is already shared with %s" : "Deling av %s feilet, fordi dette elementet allerede er delt med %s",
+ "Sharing %s failed, because this item is already shared with %s" : "Deling av %s mislyktes, fordi dette elementet allerede er delt med %s",
"Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en Sammenknyttet sky-deling med den samme brukeren",
"File is already shared with %s" : "Filen er allerede delt med %s",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Deling %s feilet, kunne ikke finne %s, kanskje tjeneren foreøyeblikket er utilgjengelig eller bruker selv-signert sertifikat.",
@@ -36,7 +36,7 @@ OC.L10N.register(
"Accept" : "Aksepter",
"Decline" : "Avslå",
"Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Del med meg gjennom min #Nextcloud ID for sammenknyttet sky, se %s",
- "Share with me through my #Nextcloud Federated Cloud ID" : "Del med meg gjennom min #Nextcloud ID for sammenknyttet sky",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Del med meg gjennom min #Nextcloud-ID for sammenknyttet sky",
"Federated Cloud Sharing" : "Sammenknyttet sky-deling",
"Open documentation" : "Åpne dokumentasjonen",
"Allow users on this server to send shares to other servers" : "Tillat at brukere på denne tjeneren sender delinger til andre tjenere",
@@ -44,7 +44,7 @@ OC.L10N.register(
"Federated Cloud" : "Sammenknyttet sky",
"Your Federated Cloud ID:" : "Din ID for sammenknyttet sky:",
"Share it:" : "Del den:",
- "Add to your website" : "Legg på websiden din",
+ "Add to your website" : "Legg på nettsiden din",
"Share with me via Nextcloud" : "Del med meg via Nextcloud",
"HTML Code:" : "HTML-kode:",
"Search global and public address book for users" : "Søk global og offentlige adressebøker etter brukere"
diff --git a/apps/federatedfilesharing/l10n/nb.json b/apps/federatedfilesharing/l10n/nb.json
index 38956799c32..dd7835280de 100644
--- a/apps/federatedfilesharing/l10n/nb.json
+++ b/apps/federatedfilesharing/l10n/nb.json
@@ -22,7 +22,7 @@
"Storage not valid" : "Lagringsplass ikke gyldig",
"Federated Share successfully added" : "Forent ressurs ble lagt til",
"Couldn't add remote share" : "Kunne ikke legge til ekstern ressurs",
- "Sharing %s failed, because this item is already shared with %s" : "Deling av %s feilet, fordi dette elementet allerede er delt med %s",
+ "Sharing %s failed, because this item is already shared with %s" : "Deling av %s mislyktes, fordi dette elementet allerede er delt med %s",
"Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en Sammenknyttet sky-deling med den samme brukeren",
"File is already shared with %s" : "Filen er allerede delt med %s",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Deling %s feilet, kunne ikke finne %s, kanskje tjeneren foreøyeblikket er utilgjengelig eller bruker selv-signert sertifikat.",
@@ -34,7 +34,7 @@
"Accept" : "Aksepter",
"Decline" : "Avslå",
"Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Del med meg gjennom min #Nextcloud ID for sammenknyttet sky, se %s",
- "Share with me through my #Nextcloud Federated Cloud ID" : "Del med meg gjennom min #Nextcloud ID for sammenknyttet sky",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Del med meg gjennom min #Nextcloud-ID for sammenknyttet sky",
"Federated Cloud Sharing" : "Sammenknyttet sky-deling",
"Open documentation" : "Åpne dokumentasjonen",
"Allow users on this server to send shares to other servers" : "Tillat at brukere på denne tjeneren sender delinger til andre tjenere",
@@ -42,7 +42,7 @@
"Federated Cloud" : "Sammenknyttet sky",
"Your Federated Cloud ID:" : "Din ID for sammenknyttet sky:",
"Share it:" : "Del den:",
- "Add to your website" : "Legg på websiden din",
+ "Add to your website" : "Legg på nettsiden din",
"Share with me via Nextcloud" : "Del med meg via Nextcloud",
"HTML Code:" : "HTML-kode:",
"Search global and public address book for users" : "Søk global og offentlige adressebøker etter brukere"
diff --git a/apps/federatedfilesharing/l10n/pt_BR.js b/apps/federatedfilesharing/l10n/pt_BR.js
index cbb09e90474..fb76cfcaa5a 100644
--- a/apps/federatedfilesharing/l10n/pt_BR.js
+++ b/apps/federatedfilesharing/l10n/pt_BR.js
@@ -24,10 +24,10 @@ OC.L10N.register(
"Storage not valid" : "Armazenamento inválido",
"Federated Share successfully added" : "Compartilhamento federado adicionado com sucesso",
"Couldn't add remote share" : "Não foi possível adicionar o compartilhamento remoto",
- "Sharing %s failed, because this item is already shared with %s" : "Compartilhamento %s falhou, porque este item já está compartilhado com %s",
- "Not allowed to create a federated share with the same user" : "Não é permitido criar um compartilhamento associado com o mesmo usuário",
+ "Sharing %s failed, because this item is already shared with %s" : "Compartilhamento %s falhou porque este item já está compartilhado com %s",
+ "Not allowed to create a federated share with the same user" : "Não é permitido criar um compartilhamento federado com o mesmo usuário",
"File is already shared with %s" : "O arquivo já é compartilhado com %s",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Compartilhamento %s falhou, não foi possível encontrar %s, talvez o servidor esteja inacessível ou esteja sendo utilizado um certificado de auto-assinatura",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Compartilhamento %s falhou, não foi possível encontrar %s. Talvez o servidor esteja inacessível ou esteja sendo utilizado um certificado de auto-assinatura",
"Could not find share" : "Não foi possível encontrar o compartilhamento",
"You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Voce recebeu \"%3$s\" como um compartilhamento remoto de %1$s ( em nome de %2$s )",
"You received {share} as a remote share from {user} (on behalf of {behalf})" : "Voce recebeu {share} como um compartilhamento remoto do {user} (em nome de {behalf})",
@@ -35,17 +35,17 @@ OC.L10N.register(
"You received {share} as a remote share from {user}" : "Voce recebeu {share} como um compartilhamento remoto de {user}",
"Accept" : "Aceitar",
"Decline" : "Rejeitar",
- "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Compartilhe comigo através do meu #Nextcloud Nuvem ID Federada, veja %s",
- "Share with me through my #Nextcloud Federated Cloud ID" : "Compartilhe comigo através do meu #Nextcloud Nuvem ID Federada",
- "Federated Cloud Sharing" : "Nuvem Associada Federada",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Compartilhe comigo através do meu ID de Nuvem Federada #Nexcloud, veja %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Compartilhe comigo através do meu ID de Nuvem Federada #Nexcloud",
+ "Federated Cloud Sharing" : "Compartilhamento de Nuvem Federada",
"Open documentation" : "Abrir documentação",
"Allow users on this server to send shares to other servers" : "Permitir que os usuários deste servidor enviem compartilhamentos para outros servidores",
"Allow users on this server to receive shares from other servers" : "Permitir que os usuários deste servidor recebam compartilhamentos de outros servidores",
"Search global and public address book for users and let local users publish their data" : "Pesquise o catálogo de endereços global e público para usuários e deixe os usuários locais publicarem seus dados",
"Allow users to publish their data to a global and public address book" : "Permitir que os usuários publiquem seus dados em um catálogo de endereços global e público",
"Federated Cloud" : "Nuvem Federada",
- "Your Federated Cloud ID:" : "Sua ID na Nuvem Federada:",
- "Share it:" : "Compartilhe:",
+ "Your Federated Cloud ID:" : "Sua ID de Nuvem Federada:",
+ "Share it:" : "Compartilhe-a:",
"Add to your website" : "Adicione ao seu website",
"Share with me via Nextcloud" : "Compartilhe comigo via Nextcloud",
"HTML Code:" : "Código HTML:",
diff --git a/apps/federatedfilesharing/l10n/pt_BR.json b/apps/federatedfilesharing/l10n/pt_BR.json
index e2a45ede216..690d96c07fa 100644
--- a/apps/federatedfilesharing/l10n/pt_BR.json
+++ b/apps/federatedfilesharing/l10n/pt_BR.json
@@ -22,10 +22,10 @@
"Storage not valid" : "Armazenamento inválido",
"Federated Share successfully added" : "Compartilhamento federado adicionado com sucesso",
"Couldn't add remote share" : "Não foi possível adicionar o compartilhamento remoto",
- "Sharing %s failed, because this item is already shared with %s" : "Compartilhamento %s falhou, porque este item já está compartilhado com %s",
- "Not allowed to create a federated share with the same user" : "Não é permitido criar um compartilhamento associado com o mesmo usuário",
+ "Sharing %s failed, because this item is already shared with %s" : "Compartilhamento %s falhou porque este item já está compartilhado com %s",
+ "Not allowed to create a federated share with the same user" : "Não é permitido criar um compartilhamento federado com o mesmo usuário",
"File is already shared with %s" : "O arquivo já é compartilhado com %s",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Compartilhamento %s falhou, não foi possível encontrar %s, talvez o servidor esteja inacessível ou esteja sendo utilizado um certificado de auto-assinatura",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Compartilhamento %s falhou, não foi possível encontrar %s. Talvez o servidor esteja inacessível ou esteja sendo utilizado um certificado de auto-assinatura",
"Could not find share" : "Não foi possível encontrar o compartilhamento",
"You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Voce recebeu \"%3$s\" como um compartilhamento remoto de %1$s ( em nome de %2$s )",
"You received {share} as a remote share from {user} (on behalf of {behalf})" : "Voce recebeu {share} como um compartilhamento remoto do {user} (em nome de {behalf})",
@@ -33,17 +33,17 @@
"You received {share} as a remote share from {user}" : "Voce recebeu {share} como um compartilhamento remoto de {user}",
"Accept" : "Aceitar",
"Decline" : "Rejeitar",
- "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Compartilhe comigo através do meu #Nextcloud Nuvem ID Federada, veja %s",
- "Share with me through my #Nextcloud Federated Cloud ID" : "Compartilhe comigo através do meu #Nextcloud Nuvem ID Federada",
- "Federated Cloud Sharing" : "Nuvem Associada Federada",
+ "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Compartilhe comigo através do meu ID de Nuvem Federada #Nexcloud, veja %s",
+ "Share with me through my #Nextcloud Federated Cloud ID" : "Compartilhe comigo através do meu ID de Nuvem Federada #Nexcloud",
+ "Federated Cloud Sharing" : "Compartilhamento de Nuvem Federada",
"Open documentation" : "Abrir documentação",
"Allow users on this server to send shares to other servers" : "Permitir que os usuários deste servidor enviem compartilhamentos para outros servidores",
"Allow users on this server to receive shares from other servers" : "Permitir que os usuários deste servidor recebam compartilhamentos de outros servidores",
"Search global and public address book for users and let local users publish their data" : "Pesquise o catálogo de endereços global e público para usuários e deixe os usuários locais publicarem seus dados",
"Allow users to publish their data to a global and public address book" : "Permitir que os usuários publiquem seus dados em um catálogo de endereços global e público",
"Federated Cloud" : "Nuvem Federada",
- "Your Federated Cloud ID:" : "Sua ID na Nuvem Federada:",
- "Share it:" : "Compartilhe:",
+ "Your Federated Cloud ID:" : "Sua ID de Nuvem Federada:",
+ "Share it:" : "Compartilhe-a:",
"Add to your website" : "Adicione ao seu website",
"Share with me via Nextcloud" : "Compartilhe comigo via Nextcloud",
"HTML Code:" : "Código HTML:",
diff --git a/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php b/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
index d7e466d1a64..9f848fbbb78 100644
--- a/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
+++ b/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php
@@ -120,7 +120,7 @@ class MountPublicLinkController extends Controller {
*
* @NoCSRFRequired
* @PublicPage
- * @BruteForceProtection publicLink2FederatedShare
+ * @BruteForceProtection(action=publicLink2FederatedShare)
*
* @param string $shareWith
* @param string $token
diff --git a/apps/federation/l10n/pt_BR.js b/apps/federation/l10n/pt_BR.js
index 7684b1cb009..7550880d368 100644
--- a/apps/federation/l10n/pt_BR.js
+++ b/apps/federation/l10n/pt_BR.js
@@ -1,13 +1,13 @@
OC.L10N.register(
"federation",
{
- "Added to the list of trusted servers" : "Adicionado a lista de servidores confiáveis.",
+ "Added to the list of trusted servers" : "Adicionado à lista de servidores confiáveis.",
"Server is already in the list of trusted servers." : "O servidor já está na lista de servidores confiáveis.",
- "No server to federate with found" : "Nenhum servidor para associar com o encontrado",
+ "No server to federate with found" : "Nenhum servidor encontrado para federar",
"Could not add server" : "Não foi possível adicionar servidor",
"Federation" : "Federação",
"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." : "Federação permite que você conecte com outros servidores confiáveis para trocar o diretório do usuário. Por exemplo, este atributo será usado para completar automaticamente usuários externos para compartilhamento federado.",
- "Add server automatically once a federated share was created successfully" : "Adicionar servidor automaticamente uma vez que um compartilhamento associado foi criado com êxito",
+ "Add server automatically once a federated share was created successfully" : "Adicionar servidor automaticamente uma vez que um compartilhamento federado foi criado com êxito",
"Trusted servers" : "Servidores confiáveis",
"+ Add trusted server" : "+Adicionar servidores confiáveis",
"Trusted server" : "Servidores confiáveis",
diff --git a/apps/federation/l10n/pt_BR.json b/apps/federation/l10n/pt_BR.json
index c5887d8f6a3..c44d3949602 100644
--- a/apps/federation/l10n/pt_BR.json
+++ b/apps/federation/l10n/pt_BR.json
@@ -1,11 +1,11 @@
{ "translations": {
- "Added to the list of trusted servers" : "Adicionado a lista de servidores confiáveis.",
+ "Added to the list of trusted servers" : "Adicionado à lista de servidores confiáveis.",
"Server is already in the list of trusted servers." : "O servidor já está na lista de servidores confiáveis.",
- "No server to federate with found" : "Nenhum servidor para associar com o encontrado",
+ "No server to federate with found" : "Nenhum servidor encontrado para federar",
"Could not add server" : "Não foi possível adicionar servidor",
"Federation" : "Federação",
"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." : "Federação permite que você conecte com outros servidores confiáveis para trocar o diretório do usuário. Por exemplo, este atributo será usado para completar automaticamente usuários externos para compartilhamento federado.",
- "Add server automatically once a federated share was created successfully" : "Adicionar servidor automaticamente uma vez que um compartilhamento associado foi criado com êxito",
+ "Add server automatically once a federated share was created successfully" : "Adicionar servidor automaticamente uma vez que um compartilhamento federado foi criado com êxito",
"Trusted servers" : "Servidores confiáveis",
"+ Add trusted server" : "+Adicionar servidores confiáveis",
"Trusted server" : "Servidores confiáveis",
diff --git a/apps/files/js/mainfileinfodetailview.js b/apps/files/js/mainfileinfodetailview.js
index e815fa70ecb..f5f9e926f64 100644
--- a/apps/files/js/mainfileinfodetailview.js
+++ b/apps/files/js/mainfileinfodetailview.js
@@ -169,7 +169,7 @@
starAltText: isFavorite ? t('files', 'Favorited') : t('files', 'Favorite'),
starClass: isFavorite ? 'icon-starred' : 'icon-star',
permalink: this._makePermalink(this.model.get('id')),
- permalinkTitle: t('files', 'Copy local link')
+ permalinkTitle: t('files', 'Copy direct link (only works for users who have access to this file/folder)')
}));
// TODO: we really need OC.Previews
diff --git a/apps/files/l10n/bg.js b/apps/files/l10n/bg.js
index df644f4f685..fcf892fc592 100644
--- a/apps/files/l10n/bg.js
+++ b/apps/files/l10n/bg.js
@@ -66,7 +66,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n байт","%n байта"],
"Favorited" : "Отбелязано в любими",
"Favorite" : "Любими",
- "Copy local link" : "Копиране на локална връзка",
"Folder" : "Папка",
"New folder" : "Нова папка",
"Upload" : "Качване",
@@ -132,6 +131,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}и",
"Any moment now..." : "Всеки момент...",
"Soon..." : "Скоро...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Извършва се качване на файлове. Затварянето на тази страница ще прекъсне качването."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Извършва се качване на файлове. Затварянето на тази страница ще прекъсне качването.",
+ "Copy local link" : "Копиране на локална връзка"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/bg.json b/apps/files/l10n/bg.json
index c9652d19e49..b26d06c7171 100644
--- a/apps/files/l10n/bg.json
+++ b/apps/files/l10n/bg.json
@@ -64,7 +64,6 @@
"_%n byte_::_%n bytes_" : ["%n байт","%n байта"],
"Favorited" : "Отбелязано в любими",
"Favorite" : "Любими",
- "Copy local link" : "Копиране на локална връзка",
"Folder" : "Папка",
"New folder" : "Нова папка",
"Upload" : "Качване",
@@ -130,6 +129,7 @@
"{seconds}s" : "{seconds}и",
"Any moment now..." : "Всеки момент...",
"Soon..." : "Скоро...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Извършва се качване на файлове. Затварянето на тази страница ще прекъсне качването."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Извършва се качване на файлове. Затварянето на тази страница ще прекъсне качването.",
+ "Copy local link" : "Копиране на локална връзка"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ca.js b/apps/files/l10n/ca.js
index c4215708bf8..c7c34ecec34 100644
--- a/apps/files/l10n/ca.js
+++ b/apps/files/l10n/ca.js
@@ -63,7 +63,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Agregat a favorits",
"Favorite" : "Preferits",
- "Copy local link" : "C",
"Folder" : "Carpeta",
"New folder" : "Carpeta nova",
"Upload" : "Puja",
@@ -115,6 +114,7 @@ OC.L10N.register(
"_{seconds} second left_::_{seconds} seconds left_" : ["Falta {seconds} segon","Falten {seconds} segons"],
"{seconds}s" : "{seconds}s",
"Soon..." : "Aviat...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà.",
+ "Copy local link" : "C"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/ca.json b/apps/files/l10n/ca.json
index ef192866976..2fe4a0e405e 100644
--- a/apps/files/l10n/ca.json
+++ b/apps/files/l10n/ca.json
@@ -61,7 +61,6 @@
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Agregat a favorits",
"Favorite" : "Preferits",
- "Copy local link" : "C",
"Folder" : "Carpeta",
"New folder" : "Carpeta nova",
"Upload" : "Puja",
@@ -113,6 +112,7 @@
"_{seconds} second left_::_{seconds} seconds left_" : ["Falta {seconds} segon","Falten {seconds} segons"],
"{seconds}s" : "{seconds}s",
"Soon..." : "Aviat...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà.",
+ "Copy local link" : "C"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/cs.js b/apps/files/l10n/cs.js
index d93bf542755..688e0ea0815 100644
--- a/apps/files/l10n/cs.js
+++ b/apps/files/l10n/cs.js
@@ -69,7 +69,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtů"],
"Favorited" : "Přidáno k oblíbeným",
"Favorite" : "Oblíbené",
- "Copy local link" : "Kopírovat místní odkaz",
"Folder" : "Adresář",
"New folder" : "Nový adresář",
"Upload" : "Odeslat",
@@ -138,6 +137,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}s",
"Any moment now..." : "Každou chvíli...",
"Soon..." : "Brzy...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Probíhá odesílání souboru. Opuštění stránky způsobí zrušení nahrávání."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Probíhá odesílání souboru. Opuštění stránky způsobí zrušení nahrávání.",
+ "Copy local link" : "Kopírovat místní odkaz"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/files/l10n/cs.json b/apps/files/l10n/cs.json
index 1bf33d068a2..4b131e50e3d 100644
--- a/apps/files/l10n/cs.json
+++ b/apps/files/l10n/cs.json
@@ -67,7 +67,6 @@
"_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtů"],
"Favorited" : "Přidáno k oblíbeným",
"Favorite" : "Oblíbené",
- "Copy local link" : "Kopírovat místní odkaz",
"Folder" : "Adresář",
"New folder" : "Nový adresář",
"Upload" : "Odeslat",
@@ -136,6 +135,7 @@
"{seconds}s" : "{seconds}s",
"Any moment now..." : "Každou chvíli...",
"Soon..." : "Brzy...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Probíhá odesílání souboru. Opuštění stránky způsobí zrušení nahrávání."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Probíhá odesílání souboru. Opuštění stránky způsobí zrušení nahrávání.",
+ "Copy local link" : "Kopírovat místní odkaz"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js
index 6361f2a73a5..033cd7289c6 100644
--- a/apps/files/l10n/de.js
+++ b/apps/files/l10n/de.js
@@ -69,7 +69,7 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n Byte","%n Bytes"],
"Favorited" : "Favorisiert",
"Favorite" : "Favorit",
- "Copy local link" : "Kopiere lokale Verknüpfung",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Direkten Link kopieren (funktioniert nur für Nutzer, die Zugriff auf diese(n) Datei/Ordner haben)",
"Folder" : "Ordner",
"New folder" : "Neuer Ordner",
"Upload" : "Hochladen",
@@ -138,6 +138,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}n",
"Any moment now..." : "Jeden Augenblick...",
"Soon..." : "Bald...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Dateiupload läuft. Wenn die Seite jetzt verlassen wird, bricht der Upload ab."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Dateiupload läuft. Wenn die Seite jetzt verlassen wird, bricht der Upload ab.",
+ "Copy local link" : "Kopiere lokale Verknüpfung"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json
index 4a9b66a113b..ab8febbde29 100644
--- a/apps/files/l10n/de.json
+++ b/apps/files/l10n/de.json
@@ -67,7 +67,7 @@
"_%n byte_::_%n bytes_" : ["%n Byte","%n Bytes"],
"Favorited" : "Favorisiert",
"Favorite" : "Favorit",
- "Copy local link" : "Kopiere lokale Verknüpfung",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Direkten Link kopieren (funktioniert nur für Nutzer, die Zugriff auf diese(n) Datei/Ordner haben)",
"Folder" : "Ordner",
"New folder" : "Neuer Ordner",
"Upload" : "Hochladen",
@@ -136,6 +136,7 @@
"{seconds}s" : "{seconds}n",
"Any moment now..." : "Jeden Augenblick...",
"Soon..." : "Bald...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Dateiupload läuft. Wenn die Seite jetzt verlassen wird, bricht der Upload ab."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Dateiupload läuft. Wenn die Seite jetzt verlassen wird, bricht der Upload ab.",
+ "Copy local link" : "Kopiere lokale Verknüpfung"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js
index c999dd79434..5cfc3ee1761 100644
--- a/apps/files/l10n/de_DE.js
+++ b/apps/files/l10n/de_DE.js
@@ -69,7 +69,7 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n Byte","%n Bytes"],
"Favorited" : "Favorisiert",
"Favorite" : "Favorit",
- "Copy local link" : "Lokalen Link kopieren",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Direkten Link kopieren (funktioniert nur für Nutzer, die Zugriff auf diese(n) Datei/Ordner haben)",
"Folder" : "Ordner",
"New folder" : "Neuer Ordner",
"Upload" : "Hochladen",
@@ -138,6 +138,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}s",
"Any moment now..." : "Jeden Augenblick...",
"Soon..." : "Bald...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.",
+ "Copy local link" : "Lokalen Link kopieren"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json
index f242e6c8ddf..c66771cdfd4 100644
--- a/apps/files/l10n/de_DE.json
+++ b/apps/files/l10n/de_DE.json
@@ -67,7 +67,7 @@
"_%n byte_::_%n bytes_" : ["%n Byte","%n Bytes"],
"Favorited" : "Favorisiert",
"Favorite" : "Favorit",
- "Copy local link" : "Lokalen Link kopieren",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Direkten Link kopieren (funktioniert nur für Nutzer, die Zugriff auf diese(n) Datei/Ordner haben)",
"Folder" : "Ordner",
"New folder" : "Neuer Ordner",
"Upload" : "Hochladen",
@@ -136,6 +136,7 @@
"{seconds}s" : "{seconds}s",
"Any moment now..." : "Jeden Augenblick...",
"Soon..." : "Bald...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.",
+ "Copy local link" : "Lokalen Link kopieren"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js
index 156d41618d7..c35c09e6f24 100644
--- a/apps/files/l10n/es.js
+++ b/apps/files/l10n/es.js
@@ -69,7 +69,7 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Agregado a Favoritos",
"Favorite" : "Favorito",
- "Copy local link" : "Copiar enlace local",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Copiae enlace directo (solo funciona para usuarios que tienen acceso a este archivo/carpeta)",
"Folder" : "Carpeta",
"New folder" : "Nueva carpeta",
"Upload" : "Subir",
@@ -138,6 +138,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}s",
"Any moment now..." : "En cualquier momento...",
"Soon..." : "Dentro de poco...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "La subida del archivo está en proceso. Si sale de la página ahora, la subida será cancelada."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "La subida del archivo está en proceso. Si sale de la página ahora, la subida será cancelada.",
+ "Copy local link" : "Copiar enlace local"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json
index 166c10194eb..3e48947891d 100644
--- a/apps/files/l10n/es.json
+++ b/apps/files/l10n/es.json
@@ -67,7 +67,7 @@
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Agregado a Favoritos",
"Favorite" : "Favorito",
- "Copy local link" : "Copiar enlace local",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Copiae enlace directo (solo funciona para usuarios que tienen acceso a este archivo/carpeta)",
"Folder" : "Carpeta",
"New folder" : "Nueva carpeta",
"Upload" : "Subir",
@@ -136,6 +136,7 @@
"{seconds}s" : "{seconds}s",
"Any moment now..." : "En cualquier momento...",
"Soon..." : "Dentro de poco...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "La subida del archivo está en proceso. Si sale de la página ahora, la subida será cancelada."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "La subida del archivo está en proceso. Si sale de la página ahora, la subida será cancelada.",
+ "Copy local link" : "Copiar enlace local"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_MX.js b/apps/files/l10n/es_MX.js
index 9639fc176c3..aadd2b59564 100644
--- a/apps/files/l10n/es_MX.js
+++ b/apps/files/l10n/es_MX.js
@@ -69,7 +69,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Marcado como favorito",
"Favorite" : "Favorito",
- "Copy local link" : "Copiar liga local",
"Folder" : "Carpeta",
"New folder" : "Carpeta nueva",
"Upload" : "Cargar",
@@ -138,6 +137,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}s",
"Any moment now..." : "En cualquier momento...",
"Soon..." : "Pronto...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "La carga del archivo está en curso. El salir de la página ahora, la cancelará. "
+ "File upload is in progress. Leaving the page now will cancel the upload." : "La carga del archivo está en curso. El salir de la página ahora, la cancelará. ",
+ "Copy local link" : "Copiar liga local"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/es_MX.json b/apps/files/l10n/es_MX.json
index c570d6825b9..f35ba7acdb6 100644
--- a/apps/files/l10n/es_MX.json
+++ b/apps/files/l10n/es_MX.json
@@ -67,7 +67,6 @@
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Marcado como favorito",
"Favorite" : "Favorito",
- "Copy local link" : "Copiar liga local",
"Folder" : "Carpeta",
"New folder" : "Carpeta nueva",
"Upload" : "Cargar",
@@ -136,6 +135,7 @@
"{seconds}s" : "{seconds}s",
"Any moment now..." : "En cualquier momento...",
"Soon..." : "Pronto...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "La carga del archivo está en curso. El salir de la página ahora, la cancelará. "
+ "File upload is in progress. Leaving the page now will cancel the upload." : "La carga del archivo está en curso. El salir de la página ahora, la cancelará. ",
+ "Copy local link" : "Copiar liga local"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/eu.js b/apps/files/l10n/eu.js
index 07bca47a101..97b6def92e1 100644
--- a/apps/files/l10n/eu.js
+++ b/apps/files/l10n/eu.js
@@ -67,7 +67,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Gogokoa",
"Favorite" : "Gogokoa",
- "Copy local link" : "Kopiatu tokiko esteka",
"Folder" : "Karpeta",
"New folder" : "Karpeta berria",
"Upload" : "Igo",
@@ -136,6 +135,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}s",
"Any moment now..." : "Edozein unean...",
"Soon..." : "Laster...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du.",
+ "Copy local link" : "Kopiatu tokiko esteka"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/eu.json b/apps/files/l10n/eu.json
index 3f787ef9d17..f1977eb7d3d 100644
--- a/apps/files/l10n/eu.json
+++ b/apps/files/l10n/eu.json
@@ -65,7 +65,6 @@
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Gogokoa",
"Favorite" : "Gogokoa",
- "Copy local link" : "Kopiatu tokiko esteka",
"Folder" : "Karpeta",
"New folder" : "Karpeta berria",
"Upload" : "Igo",
@@ -134,6 +133,7 @@
"{seconds}s" : "{seconds}s",
"Any moment now..." : "Edozein unean...",
"Soon..." : "Laster...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du.",
+ "Copy local link" : "Kopiatu tokiko esteka"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/fi.js b/apps/files/l10n/fi.js
index fb96936ff44..cf147598aee 100644
--- a/apps/files/l10n/fi.js
+++ b/apps/files/l10n/fi.js
@@ -69,7 +69,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n tavu","%n tavua"],
"Favorited" : "Lisätty suosikkeihin",
"Favorite" : "Suosikki",
- "Copy local link" : "Kopioi paikallinen linkki",
"Folder" : "Kansio",
"New folder" : "Uusi kansio",
"Upload" : "Lähetä",
@@ -138,6 +137,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds} s",
"Any moment now..." : "Minä tahansa hetkenä...",
"Soon..." : "Pian...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen.",
+ "Copy local link" : "Kopioi paikallinen linkki"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/fi.json b/apps/files/l10n/fi.json
index 59c47112731..f92587c0222 100644
--- a/apps/files/l10n/fi.json
+++ b/apps/files/l10n/fi.json
@@ -67,7 +67,6 @@
"_%n byte_::_%n bytes_" : ["%n tavu","%n tavua"],
"Favorited" : "Lisätty suosikkeihin",
"Favorite" : "Suosikki",
- "Copy local link" : "Kopioi paikallinen linkki",
"Folder" : "Kansio",
"New folder" : "Uusi kansio",
"Upload" : "Lähetä",
@@ -136,6 +135,7 @@
"{seconds}s" : "{seconds} s",
"Any moment now..." : "Minä tahansa hetkenä...",
"Soon..." : "Pian...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen.",
+ "Copy local link" : "Kopioi paikallinen linkki"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js
index 910e7990b89..0c6efff7122 100644
--- a/apps/files/l10n/fr.js
+++ b/apps/files/l10n/fr.js
@@ -69,7 +69,7 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n octet","%n octets"],
"Favorited" : "Marqué comme favori",
"Favorite" : "Favoris",
- "Copy local link" : "Copier le dossier local",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Copier lien direct (fonctionne seulement pour les utilisateurs qui ont accès a ce fichier/dossier)",
"Folder" : "Dossier",
"New folder" : "Nouveau dossier",
"Upload" : "Téléverser",
@@ -138,6 +138,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}s",
"Any moment now..." : "D'ici quelques instants…",
"Soon..." : "Bientôt…",
- "File upload is in progress. Leaving the page now will cancel the upload." : "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier.",
+ "Copy local link" : "Copier le dossier local"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json
index 281f2a72411..fb180015799 100644
--- a/apps/files/l10n/fr.json
+++ b/apps/files/l10n/fr.json
@@ -67,7 +67,7 @@
"_%n byte_::_%n bytes_" : ["%n octet","%n octets"],
"Favorited" : "Marqué comme favori",
"Favorite" : "Favoris",
- "Copy local link" : "Copier le dossier local",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Copier lien direct (fonctionne seulement pour les utilisateurs qui ont accès a ce fichier/dossier)",
"Folder" : "Dossier",
"New folder" : "Nouveau dossier",
"Upload" : "Téléverser",
@@ -136,6 +136,7 @@
"{seconds}s" : "{seconds}s",
"Any moment now..." : "D'ici quelques instants…",
"Soon..." : "Bientôt…",
- "File upload is in progress. Leaving the page now will cancel the upload." : "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier.",
+ "Copy local link" : "Copier le dossier local"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/hu.js b/apps/files/l10n/hu.js
index 9c8ad41159a..821be76a75b 100644
--- a/apps/files/l10n/hu.js
+++ b/apps/files/l10n/hu.js
@@ -69,7 +69,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n bájt","%n bájt"],
"Favorited" : "Kedvenc",
"Favorite" : "Kedvenc",
- "Copy local link" : "Helyi hivatkozás másolása",
"Folder" : "Mappa",
"New folder" : "Új mappa",
"Upload" : "Feltöltés",
@@ -138,6 +137,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}mp",
"Any moment now..." : "Mostmár bármelyik pillanatban...",
"Soon..." : "Hamarosan...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést.",
+ "Copy local link" : "Helyi hivatkozás másolása"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/hu.json b/apps/files/l10n/hu.json
index edad01f94bf..52dc298501c 100644
--- a/apps/files/l10n/hu.json
+++ b/apps/files/l10n/hu.json
@@ -67,7 +67,6 @@
"_%n byte_::_%n bytes_" : ["%n bájt","%n bájt"],
"Favorited" : "Kedvenc",
"Favorite" : "Kedvenc",
- "Copy local link" : "Helyi hivatkozás másolása",
"Folder" : "Mappa",
"New folder" : "Új mappa",
"Upload" : "Feltöltés",
@@ -136,6 +135,7 @@
"{seconds}s" : "{seconds}mp",
"Any moment now..." : "Mostmár bármelyik pillanatban...",
"Soon..." : "Hamarosan...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést.",
+ "Copy local link" : "Helyi hivatkozás másolása"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ia.js b/apps/files/l10n/ia.js
index c2979b0ac15..1699874b05a 100644
--- a/apps/files/l10n/ia.js
+++ b/apps/files/l10n/ia.js
@@ -69,7 +69,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Favorite",
"Favorite" : "Favorite",
- "Copy local link" : "Copiar ligamine local",
"Folder" : "Dossier",
"New folder" : "Nove dossier",
"Upload" : "Incargar",
@@ -138,6 +137,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}s",
"Any moment now..." : "A qualcunque momento...",
"Soon..." : "Proximemente...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Incarga de un file es in progresso. Quitar le pagina ora cancellara le incarga."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Incarga de un file es in progresso. Quitar le pagina ora cancellara le incarga.",
+ "Copy local link" : "Copiar ligamine local"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/ia.json b/apps/files/l10n/ia.json
index 21b940d1f23..a1a394d3dc9 100644
--- a/apps/files/l10n/ia.json
+++ b/apps/files/l10n/ia.json
@@ -67,7 +67,6 @@
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Favorite",
"Favorite" : "Favorite",
- "Copy local link" : "Copiar ligamine local",
"Folder" : "Dossier",
"New folder" : "Nove dossier",
"Upload" : "Incargar",
@@ -136,6 +135,7 @@
"{seconds}s" : "{seconds}s",
"Any moment now..." : "A qualcunque momento...",
"Soon..." : "Proximemente...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Incarga de un file es in progresso. Quitar le pagina ora cancellara le incarga."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Incarga de un file es in progresso. Quitar le pagina ora cancellara le incarga.",
+ "Copy local link" : "Copiar ligamine local"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js
index 6560efafd9f..e378daa7c64 100644
--- a/apps/files/l10n/is.js
+++ b/apps/files/l10n/is.js
@@ -69,7 +69,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n bæti","%n bæti"],
"Favorited" : "Sett í eftirlæti",
"Favorite" : "Eftirlæti",
- "Copy local link" : "Afrita staðværan tengil",
"Folder" : "Mappa",
"New folder" : "Ný mappa",
"Upload" : "Senda inn",
@@ -138,6 +137,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}sek",
"Any moment now..." : "Á hverri stundu...",
"Soon..." : "Bráðum...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending hætta."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending hætta.",
+ "Copy local link" : "Afrita staðværan tengil"
},
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json
index fc6e431d87b..1a24f509452 100644
--- a/apps/files/l10n/is.json
+++ b/apps/files/l10n/is.json
@@ -67,7 +67,6 @@
"_%n byte_::_%n bytes_" : ["%n bæti","%n bæti"],
"Favorited" : "Sett í eftirlæti",
"Favorite" : "Eftirlæti",
- "Copy local link" : "Afrita staðværan tengil",
"Folder" : "Mappa",
"New folder" : "Ný mappa",
"Upload" : "Senda inn",
@@ -136,6 +135,7 @@
"{seconds}s" : "{seconds}sek",
"Any moment now..." : "Á hverri stundu...",
"Soon..." : "Bráðum...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending hætta."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending hætta.",
+ "Copy local link" : "Afrita staðværan tengil"
},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
} \ No newline at end of file
diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js
index 4f0b6a28e25..f9c00850473 100644
--- a/apps/files/l10n/it.js
+++ b/apps/files/l10n/it.js
@@ -69,7 +69,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n byte","%n byte"],
"Favorited" : "Preferiti",
"Favorite" : "Preferito",
- "Copy local link" : "Copia collegamento locale",
"Folder" : "Cartella",
"New folder" : "Nuova cartella",
"Upload" : "Carica",
@@ -138,6 +137,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}s",
"Any moment now..." : "Da un momento all'altro...",
"Soon..." : "Presto...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento.",
+ "Copy local link" : "Copia collegamento locale"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json
index fbf44a6cd32..fa64af5021f 100644
--- a/apps/files/l10n/it.json
+++ b/apps/files/l10n/it.json
@@ -67,7 +67,6 @@
"_%n byte_::_%n bytes_" : ["%n byte","%n byte"],
"Favorited" : "Preferiti",
"Favorite" : "Preferito",
- "Copy local link" : "Copia collegamento locale",
"Folder" : "Cartella",
"New folder" : "Nuova cartella",
"Upload" : "Carica",
@@ -136,6 +135,7 @@
"{seconds}s" : "{seconds}s",
"Any moment now..." : "Da un momento all'altro...",
"Soon..." : "Presto...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento.",
+ "Copy local link" : "Copia collegamento locale"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js
index 69ee8df33f8..d34a09d84c9 100644
--- a/apps/files/l10n/ja.js
+++ b/apps/files/l10n/ja.js
@@ -69,7 +69,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n バイト"],
"Favorited" : "お気に入り済",
"Favorite" : "お気に入り",
- "Copy local link" : "ローカルリンクをコピー",
"Folder" : "フォルダー",
"New folder" : "新しいフォルダー",
"Upload" : "アップロード",
@@ -138,6 +137,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds} 秒",
"Any moment now..." : "まもなく…",
"Soon..." : "まもなく…",
- "File upload is in progress. Leaving the page now will cancel the upload." : "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。"
+ "File upload is in progress. Leaving the page now will cancel the upload." : "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。",
+ "Copy local link" : "ローカルリンクをコピー"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json
index 0580018a7c9..95c28d948ae 100644
--- a/apps/files/l10n/ja.json
+++ b/apps/files/l10n/ja.json
@@ -67,7 +67,6 @@
"_%n byte_::_%n bytes_" : ["%n バイト"],
"Favorited" : "お気に入り済",
"Favorite" : "お気に入り",
- "Copy local link" : "ローカルリンクをコピー",
"Folder" : "フォルダー",
"New folder" : "新しいフォルダー",
"Upload" : "アップロード",
@@ -136,6 +135,7 @@
"{seconds}s" : "{seconds} 秒",
"Any moment now..." : "まもなく…",
"Soon..." : "まもなく…",
- "File upload is in progress. Leaving the page now will cancel the upload." : "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。"
+ "File upload is in progress. Leaving the page now will cancel the upload." : "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。",
+ "Copy local link" : "ローカルリンクをコピー"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/ko.js b/apps/files/l10n/ko.js
index e6ecc62f97e..5e351168f99 100644
--- a/apps/files/l10n/ko.js
+++ b/apps/files/l10n/ko.js
@@ -65,7 +65,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n바이트"],
"Favorited" : "책갈피에 추가됨",
"Favorite" : "즐겨찾기",
- "Copy local link" : "로컬 링크 복사",
"Folder" : "폴더",
"New folder" : "새 폴더",
"Upload" : "업로드",
@@ -130,6 +129,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}초",
"Any moment now..." : "조금 남음",
"Soon..." : "곧...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다.",
+ "Copy local link" : "로컬 링크 복사"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/ko.json b/apps/files/l10n/ko.json
index 36bdd19c3c5..d433d98dd97 100644
--- a/apps/files/l10n/ko.json
+++ b/apps/files/l10n/ko.json
@@ -63,7 +63,6 @@
"_%n byte_::_%n bytes_" : ["%n바이트"],
"Favorited" : "책갈피에 추가됨",
"Favorite" : "즐겨찾기",
- "Copy local link" : "로컬 링크 복사",
"Folder" : "폴더",
"New folder" : "새 폴더",
"Upload" : "업로드",
@@ -128,6 +127,7 @@
"{seconds}s" : "{seconds}초",
"Any moment now..." : "조금 남음",
"Soon..." : "곧...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다.",
+ "Copy local link" : "로컬 링크 복사"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/lb.js b/apps/files/l10n/lb.js
index 06669c9f94d..af23af7cac6 100644
--- a/apps/files/l10n/lb.js
+++ b/apps/files/l10n/lb.js
@@ -69,7 +69,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["¦%n Byte","¦%n Byte"],
"Favorited" : "Favoriséiert",
"Favorite" : "Favorit",
- "Copy local link" : "Lokale Link kopéiert",
"Folder" : "Dossier",
"New folder" : "Neien Dossier",
"Upload" : "Eroplueden",
@@ -138,6 +137,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}s",
"Any moment now..." : "An engen Moment",
"Soon..." : "Geschwënn",
- "File upload is in progress. Leaving the page now will cancel the upload." : "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach.",
+ "Copy local link" : "Lokale Link kopéiert"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/lb.json b/apps/files/l10n/lb.json
index a00689bcec8..bd8402961dd 100644
--- a/apps/files/l10n/lb.json
+++ b/apps/files/l10n/lb.json
@@ -67,7 +67,6 @@
"_%n byte_::_%n bytes_" : ["¦%n Byte","¦%n Byte"],
"Favorited" : "Favoriséiert",
"Favorite" : "Favorit",
- "Copy local link" : "Lokale Link kopéiert",
"Folder" : "Dossier",
"New folder" : "Neien Dossier",
"Upload" : "Eroplueden",
@@ -136,6 +135,7 @@
"{seconds}s" : "{seconds}s",
"Any moment now..." : "An engen Moment",
"Soon..." : "Geschwënn",
- "File upload is in progress. Leaving the page now will cancel the upload." : "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach.",
+ "Copy local link" : "Lokale Link kopéiert"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/lt_LT.js b/apps/files/l10n/lt_LT.js
index 1a477e2c0f8..a30503fc443 100644
--- a/apps/files/l10n/lt_LT.js
+++ b/apps/files/l10n/lt_LT.js
@@ -69,7 +69,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n baitas","%n baitai","%n baitų"],
"Favorited" : "Pažymėta mėgstamu",
"Favorite" : "Mėgiamas",
- "Copy local link" : "Kopijuoti vietinę nuorodą",
"Folder" : "Aplankas",
"New folder" : "Naujas aplankas",
"Upload" : "Įkelti",
@@ -138,6 +137,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}s",
"Any moment now..." : "Bet kuriuo metu...",
"Soon..." : "Netrukus...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Failo įkėlimas yra eigoje. Jei išeisite iš šio puslapio, įkėlimo bus atsisakyta."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Failo įkėlimas yra eigoje. Jei išeisite iš šio puslapio, įkėlimo bus atsisakyta.",
+ "Copy local link" : "Kopijuoti vietinę nuorodą"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files/l10n/lt_LT.json b/apps/files/l10n/lt_LT.json
index f054bdee3e9..13414dbebed 100644
--- a/apps/files/l10n/lt_LT.json
+++ b/apps/files/l10n/lt_LT.json
@@ -67,7 +67,6 @@
"_%n byte_::_%n bytes_" : ["%n baitas","%n baitai","%n baitų"],
"Favorited" : "Pažymėta mėgstamu",
"Favorite" : "Mėgiamas",
- "Copy local link" : "Kopijuoti vietinę nuorodą",
"Folder" : "Aplankas",
"New folder" : "Naujas aplankas",
"Upload" : "Įkelti",
@@ -136,6 +135,7 @@
"{seconds}s" : "{seconds}s",
"Any moment now..." : "Bet kuriuo metu...",
"Soon..." : "Netrukus...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Failo įkėlimas yra eigoje. Jei išeisite iš šio puslapio, įkėlimo bus atsisakyta."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Failo įkėlimas yra eigoje. Jei išeisite iš šio puslapio, įkėlimo bus atsisakyta.",
+ "Copy local link" : "Kopijuoti vietinę nuorodą"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files/l10n/lv.js b/apps/files/l10n/lv.js
index c02c20e49b3..6fcecfdf421 100644
--- a/apps/files/l10n/lv.js
+++ b/apps/files/l10n/lv.js
@@ -67,7 +67,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n baiti","%n baits","%n baiti"],
"Favorited" : "Favorīti",
"Favorite" : "Iecienītais",
- "Copy local link" : "Kopēt lokālo saiti",
"Folder" : "Mape",
"New folder" : "Jauna mape",
"Upload" : "Augšupielādēt",
@@ -136,6 +135,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}s",
"Any moment now..." : "Jebkurā brīdī tagad...",
"Soon..." : "Drīz...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Notiek augšupielāde. Pametot lapu tagad, tiks atcelta augšupielāde."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Notiek augšupielāde. Pametot lapu tagad, tiks atcelta augšupielāde.",
+ "Copy local link" : "Kopēt lokālo saiti"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);");
diff --git a/apps/files/l10n/lv.json b/apps/files/l10n/lv.json
index 1f9744b706a..c9121d36b61 100644
--- a/apps/files/l10n/lv.json
+++ b/apps/files/l10n/lv.json
@@ -65,7 +65,6 @@
"_%n byte_::_%n bytes_" : ["%n baiti","%n baits","%n baiti"],
"Favorited" : "Favorīti",
"Favorite" : "Iecienītais",
- "Copy local link" : "Kopēt lokālo saiti",
"Folder" : "Mape",
"New folder" : "Jauna mape",
"Upload" : "Augšupielādēt",
@@ -134,6 +133,7 @@
"{seconds}s" : "{seconds}s",
"Any moment now..." : "Jebkurā brīdī tagad...",
"Soon..." : "Drīz...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Notiek augšupielāde. Pametot lapu tagad, tiks atcelta augšupielāde."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Notiek augšupielāde. Pametot lapu tagad, tiks atcelta augšupielāde.",
+ "Copy local link" : "Kopēt lokālo saiti"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files/l10n/nb.js b/apps/files/l10n/nb.js
index ef72e4b9fb0..de7518e8798 100644
--- a/apps/files/l10n/nb.js
+++ b/apps/files/l10n/nb.js
@@ -12,12 +12,12 @@ OC.L10N.register(
"Favorites" : "Favoritter",
"Could not create folder \"{dir}\"" : "Klarete ikke å opprette mappe \"{dir}\"",
"Upload cancelled." : "Opplasting avbrutt.",
- "Unable to upload {filename} as it is a directory or has 0 bytes" : "Kan ikke laste opp {filename} fordi det er en mappe eller har 0 bytes",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "Kan ikke laste opp {filename} fordi det er en mappe eller har 0 Byte",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ikke nok ledig plass. Du laster opp size1} men bare {size2} er ledig",
"Target folder \"{dir}\" does not exist any more" : "Målmappen \"{dir}\" finnes ikke lenger",
"Not enough free space" : "Ikke nok ledig diskplass",
- "Uploading..." : "Laster opp...",
- "..." : "...",
+ "Uploading..." : "Laster opp…",
+ "..." : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} av {totalSize} ({bitrate})",
"Actions" : "Handlinger",
"Download" : "Last ned",
@@ -40,7 +40,7 @@ OC.L10N.register(
"{newName} already exists" : "{newName} finnes allerede",
"Could not rename \"{fileName}\", it does not exist any more" : "Klarte ikke å omdøpe \"{fileName}\", den finnes ikke lenger",
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Navnet \"{targetName}\" brukes allerede i mappen \"{dir}\". Velg et annet navn.",
- "Could not rename \"{fileName}\"" : "Klarte ikke å omdøpe \"{fileName}\"",
+ "Could not rename \"{fileName}\"" : "Klarte ikke å gi \"{fileName}\" nytt navn",
"Could not create file \"{file}\"" : "Klarte ikke å opprette fil \"{file}\"",
"Could not create file \"{file}\" because it already exists" : "Klarte ikke å opprette fil \"{file}\" fordi den finnes allerede",
"Could not create folder \"{dir}\" because it already exists" : "Klarete ikke å opprette mappe \"{dir}\" fordi den finnes allerede",
@@ -66,10 +66,9 @@ OC.L10N.register(
"_matches '{filter}'_::_match '{filter}'_" : [" stemmer med '{filter}'"," stemmer med '{filter}'"],
"View in folder" : "Vis i mappe",
"Path" : "Sti",
- "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
+ "_%n byte_::_%n bytes_" : ["%n byte","%n Byte"],
"Favorited" : "Er favoritt",
"Favorite" : "Gjør til favoritt",
- "Copy local link" : "Kopier lokal lenke",
"Folder" : "Mappe",
"New folder" : "Ny mappe",
"Upload" : "Last opp",
@@ -138,6 +137,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}er",
"Any moment now..." : "Hvert øyeblikk nå...",
"Soon..." : "Snart...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen.",
+ "Copy local link" : "Kopier lokal lenke"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/nb.json b/apps/files/l10n/nb.json
index 18ff0b64c85..23035e1852e 100644
--- a/apps/files/l10n/nb.json
+++ b/apps/files/l10n/nb.json
@@ -10,12 +10,12 @@
"Favorites" : "Favoritter",
"Could not create folder \"{dir}\"" : "Klarete ikke å opprette mappe \"{dir}\"",
"Upload cancelled." : "Opplasting avbrutt.",
- "Unable to upload {filename} as it is a directory or has 0 bytes" : "Kan ikke laste opp {filename} fordi det er en mappe eller har 0 bytes",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "Kan ikke laste opp {filename} fordi det er en mappe eller har 0 Byte",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ikke nok ledig plass. Du laster opp size1} men bare {size2} er ledig",
"Target folder \"{dir}\" does not exist any more" : "Målmappen \"{dir}\" finnes ikke lenger",
"Not enough free space" : "Ikke nok ledig diskplass",
- "Uploading..." : "Laster opp...",
- "..." : "...",
+ "Uploading..." : "Laster opp…",
+ "..." : "…",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} av {totalSize} ({bitrate})",
"Actions" : "Handlinger",
"Download" : "Last ned",
@@ -38,7 +38,7 @@
"{newName} already exists" : "{newName} finnes allerede",
"Could not rename \"{fileName}\", it does not exist any more" : "Klarte ikke å omdøpe \"{fileName}\", den finnes ikke lenger",
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Navnet \"{targetName}\" brukes allerede i mappen \"{dir}\". Velg et annet navn.",
- "Could not rename \"{fileName}\"" : "Klarte ikke å omdøpe \"{fileName}\"",
+ "Could not rename \"{fileName}\"" : "Klarte ikke å gi \"{fileName}\" nytt navn",
"Could not create file \"{file}\"" : "Klarte ikke å opprette fil \"{file}\"",
"Could not create file \"{file}\" because it already exists" : "Klarte ikke å opprette fil \"{file}\" fordi den finnes allerede",
"Could not create folder \"{dir}\" because it already exists" : "Klarete ikke å opprette mappe \"{dir}\" fordi den finnes allerede",
@@ -64,10 +64,9 @@
"_matches '{filter}'_::_match '{filter}'_" : [" stemmer med '{filter}'"," stemmer med '{filter}'"],
"View in folder" : "Vis i mappe",
"Path" : "Sti",
- "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
+ "_%n byte_::_%n bytes_" : ["%n byte","%n Byte"],
"Favorited" : "Er favoritt",
"Favorite" : "Gjør til favoritt",
- "Copy local link" : "Kopier lokal lenke",
"Folder" : "Mappe",
"New folder" : "Ny mappe",
"Upload" : "Last opp",
@@ -136,6 +135,7 @@
"{seconds}s" : "{seconds}er",
"Any moment now..." : "Hvert øyeblikk nå...",
"Soon..." : "Snart...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen.",
+ "Copy local link" : "Kopier lokal lenke"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js
index 498613452a3..0549cea6a46 100644
--- a/apps/files/l10n/nl.js
+++ b/apps/files/l10n/nl.js
@@ -69,7 +69,7 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Favoriet",
"Favorite" : "Favoriet",
- "Copy local link" : "Kopiëren lokale link",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Kopieer de link direct (werkt alleen voor gebruikers met toegang tot map/bestand)",
"Folder" : "Map",
"New folder" : "Nieuwe map",
"Upload" : "Uploaden",
@@ -138,6 +138,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}en",
"Any moment now..." : "Heel snel nu...",
"Soon..." : "Binnenkort...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Bestandsupload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Bestandsupload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload.",
+ "Copy local link" : "Kopiëren lokale link"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json
index 43e9f670859..41b42dd23b7 100644
--- a/apps/files/l10n/nl.json
+++ b/apps/files/l10n/nl.json
@@ -67,7 +67,7 @@
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Favoriet",
"Favorite" : "Favoriet",
- "Copy local link" : "Kopiëren lokale link",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Kopieer de link direct (werkt alleen voor gebruikers met toegang tot map/bestand)",
"Folder" : "Map",
"New folder" : "Nieuwe map",
"Upload" : "Uploaden",
@@ -136,6 +136,7 @@
"{seconds}s" : "{seconds}en",
"Any moment now..." : "Heel snel nu...",
"Soon..." : "Binnenkort...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Bestandsupload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Bestandsupload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload.",
+ "Copy local link" : "Kopiëren lokale link"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js
index d9df5ece2da..fa1d09f33f1 100644
--- a/apps/files/l10n/pl.js
+++ b/apps/files/l10n/pl.js
@@ -69,7 +69,7 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtów","%n bajtów"],
"Favorited" : "Ulubiony",
"Favorite" : "Ulubione",
- "Copy local link" : "Kopiowanie lokalnego linku",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Skopiuj link bezpośredni (działa tylko dla użytkowników, którzy mają dostęp do pliku/folderu)",
"Folder" : "Folder",
"New folder" : "Nowy folder",
"Upload" : "Wyślij",
@@ -138,6 +138,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds} s",
"Any moment now..." : "Jeszcze chwilę...",
"Soon..." : "Wkrótce...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Wysyłanie pliku jest w toku. Jeśli opuścisz tę stronę, wysyłanie zostanie przerwane."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Wysyłanie pliku jest w toku. Jeśli opuścisz tę stronę, wysyłanie zostanie przerwane.",
+ "Copy local link" : "Kopiowanie lokalnego linku"
},
"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);");
diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json
index 4d8b7bce5bd..d79a57b4678 100644
--- a/apps/files/l10n/pl.json
+++ b/apps/files/l10n/pl.json
@@ -67,7 +67,7 @@
"_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtów","%n bajtów"],
"Favorited" : "Ulubiony",
"Favorite" : "Ulubione",
- "Copy local link" : "Kopiowanie lokalnego linku",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Skopiuj link bezpośredni (działa tylko dla użytkowników, którzy mają dostęp do pliku/folderu)",
"Folder" : "Folder",
"New folder" : "Nowy folder",
"Upload" : "Wyślij",
@@ -136,6 +136,7 @@
"{seconds}s" : "{seconds} s",
"Any moment now..." : "Jeszcze chwilę...",
"Soon..." : "Wkrótce...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Wysyłanie pliku jest w toku. Jeśli opuścisz tę stronę, wysyłanie zostanie przerwane."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Wysyłanie pliku jest w toku. Jeśli opuścisz tę stronę, wysyłanie zostanie przerwane.",
+ "Copy local link" : "Kopiowanie lokalnego linku"
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js
index 5ae55d039ca..e04d2b6bf8e 100644
--- a/apps/files/l10n/pt_BR.js
+++ b/apps/files/l10n/pt_BR.js
@@ -1,18 +1,18 @@
OC.L10N.register(
"files",
{
- "Storage is temporarily not available" : "Storage esté temporariamente indisponível",
+ "Storage is temporarily not available" : "O armazenamento está temporariamente indisponível",
"Storage invalid" : "Armazenamento inválido",
"Unknown error" : "Erro desconhecido",
"All files" : "Todos os arquivos",
"Recent" : "Recente",
"File could not be found" : "O arquivo não foi encontrado",
- "Home" : "Home",
+ "Home" : "Início",
"Close" : "Fechar",
"Favorites" : "Favoritos",
"Could not create folder \"{dir}\"" : "Não foi possível criar a pasta \"{dir}\"",
"Upload cancelled." : "Envio cancelado.",
- "Unable to upload {filename} as it is a directory or has 0 bytes" : "Incapaz de fazer o envio de {filename}, pois é um diretório ou tem 0 bytes",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "Não é possível fazer o envio de {filename}, pois é um diretório ou tem 0 bytes",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Não há espaço suficiente, você está enviando {size1} mas resta apenas {size2}",
"Target folder \"{dir}\" does not exist any more" : "Pasta de destino \"{dir}\" não existe mais",
"Not enough free space" : "Espaço livre insuficiente",
@@ -34,16 +34,16 @@ OC.L10N.register(
"Pending" : "Pendente",
"Unable to determine date" : "Impossível determinar a data",
"This operation is forbidden" : "Esta operação é proibida",
- "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor verifique os logs ou entre em contato com o administrador",
- "Could not move \"{file}\", target exists" : "Não foi possível mover o \"{file}\", o destino já existe",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor verifique os logs ou contacte o administrador",
+ "Could not move \"{file}\", target exists" : "Não foi possível mover \"{file}\" pois o destino já existe",
"Could not move \"{file}\"" : "Não foi possível mover \"{file}\"",
"{newName} already exists" : "{newName} já existe",
- "Could not rename \"{fileName}\", it does not exist any more" : "Não foi possível renomear \"{fileName}\", ele não existe mais",
- "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "O nome \"{targetName}\" já está sendo usado na pasta  \"{dir}\". Por favor escolha outro nome.",
+ "Could not rename \"{fileName}\", it does not exist any more" : "Não foi possível renomear \"{fileName}\" pois ele não existe mais",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "O nome \"{targetName}\" já está sendo usado na pasta  \"{dir}\". Por favor escolha um nome diferente.",
"Could not rename \"{fileName}\"" : "Não foi possível renomear \"{fileName}\"",
"Could not create file \"{file}\"" : "Não foi possível criar o arquivo \"{file}\"",
- "Could not create file \"{file}\" because it already exists" : "Não foi possível criar o arquivo \"{file}\" porque ele já existe",
- "Could not create folder \"{dir}\" because it already exists" : "Não foi possível criar a pasta \"{dir}\" porque ela já existe",
+ "Could not create file \"{file}\" because it already exists" : "Não foi possível criar o arquivo \"{file}\" pois ele já existe",
+ "Could not create folder \"{dir}\" because it already exists" : "Não foi possível criar a pasta \"{dir}\" pois ela já existe",
"Error deleting file \"{fileName}\"." : "Ocorreu um erro ao excluir o arquivo \"{fileName}\".",
"No search results in other folders for {tag}{filter}{endtag}" : "Sem resultados de pesquisa em outras pastas para {tag}{filter}{endtag}",
"Name" : "Nome",
@@ -57,11 +57,11 @@ OC.L10N.register(
"_Uploading %n file_::_Uploading %n files_" : ["Enviando %n arquivo","Enviando %n arquivos"],
"New" : "Novo",
"\"{name}\" is an invalid file name." : "\"{name}\" é um nome de arquivo inválido.",
- "File name cannot be empty." : "O nome do arquivo não pode estar vazio.",
- "\"{name}\" is not an allowed filetype" : "\"{name}\" não é um tipo de arquivo válido",
- "Storage of {owner} is full, files can not be updated or synced anymore!" : "Armazenamento do {owner} está cheio, os arquivos não podem ser mais atualizados ou sincronizados!",
- "Your storage is full, files can not be updated or synced anymore!" : "Seu armazenamento está cheio, arquivos não podem mais ser atualizados ou sincronizados!",
- "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Armazenamento do {owner} está quase cheio ({usedSpacePercent}%)",
+ "File name cannot be empty." : "O nome do arquivo não pode estar em branco.",
+ "\"{name}\" is not an allowed filetype" : "\"{name}\" não é um tipo de arquivo permitido",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "O armazenamento do {owner} está cheio e os arquivos não podem ser mais atualizados ou sincronizados!",
+ "Your storage is full, files can not be updated or synced anymore!" : "Seu armazenamento está cheio e arquivos não podem mais ser atualizados ou sincronizados!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "O armazenamento do {owner} está quase cheio ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Seu armazenamento está quase cheio ({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["coincide com '{filter}'","coincidem com '{filter}'"],
"View in folder" : "Exibir na pasta",
@@ -69,16 +69,16 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Favoritado",
"Favorite" : "Favorito",
- "Copy local link" : "Copiar link local",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Copiar link direto (somente funciona para usuários que tem acesso a este arquivo/pasta)",
"Folder" : "Pasta",
"New folder" : "Nova pasta",
"Upload" : "Enviar",
"An error occurred while trying to update the tags" : "Ocorreu um erro enquanto tentava atualizar as etiquetas",
"Added to favorites" : "Adicionado aos favoritos",
- "Removed from favorites" : "Removido dos favoritos",
+ "Removed from favorites" : "Excluído dos favoritos",
"You added {file} to your favorites" : "Você adicionou {file} aos seus favoritos",
- "You removed {file} from your favorites" : "Você removeu {file} dos seus favoritos",
- "File changes" : "Alterações do arquivo",
+ "You removed {file} from your favorites" : "Você excluiu {file} dos seus favoritos",
+ "File changes" : "Mudanças no arquivo",
"Created by {user}" : "Criado por {user}",
"Changed by {user}" : "Modificado por {user}",
"Deleted by {user}" : "Excluído por {user}",
@@ -86,23 +86,23 @@ OC.L10N.register(
"Renamed by {user}" : "Renomeado por {user}",
"Moved by {user}" : "Movido por {user}",
"You created {file}" : "Você criou o arquivo {file}",
- "{user} created {file}" : "O {user} criou o arquivo {file}",
+ "{user} created {file}" : "{user} criou o arquivo {file}",
"{file} was created in a public folder" : "O arquivo {file} foi criado em uma pasta pública",
"You changed {file}" : "Você modificou o arquivo {file}",
- "{user} changed {file}" : "O usuário {user} modificou o arquivo {file}",
+ "{user} changed {file}" : "{user} modificou o arquivo {file}",
"You deleted {file}" : "Você excluiu o arquivo {file}",
- "{user} deleted {file}" : "O usuário {user} excluiu o arquivo {file}",
+ "{user} deleted {file}" : "{user} excluiu o arquivo {file}",
"You restored {file}" : "Você restaurou o arquivo {file}",
- "{user} restored {file}" : "O usuário {user} restaurou o arquivo {file}",
- "You renamed {oldfile} to {newfile}" : "Você renomeou o arquivo antigo {oldfile} para {newfile}",
- "{user} renamed {oldfile} to {newfile}" : "O usuário {user} renomeou o arquivo antigo {oldfile} para {newfile}",
- "You moved {oldfile} to {newfile}" : "Você moveu o arquivo antigo {oldfile} para {newfile}",
- "{user} moved {oldfile} to {newfile}" : "O usuário {user} moveu o arquivo antigo {oldfile} para {newfile}",
- "A file has been added to or removed from your <strong>favorites</strong>" : "Um arquivo foi adicionado ou removido de seus <strong>favoritos</strong>",
+ "{user} restored {file}" : "{user} restaurou o arquivo {file}",
+ "You renamed {oldfile} to {newfile}" : "Você renomeou o arquivo {oldfile} para {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} renomeou o arquivo {oldfile} para {newfile}",
+ "You moved {oldfile} to {newfile}" : "Você moveu o arquivo {oldfile} para {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} moveu o arquivo {oldfile} para {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Um arquivo foi adicionado ou excluído de seus <strong>favoritos</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Um arquivo ou pasta foi <strong>alterado</strong> ou <strong>renomeado</strong>",
"A new file or folder has been <strong>created</strong>" : "Um novo arquivo ou pasta foi <strong>criado</strong>",
- "A new file or folder has been <strong>deleted</strong>" : "Um novo arquivo ou pasta foi <strong> deletado </strong>",
- "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limite de notificações sobre a criação e alterações em seus <strong>arquivos favoritos</strong> <em>(apenas Stream)</em>",
+ "A new file or folder has been <strong>deleted</strong>" : "Um novo arquivo ou pasta foi <strong> excluído </strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Notificações de limite das criações e alterações em seus <strong>arquivos favoritos</strong> <em>(apenas Stream)</em>",
"A new file or folder has been <strong>restored</strong>" : "Um novo arquivo ou pasta foi <strong> recuperado </strong>",
"Upload (max. %s)" : "Envio (max. %s)",
"File handling" : "Tratamento de arquivo",
@@ -116,18 +116,18 @@ OC.L10N.register(
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Use este endereço <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">para acessar seus arquivos via WebDAV</a>",
"No files in here" : "Nenhum arquivo aqui",
- "Upload some content or sync with your devices!" : "Carregue algum conteúdo ou sincronize com seus dispositivos!",
+ "Upload some content or sync with your devices!" : "Envie algum conteúdo ou sincronize com seus dispositivos!",
"No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
"Select all" : "Selecionar tudo",
"Upload too large" : "Arquivo muito grande para envio",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os arquivos que você está tentando enviar excederam o tamanho máximo para arquivos no servidor.",
"No favorites" : "Sem favoritos",
- "Files and folders you mark as favorite will show up here" : "Arquivos e pastas que você marcou como favoritos são mostrados aqui",
+ "Files and folders you mark as favorite will show up here" : "Arquivos e pastas que você marcou como favoritos serão mostrados aqui",
"Shared with you" : "Compartilhado com você",
"Shared with others" : "Compartilhado com outros",
"Shared by link" : "Compartilhado via link",
- "Tags" : "Tags",
- "Deleted files" : "Arquivos deletados",
+ "Tags" : "Etiquetas",
+ "Deleted files" : "Arquivos excluídos",
"Text file" : "Arquivo texto",
"New text file.txt" : "Novo texto file.txt",
"_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["{hours}:{minutes}:{seconds} hora restante","{hours}:{minutes}:{seconds} horas restantes"],
@@ -138,6 +138,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}s",
"Any moment now..." : "A qualquer momento...",
"Soon..." : "Logo...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Envio de arquivo em andamento. Sair da página agora resultará no cancelamento do envio."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Envio de arquivo em andamento. Sair da página agora cancelará o envio.",
+ "Copy local link" : "Copiar link local"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json
index d263544e0e4..b2ecc91139c 100644
--- a/apps/files/l10n/pt_BR.json
+++ b/apps/files/l10n/pt_BR.json
@@ -1,16 +1,16 @@
{ "translations": {
- "Storage is temporarily not available" : "Storage esté temporariamente indisponível",
+ "Storage is temporarily not available" : "O armazenamento está temporariamente indisponível",
"Storage invalid" : "Armazenamento inválido",
"Unknown error" : "Erro desconhecido",
"All files" : "Todos os arquivos",
"Recent" : "Recente",
"File could not be found" : "O arquivo não foi encontrado",
- "Home" : "Home",
+ "Home" : "Início",
"Close" : "Fechar",
"Favorites" : "Favoritos",
"Could not create folder \"{dir}\"" : "Não foi possível criar a pasta \"{dir}\"",
"Upload cancelled." : "Envio cancelado.",
- "Unable to upload {filename} as it is a directory or has 0 bytes" : "Incapaz de fazer o envio de {filename}, pois é um diretório ou tem 0 bytes",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "Não é possível fazer o envio de {filename}, pois é um diretório ou tem 0 bytes",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Não há espaço suficiente, você está enviando {size1} mas resta apenas {size2}",
"Target folder \"{dir}\" does not exist any more" : "Pasta de destino \"{dir}\" não existe mais",
"Not enough free space" : "Espaço livre insuficiente",
@@ -32,16 +32,16 @@
"Pending" : "Pendente",
"Unable to determine date" : "Impossível determinar a data",
"This operation is forbidden" : "Esta operação é proibida",
- "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor verifique os logs ou entre em contato com o administrador",
- "Could not move \"{file}\", target exists" : "Não foi possível mover o \"{file}\", o destino já existe",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor verifique os logs ou contacte o administrador",
+ "Could not move \"{file}\", target exists" : "Não foi possível mover \"{file}\" pois o destino já existe",
"Could not move \"{file}\"" : "Não foi possível mover \"{file}\"",
"{newName} already exists" : "{newName} já existe",
- "Could not rename \"{fileName}\", it does not exist any more" : "Não foi possível renomear \"{fileName}\", ele não existe mais",
- "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "O nome \"{targetName}\" já está sendo usado na pasta  \"{dir}\". Por favor escolha outro nome.",
+ "Could not rename \"{fileName}\", it does not exist any more" : "Não foi possível renomear \"{fileName}\" pois ele não existe mais",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "O nome \"{targetName}\" já está sendo usado na pasta  \"{dir}\". Por favor escolha um nome diferente.",
"Could not rename \"{fileName}\"" : "Não foi possível renomear \"{fileName}\"",
"Could not create file \"{file}\"" : "Não foi possível criar o arquivo \"{file}\"",
- "Could not create file \"{file}\" because it already exists" : "Não foi possível criar o arquivo \"{file}\" porque ele já existe",
- "Could not create folder \"{dir}\" because it already exists" : "Não foi possível criar a pasta \"{dir}\" porque ela já existe",
+ "Could not create file \"{file}\" because it already exists" : "Não foi possível criar o arquivo \"{file}\" pois ele já existe",
+ "Could not create folder \"{dir}\" because it already exists" : "Não foi possível criar a pasta \"{dir}\" pois ela já existe",
"Error deleting file \"{fileName}\"." : "Ocorreu um erro ao excluir o arquivo \"{fileName}\".",
"No search results in other folders for {tag}{filter}{endtag}" : "Sem resultados de pesquisa em outras pastas para {tag}{filter}{endtag}",
"Name" : "Nome",
@@ -55,11 +55,11 @@
"_Uploading %n file_::_Uploading %n files_" : ["Enviando %n arquivo","Enviando %n arquivos"],
"New" : "Novo",
"\"{name}\" is an invalid file name." : "\"{name}\" é um nome de arquivo inválido.",
- "File name cannot be empty." : "O nome do arquivo não pode estar vazio.",
- "\"{name}\" is not an allowed filetype" : "\"{name}\" não é um tipo de arquivo válido",
- "Storage of {owner} is full, files can not be updated or synced anymore!" : "Armazenamento do {owner} está cheio, os arquivos não podem ser mais atualizados ou sincronizados!",
- "Your storage is full, files can not be updated or synced anymore!" : "Seu armazenamento está cheio, arquivos não podem mais ser atualizados ou sincronizados!",
- "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Armazenamento do {owner} está quase cheio ({usedSpacePercent}%)",
+ "File name cannot be empty." : "O nome do arquivo não pode estar em branco.",
+ "\"{name}\" is not an allowed filetype" : "\"{name}\" não é um tipo de arquivo permitido",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "O armazenamento do {owner} está cheio e os arquivos não podem ser mais atualizados ou sincronizados!",
+ "Your storage is full, files can not be updated or synced anymore!" : "Seu armazenamento está cheio e arquivos não podem mais ser atualizados ou sincronizados!",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "O armazenamento do {owner} está quase cheio ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Seu armazenamento está quase cheio ({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["coincide com '{filter}'","coincidem com '{filter}'"],
"View in folder" : "Exibir na pasta",
@@ -67,16 +67,16 @@
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Favoritado",
"Favorite" : "Favorito",
- "Copy local link" : "Copiar link local",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Copiar link direto (somente funciona para usuários que tem acesso a este arquivo/pasta)",
"Folder" : "Pasta",
"New folder" : "Nova pasta",
"Upload" : "Enviar",
"An error occurred while trying to update the tags" : "Ocorreu um erro enquanto tentava atualizar as etiquetas",
"Added to favorites" : "Adicionado aos favoritos",
- "Removed from favorites" : "Removido dos favoritos",
+ "Removed from favorites" : "Excluído dos favoritos",
"You added {file} to your favorites" : "Você adicionou {file} aos seus favoritos",
- "You removed {file} from your favorites" : "Você removeu {file} dos seus favoritos",
- "File changes" : "Alterações do arquivo",
+ "You removed {file} from your favorites" : "Você excluiu {file} dos seus favoritos",
+ "File changes" : "Mudanças no arquivo",
"Created by {user}" : "Criado por {user}",
"Changed by {user}" : "Modificado por {user}",
"Deleted by {user}" : "Excluído por {user}",
@@ -84,23 +84,23 @@
"Renamed by {user}" : "Renomeado por {user}",
"Moved by {user}" : "Movido por {user}",
"You created {file}" : "Você criou o arquivo {file}",
- "{user} created {file}" : "O {user} criou o arquivo {file}",
+ "{user} created {file}" : "{user} criou o arquivo {file}",
"{file} was created in a public folder" : "O arquivo {file} foi criado em uma pasta pública",
"You changed {file}" : "Você modificou o arquivo {file}",
- "{user} changed {file}" : "O usuário {user} modificou o arquivo {file}",
+ "{user} changed {file}" : "{user} modificou o arquivo {file}",
"You deleted {file}" : "Você excluiu o arquivo {file}",
- "{user} deleted {file}" : "O usuário {user} excluiu o arquivo {file}",
+ "{user} deleted {file}" : "{user} excluiu o arquivo {file}",
"You restored {file}" : "Você restaurou o arquivo {file}",
- "{user} restored {file}" : "O usuário {user} restaurou o arquivo {file}",
- "You renamed {oldfile} to {newfile}" : "Você renomeou o arquivo antigo {oldfile} para {newfile}",
- "{user} renamed {oldfile} to {newfile}" : "O usuário {user} renomeou o arquivo antigo {oldfile} para {newfile}",
- "You moved {oldfile} to {newfile}" : "Você moveu o arquivo antigo {oldfile} para {newfile}",
- "{user} moved {oldfile} to {newfile}" : "O usuário {user} moveu o arquivo antigo {oldfile} para {newfile}",
- "A file has been added to or removed from your <strong>favorites</strong>" : "Um arquivo foi adicionado ou removido de seus <strong>favoritos</strong>",
+ "{user} restored {file}" : "{user} restaurou o arquivo {file}",
+ "You renamed {oldfile} to {newfile}" : "Você renomeou o arquivo {oldfile} para {newfile}",
+ "{user} renamed {oldfile} to {newfile}" : "{user} renomeou o arquivo {oldfile} para {newfile}",
+ "You moved {oldfile} to {newfile}" : "Você moveu o arquivo {oldfile} para {newfile}",
+ "{user} moved {oldfile} to {newfile}" : "{user} moveu o arquivo {oldfile} para {newfile}",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Um arquivo foi adicionado ou excluído de seus <strong>favoritos</strong>",
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Um arquivo ou pasta foi <strong>alterado</strong> ou <strong>renomeado</strong>",
"A new file or folder has been <strong>created</strong>" : "Um novo arquivo ou pasta foi <strong>criado</strong>",
- "A new file or folder has been <strong>deleted</strong>" : "Um novo arquivo ou pasta foi <strong> deletado </strong>",
- "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limite de notificações sobre a criação e alterações em seus <strong>arquivos favoritos</strong> <em>(apenas Stream)</em>",
+ "A new file or folder has been <strong>deleted</strong>" : "Um novo arquivo ou pasta foi <strong> excluído </strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Notificações de limite das criações e alterações em seus <strong>arquivos favoritos</strong> <em>(apenas Stream)</em>",
"A new file or folder has been <strong>restored</strong>" : "Um novo arquivo ou pasta foi <strong> recuperado </strong>",
"Upload (max. %s)" : "Envio (max. %s)",
"File handling" : "Tratamento de arquivo",
@@ -114,18 +114,18 @@
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Use este endereço <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">para acessar seus arquivos via WebDAV</a>",
"No files in here" : "Nenhum arquivo aqui",
- "Upload some content or sync with your devices!" : "Carregue algum conteúdo ou sincronize com seus dispositivos!",
+ "Upload some content or sync with your devices!" : "Envie algum conteúdo ou sincronize com seus dispositivos!",
"No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
"Select all" : "Selecionar tudo",
"Upload too large" : "Arquivo muito grande para envio",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os arquivos que você está tentando enviar excederam o tamanho máximo para arquivos no servidor.",
"No favorites" : "Sem favoritos",
- "Files and folders you mark as favorite will show up here" : "Arquivos e pastas que você marcou como favoritos são mostrados aqui",
+ "Files and folders you mark as favorite will show up here" : "Arquivos e pastas que você marcou como favoritos serão mostrados aqui",
"Shared with you" : "Compartilhado com você",
"Shared with others" : "Compartilhado com outros",
"Shared by link" : "Compartilhado via link",
- "Tags" : "Tags",
- "Deleted files" : "Arquivos deletados",
+ "Tags" : "Etiquetas",
+ "Deleted files" : "Arquivos excluídos",
"Text file" : "Arquivo texto",
"New text file.txt" : "Novo texto file.txt",
"_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["{hours}:{minutes}:{seconds} hora restante","{hours}:{minutes}:{seconds} horas restantes"],
@@ -136,6 +136,7 @@
"{seconds}s" : "{seconds}s",
"Any moment now..." : "A qualquer momento...",
"Soon..." : "Logo...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Envio de arquivo em andamento. Sair da página agora resultará no cancelamento do envio."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Envio de arquivo em andamento. Sair da página agora cancelará o envio.",
+ "Copy local link" : "Copiar link local"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js
index 3b942bc10d9..bd8614c8d99 100644
--- a/apps/files/l10n/ru.js
+++ b/apps/files/l10n/ru.js
@@ -69,7 +69,7 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n байт","%n байта","%n байт","%n байт"],
"Favorited" : "Избранное",
"Favorite" : "Избранное",
- "Copy local link" : "Копировать локальную ссылку",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Копировать прямую ссылку (работает только для пользователей с правами доступа к этому файлу или каталогу)",
"Folder" : "Каталог",
"New folder" : "Новый каталог",
"Upload" : "Загрузить",
@@ -138,6 +138,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}с",
"Any moment now..." : "В любой момент...",
"Soon..." : "Скоро...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Идёт загрузка файла. Покинув страницу, вы прервёте загрузку."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Идёт загрузка файла. Покинув страницу, вы прервёте загрузку.",
+ "Copy local link" : "Копировать локальную ссылку"
},
"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/l10n/ru.json b/apps/files/l10n/ru.json
index f79c7e77154..09fb4886ef3 100644
--- a/apps/files/l10n/ru.json
+++ b/apps/files/l10n/ru.json
@@ -67,7 +67,7 @@
"_%n byte_::_%n bytes_" : ["%n байт","%n байта","%n байт","%n байт"],
"Favorited" : "Избранное",
"Favorite" : "Избранное",
- "Copy local link" : "Копировать локальную ссылку",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Копировать прямую ссылку (работает только для пользователей с правами доступа к этому файлу или каталогу)",
"Folder" : "Каталог",
"New folder" : "Новый каталог",
"Upload" : "Загрузить",
@@ -136,6 +136,7 @@
"{seconds}s" : "{seconds}с",
"Any moment now..." : "В любой момент...",
"Soon..." : "Скоро...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Идёт загрузка файла. Покинув страницу, вы прервёте загрузку."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Идёт загрузка файла. Покинув страницу, вы прервёте загрузку.",
+ "Copy local link" : "Копировать локальную ссылку"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/files/l10n/sk.js b/apps/files/l10n/sk.js
index 6183704fb6b..c71051df9ac 100644
--- a/apps/files/l10n/sk.js
+++ b/apps/files/l10n/sk.js
@@ -69,7 +69,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtov"],
"Favorited" : "Pridané k obľúbeným",
"Favorite" : "Obľúbené",
- "Copy local link" : "Kopíruj lokálny odkaz",
"Folder" : "Priečinok",
"New folder" : "Nový priečinok",
"Upload" : "Nahrať",
@@ -138,6 +137,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}s",
"Any moment now..." : "Už každú chvíľu…",
"Soon..." : "Čoskoro…",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Opustenie stránky zruší práve prebiehajúce odosielanie súboru."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Opustenie stránky zruší práve prebiehajúce odosielanie súboru.",
+ "Copy local link" : "Kopíruj lokálny odkaz"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/files/l10n/sk.json b/apps/files/l10n/sk.json
index 50da36eedd4..f471078bea6 100644
--- a/apps/files/l10n/sk.json
+++ b/apps/files/l10n/sk.json
@@ -67,7 +67,6 @@
"_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtov"],
"Favorited" : "Pridané k obľúbeným",
"Favorite" : "Obľúbené",
- "Copy local link" : "Kopíruj lokálny odkaz",
"Folder" : "Priečinok",
"New folder" : "Nový priečinok",
"Upload" : "Nahrať",
@@ -136,6 +135,7 @@
"{seconds}s" : "{seconds}s",
"Any moment now..." : "Už každú chvíľu…",
"Soon..." : "Čoskoro…",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Opustenie stránky zruší práve prebiehajúce odosielanie súboru."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Opustenie stránky zruší práve prebiehajúce odosielanie súboru.",
+ "Copy local link" : "Kopíruj lokálny odkaz"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/sq.js b/apps/files/l10n/sq.js
index bcca7475521..2e4a0f95f8a 100644
--- a/apps/files/l10n/sq.js
+++ b/apps/files/l10n/sq.js
@@ -67,7 +67,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n bajt","%n bajte"],
"Favorited" : "U kalua e parapëlqyer",
"Favorite" : "E parapëlqyer",
- "Copy local link" : "Kopjo lidhjen lokale",
"Folder" : "Dosje",
"New folder" : "Dosje e re",
"Upload" : "Ngarkoje",
@@ -133,6 +132,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}s",
"Any moment now..." : "Në çdo çast tani…",
"Soon..." : "Së shpejti…",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Ngarkimi i skedarit është në punë e sipër. Largimi nga faqja do të anulojë ngarkimin."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Ngarkimi i skedarit është në punë e sipër. Largimi nga faqja do të anulojë ngarkimin.",
+ "Copy local link" : "Kopjo lidhjen lokale"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/sq.json b/apps/files/l10n/sq.json
index e1756221373..91102ff12c8 100644
--- a/apps/files/l10n/sq.json
+++ b/apps/files/l10n/sq.json
@@ -65,7 +65,6 @@
"_%n byte_::_%n bytes_" : ["%n bajt","%n bajte"],
"Favorited" : "U kalua e parapëlqyer",
"Favorite" : "E parapëlqyer",
- "Copy local link" : "Kopjo lidhjen lokale",
"Folder" : "Dosje",
"New folder" : "Dosje e re",
"Upload" : "Ngarkoje",
@@ -131,6 +130,7 @@
"{seconds}s" : "{seconds}s",
"Any moment now..." : "Në çdo çast tani…",
"Soon..." : "Së shpejti…",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Ngarkimi i skedarit është në punë e sipër. Largimi nga faqja do të anulojë ngarkimin."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Ngarkimi i skedarit është në punë e sipër. Largimi nga faqja do të anulojë ngarkimin.",
+ "Copy local link" : "Kopjo lidhjen lokale"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js
index a56b63ea979..3b65a74391c 100644
--- a/apps/files/l10n/sv.js
+++ b/apps/files/l10n/sv.js
@@ -68,7 +68,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n bytes","%n bytes"],
"Favorited" : "Favoriserad",
"Favorite" : "Favorit",
- "Copy local link" : "Kopiera den lokala länken",
"Folder" : "Mapp",
"New folder" : "Ny mapp",
"Upload" : "Ladda upp",
@@ -137,6 +136,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}s",
"Any moment now..." : "Alldeles strax...",
"Soon..." : "Snart...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen.",
+ "Copy local link" : "Kopiera den lokala länken"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json
index dff8c303216..fbf0ccc2562 100644
--- a/apps/files/l10n/sv.json
+++ b/apps/files/l10n/sv.json
@@ -66,7 +66,6 @@
"_%n byte_::_%n bytes_" : ["%n bytes","%n bytes"],
"Favorited" : "Favoriserad",
"Favorite" : "Favorit",
- "Copy local link" : "Kopiera den lokala länken",
"Folder" : "Mapp",
"New folder" : "Ny mapp",
"Upload" : "Ladda upp",
@@ -135,6 +134,7 @@
"{seconds}s" : "{seconds}s",
"Any moment now..." : "Alldeles strax...",
"Soon..." : "Snart...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen.",
+ "Copy local link" : "Kopiera den lokala länken"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/tr.js b/apps/files/l10n/tr.js
index 474d15d3669..80cc6cb6871 100644
--- a/apps/files/l10n/tr.js
+++ b/apps/files/l10n/tr.js
@@ -69,7 +69,7 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n bayt","%n bayt"],
"Favorited" : "Sık kullanılanlara eklendi",
"Favorite" : "Sık kullanılanlara ekle",
- "Copy local link" : "Bağlantıyı kopyala",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Doğrudan bağlantıyı kopyala (yalnız bu dosya ya da klasöre erişim izni olan kullanıcılar için)",
"Folder" : "Klasör",
"New folder" : "Yeni klasör",
"Upload" : "Yükle",
@@ -138,6 +138,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds} saniye",
"Any moment now..." : "Hemen şimdi...",
"Soon..." : "Yakında...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Dosya yükleme işlemi sürüyor. Sayfadan ayrılırsanız yükleme işlemi iptal edilir."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Dosya yükleme işlemi sürüyor. Sayfadan ayrılırsanız yükleme işlemi iptal edilir.",
+ "Copy local link" : "Bağlantıyı kopyala"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json
index c5be8a48316..f46eabd5e13 100644
--- a/apps/files/l10n/tr.json
+++ b/apps/files/l10n/tr.json
@@ -67,7 +67,7 @@
"_%n byte_::_%n bytes_" : ["%n bayt","%n bayt"],
"Favorited" : "Sık kullanılanlara eklendi",
"Favorite" : "Sık kullanılanlara ekle",
- "Copy local link" : "Bağlantıyı kopyala",
+ "Copy direct link (only works for users who have access to this file/folder)" : "Doğrudan bağlantıyı kopyala (yalnız bu dosya ya da klasöre erişim izni olan kullanıcılar için)",
"Folder" : "Klasör",
"New folder" : "Yeni klasör",
"Upload" : "Yükle",
@@ -136,6 +136,7 @@
"{seconds}s" : "{seconds} saniye",
"Any moment now..." : "Hemen şimdi...",
"Soon..." : "Yakında...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Dosya yükleme işlemi sürüyor. Sayfadan ayrılırsanız yükleme işlemi iptal edilir."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Dosya yükleme işlemi sürüyor. Sayfadan ayrılırsanız yükleme işlemi iptal edilir.",
+ "Copy local link" : "Bağlantıyı kopyala"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/vi.js b/apps/files/l10n/vi.js
index bf1f89c1fda..f4321609aab 100644
--- a/apps/files/l10n/vi.js
+++ b/apps/files/l10n/vi.js
@@ -67,7 +67,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n bytes"],
"Favorited" : "Được ưa thích",
"Favorite" : "Ưu thích",
- "Copy local link" : "Sao chép liên kết cục bộ",
"Folder" : "Thư mục",
"New folder" : "Tạo thư mục",
"Upload" : "Tải lên",
@@ -128,6 +127,7 @@ OC.L10N.register(
"_{seconds} second left_::_{seconds} seconds left_" : ["{seconds} giây còn lại"],
"Any moment now..." : "Sắp xong rồi...",
"Soon..." : "Sớm thôi...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Tập tin tải lên đang được xử lý. Nếu bạn rời khỏi trang bây giờ sẽ hủy quá trình này."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Tập tin tải lên đang được xử lý. Nếu bạn rời khỏi trang bây giờ sẽ hủy quá trình này.",
+ "Copy local link" : "Sao chép liên kết cục bộ"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/vi.json b/apps/files/l10n/vi.json
index 9485634ac3f..6e793c029a9 100644
--- a/apps/files/l10n/vi.json
+++ b/apps/files/l10n/vi.json
@@ -65,7 +65,6 @@
"_%n byte_::_%n bytes_" : ["%n bytes"],
"Favorited" : "Được ưa thích",
"Favorite" : "Ưu thích",
- "Copy local link" : "Sao chép liên kết cục bộ",
"Folder" : "Thư mục",
"New folder" : "Tạo thư mục",
"Upload" : "Tải lên",
@@ -126,6 +125,7 @@
"_{seconds} second left_::_{seconds} seconds left_" : ["{seconds} giây còn lại"],
"Any moment now..." : "Sắp xong rồi...",
"Soon..." : "Sớm thôi...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "Tập tin tải lên đang được xử lý. Nếu bạn rời khỏi trang bây giờ sẽ hủy quá trình này."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "Tập tin tải lên đang được xử lý. Nếu bạn rời khỏi trang bây giờ sẽ hủy quá trình này.",
+ "Copy local link" : "Sao chép liên kết cục bộ"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js
index 58455696937..4d163f82bba 100644
--- a/apps/files/l10n/zh_CN.js
+++ b/apps/files/l10n/zh_CN.js
@@ -69,7 +69,6 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n 字节"],
"Favorited" : "已收藏",
"Favorite" : "收藏",
- "Copy local link" : "复制本地链接",
"Folder" : "文件夹",
"New folder" : "新建文件夹",
"Upload" : "上传",
@@ -138,6 +137,7 @@ OC.L10N.register(
"{seconds}s" : "{seconds}s",
"Any moment now..." : "现在任何时候...",
"Soon..." : "很快...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "文件正在上传中. 离开此页将会取消上传."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "文件正在上传中. 离开此页将会取消上传.",
+ "Copy local link" : "复制本地链接"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json
index fbf503808fa..7d9e00b2756 100644
--- a/apps/files/l10n/zh_CN.json
+++ b/apps/files/l10n/zh_CN.json
@@ -67,7 +67,6 @@
"_%n byte_::_%n bytes_" : ["%n 字节"],
"Favorited" : "已收藏",
"Favorite" : "收藏",
- "Copy local link" : "复制本地链接",
"Folder" : "文件夹",
"New folder" : "新建文件夹",
"Upload" : "上传",
@@ -136,6 +135,7 @@
"{seconds}s" : "{seconds}s",
"Any moment now..." : "现在任何时候...",
"Soon..." : "很快...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "文件正在上传中. 离开此页将会取消上传."
+ "File upload is in progress. Leaving the page now will cancel the upload." : "文件正在上传中. 离开此页将会取消上传.",
+ "Copy local link" : "复制本地链接"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/nb.js b/apps/files_external/l10n/nb.js
index 12fcebe7130..6e56b7523b3 100644
--- a/apps/files_external/l10n/nb.js
+++ b/apps/files_external/l10n/nb.js
@@ -7,13 +7,13 @@ OC.L10N.register(
"Step 1 failed. Exception: %s" : "Steg 1 mislyktes. Unntak: %s",
"Step 2 failed. Exception: %s" : "Steg 2 mislyktes. Unntak: %s",
"External storage" : "Ekstern lagringsplass",
- "Dropbox App Configuration" : "Dropbox App konfigurasjon",
- "Google Drive App Configuration" : "Google Drive App konfigurasjon",
+ "Dropbox App Configuration" : "Oppsett for Dropbox-program",
+ "Google Drive App Configuration" : "Oppsett av Google Drive-program",
"Personal" : "Personlig",
"System" : "System",
"Grant access" : "Gi tilgang",
- "Error configuring OAuth1" : "Feil ved konfigurering av OAuth1",
- "Error configuring OAuth2" : "Feil ved konfigurering av OAuth2",
+ "Error configuring OAuth1" : "Feil ved oppsett av OAuth1",
+ "Error configuring OAuth2" : "Feil ved oppsett av OAuth2",
"Generate keys" : "Generer nøkler",
"Error generating key pair" : "Feil ved nøkkelgenerering",
"All users. Type to select user or group." : "Alle brukere. Tast for å velge bruker eller gruppe.",
@@ -24,42 +24,42 @@ OC.L10N.register(
"Saving..." : "Lagrer...",
"Save" : "Lagre",
"Empty response from the server" : "Tomt svar fra tjeneren",
- "Couldn't access. Please logout and login to activate this mount point" : "Fikk ikke tilgang. Vennligst logg ut og inn igjen for å aktivere dette oppkoblingspunktet.",
+ "Couldn't access. Please logout and login to activate this mount point" : "Fikk ikke tilgang. Logg ut og inn igjen for å aktivere dette oppkoblingspunktet.",
"Couldn't get the information from the remote server: {code} {type}" : "Kunne ikke få informasjon fra fjerntjeneren/ remote server: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Klarte ikke å hente listen over eksterne oppkoblingspunkter: {type}",
"There was an error with message: " : "Det oppstod en feil med melding: ",
"External mount error" : "Ekstern oppkoblingsfeil",
"external-storage" : "eksternlagring",
- "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Klarte ikke å hente listen over oppkoblingspunkter for Windows nettverk-disker: tomt svar fra serveren",
- "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Noen av de konfigurerte eksterne oppkoblingspunktene er ikke tilkoblet. Klikk på de røde raden(e) for mer informasjon.",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Klarte ikke å hente listen over oppkoblingspunkter for Windowsnettverks-disker: Tomt svar fra serveren",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Noen av de oppsatte eksterne oppkoblingspunktene er ikke tilkoblet. Klikk på de røde raden(e) for mer informasjon.",
"Please enter the credentials for the {mount} mount" : "Legg inn påloggingsdetaljer for {mount}",
"Username" : "Brukernavn",
"Password" : "Passord",
"Credentials saved" : "Påloggingsdetaljer lagret",
- "Credentials saving failed" : "Lagring av påloggingsdetaljer feilet",
+ "Credentials saving failed" : "Lagring av påloggingsdetaljer mislyktes",
"Credentials required" : "Påloggingsdetaljer kreves",
- "Storage with id \"%i\" not found" : "Lager med id \"%i\" ikke funnet",
- "Invalid backend or authentication mechanism class" : "Ugyldig server eller type autentiseringsmekanisme",
+ "Storage with id \"%i\" not found" : "Lager med ID \"%i\" ikke funnet",
+ "Invalid backend or authentication mechanism class" : "Ugyldig bakende eller type autentiseringsmekanisme",
"Invalid mount point" : "Ugyldig oppkoblingspunkt",
"Objectstore forbidden" : "Objektlager forbudt",
- "Invalid storage backend \"%s\"" : "Ugyldig lagringsserver \"%s\"",
- "Not permitted to use backend \"%s\"" : "Ikke tillatt å bruke server \"%s\"",
+ "Invalid storage backend \"%s\"" : "Ugyldig lagringstjener \"%s\"",
+ "Not permitted to use backend \"%s\"" : "Bruk av bakenden \"%s\" tillates ikke",
"Not permitted to use authentication mechanism \"%s\"" : "Ikke tillatt å bruke autentiseringsmekanisme \"%s\"",
- "Unsatisfied backend parameters" : "Noen server-parameter mangler",
+ "Unsatisfied backend parameters" : "Noen bakende-parameter mangler",
"Unsatisfied authentication mechanism parameters" : "Noen parametre for autentiseringsmekanisme mangler",
"Insufficient data: %s" : "Utilstrekkelige data: %s",
"%s" : "%s",
- "Storage with id \"%i\" is not user editable" : "Lager med id \"%i\" kan ikke redigeres av bruker",
+ "Storage with id \"%i\" is not user editable" : "Lager med ID \"%i\" kan ikke redigeres av bruker",
"Access key" : "Tilgangsnøkkel",
"Secret key" : "Hemmelig nøkkel",
"Builtin" : "Innebygget",
"None" : "Ingen",
"OAuth1" : "OAuth1",
- "App key" : "App key",
- "App secret" : "App secret",
+ "App key" : "Program-nøkkel",
+ "App secret" : "Program-hemmelighet",
"OAuth2" : "OAuth2",
- "Client ID" : "Client ID",
- "Client secret" : "Client secret",
+ "Client ID" : "Klient-ID",
+ "Client secret" : "Klient-hemmelighet",
"OpenStack" : "OpenStack",
"Tenant name" : "Prosjektnavn",
"Identity endpoint URL" : "URL for identitets-endepunkt",
@@ -70,11 +70,11 @@ OC.L10N.register(
"Username and password" : "Brukernavn og passord",
"Log-in credentials, save in session" : "Påloggingsdetaljer, lagre i økten",
"User entered, store in database" : "Brukerangitt, lagre i databasen",
- "RSA public key" : "RSA offentlig nøkkel",
+ "RSA public key" : "Offentlig RSA-nøkkel",
"Public key" : "Offentlig nøkkel",
"Amazon S3" : "Amazon S3",
- "Bucket" : "Bucket",
- "Hostname" : "Servernavn",
+ "Bucket" : "Bøtte",
+ "Hostname" : "Tjenernavn",
"Port" : "Port",
"Region" : "Området",
"Enable SSL" : "Aktiver SSL",
@@ -98,8 +98,8 @@ OC.L10N.register(
"Share" : "Delt ressurs",
"Domain" : "Domene",
"SMB / CIFS using OC login" : "SMB / CIFS med OC-pålogging",
- "Username as share" : "Brukernavn som share",
- "OpenStack Object Storage" : "OpenStack Object Storage",
+ "Username as share" : "Brukernavn som delt ressurs",
+ "OpenStack Object Storage" : "OpenStack objektlager",
"Service name" : "Tjenestenavn",
"Request timeout (seconds)" : "Tidsavbrudd for forespørsel (sekunder)",
"External storages" : "Ekstern lagring",
@@ -116,10 +116,10 @@ OC.L10N.register(
"Enable sharing" : "Aktiver deling",
"Check for changes" : "Se etter endringer",
"Never" : "Aldri",
- "Once every direct access" : "En gang pr. direkte aksess",
+ "Once every direct access" : "En gang pr. direkte tilgang",
"Folder name" : "Mappenavn",
"Authentication" : "Autentisering",
- "Configuration" : "Konfigurasjon",
+ "Configuration" : "Oppsett",
"Available for" : "Tilgjengelig for",
"Add storage" : "Legg til lagringsplass",
"Advanced settings" : "Avanserte innstillinger",
diff --git a/apps/files_external/l10n/nb.json b/apps/files_external/l10n/nb.json
index 157c4d23ff1..ca16cf9ab10 100644
--- a/apps/files_external/l10n/nb.json
+++ b/apps/files_external/l10n/nb.json
@@ -5,13 +5,13 @@
"Step 1 failed. Exception: %s" : "Steg 1 mislyktes. Unntak: %s",
"Step 2 failed. Exception: %s" : "Steg 2 mislyktes. Unntak: %s",
"External storage" : "Ekstern lagringsplass",
- "Dropbox App Configuration" : "Dropbox App konfigurasjon",
- "Google Drive App Configuration" : "Google Drive App konfigurasjon",
+ "Dropbox App Configuration" : "Oppsett for Dropbox-program",
+ "Google Drive App Configuration" : "Oppsett av Google Drive-program",
"Personal" : "Personlig",
"System" : "System",
"Grant access" : "Gi tilgang",
- "Error configuring OAuth1" : "Feil ved konfigurering av OAuth1",
- "Error configuring OAuth2" : "Feil ved konfigurering av OAuth2",
+ "Error configuring OAuth1" : "Feil ved oppsett av OAuth1",
+ "Error configuring OAuth2" : "Feil ved oppsett av OAuth2",
"Generate keys" : "Generer nøkler",
"Error generating key pair" : "Feil ved nøkkelgenerering",
"All users. Type to select user or group." : "Alle brukere. Tast for å velge bruker eller gruppe.",
@@ -22,42 +22,42 @@
"Saving..." : "Lagrer...",
"Save" : "Lagre",
"Empty response from the server" : "Tomt svar fra tjeneren",
- "Couldn't access. Please logout and login to activate this mount point" : "Fikk ikke tilgang. Vennligst logg ut og inn igjen for å aktivere dette oppkoblingspunktet.",
+ "Couldn't access. Please logout and login to activate this mount point" : "Fikk ikke tilgang. Logg ut og inn igjen for å aktivere dette oppkoblingspunktet.",
"Couldn't get the information from the remote server: {code} {type}" : "Kunne ikke få informasjon fra fjerntjeneren/ remote server: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Klarte ikke å hente listen over eksterne oppkoblingspunkter: {type}",
"There was an error with message: " : "Det oppstod en feil med melding: ",
"External mount error" : "Ekstern oppkoblingsfeil",
"external-storage" : "eksternlagring",
- "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Klarte ikke å hente listen over oppkoblingspunkter for Windows nettverk-disker: tomt svar fra serveren",
- "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Noen av de konfigurerte eksterne oppkoblingspunktene er ikke tilkoblet. Klikk på de røde raden(e) for mer informasjon.",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Klarte ikke å hente listen over oppkoblingspunkter for Windowsnettverks-disker: Tomt svar fra serveren",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Noen av de oppsatte eksterne oppkoblingspunktene er ikke tilkoblet. Klikk på de røde raden(e) for mer informasjon.",
"Please enter the credentials for the {mount} mount" : "Legg inn påloggingsdetaljer for {mount}",
"Username" : "Brukernavn",
"Password" : "Passord",
"Credentials saved" : "Påloggingsdetaljer lagret",
- "Credentials saving failed" : "Lagring av påloggingsdetaljer feilet",
+ "Credentials saving failed" : "Lagring av påloggingsdetaljer mislyktes",
"Credentials required" : "Påloggingsdetaljer kreves",
- "Storage with id \"%i\" not found" : "Lager med id \"%i\" ikke funnet",
- "Invalid backend or authentication mechanism class" : "Ugyldig server eller type autentiseringsmekanisme",
+ "Storage with id \"%i\" not found" : "Lager med ID \"%i\" ikke funnet",
+ "Invalid backend or authentication mechanism class" : "Ugyldig bakende eller type autentiseringsmekanisme",
"Invalid mount point" : "Ugyldig oppkoblingspunkt",
"Objectstore forbidden" : "Objektlager forbudt",
- "Invalid storage backend \"%s\"" : "Ugyldig lagringsserver \"%s\"",
- "Not permitted to use backend \"%s\"" : "Ikke tillatt å bruke server \"%s\"",
+ "Invalid storage backend \"%s\"" : "Ugyldig lagringstjener \"%s\"",
+ "Not permitted to use backend \"%s\"" : "Bruk av bakenden \"%s\" tillates ikke",
"Not permitted to use authentication mechanism \"%s\"" : "Ikke tillatt å bruke autentiseringsmekanisme \"%s\"",
- "Unsatisfied backend parameters" : "Noen server-parameter mangler",
+ "Unsatisfied backend parameters" : "Noen bakende-parameter mangler",
"Unsatisfied authentication mechanism parameters" : "Noen parametre for autentiseringsmekanisme mangler",
"Insufficient data: %s" : "Utilstrekkelige data: %s",
"%s" : "%s",
- "Storage with id \"%i\" is not user editable" : "Lager med id \"%i\" kan ikke redigeres av bruker",
+ "Storage with id \"%i\" is not user editable" : "Lager med ID \"%i\" kan ikke redigeres av bruker",
"Access key" : "Tilgangsnøkkel",
"Secret key" : "Hemmelig nøkkel",
"Builtin" : "Innebygget",
"None" : "Ingen",
"OAuth1" : "OAuth1",
- "App key" : "App key",
- "App secret" : "App secret",
+ "App key" : "Program-nøkkel",
+ "App secret" : "Program-hemmelighet",
"OAuth2" : "OAuth2",
- "Client ID" : "Client ID",
- "Client secret" : "Client secret",
+ "Client ID" : "Klient-ID",
+ "Client secret" : "Klient-hemmelighet",
"OpenStack" : "OpenStack",
"Tenant name" : "Prosjektnavn",
"Identity endpoint URL" : "URL for identitets-endepunkt",
@@ -68,11 +68,11 @@
"Username and password" : "Brukernavn og passord",
"Log-in credentials, save in session" : "Påloggingsdetaljer, lagre i økten",
"User entered, store in database" : "Brukerangitt, lagre i databasen",
- "RSA public key" : "RSA offentlig nøkkel",
+ "RSA public key" : "Offentlig RSA-nøkkel",
"Public key" : "Offentlig nøkkel",
"Amazon S3" : "Amazon S3",
- "Bucket" : "Bucket",
- "Hostname" : "Servernavn",
+ "Bucket" : "Bøtte",
+ "Hostname" : "Tjenernavn",
"Port" : "Port",
"Region" : "Området",
"Enable SSL" : "Aktiver SSL",
@@ -96,8 +96,8 @@
"Share" : "Delt ressurs",
"Domain" : "Domene",
"SMB / CIFS using OC login" : "SMB / CIFS med OC-pålogging",
- "Username as share" : "Brukernavn som share",
- "OpenStack Object Storage" : "OpenStack Object Storage",
+ "Username as share" : "Brukernavn som delt ressurs",
+ "OpenStack Object Storage" : "OpenStack objektlager",
"Service name" : "Tjenestenavn",
"Request timeout (seconds)" : "Tidsavbrudd for forespørsel (sekunder)",
"External storages" : "Ekstern lagring",
@@ -114,10 +114,10 @@
"Enable sharing" : "Aktiver deling",
"Check for changes" : "Se etter endringer",
"Never" : "Aldri",
- "Once every direct access" : "En gang pr. direkte aksess",
+ "Once every direct access" : "En gang pr. direkte tilgang",
"Folder name" : "Mappenavn",
"Authentication" : "Autentisering",
- "Configuration" : "Konfigurasjon",
+ "Configuration" : "Oppsett",
"Available for" : "Tilgjengelig for",
"Add storage" : "Legg til lagringsplass",
"Advanced settings" : "Avanserte innstillinger",
diff --git a/apps/files_external/l10n/pt_BR.js b/apps/files_external/l10n/pt_BR.js
index bcdb72d189d..c7d09818721 100644
--- a/apps/files_external/l10n/pt_BR.js
+++ b/apps/files_external/l10n/pt_BR.js
@@ -1,9 +1,9 @@
OC.L10N.register(
"files_external",
{
- "Fetching request tokens failed. Verify that your app key and secret are correct." : "A solicitação dos tokens de requisição falhou. Verifique se sua chave de aplicativo e segurança estão corretos.",
- "Fetching access tokens failed. Verify that your app key and secret are correct." : "A solicitação dos tokens de acesso falhou. Verifique se sua chave de aplicativo e segurança estão corretos.",
- "Please provide a valid app key and secret." : "Por favor forneça uma chave e segurança válidos.",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Falha ao obter tokens de solicitação. Verifique se sua chave de aplicativo e segurança estão corretos.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Falha ao obter tokens de solicitação. Verifique se sua chave de aplicativo e segurança estão corretos.",
+ "Please provide a valid app key and secret." : "Por favor forneça uma chave de aplicativo e segurança válidos.",
"Step 1 failed. Exception: %s" : "Passo 1 falhou. Exceção: %s",
"Step 2 failed. Exception: %s" : "Passo 2 falhou. Exceção: %s",
"External storage" : "Armazenamento Externo",
@@ -11,7 +11,7 @@ OC.L10N.register(
"Google Drive App Configuration" : "Configuração do Aplicativo Google Drive",
"Personal" : "Pessoal",
"System" : "Sistema",
- "Grant access" : "Permitir acesso",
+ "Grant access" : "Garantir acesso",
"Error configuring OAuth1" : "Erro configurando OAuth1",
"Error configuring OAuth2" : "Erro configurando OAuth2",
"Generate keys" : "Gerar chaves",
@@ -24,12 +24,12 @@ OC.L10N.register(
"Saving..." : "Salvando...",
"Save" : "Salvar",
"Empty response from the server" : "Resposta vazia do servidor",
- "Couldn't access. Please logout and login to activate this mount point" : "Não foi possível acessar. Por favor, desconecte e conecte novamente para ativar este ponto de montagem",
+ "Couldn't access. Please logout and login to activate this mount point" : "Não foi possível acessar. Por favor, saia e entre novamente para ativar este ponto de montagem",
"Couldn't get the information from the remote server: {code} {type}" : "Não foi possível obter as informações do servidor remoto: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Não foi possível obter a lista de pontos de montagem externos: {type}",
"There was an error with message: " : "Houve um erro com a mensagem:",
"External mount error" : "Erro de montagem externa",
- "external-storage" : "armazenamento-externo",
+ "external-storage" : "armazenamento externo",
"Couldn't get the list of Windows network drive mount points: empty response from the server" : "Não foi possível obter a lista de unidades de pontos de montagem da rede Windows: resposta vazia do servidor",
"Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Alguns dos pontos de montagem externos configurados não estão conectados. Clique na(s) linha(s) vermelha(s) para mais informações",
"Please enter the credentials for the {mount} mount" : "Por favor, insira as credenciais para montar {mount}",
@@ -37,15 +37,15 @@ OC.L10N.register(
"Password" : "Senha",
"Credentials saved" : "Credenciais salvas",
"Credentials saving failed" : "A gravação das credenciais falhou",
- "Credentials required" : "Credenciais são exigidas",
+ "Credentials required" : "Credenciais são requeridas",
"Storage with id \"%i\" not found" : "Armazenamento com id \"%i\" não encontrado",
- "Invalid backend or authentication mechanism class" : "Backend inválido ou classe de mecanismo de autenticação",
+ "Invalid backend or authentication mechanism class" : "Backend ou classe de mecanismo de autenticação inválido",
"Invalid mount point" : "Ponto de montagem inválido",
"Objectstore forbidden" : "Proibido armazenamento de objetos",
- "Invalid storage backend \"%s\"" : "Armazenamento backend inválido \"%s\"",
+ "Invalid storage backend \"%s\"" : "Backend de armazenamento \"%s\" inválido",
"Not permitted to use backend \"%s\"" : "Não é permitido o uso de backend \"%s\"",
"Not permitted to use authentication mechanism \"%s\"" : "Não é permitido usar o mecanismo de autenticação \"%s\"",
- "Unsatisfied backend parameters" : "Parâmetros de back-end não-atendidos",
+ "Unsatisfied backend parameters" : "Parâmetros de backend não atendidos",
"Unsatisfied authentication mechanism parameters" : "Parâmetros de mecanismos de autenticação não satisfeitos",
"Insufficient data: %s" : "Dados insuficientes: %s",
"%s" : "%s",
@@ -55,15 +55,15 @@ OC.L10N.register(
"Builtin" : "Construídas em",
"None" : "Nenhum",
"OAuth1" : "OAuth1",
- "App key" : "Chave do Aplicativo",
- "App secret" : "Segredo da Aplicação",
+ "App key" : "Chave do aplicativo",
+ "App secret" : "Segredo do aplicativo",
"OAuth2" : "OAuth2",
"Client ID" : "ID do Cliente",
"Client secret" : "Segredo do cliente",
"OpenStack" : "OpenStack",
"Tenant name" : "Nome do inquilino",
- "Identity endpoint URL" : "URL da identidade destino",
- "Rackspace" : "Espaço em rack",
+ "Identity endpoint URL" : "URL do destino da identidade",
+ "Rackspace" : "Espaço no rack",
"API key" : "Chave API",
"Global credentials" : "Credenciais globais",
"Log-in credentials, save in database" : "Credenciais de acesso, salvas no banco de dados",
@@ -82,7 +82,7 @@ OC.L10N.register(
"WebDAV" : "WebDAV",
"URL" : "URL",
"Remote subfolder" : "Subpasta remota",
- "Secure https://" : "https:// segura",
+ "Secure https://" : "https:// seguro",
"Dropbox" : "Dropbox",
"FTP" : "FTP",
"Host" : "Host",
@@ -93,19 +93,19 @@ OC.L10N.register(
"Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Raiz",
- "SFTP with secret key login" : "SFTP com chave secreta de login",
+ "SFTP with secret key login" : "SFTP com login de chave secreta",
"SMB / CIFS" : "SMB / CIFS",
"Share" : "Compartilhar",
"Domain" : "Domínio",
"SMB / CIFS using OC login" : "SMB / CIFS usando OC login",
- "Username as share" : "Nome de usuário como compartilhado",
+ "Username as share" : "Nome de usuário como compartilhamento",
"OpenStack Object Storage" : "Armazenamento de Objetos OpenStack",
"Service name" : "Nome do serviço",
"Request timeout (seconds)" : "Tempo requerido esgotado (segundos)",
- "External storages" : "Armazenamentos externo",
- "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a cURL no PHP não está habilitado ou instalado. A montagem de %s não é possível. Por favor, solicite ao administrador do sistema instalá-lo.",
- "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a FTP no PHP não está habilitado ou instalado. A montagem de %s não é possível. Por favor, solicite ao administrador do sistema instalá-lo.",
- "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" não está instalado. A montagem de %s não é possível. Por favor, solicite ao administrador do sistema instalá-lo.",
+ "External storages" : "Armazenamentos externos",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a cURL no PHP não está habilitado ou instalado. A montagem de %s não é possível. Por favor, solicite a instalação ao administrador do sistema.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a FTP no PHP não está habilitado ou instalado. A montagem de %s não é possível. Por favor, solicite a instalação ao administrador do sistema.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" não está instalado. A montagem de %s não é possível. Por favor, solicite a instalação ao administrador do sistema.",
"No external storage configured" : "Nenhum armazendo externo foi configurado",
"You can add external storages in the personal settings" : "Você pode adicionar armazenamentos externos nas configurações pessoais",
"Name" : "Nome",
@@ -120,7 +120,7 @@ OC.L10N.register(
"Folder name" : "Nome da pasta",
"Authentication" : "Autenticação",
"Configuration" : "Configuração",
- "Available for" : "Disponível para",
+ "Available for" : "Disponível por",
"Add storage" : "Adicionar Armazenamento",
"Advanced settings" : "Configurações avançadas",
"Delete" : "Excluir",
diff --git a/apps/files_external/l10n/pt_BR.json b/apps/files_external/l10n/pt_BR.json
index b0acf8586c0..55c417a6b2c 100644
--- a/apps/files_external/l10n/pt_BR.json
+++ b/apps/files_external/l10n/pt_BR.json
@@ -1,7 +1,7 @@
{ "translations": {
- "Fetching request tokens failed. Verify that your app key and secret are correct." : "A solicitação dos tokens de requisição falhou. Verifique se sua chave de aplicativo e segurança estão corretos.",
- "Fetching access tokens failed. Verify that your app key and secret are correct." : "A solicitação dos tokens de acesso falhou. Verifique se sua chave de aplicativo e segurança estão corretos.",
- "Please provide a valid app key and secret." : "Por favor forneça uma chave e segurança válidos.",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Falha ao obter tokens de solicitação. Verifique se sua chave de aplicativo e segurança estão corretos.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Falha ao obter tokens de solicitação. Verifique se sua chave de aplicativo e segurança estão corretos.",
+ "Please provide a valid app key and secret." : "Por favor forneça uma chave de aplicativo e segurança válidos.",
"Step 1 failed. Exception: %s" : "Passo 1 falhou. Exceção: %s",
"Step 2 failed. Exception: %s" : "Passo 2 falhou. Exceção: %s",
"External storage" : "Armazenamento Externo",
@@ -9,7 +9,7 @@
"Google Drive App Configuration" : "Configuração do Aplicativo Google Drive",
"Personal" : "Pessoal",
"System" : "Sistema",
- "Grant access" : "Permitir acesso",
+ "Grant access" : "Garantir acesso",
"Error configuring OAuth1" : "Erro configurando OAuth1",
"Error configuring OAuth2" : "Erro configurando OAuth2",
"Generate keys" : "Gerar chaves",
@@ -22,12 +22,12 @@
"Saving..." : "Salvando...",
"Save" : "Salvar",
"Empty response from the server" : "Resposta vazia do servidor",
- "Couldn't access. Please logout and login to activate this mount point" : "Não foi possível acessar. Por favor, desconecte e conecte novamente para ativar este ponto de montagem",
+ "Couldn't access. Please logout and login to activate this mount point" : "Não foi possível acessar. Por favor, saia e entre novamente para ativar este ponto de montagem",
"Couldn't get the information from the remote server: {code} {type}" : "Não foi possível obter as informações do servidor remoto: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Não foi possível obter a lista de pontos de montagem externos: {type}",
"There was an error with message: " : "Houve um erro com a mensagem:",
"External mount error" : "Erro de montagem externa",
- "external-storage" : "armazenamento-externo",
+ "external-storage" : "armazenamento externo",
"Couldn't get the list of Windows network drive mount points: empty response from the server" : "Não foi possível obter a lista de unidades de pontos de montagem da rede Windows: resposta vazia do servidor",
"Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Alguns dos pontos de montagem externos configurados não estão conectados. Clique na(s) linha(s) vermelha(s) para mais informações",
"Please enter the credentials for the {mount} mount" : "Por favor, insira as credenciais para montar {mount}",
@@ -35,15 +35,15 @@
"Password" : "Senha",
"Credentials saved" : "Credenciais salvas",
"Credentials saving failed" : "A gravação das credenciais falhou",
- "Credentials required" : "Credenciais são exigidas",
+ "Credentials required" : "Credenciais são requeridas",
"Storage with id \"%i\" not found" : "Armazenamento com id \"%i\" não encontrado",
- "Invalid backend or authentication mechanism class" : "Backend inválido ou classe de mecanismo de autenticação",
+ "Invalid backend or authentication mechanism class" : "Backend ou classe de mecanismo de autenticação inválido",
"Invalid mount point" : "Ponto de montagem inválido",
"Objectstore forbidden" : "Proibido armazenamento de objetos",
- "Invalid storage backend \"%s\"" : "Armazenamento backend inválido \"%s\"",
+ "Invalid storage backend \"%s\"" : "Backend de armazenamento \"%s\" inválido",
"Not permitted to use backend \"%s\"" : "Não é permitido o uso de backend \"%s\"",
"Not permitted to use authentication mechanism \"%s\"" : "Não é permitido usar o mecanismo de autenticação \"%s\"",
- "Unsatisfied backend parameters" : "Parâmetros de back-end não-atendidos",
+ "Unsatisfied backend parameters" : "Parâmetros de backend não atendidos",
"Unsatisfied authentication mechanism parameters" : "Parâmetros de mecanismos de autenticação não satisfeitos",
"Insufficient data: %s" : "Dados insuficientes: %s",
"%s" : "%s",
@@ -53,15 +53,15 @@
"Builtin" : "Construídas em",
"None" : "Nenhum",
"OAuth1" : "OAuth1",
- "App key" : "Chave do Aplicativo",
- "App secret" : "Segredo da Aplicação",
+ "App key" : "Chave do aplicativo",
+ "App secret" : "Segredo do aplicativo",
"OAuth2" : "OAuth2",
"Client ID" : "ID do Cliente",
"Client secret" : "Segredo do cliente",
"OpenStack" : "OpenStack",
"Tenant name" : "Nome do inquilino",
- "Identity endpoint URL" : "URL da identidade destino",
- "Rackspace" : "Espaço em rack",
+ "Identity endpoint URL" : "URL do destino da identidade",
+ "Rackspace" : "Espaço no rack",
"API key" : "Chave API",
"Global credentials" : "Credenciais globais",
"Log-in credentials, save in database" : "Credenciais de acesso, salvas no banco de dados",
@@ -80,7 +80,7 @@
"WebDAV" : "WebDAV",
"URL" : "URL",
"Remote subfolder" : "Subpasta remota",
- "Secure https://" : "https:// segura",
+ "Secure https://" : "https:// seguro",
"Dropbox" : "Dropbox",
"FTP" : "FTP",
"Host" : "Host",
@@ -91,19 +91,19 @@
"Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Raiz",
- "SFTP with secret key login" : "SFTP com chave secreta de login",
+ "SFTP with secret key login" : "SFTP com login de chave secreta",
"SMB / CIFS" : "SMB / CIFS",
"Share" : "Compartilhar",
"Domain" : "Domínio",
"SMB / CIFS using OC login" : "SMB / CIFS usando OC login",
- "Username as share" : "Nome de usuário como compartilhado",
+ "Username as share" : "Nome de usuário como compartilhamento",
"OpenStack Object Storage" : "Armazenamento de Objetos OpenStack",
"Service name" : "Nome do serviço",
"Request timeout (seconds)" : "Tempo requerido esgotado (segundos)",
- "External storages" : "Armazenamentos externo",
- "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a cURL no PHP não está habilitado ou instalado. A montagem de %s não é possível. Por favor, solicite ao administrador do sistema instalá-lo.",
- "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a FTP no PHP não está habilitado ou instalado. A montagem de %s não é possível. Por favor, solicite ao administrador do sistema instalá-lo.",
- "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" não está instalado. A montagem de %s não é possível. Por favor, solicite ao administrador do sistema instalá-lo.",
+ "External storages" : "Armazenamentos externos",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a cURL no PHP não está habilitado ou instalado. A montagem de %s não é possível. Por favor, solicite a instalação ao administrador do sistema.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a FTP no PHP não está habilitado ou instalado. A montagem de %s não é possível. Por favor, solicite a instalação ao administrador do sistema.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" não está instalado. A montagem de %s não é possível. Por favor, solicite a instalação ao administrador do sistema.",
"No external storage configured" : "Nenhum armazendo externo foi configurado",
"You can add external storages in the personal settings" : "Você pode adicionar armazenamentos externos nas configurações pessoais",
"Name" : "Nome",
@@ -118,7 +118,7 @@
"Folder name" : "Nome da pasta",
"Authentication" : "Autenticação",
"Configuration" : "Configuração",
- "Available for" : "Disponível para",
+ "Available for" : "Disponível por",
"Add storage" : "Adicionar Armazenamento",
"Advanced settings" : "Configurações avançadas",
"Delete" : "Excluir",
diff --git a/apps/files_sharing/css/sharebreadcrumb.scss b/apps/files_sharing/css/sharebreadcrumb.scss
index 792c8a31b7c..f3096f45013 100644
--- a/apps/files_sharing/css/sharebreadcrumb.scss
+++ b/apps/files_sharing/css/sharebreadcrumb.scss
@@ -20,7 +20,7 @@
*
*/
-div.crumb span.icon-share,
+div.crumb span.icon-shared,
div.crumb span.icon-public {
display: inline-block;
cursor: pointer;
@@ -28,7 +28,7 @@ div.crumb span.icon-public {
margin-right: 6px;
}
-div.crumb span.icon-share.shared,
+div.crumb span.icon-shared.shared,
div.crumb span.icon-public.shared {
opacity: 0.7;
}
diff --git a/apps/files_sharing/js/app.js b/apps/files_sharing/js/app.js
index 6f12b3d4456..e6c9159eda4 100644
--- a/apps/files_sharing/js/app.js
+++ b/apps/files_sharing/js/app.js
@@ -40,7 +40,7 @@ OCA.Sharing.App = {
this._extendFileList(this._inFileList);
this._inFileList.appName = t('files_sharing', 'Shared with you');
- this._inFileList.$el.find('#emptycontent').html('<div class="icon-share"></div>' +
+ this._inFileList.$el.find('#emptycontent').html('<div class="icon-shared"></div>' +
'<h2>' + t('files_sharing', 'Nothing shared with you yet') + '</h2>' +
'<p>' + t('files_sharing', 'Files and folders others share with you will show up here') + '</p>');
return this._inFileList;
@@ -63,7 +63,7 @@ OCA.Sharing.App = {
this._extendFileList(this._outFileList);
this._outFileList.appName = t('files_sharing', 'Shared with others');
- this._outFileList.$el.find('#emptycontent').html('<div class="icon-share"></div>' +
+ this._outFileList.$el.find('#emptycontent').html('<div class="icon-shared"></div>' +
'<h2>' + t('files_sharing', 'Nothing shared yet') + '</h2>' +
'<p>' + t('files_sharing', 'Files and folders you share will show up here') + '</p>');
return this._outFileList;
@@ -194,4 +194,3 @@ $(document).ready(function() {
OCA.Sharing.App.removeSharingLinks();
});
});
-
diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js
index ed516efc3c9..c40ca07b76b 100644
--- a/apps/files_sharing/js/share.js
+++ b/apps/files_sharing/js/share.js
@@ -154,7 +154,7 @@
altText: t('core', 'Share'),
mime: 'all',
permissions: OC.PERMISSION_ALL,
- iconClass: 'icon-share',
+ iconClass: 'icon-shared',
type: OCA.Files.FileActions.TYPE_INLINE,
actionHandler: function(fileName) {
fileList.showDetailsView(fileName, 'shareTabView');
diff --git a/apps/files_sharing/js/sharebreadcrumbview.js b/apps/files_sharing/js/sharebreadcrumbview.js
index 36bbddfaec4..64d2df52d2c 100644
--- a/apps/files_sharing/js/sharebreadcrumbview.js
+++ b/apps/files_sharing/js/sharebreadcrumbview.js
@@ -44,21 +44,21 @@
if (this._dirInfo !== null && (this._dirInfo.path !== '/' || this._dirInfo.name !== '')) {
var isShared = data.dirInfo && data.dirInfo.shareTypes && data.dirInfo.shareTypes.length > 0;
- this.$el.removeClass('shared icon-public icon-share');
+ this.$el.removeClass('shared icon-public icon-shared');
if (isShared) {
this.$el.addClass('shared');
if (data.dirInfo.shareTypes.indexOf(OC.Share.SHARE_TYPE_LINK) !== -1) {
this.$el.addClass('icon-public');
} else {
- this.$el.addClass('icon-share');
+ this.$el.addClass('icon-shared');
}
} else {
- this.$el.addClass('icon-share');
+ this.$el.addClass('icon-shared');
}
this.$el.show();
this.delegateEvents();
} else {
- this.$el.removeClass('shared icon-public icon-share');
+ this.$el.removeClass('shared icon-public icon-shared');
this.$el.hide();
}
diff --git a/apps/files_sharing/l10n/nb.js b/apps/files_sharing/l10n/nb.js
index 5a5e642898c..64c75b414d0 100644
--- a/apps/files_sharing/l10n/nb.js
+++ b/apps/files_sharing/l10n/nb.js
@@ -100,7 +100,7 @@ OC.L10N.register(
"Reasons might be:" : "Mulige årsaker:",
"the item was removed" : "elementet er fjernet",
"the link expired" : "lenken er utløpt",
- "sharing is disabled" : "deling er deaktivert",
+ "sharing is disabled" : "deling er avskrudd",
"For more info, please ask the person who sent this link." : "For mer informasjon, spør personen som sendte lenken.",
"Add to your Nextcloud" : "Legg til i din Nextcloud",
"Download" : "Last ned",
diff --git a/apps/files_sharing/l10n/nb.json b/apps/files_sharing/l10n/nb.json
index 0eae6f6230d..2ade5486158 100644
--- a/apps/files_sharing/l10n/nb.json
+++ b/apps/files_sharing/l10n/nb.json
@@ -98,7 +98,7 @@
"Reasons might be:" : "Mulige årsaker:",
"the item was removed" : "elementet er fjernet",
"the link expired" : "lenken er utløpt",
- "sharing is disabled" : "deling er deaktivert",
+ "sharing is disabled" : "deling er avskrudd",
"For more info, please ask the person who sent this link." : "For mer informasjon, spør personen som sendte lenken.",
"Add to your Nextcloud" : "Legg til i din Nextcloud",
"Download" : "Last ned",
diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js
index 305ec8388dd..e364715c958 100644
--- a/apps/files_sharing/l10n/pt_BR.js
+++ b/apps/files_sharing/l10n/pt_BR.js
@@ -5,44 +5,44 @@ OC.L10N.register(
"Shared with others" : "Compartilhado com outros",
"Shared by link" : "Compartilhado por link",
"Nothing shared with you yet" : "Nada foi compartilhado com você até agora",
- "Files and folders others share with you will show up here" : "Arquivos e pastas que outros compartilham com você são mostrados aqui",
+ "Files and folders others share with you will show up here" : "Arquivos e pastas que outros compartilham com você serão mostrados aqui",
"Nothing shared yet" : "Nada compartilhado até agora",
- "Files and folders you share will show up here" : "Arquivos e pastas que você compartilha são mostrados aqui",
+ "Files and folders you share will show up here" : "Arquivos e pastas que você compartilha serão mostrados aqui",
"No shared links" : "Nenhum link compartilhado",
- "Files and folders you share by link will show up here" : "Arquivos e pastas que você compartilha com link são mostrados aqui",
+ "Files and folders you share by link will show up here" : "Arquivos e pastas que você compartilha por link serão mostrados aqui",
"You can upload into this folder" : "Você não pode enviar arquivos para esta pasta",
"No compatible server found at {remote}" : "Nenhum servidor compativel encontrado em {remote}",
- "Invalid server URL" : "URL inválida do servidor",
+ "Invalid server URL" : "URL do servidor inválida",
"Failed to add the public link to your Nextcloud" : "Ocorreu uma falha ao adicionar o link público ao seu Nextcloud",
"Share" : "Compartilhamento",
"No expiration date set" : "Nenhuma data de expiração definida",
"Shared by" : "Compartilhado por",
- "Sharing" : "Compartilhamento",
+ "Sharing" : "Compartilhando",
"File shares" : "Compartilhamentos de arquivos",
"Downloaded via public link" : "Baixar via link público",
"Downloaded by {email}" : "Baixado por {email}",
"{file} downloaded via public link" : "{file} baixado via link público",
- "{email} downloaded {file}" : "{email} baixado {file}",
- "Shared with group {group}" : "Compartilhado com o grupo {group}",
- "Removed share for group {group}" : "Compartilhamento removido para o grupo {group}",
- "{actor} shared with group {group}" : "{actor} compartilhado com o grupo {group}",
- "{actor} removed share for group {group}" : "{actor} removeu compartilhamento para o grupo {group}",
+ "{email} downloaded {file}" : "{email} baixou {file}",
+ "Shared with group {group}" : "Compartilhou com o grupo {group}",
+ "Removed share for group {group}" : "Excluiu o compartilhamento para o grupo {group}",
+ "{actor} shared with group {group}" : "{actor} compartilhou com o grupo {group}",
+ "{actor} removed share for group {group}" : "{actor} excluiu o compartilhamento para o grupo {group}",
"You shared {file} with group {group}" : "Você compartilhou {file} com o grupo {group} ",
- "You removed group {group} from {file}" : "Voce removeu o grupo {group} de {file}",
- "{actor} shared {file} with group {group}" : "{actor} compartilhado {file} com o grupo {group}",
- "{actor} removed group {group} from {file}" : "{actor} removido grupo {group} de {file}",
+ "You removed group {group} from {file}" : "Você excluiu o grupo {group} de {file}",
+ "{actor} shared {file} with group {group}" : "{actor} compartilhou {file} com o grupo {group}",
+ "{actor} removed group {group} from {file}" : "{actor} excluiu o grupo {group} de {file}",
"Shared as public link" : "Compartilhado como um link publico",
- "Removed public link" : "Removido o link público",
+ "Removed public link" : "Excluido o link público",
"Public link expired" : "O link público expirou",
- "{actor} shared as public link" : "{actor} compartilhado como um link publico",
- "{actor} removed public link" : "{actor} removido link publico",
+ "{actor} shared as public link" : "{actor} compartilhou como um link publico",
+ "{actor} removed public link" : "{actor} excluiu o link publico",
"Public link of {actor} expired" : "O link público de {actor} expirou.",
- "You shared {file} as public link" : "Voce compartilhou {file} como um link publico",
- "You removed public link for {file}" : "Voce removeu o link publico para {file}",
- "Public link expired for {file}" : "O link público para {file} expirou",
- "{actor} shared {file} as public link" : "{actor} compartilhado {file} como um link publico",
- "{actor} removed public link for {file}" : "{actor} removido link publico para {file}",
- "Public link of {actor} for {file} expired" : "O link público de {actor} para {file} espirou",
+ "You shared {file} as public link" : "Você compartilhou {file} como um link publico",
+ "You removed public link for {file}" : "Você excluiu o link publico de {file}",
+ "Public link expired for {file}" : "O link público de {file} expirou",
+ "{actor} shared {file} as public link" : "{actor} compartilhou {file} como um link publico",
+ "{actor} removed public link for {file}" : "{actor} excluiu o link publico de {file}",
+ "Public link of {actor} for {file} expired" : "O link público de {actor} para {file} expirou",
"{user} accepted the remote share" : "{user} aceitou o compartilhamento remoto",
"{user} declined the remote share" : "{user} declinou do compartilhamento remoto",
"You received a new remote share {file} from {user}" : "Voce recebeu um novo compartilhamento remoto {file} de {user}",
@@ -50,44 +50,44 @@ OC.L10N.register(
"{user} declined the remote share of {file}" : "{user} declinou do compartilhamento remoto de {file}",
"{user} unshared {file} from you" : "{user} descompartilhou {file} de você",
"Shared with {user}" : "Compartilhado com {user}",
- "Removed share for {user}" : "Compartilhamento removido para {user}",
+ "Removed share for {user}" : "Excluiu compartilhamento para {user}",
"{actor} shared with {user}" : "{actor} compartilhado com {user}",
- "{actor} removed share for {user}" : "{actor} compartilhamento removido para {user}",
+ "{actor} removed share for {user}" : "{actor} excluiu o compartilhamento para {user}",
"Shared by {actor}" : "Compartilhado por {actor}",
"{actor} removed share" : "{actor} compartilhamento removido",
- "You shared {file} with {user}" : "Voce compartilhou {arquivo} com {user}",
- "You removed {user} from {file}" : "Voce removeu {user} de {file}",
- "{actor} shared {file} with {user}" : "{actor} compartilhado {file} com {user}",
- "{actor} removed {user} from {file}" : "{actor} removido {user} de {file}",
- "{actor} shared {file} with you" : "{actor} compartilhado {file} com você",
- "{actor} removed you from {file}" : "{actor} removeu você de {file}",
+ "You shared {file} with {user}" : "Você compartilhou {arquivo} com {user}",
+ "You removed {user} from {file}" : "Voce excluiu {user} de {file}",
+ "{actor} shared {file} with {user}" : "{actor} compartilhou {file} com {user}",
+ "{actor} removed {user} from {file}" : "{actor} excluiu {user} de {file}",
+ "{actor} shared {file} with you" : "{actor} compartilhou {file} com você",
+ "{actor} removed you from {file}" : "{actor} excluiu você de {file}",
"A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Um arquivo ou pasta compartilhado por email ou por link publico foi <strong>baixado</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Um arquivo ou pasta foi compartilhado a partir de <strong>outro servidor</strong>",
"A file or folder has been <strong>shared</strong>" : "Um arquivo ou pasta foi <strong>compartilhado</strong> ",
"Wrong share ID, share doesn't exist" : "ID de compartilhamento errado, o compartilhamento não existe",
"could not delete share" : "não foi possível excluir o compartilhamento",
"Could not delete share" : "Não foi possível excluir o compartilhamento",
- "Please specify a file or folder path" : "Por favor especifique um arquivo ou caminho",
+ "Please specify a file or folder path" : "Por favor especifique um arquivo ou um caminho de pasta",
"Wrong path, file/folder doesn't exist" : "Caminho errado, o arquivo ou pasta não existe",
"Could not create share" : "Não foi possível criar o compartilhamento",
"invalid permissions" : "permissões inválidas",
"Please specify a valid user" : "Por favor especifique um usuário válido",
- "Group sharing is disabled by the administrator" : "Grupo de compartilhamento foi desabilitado pelo administrador",
+ "Group sharing is disabled by the administrator" : "O compartilhamento para grupos foi desabilitado pelo administrador",
"Please specify a valid group" : "Por favor especifique um grupo válido",
- "Public link sharing is disabled by the administrator" : "Link de compartilhamento público foi desativado pelo administrador",
- "Public upload disabled by the administrator" : "Envio público foi desativado pelo administrador",
- "Public upload is only possible for publicly shared folders" : "Envio pública só é possível para pastas compartilhadas publicamente",
- "Invalid date, date format must be YYYY-MM-DD" : "Data inválida, o formato de data deve ser YYYY-MM-DD",
+ "Public link sharing is disabled by the administrator" : "O compartilhamento por link público foi desativado pelo administrador",
+ "Public upload disabled by the administrator" : "O envio público foi desativado pelo administrador",
+ "Public upload is only possible for publicly shared folders" : "O envio público só é possível para pastas compartilhadas publicamente",
+ "Invalid date, date format must be YYYY-MM-DD" : "Data inválida, o formato da data deve ser YYYY-MM-DD",
"Sharing %s failed because the back end does not allow shares from type %s" : "O compartilhando %s falhou porque o backend não permite ações de tipo %s",
- "You cannot share to a Circle if the app is not enabled" : "Você não pode compartilhar para um círculo se o aplicativo não está habiltiado",
+ "You cannot share to a Circle if the app is not enabled" : "Você não pode compartilhar para um círculo se o aplicativo não está habilitado",
"Please specify a valid circle" : "Por favor especifique um círculo válido",
"Unknown share type" : "Tipo de compartilhamento desconhecido",
"Not a directory" : "Não é um diretório",
"Could not lock path" : "Não foi possível bloquear o caminho",
- "Wrong or no update parameter given" : "O parâmetro de atualização fornecido está errado ou desatualizado",
- "Can't change permissions for public share links" : "Não é possível alterar permissões para compartilhar links públicos",
- "Cannot increase permissions" : "Não é possível aumentar permissões",
- "%s is publicly shared" : "%s é um compartilhamento publico",
+ "Wrong or no update parameter given" : "O parâmetro da atualização fornecido está errado ou não existe",
+ "Can't change permissions for public share links" : "Não é possível alterar as permissões para links de compartilhamento público",
+ "Cannot increase permissions" : "Não é possível aumentar as permissões",
+ "%s is publicly shared" : "%s está compartilhado publicamente",
"Share API is disabled" : "O compartilhamento de API está desabilitado.",
"This share is password-protected" : "Este compartilhamento é protegido por senha",
"The password is wrong. Try again." : "Senha incorreta. Tente novamente.",
@@ -96,19 +96,19 @@ OC.L10N.register(
"Name" : "Nome",
"Share time" : "Data de compartilhamento",
"Expiration date" : "Data de expiração",
- "Sorry, this link doesn’t seem to work anymore." : "Desculpe, este link parece não mais funcionar.",
+ "Sorry, this link doesn’t seem to work anymore." : "Desculpe, este link parece não funcionar mais.",
"Reasons might be:" : "As razões podem ser:",
"the item was removed" : "o item foi removido",
"the link expired" : "o link expirou",
"sharing is disabled" : "o compartilhamento está desativado",
- "For more info, please ask the person who sent this link." : "Para mais informações, por favor, pergunte à pessoa que lhe enviou este link.",
+ "For more info, please ask the person who sent this link." : "Para mais informações, pergunte à pessoa que lhe enviou o link.",
"Add to your Nextcloud" : "Adicionar ao seu Nextcloud",
"Download" : "Baixar",
"Download %s" : "Baixar %s",
"Direct link" : "Link direto",
- "Upload files to %s" : "Carregar arquivos para %s",
- "Select or drop files" : "Selecione e solte arquivos",
- "Uploading files…" : "Carregando arquivos...",
- "Uploaded files:" : "Arquivos carregados:"
+ "Upload files to %s" : "Enviar arquivos para %s",
+ "Select or drop files" : "Selecione ou solte arquivos",
+ "Uploading files…" : "Enviando arquivos...",
+ "Uploaded files:" : "Arquivos enviados:"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json
index cab191c7877..ca5d96e886a 100644
--- a/apps/files_sharing/l10n/pt_BR.json
+++ b/apps/files_sharing/l10n/pt_BR.json
@@ -3,44 +3,44 @@
"Shared with others" : "Compartilhado com outros",
"Shared by link" : "Compartilhado por link",
"Nothing shared with you yet" : "Nada foi compartilhado com você até agora",
- "Files and folders others share with you will show up here" : "Arquivos e pastas que outros compartilham com você são mostrados aqui",
+ "Files and folders others share with you will show up here" : "Arquivos e pastas que outros compartilham com você serão mostrados aqui",
"Nothing shared yet" : "Nada compartilhado até agora",
- "Files and folders you share will show up here" : "Arquivos e pastas que você compartilha são mostrados aqui",
+ "Files and folders you share will show up here" : "Arquivos e pastas que você compartilha serão mostrados aqui",
"No shared links" : "Nenhum link compartilhado",
- "Files and folders you share by link will show up here" : "Arquivos e pastas que você compartilha com link são mostrados aqui",
+ "Files and folders you share by link will show up here" : "Arquivos e pastas que você compartilha por link serão mostrados aqui",
"You can upload into this folder" : "Você não pode enviar arquivos para esta pasta",
"No compatible server found at {remote}" : "Nenhum servidor compativel encontrado em {remote}",
- "Invalid server URL" : "URL inválida do servidor",
+ "Invalid server URL" : "URL do servidor inválida",
"Failed to add the public link to your Nextcloud" : "Ocorreu uma falha ao adicionar o link público ao seu Nextcloud",
"Share" : "Compartilhamento",
"No expiration date set" : "Nenhuma data de expiração definida",
"Shared by" : "Compartilhado por",
- "Sharing" : "Compartilhamento",
+ "Sharing" : "Compartilhando",
"File shares" : "Compartilhamentos de arquivos",
"Downloaded via public link" : "Baixar via link público",
"Downloaded by {email}" : "Baixado por {email}",
"{file} downloaded via public link" : "{file} baixado via link público",
- "{email} downloaded {file}" : "{email} baixado {file}",
- "Shared with group {group}" : "Compartilhado com o grupo {group}",
- "Removed share for group {group}" : "Compartilhamento removido para o grupo {group}",
- "{actor} shared with group {group}" : "{actor} compartilhado com o grupo {group}",
- "{actor} removed share for group {group}" : "{actor} removeu compartilhamento para o grupo {group}",
+ "{email} downloaded {file}" : "{email} baixou {file}",
+ "Shared with group {group}" : "Compartilhou com o grupo {group}",
+ "Removed share for group {group}" : "Excluiu o compartilhamento para o grupo {group}",
+ "{actor} shared with group {group}" : "{actor} compartilhou com o grupo {group}",
+ "{actor} removed share for group {group}" : "{actor} excluiu o compartilhamento para o grupo {group}",
"You shared {file} with group {group}" : "Você compartilhou {file} com o grupo {group} ",
- "You removed group {group} from {file}" : "Voce removeu o grupo {group} de {file}",
- "{actor} shared {file} with group {group}" : "{actor} compartilhado {file} com o grupo {group}",
- "{actor} removed group {group} from {file}" : "{actor} removido grupo {group} de {file}",
+ "You removed group {group} from {file}" : "Você excluiu o grupo {group} de {file}",
+ "{actor} shared {file} with group {group}" : "{actor} compartilhou {file} com o grupo {group}",
+ "{actor} removed group {group} from {file}" : "{actor} excluiu o grupo {group} de {file}",
"Shared as public link" : "Compartilhado como um link publico",
- "Removed public link" : "Removido o link público",
+ "Removed public link" : "Excluido o link público",
"Public link expired" : "O link público expirou",
- "{actor} shared as public link" : "{actor} compartilhado como um link publico",
- "{actor} removed public link" : "{actor} removido link publico",
+ "{actor} shared as public link" : "{actor} compartilhou como um link publico",
+ "{actor} removed public link" : "{actor} excluiu o link publico",
"Public link of {actor} expired" : "O link público de {actor} expirou.",
- "You shared {file} as public link" : "Voce compartilhou {file} como um link publico",
- "You removed public link for {file}" : "Voce removeu o link publico para {file}",
- "Public link expired for {file}" : "O link público para {file} expirou",
- "{actor} shared {file} as public link" : "{actor} compartilhado {file} como um link publico",
- "{actor} removed public link for {file}" : "{actor} removido link publico para {file}",
- "Public link of {actor} for {file} expired" : "O link público de {actor} para {file} espirou",
+ "You shared {file} as public link" : "Você compartilhou {file} como um link publico",
+ "You removed public link for {file}" : "Você excluiu o link publico de {file}",
+ "Public link expired for {file}" : "O link público de {file} expirou",
+ "{actor} shared {file} as public link" : "{actor} compartilhou {file} como um link publico",
+ "{actor} removed public link for {file}" : "{actor} excluiu o link publico de {file}",
+ "Public link of {actor} for {file} expired" : "O link público de {actor} para {file} expirou",
"{user} accepted the remote share" : "{user} aceitou o compartilhamento remoto",
"{user} declined the remote share" : "{user} declinou do compartilhamento remoto",
"You received a new remote share {file} from {user}" : "Voce recebeu um novo compartilhamento remoto {file} de {user}",
@@ -48,44 +48,44 @@
"{user} declined the remote share of {file}" : "{user} declinou do compartilhamento remoto de {file}",
"{user} unshared {file} from you" : "{user} descompartilhou {file} de você",
"Shared with {user}" : "Compartilhado com {user}",
- "Removed share for {user}" : "Compartilhamento removido para {user}",
+ "Removed share for {user}" : "Excluiu compartilhamento para {user}",
"{actor} shared with {user}" : "{actor} compartilhado com {user}",
- "{actor} removed share for {user}" : "{actor} compartilhamento removido para {user}",
+ "{actor} removed share for {user}" : "{actor} excluiu o compartilhamento para {user}",
"Shared by {actor}" : "Compartilhado por {actor}",
"{actor} removed share" : "{actor} compartilhamento removido",
- "You shared {file} with {user}" : "Voce compartilhou {arquivo} com {user}",
- "You removed {user} from {file}" : "Voce removeu {user} de {file}",
- "{actor} shared {file} with {user}" : "{actor} compartilhado {file} com {user}",
- "{actor} removed {user} from {file}" : "{actor} removido {user} de {file}",
- "{actor} shared {file} with you" : "{actor} compartilhado {file} com você",
- "{actor} removed you from {file}" : "{actor} removeu você de {file}",
+ "You shared {file} with {user}" : "Você compartilhou {arquivo} com {user}",
+ "You removed {user} from {file}" : "Voce excluiu {user} de {file}",
+ "{actor} shared {file} with {user}" : "{actor} compartilhou {file} com {user}",
+ "{actor} removed {user} from {file}" : "{actor} excluiu {user} de {file}",
+ "{actor} shared {file} with you" : "{actor} compartilhou {file} com você",
+ "{actor} removed you from {file}" : "{actor} excluiu você de {file}",
"A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Um arquivo ou pasta compartilhado por email ou por link publico foi <strong>baixado</strong>",
"A file or folder was shared from <strong>another server</strong>" : "Um arquivo ou pasta foi compartilhado a partir de <strong>outro servidor</strong>",
"A file or folder has been <strong>shared</strong>" : "Um arquivo ou pasta foi <strong>compartilhado</strong> ",
"Wrong share ID, share doesn't exist" : "ID de compartilhamento errado, o compartilhamento não existe",
"could not delete share" : "não foi possível excluir o compartilhamento",
"Could not delete share" : "Não foi possível excluir o compartilhamento",
- "Please specify a file or folder path" : "Por favor especifique um arquivo ou caminho",
+ "Please specify a file or folder path" : "Por favor especifique um arquivo ou um caminho de pasta",
"Wrong path, file/folder doesn't exist" : "Caminho errado, o arquivo ou pasta não existe",
"Could not create share" : "Não foi possível criar o compartilhamento",
"invalid permissions" : "permissões inválidas",
"Please specify a valid user" : "Por favor especifique um usuário válido",
- "Group sharing is disabled by the administrator" : "Grupo de compartilhamento foi desabilitado pelo administrador",
+ "Group sharing is disabled by the administrator" : "O compartilhamento para grupos foi desabilitado pelo administrador",
"Please specify a valid group" : "Por favor especifique um grupo válido",
- "Public link sharing is disabled by the administrator" : "Link de compartilhamento público foi desativado pelo administrador",
- "Public upload disabled by the administrator" : "Envio público foi desativado pelo administrador",
- "Public upload is only possible for publicly shared folders" : "Envio pública só é possível para pastas compartilhadas publicamente",
- "Invalid date, date format must be YYYY-MM-DD" : "Data inválida, o formato de data deve ser YYYY-MM-DD",
+ "Public link sharing is disabled by the administrator" : "O compartilhamento por link público foi desativado pelo administrador",
+ "Public upload disabled by the administrator" : "O envio público foi desativado pelo administrador",
+ "Public upload is only possible for publicly shared folders" : "O envio público só é possível para pastas compartilhadas publicamente",
+ "Invalid date, date format must be YYYY-MM-DD" : "Data inválida, o formato da data deve ser YYYY-MM-DD",
"Sharing %s failed because the back end does not allow shares from type %s" : "O compartilhando %s falhou porque o backend não permite ações de tipo %s",
- "You cannot share to a Circle if the app is not enabled" : "Você não pode compartilhar para um círculo se o aplicativo não está habiltiado",
+ "You cannot share to a Circle if the app is not enabled" : "Você não pode compartilhar para um círculo se o aplicativo não está habilitado",
"Please specify a valid circle" : "Por favor especifique um círculo válido",
"Unknown share type" : "Tipo de compartilhamento desconhecido",
"Not a directory" : "Não é um diretório",
"Could not lock path" : "Não foi possível bloquear o caminho",
- "Wrong or no update parameter given" : "O parâmetro de atualização fornecido está errado ou desatualizado",
- "Can't change permissions for public share links" : "Não é possível alterar permissões para compartilhar links públicos",
- "Cannot increase permissions" : "Não é possível aumentar permissões",
- "%s is publicly shared" : "%s é um compartilhamento publico",
+ "Wrong or no update parameter given" : "O parâmetro da atualização fornecido está errado ou não existe",
+ "Can't change permissions for public share links" : "Não é possível alterar as permissões para links de compartilhamento público",
+ "Cannot increase permissions" : "Não é possível aumentar as permissões",
+ "%s is publicly shared" : "%s está compartilhado publicamente",
"Share API is disabled" : "O compartilhamento de API está desabilitado.",
"This share is password-protected" : "Este compartilhamento é protegido por senha",
"The password is wrong. Try again." : "Senha incorreta. Tente novamente.",
@@ -94,19 +94,19 @@
"Name" : "Nome",
"Share time" : "Data de compartilhamento",
"Expiration date" : "Data de expiração",
- "Sorry, this link doesn’t seem to work anymore." : "Desculpe, este link parece não mais funcionar.",
+ "Sorry, this link doesn’t seem to work anymore." : "Desculpe, este link parece não funcionar mais.",
"Reasons might be:" : "As razões podem ser:",
"the item was removed" : "o item foi removido",
"the link expired" : "o link expirou",
"sharing is disabled" : "o compartilhamento está desativado",
- "For more info, please ask the person who sent this link." : "Para mais informações, por favor, pergunte à pessoa que lhe enviou este link.",
+ "For more info, please ask the person who sent this link." : "Para mais informações, pergunte à pessoa que lhe enviou o link.",
"Add to your Nextcloud" : "Adicionar ao seu Nextcloud",
"Download" : "Baixar",
"Download %s" : "Baixar %s",
"Direct link" : "Link direto",
- "Upload files to %s" : "Carregar arquivos para %s",
- "Select or drop files" : "Selecione e solte arquivos",
- "Uploading files…" : "Carregando arquivos...",
- "Uploaded files:" : "Arquivos carregados:"
+ "Upload files to %s" : "Enviar arquivos para %s",
+ "Select or drop files" : "Selecione ou solte arquivos",
+ "Uploading files…" : "Enviando arquivos...",
+ "Uploaded files:" : "Arquivos enviados:"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/lib/Controller/ShareController.php b/apps/files_sharing/lib/Controller/ShareController.php
index 2c6e953a0f5..732a1d32ee7 100644
--- a/apps/files_sharing/lib/Controller/ShareController.php
+++ b/apps/files_sharing/lib/Controller/ShareController.php
@@ -160,7 +160,7 @@ class ShareController extends Controller {
/**
* @PublicPage
* @UseSession
- * @BruteForceProtection publicLinkAuth
+ * @BruteForceProtection(action=publicLinkAuth)
*
* Authenticates against password-protected shares
* @param string $token
diff --git a/apps/files_sharing/tests/js/shareSpec.js b/apps/files_sharing/tests/js/shareSpec.js
index c34234bfe13..7568b06f27c 100644
--- a/apps/files_sharing/tests/js/shareSpec.js
+++ b/apps/files_sharing/tests/js/shareSpec.js
@@ -84,7 +84,7 @@ describe('OCA.Sharing.Util tests', function() {
}]);
$tr = fileList.$el.find('tbody tr:first');
$action = $tr.find('.action-share');
- expect($action.find('.icon').hasClass('icon-share')).toEqual(true);
+ expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder.svg');
});
@@ -104,7 +104,7 @@ describe('OCA.Sharing.Util tests', function() {
$tr = fileList.$el.find('tbody tr:first');
$action = $tr.find('.action-share');
expect($action.find('>span').text().trim()).toEqual('Shared');
- expect($action.find('.icon').hasClass('icon-share')).toEqual(true);
+ expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg');
});
@@ -125,7 +125,7 @@ describe('OCA.Sharing.Util tests', function() {
$tr = fileList.$el.find('tbody tr:first');
$action = $tr.find('.action-share');
expect($action.find('>span').text().trim()).toEqual('Shared');
- expect($action.find('.icon').hasClass('icon-share')).toEqual(false);
+ expect($action.find('.icon').hasClass('icon-shared')).toEqual(false);
expect($action.find('.icon').hasClass('icon-public')).toEqual(true);
expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-public.svg');
});
@@ -146,7 +146,7 @@ describe('OCA.Sharing.Util tests', function() {
$tr = fileList.$el.find('tbody tr:first');
$action = $tr.find('.action-share');
expect($action.find('>span').text().trim()).toEqual('User One');
- expect($action.find('.icon').hasClass('icon-share')).toEqual(true);
+ expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg');
});
@@ -167,7 +167,7 @@ describe('OCA.Sharing.Util tests', function() {
$tr = fileList.$el.find('tbody tr:first');
$action = $tr.find('.action-share');
expect($action.find('>span').text().trim()).toEqual('Shared with User One, User Two');
- expect($action.find('.icon').hasClass('icon-share')).toEqual(true);
+ expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg');
});
@@ -274,7 +274,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($tr.attr('data-share-recipients')).toEqual('Group One, Group Two, User One, User Two');
expect($action.find('>span').text().trim()).toEqual('Shared with Group One, Group Two, User One, User Two');
- expect($action.find('.icon').hasClass('icon-share')).toEqual(true);
+ expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
});
it('updates share icon after updating shares of a file', function() {
@@ -307,7 +307,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($tr.attr('data-share-recipients')).toEqual('User One, User Three, User Two');
expect($action.find('>span').text().trim()).toEqual('Shared with User One, User Three, User Two');
- expect($action.find('.icon').hasClass('icon-share')).toEqual(true);
+ expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
});
it('removes share icon after removing all shares from a file', function() {
@@ -363,7 +363,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($tr.attr('data-share-recipients')).toEqual('User Two');
expect($action.find('>span').text().trim()).toEqual('User One');
- expect($action.find('.icon').hasClass('icon-share')).toEqual(true);
+ expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
});
it('keep share text after unsharing reshare', function() {
@@ -394,7 +394,7 @@ describe('OCA.Sharing.Util tests', function() {
expect($tr.attr('data-share-recipients')).not.toBeDefined();
expect($action.find('>span').text().trim()).toEqual('User One');
- expect($action.find('.icon').hasClass('icon-share')).toEqual(true);
+ expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
});
});
@@ -469,5 +469,5 @@ describe('OCA.Sharing.Util tests', function() {
expect($('[data-share-recipient]').length).toEqual(0);
});
});
-
+
});
diff --git a/apps/files_sharing/tests/js/sharedbreadcrumviewSpec.js b/apps/files_sharing/tests/js/sharedbreadcrumviewSpec.js
index 501dd819fa8..c58e038c4ab 100644
--- a/apps/files_sharing/tests/js/sharedbreadcrumviewSpec.js
+++ b/apps/files_sharing/tests/js/sharedbreadcrumviewSpec.js
@@ -57,7 +57,7 @@ describe('OCA.Sharing.ShareBreadCrumbView tests', function() {
bc.setDirectory('');
bc.render();
expect(bc.$el.hasClass('breadcrumb')).toEqual(true);
- expect(bc.$el.find('.icon-share').length).toEqual(0);
+ expect(bc.$el.find('.icon-shared').length).toEqual(0);
expect(bc.$el.find('.shared').length).toEqual(0);
expect(bc.$el.find('.icon-public').length).toEqual(0);
});
@@ -71,7 +71,7 @@ describe('OCA.Sharing.ShareBreadCrumbView tests', function() {
bc.setDirectory('/foo');
bc.render();
expect(bc.$el.hasClass('breadcrumb')).toEqual(true);
- expect(bc.$el.find('.icon-share').length).toEqual(1);
+ expect(bc.$el.find('.icon-shared').length).toEqual(1);
expect(bc.$el.find('.shared').length).toEqual(0);
expect(bc.$el.find('.icon-public').length).toEqual(0);
});
@@ -86,7 +86,7 @@ describe('OCA.Sharing.ShareBreadCrumbView tests', function() {
bc.setDirectory('/foo');
bc.render();
expect(bc.$el.hasClass('breadcrumb')).toEqual(true);
- expect(bc.$el.find('.icon-share').length).toEqual(1);
+ expect(bc.$el.find('.icon-shared').length).toEqual(1);
expect(bc.$el.find('.shared').length).toEqual(1);
expect(bc.$el.find('.icon-public').length).toEqual(0);
});
@@ -101,7 +101,7 @@ describe('OCA.Sharing.ShareBreadCrumbView tests', function() {
bc.setDirectory('/foo');
bc.render();
expect(bc.$el.hasClass('breadcrumb')).toEqual(true);
- expect(bc.$el.find('.icon-share').length).toEqual(1);
+ expect(bc.$el.find('.icon-shared').length).toEqual(1);
expect(bc.$el.find('.shared').length).toEqual(1);
expect(bc.$el.find('.icon-public').length).toEqual(0);
});
@@ -116,7 +116,7 @@ describe('OCA.Sharing.ShareBreadCrumbView tests', function() {
bc.setDirectory('/foo');
bc.render();
expect(bc.$el.hasClass('breadcrumb')).toEqual(true);
- expect(bc.$el.find('.icon-share').length).toEqual(0);
+ expect(bc.$el.find('.icon-shared').length).toEqual(0);
expect(bc.$el.find('.shared').length).toEqual(1);
expect(bc.$el.find('.icon-public').length).toEqual(1);
});
@@ -131,7 +131,7 @@ describe('OCA.Sharing.ShareBreadCrumbView tests', function() {
bc.setDirectory('/foo');
bc.render();
expect(bc.$el.hasClass('breadcrumb')).toEqual(true);
- expect(bc.$el.find('.icon-share').length).toEqual(1);
+ expect(bc.$el.find('.icon-shared').length).toEqual(1);
expect(bc.$el.find('.shared').length).toEqual(1);
expect(bc.$el.find('.icon-public').length).toEqual(0);
});
@@ -146,7 +146,7 @@ describe('OCA.Sharing.ShareBreadCrumbView tests', function() {
bc.setDirectory('/foo');
bc.render();
expect(bc.$el.hasClass('breadcrumb')).toEqual(true);
- expect(bc.$el.find('.icon-share').length).toEqual(1);
+ expect(bc.$el.find('.icon-shared').length).toEqual(1);
expect(bc.$el.find('.shared').length).toEqual(1);
expect(bc.$el.find('.icon-public').length).toEqual(0);
});
@@ -168,7 +168,7 @@ describe('OCA.Sharing.ShareBreadCrumbView tests', function() {
bc.setDirectory('/foo');
bc.render();
expect(bc.$el.hasClass('breadcrumb')).toEqual(true);
- expect(bc.$el.find('.icon-share').length).toEqual(0);
+ expect(bc.$el.find('.icon-shared').length).toEqual(0);
expect(bc.$el.find('.shared').length).toEqual(1);
expect(bc.$el.find('.icon-public').length).toEqual(1);
});
@@ -188,7 +188,7 @@ describe('OCA.Sharing.ShareBreadCrumbView tests', function() {
mock.showDetailsView = function() { };
OCA.Files.App.fileList = mock;
var spy = sinon.spy(mock, 'showDetailsView');
- bc.$el.find('.icon-share').click();
+ bc.$el.find('.icon-shared').click();
expect(spy.calledOnce).toEqual(true);
@@ -199,7 +199,7 @@ describe('OCA.Sharing.ShareBreadCrumbView tests', function() {
shareTab.trigger('sharesChanged', model);
expect(bc.$el.hasClass('breadcrumb')).toEqual(true);
- expect(bc.$el.find('.icon-share').length).toEqual(1);
+ expect(bc.$el.find('.icon-shared').length).toEqual(1);
expect(bc.$el.find('.shared').length).toEqual(0);
expect(bc.$el.find('.icon-public').length).toEqual(0);
});
@@ -219,7 +219,7 @@ describe('OCA.Sharing.ShareBreadCrumbView tests', function() {
mock.showDetailsView = function() { };
OCA.Files.App.fileList = mock;
var spy = sinon.spy(mock, 'showDetailsView');
- bc.$el.find('.icon-share').click();
+ bc.$el.find('.icon-shared').click();
expect(spy.calledOnce).toEqual(true);
@@ -232,7 +232,7 @@ describe('OCA.Sharing.ShareBreadCrumbView tests', function() {
shareTab.trigger('sharesChanged', model);
expect(bc.$el.hasClass('breadcrumb')).toEqual(true);
- expect(bc.$el.find('.icon-share').length).toEqual(0);
+ expect(bc.$el.find('.icon-shared').length).toEqual(0);
expect(bc.$el.find('.shared').length).toEqual(1);
expect(bc.$el.find('.icon-public').length).toEqual(1);
});
diff --git a/apps/files_trashbin/l10n/pt_BR.js b/apps/files_trashbin/l10n/pt_BR.js
index 105b3f5a480..d937db7b513 100644
--- a/apps/files_trashbin/l10n/pt_BR.js
+++ b/apps/files_trashbin/l10n/pt_BR.js
@@ -9,10 +9,10 @@ OC.L10N.register(
"Delete permanently" : "Excluir permanentemente",
"Error" : "Erro",
"This operation is forbidden" : "Esta operação é proibida",
- "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível. Por favor verifique os logs ou entre em contato com o administrador",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível. Por favor verifique os logs ou contacte o administrador",
"restored" : "restaurado",
"No deleted files" : "Nenhum arquivo excluído",
- "You will be able to recover deleted files from here" : "Neste local, você pode recuperar arquivos excluídos",
+ "You will be able to recover deleted files from here" : "Você pode recuperar arquivos excluídos deste local",
"No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
"Select all" : "Selecionar tudo",
"Name" : "Nome",
diff --git a/apps/files_trashbin/l10n/pt_BR.json b/apps/files_trashbin/l10n/pt_BR.json
index f9cad4f911d..21fd0324355 100644
--- a/apps/files_trashbin/l10n/pt_BR.json
+++ b/apps/files_trashbin/l10n/pt_BR.json
@@ -7,10 +7,10 @@
"Delete permanently" : "Excluir permanentemente",
"Error" : "Erro",
"This operation is forbidden" : "Esta operação é proibida",
- "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível. Por favor verifique os logs ou entre em contato com o administrador",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível. Por favor verifique os logs ou contacte o administrador",
"restored" : "restaurado",
"No deleted files" : "Nenhum arquivo excluído",
- "You will be able to recover deleted files from here" : "Neste local, você pode recuperar arquivos excluídos",
+ "You will be able to recover deleted files from here" : "Você pode recuperar arquivos excluídos deste local",
"No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
"Select all" : "Selecionar tudo",
"Name" : "Nome",
diff --git a/apps/files_versions/l10n/nb.js b/apps/files_versions/l10n/nb.js
index 06b7729a462..95d47bb0188 100644
--- a/apps/files_versions/l10n/nb.js
+++ b/apps/files_versions/l10n/nb.js
@@ -6,6 +6,8 @@ OC.L10N.register(
"Failed to revert {file} to revision {timestamp}." : "Klarte ikke å tilbakeføre {file} til revisjon {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Restore" : "Gjenopprett",
+ "No earlier versions available" : "Ingen tidligere versjoner tilgjengelige",
+ "More versions …" : "Flere versjoner…",
"No versions available" : "Ingen versjoner tilgjengelig",
"More versions..." : "Flere versjoner"
},
diff --git a/apps/files_versions/l10n/nb.json b/apps/files_versions/l10n/nb.json
index 2c6d0185861..2fc427f0cbd 100644
--- a/apps/files_versions/l10n/nb.json
+++ b/apps/files_versions/l10n/nb.json
@@ -4,6 +4,8 @@
"Failed to revert {file} to revision {timestamp}." : "Klarte ikke å tilbakeføre {file} til revisjon {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Restore" : "Gjenopprett",
+ "No earlier versions available" : "Ingen tidligere versjoner tilgjengelige",
+ "More versions …" : "Flere versjoner…",
"No versions available" : "Ingen versjoner tilgjengelig",
"More versions..." : "Flere versjoner"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/sharebymail/l10n/de.js b/apps/sharebymail/l10n/de.js
index 95252e14e5e..ffeb15b4b4d 100644
--- a/apps/sharebymail/l10n/de.js
+++ b/apps/sharebymail/l10n/de.js
@@ -11,9 +11,16 @@ OC.L10N.register(
"{actor} shared {file} with {email} by mail" : "{actor} teilt {file} mit {email} über E-Mail",
"Sharing %s failed, this item is already shared with %s" : "Freigabe von %s fehlgeschlagen, da dieses Objekt schon mit %s geteilt wird",
"Failed to send share by E-mail" : "Senden der Freigabe über Mail ist fehlgeschlagen",
- "%s shared »%s« with you" : "%s hat „%s“ mit Dir geteilt",
- "%s shared »%s« with you on behalf of %s" : "%s hat »%s« im Auftrag von %s mit Dir geteilt",
+ "%s shared »%s« with you" : "%s hat „%s“ mit dir geteilt",
+ "%s shared »%s« with you on behalf of %s" : "%s hat »%s« im Auftrag von %s mit dir geteilt",
+ "%s shared »%s« with you." : "%s hat mit dir »%s« geteilt.",
+ "%s shared »%s« with you on behalf of %s." : "%s hat mit dir »%s« im Auftrag von %s geteilt.",
+ "Click the button below to open it." : "Klicke zum Öffnen auf die untere Schaltfläche",
+ "Open »%s«" : "Öffne »%s«",
"Password to access »%s« shared to you by %s" : "Das Passwort zum Zugriff auf %s wurde durch %s mit dir geteilt.",
+ "Password to access »%s«" : "Passwort um auf »%s« zu zugreifen",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s hat »%s« mit dir geteilt. Du solltest schon eine E-Mail mit einem Link erhalten haben um darauf zu zugreifen. ",
+ "It is protected with the following password: %s" : "Dies ist mit dem folgendem Passwort geschützt: %s",
"Could not find share" : "Freigabe konnte nicht gefunden werden",
"Share by mail" : "Geteilt über eine E-Mail",
"Send a personalized link to a file or folder by mail." : "Einen personalisierten Link zu einer Datei oder Ordner per E-Mail versenden.",
diff --git a/apps/sharebymail/l10n/de.json b/apps/sharebymail/l10n/de.json
index 40ef70e78a4..6e8c4588dff 100644
--- a/apps/sharebymail/l10n/de.json
+++ b/apps/sharebymail/l10n/de.json
@@ -9,9 +9,16 @@
"{actor} shared {file} with {email} by mail" : "{actor} teilt {file} mit {email} über E-Mail",
"Sharing %s failed, this item is already shared with %s" : "Freigabe von %s fehlgeschlagen, da dieses Objekt schon mit %s geteilt wird",
"Failed to send share by E-mail" : "Senden der Freigabe über Mail ist fehlgeschlagen",
- "%s shared »%s« with you" : "%s hat „%s“ mit Dir geteilt",
- "%s shared »%s« with you on behalf of %s" : "%s hat »%s« im Auftrag von %s mit Dir geteilt",
+ "%s shared »%s« with you" : "%s hat „%s“ mit dir geteilt",
+ "%s shared »%s« with you on behalf of %s" : "%s hat »%s« im Auftrag von %s mit dir geteilt",
+ "%s shared »%s« with you." : "%s hat mit dir »%s« geteilt.",
+ "%s shared »%s« with you on behalf of %s." : "%s hat mit dir »%s« im Auftrag von %s geteilt.",
+ "Click the button below to open it." : "Klicke zum Öffnen auf die untere Schaltfläche",
+ "Open »%s«" : "Öffne »%s«",
"Password to access »%s« shared to you by %s" : "Das Passwort zum Zugriff auf %s wurde durch %s mit dir geteilt.",
+ "Password to access »%s«" : "Passwort um auf »%s« zu zugreifen",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s hat »%s« mit dir geteilt. Du solltest schon eine E-Mail mit einem Link erhalten haben um darauf zu zugreifen. ",
+ "It is protected with the following password: %s" : "Dies ist mit dem folgendem Passwort geschützt: %s",
"Could not find share" : "Freigabe konnte nicht gefunden werden",
"Share by mail" : "Geteilt über eine E-Mail",
"Send a personalized link to a file or folder by mail." : "Einen personalisierten Link zu einer Datei oder Ordner per E-Mail versenden.",
diff --git a/apps/sharebymail/l10n/de_DE.js b/apps/sharebymail/l10n/de_DE.js
index 4fde011dc88..1345a5d5c08 100644
--- a/apps/sharebymail/l10n/de_DE.js
+++ b/apps/sharebymail/l10n/de_DE.js
@@ -13,7 +13,14 @@ OC.L10N.register(
"Failed to send share by E-mail" : "Fehler beim Senden der Freigabe per E-Mail",
"%s shared »%s« with you" : "%s hat »%s« mit Ihnen geteilt",
"%s shared »%s« with you on behalf of %s" : "%s hat »%s« im Auftrag von %s mit Ihnen geteilt",
+ "%s shared »%s« with you." : "%s hat mit ihnen »%s« geteilt.",
+ "%s shared »%s« with you on behalf of %s." : "%s hat mit ihnen »%s« im Auftrag von %s geteilt.",
+ "Click the button below to open it." : "Klicken Sie zum Öffnen auf die untere Schaltfläche",
+ "Open »%s«" : "Öffne »%s«",
"Password to access »%s« shared to you by %s" : "Das Passwort zum Zugriff auf %s wurde durch %s mit Ihnen geteilt.",
+ "Password to access »%s«" : "Passwort um auf »%s« zu zugreifen",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s hat »%s« mit Ihnen geteilt. Sie sollten schon eine E-Mail mit einem Link erhalten haben um darauf zu zugreifen. ",
+ "It is protected with the following password: %s" : "Dies ist mit dem folgendem Passwort geschützt: %s",
"Could not find share" : "Freigabe konnte nicht gefunden werden",
"Share by mail" : "Geteilt über eine E-Mail",
"Send a personalized link to a file or folder by mail." : "Einen personalisierten Link zu einer Datei oder Ordner per E-Mail versenden.",
diff --git a/apps/sharebymail/l10n/de_DE.json b/apps/sharebymail/l10n/de_DE.json
index 3dfc7543680..b070ab1c305 100644
--- a/apps/sharebymail/l10n/de_DE.json
+++ b/apps/sharebymail/l10n/de_DE.json
@@ -11,7 +11,14 @@
"Failed to send share by E-mail" : "Fehler beim Senden der Freigabe per E-Mail",
"%s shared »%s« with you" : "%s hat »%s« mit Ihnen geteilt",
"%s shared »%s« with you on behalf of %s" : "%s hat »%s« im Auftrag von %s mit Ihnen geteilt",
+ "%s shared »%s« with you." : "%s hat mit ihnen »%s« geteilt.",
+ "%s shared »%s« with you on behalf of %s." : "%s hat mit ihnen »%s« im Auftrag von %s geteilt.",
+ "Click the button below to open it." : "Klicken Sie zum Öffnen auf die untere Schaltfläche",
+ "Open »%s«" : "Öffne »%s«",
"Password to access »%s« shared to you by %s" : "Das Passwort zum Zugriff auf %s wurde durch %s mit Ihnen geteilt.",
+ "Password to access »%s«" : "Passwort um auf »%s« zu zugreifen",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s hat »%s« mit Ihnen geteilt. Sie sollten schon eine E-Mail mit einem Link erhalten haben um darauf zu zugreifen. ",
+ "It is protected with the following password: %s" : "Dies ist mit dem folgendem Passwort geschützt: %s",
"Could not find share" : "Freigabe konnte nicht gefunden werden",
"Share by mail" : "Geteilt über eine E-Mail",
"Send a personalized link to a file or folder by mail." : "Einen personalisierten Link zu einer Datei oder Ordner per E-Mail versenden.",
diff --git a/apps/sharebymail/l10n/es.js b/apps/sharebymail/l10n/es.js
index e86a037315f..e9ad5ec76ed 100644
--- a/apps/sharebymail/l10n/es.js
+++ b/apps/sharebymail/l10n/es.js
@@ -13,7 +13,14 @@ OC.L10N.register(
"Failed to send share by E-mail" : "Falló enviar recurso compartido por correo electrónico",
"%s shared »%s« with you" : "%s compartió »%s« con usted",
"%s shared »%s« with you on behalf of %s" : "%s compartió »%s« con usted a nombre de %s",
+ "%s shared »%s« with you." : "%s compartió »%s« con usted.",
+ "%s shared »%s« with you on behalf of %s." : "%s compartió »%s« con usted en nombre de %s.",
+ "Click the button below to open it." : "Haga click en el botón debajo para abrirlo.",
+ "Open »%s«" : "Abrir »%s«",
"Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido con usted por %s",
+ "Password to access »%s«" : "Contraseña para acceder »%s«",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s compartió »%s« con usted. Debería haber recibido un mensaje de correo separado con un enlace para abrirlo.",
+ "It is protected with the following password: %s" : "Está protegido con la siguiente contraseña: %s",
"Could not find share" : "No se pudo encontrar el recurso compartido",
"Share by mail" : "Enviado por correo electrónico",
"Send a personalized link to a file or folder by mail." : "Enviar un enlace personalizado a uno de los archivos o carpetas por correo electrónico.",
diff --git a/apps/sharebymail/l10n/es.json b/apps/sharebymail/l10n/es.json
index f169ce654d8..4e07a47d0ad 100644
--- a/apps/sharebymail/l10n/es.json
+++ b/apps/sharebymail/l10n/es.json
@@ -11,7 +11,14 @@
"Failed to send share by E-mail" : "Falló enviar recurso compartido por correo electrónico",
"%s shared »%s« with you" : "%s compartió »%s« con usted",
"%s shared »%s« with you on behalf of %s" : "%s compartió »%s« con usted a nombre de %s",
+ "%s shared »%s« with you." : "%s compartió »%s« con usted.",
+ "%s shared »%s« with you on behalf of %s." : "%s compartió »%s« con usted en nombre de %s.",
+ "Click the button below to open it." : "Haga click en el botón debajo para abrirlo.",
+ "Open »%s«" : "Abrir »%s«",
"Password to access »%s« shared to you by %s" : "Contraseña para acceder »%s« compartido con usted por %s",
+ "Password to access »%s«" : "Contraseña para acceder »%s«",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s compartió »%s« con usted. Debería haber recibido un mensaje de correo separado con un enlace para abrirlo.",
+ "It is protected with the following password: %s" : "Está protegido con la siguiente contraseña: %s",
"Could not find share" : "No se pudo encontrar el recurso compartido",
"Share by mail" : "Enviado por correo electrónico",
"Send a personalized link to a file or folder by mail." : "Enviar un enlace personalizado a uno de los archivos o carpetas por correo electrónico.",
diff --git a/apps/sharebymail/l10n/fr.js b/apps/sharebymail/l10n/fr.js
index 9b1bcca909b..e80c1429290 100644
--- a/apps/sharebymail/l10n/fr.js
+++ b/apps/sharebymail/l10n/fr.js
@@ -13,7 +13,14 @@ OC.L10N.register(
"Failed to send share by E-mail" : "Erreur lors de l'envoi du partage par email",
"%s shared »%s« with you" : "%s a partagé «%s» avec vous",
"%s shared »%s« with you on behalf of %s" : "%s a partagé «%s» avec vous de la part de %s",
+ "%s shared »%s« with you." : "%s a partagé «%s» avec vous.",
+ "%s shared »%s« with you on behalf of %s." : "%s a partagé «%s» avec vous de la part de %s.",
+ "Click the button below to open it." : "Cliquez sur le bouton ci-dessous pour l'ouvrir.",
+ "Open »%s«" : "Ouvrir «%s»",
"Password to access »%s« shared to you by %s" : "Mot de passe pour accèder à «%s» partagé par %s",
+ "Password to access »%s«" : "Mot de passe pour accèder à «%s»",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s a partagé «%s» avec vous. Vous avez normalement déjà reçu un autre email avec un lien pour y accéder.",
+ "It is protected with the following password: %s" : "Il est protégé avec le mot de passe suivant : %s",
"Could not find share" : "Impossible de trouver le partage",
"Share by mail" : "Partage par email",
"Send a personalized link to a file or folder by mail." : "Envoyer un lien personnalisé vers un fichier ou un dossier par email.",
diff --git a/apps/sharebymail/l10n/fr.json b/apps/sharebymail/l10n/fr.json
index 6bb1e7d15ee..ed326d0e13c 100644
--- a/apps/sharebymail/l10n/fr.json
+++ b/apps/sharebymail/l10n/fr.json
@@ -11,7 +11,14 @@
"Failed to send share by E-mail" : "Erreur lors de l'envoi du partage par email",
"%s shared »%s« with you" : "%s a partagé «%s» avec vous",
"%s shared »%s« with you on behalf of %s" : "%s a partagé «%s» avec vous de la part de %s",
+ "%s shared »%s« with you." : "%s a partagé «%s» avec vous.",
+ "%s shared »%s« with you on behalf of %s." : "%s a partagé «%s» avec vous de la part de %s.",
+ "Click the button below to open it." : "Cliquez sur le bouton ci-dessous pour l'ouvrir.",
+ "Open »%s«" : "Ouvrir «%s»",
"Password to access »%s« shared to you by %s" : "Mot de passe pour accèder à «%s» partagé par %s",
+ "Password to access »%s«" : "Mot de passe pour accèder à «%s»",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s a partagé «%s» avec vous. Vous avez normalement déjà reçu un autre email avec un lien pour y accéder.",
+ "It is protected with the following password: %s" : "Il est protégé avec le mot de passe suivant : %s",
"Could not find share" : "Impossible de trouver le partage",
"Share by mail" : "Partage par email",
"Send a personalized link to a file or folder by mail." : "Envoyer un lien personnalisé vers un fichier ou un dossier par email.",
diff --git a/apps/sharebymail/l10n/nb.js b/apps/sharebymail/l10n/nb.js
index df68d5a4f1d..aac461976d7 100644
--- a/apps/sharebymail/l10n/nb.js
+++ b/apps/sharebymail/l10n/nb.js
@@ -13,8 +13,16 @@ OC.L10N.register(
"Failed to send share by E-mail" : "Feilet når delingen skulle sendes på epost",
"%s shared »%s« with you" : "%s delte »%s« med deg",
"%s shared »%s« with you on behalf of %s" : "%s delte »%s« med deg på vegne av %s",
- "Failed to create the E-mail" : "Feilet ved opprettelse av epost",
+ "%s shared »%s« with you." : "%s delte »%s« med deg.",
+ "%s shared »%s« with you on behalf of %s." : "%s delte »%s« med deg på vegne av %s.",
+ "Click the button below to open it." : "Klikk på knappen nedenfor for å åpne den.",
+ "Open »%s«" : "Åpne »%s«",
+ "Password to access »%s« shared to you by %s" : "Passord for å benytte »%s« tildelt deg av %s",
+ "Password to access »%s«" : "Passord for å benytte »%s«",
"Could not find share" : "Delingen ble ikke funnet",
+ "Share by mail" : "Del via e-post",
+ "Send password by mail" : "Send passord via e-post",
+ "Failed to create the E-mail" : "Feilet ved opprettelse av epost",
"Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hei,\n\n%s delte »%s« med deg på vegne av %s.\n\n%s\n\n",
"Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hei,\n\n%s delte »%s« med deg.\n\n%s\n\n",
"Cheers!" : "Skål!",
diff --git a/apps/sharebymail/l10n/nb.json b/apps/sharebymail/l10n/nb.json
index 865285100dc..ad3d7babc0c 100644
--- a/apps/sharebymail/l10n/nb.json
+++ b/apps/sharebymail/l10n/nb.json
@@ -11,8 +11,16 @@
"Failed to send share by E-mail" : "Feilet når delingen skulle sendes på epost",
"%s shared »%s« with you" : "%s delte »%s« med deg",
"%s shared »%s« with you on behalf of %s" : "%s delte »%s« med deg på vegne av %s",
- "Failed to create the E-mail" : "Feilet ved opprettelse av epost",
+ "%s shared »%s« with you." : "%s delte »%s« med deg.",
+ "%s shared »%s« with you on behalf of %s." : "%s delte »%s« med deg på vegne av %s.",
+ "Click the button below to open it." : "Klikk på knappen nedenfor for å åpne den.",
+ "Open »%s«" : "Åpne »%s«",
+ "Password to access »%s« shared to you by %s" : "Passord for å benytte »%s« tildelt deg av %s",
+ "Password to access »%s«" : "Passord for å benytte »%s«",
"Could not find share" : "Delingen ble ikke funnet",
+ "Share by mail" : "Del via e-post",
+ "Send password by mail" : "Send passord via e-post",
+ "Failed to create the E-mail" : "Feilet ved opprettelse av epost",
"Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hei,\n\n%s delte »%s« med deg på vegne av %s.\n\n%s\n\n",
"Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hei,\n\n%s delte »%s« med deg.\n\n%s\n\n",
"Cheers!" : "Skål!",
diff --git a/apps/sharebymail/l10n/nl.js b/apps/sharebymail/l10n/nl.js
index 18c6c0928ba..cdbacfc895d 100644
--- a/apps/sharebymail/l10n/nl.js
+++ b/apps/sharebymail/l10n/nl.js
@@ -13,7 +13,14 @@ OC.L10N.register(
"Failed to send share by E-mail" : "Fout bij delen via e-mail",
"%s shared »%s« with you" : "%s deelde »%s« met jou",
"%s shared »%s« with you on behalf of %s" : "%s deelde »%s« met jou in naam van %s",
+ "%s shared »%s« with you." : "%s deelde »%s« met jou.",
+ "%s shared »%s« with you on behalf of %s." : "%s deelde »%s« met jou namens %s.",
+ "Click the button below to open it." : "Klik op onderstaande link om te openen.",
+ "Open »%s«" : "Open »%s«",
"Password to access »%s« shared to you by %s" : "Toegangswachtwoord »%s« gedeeld met je door %s",
+ "Password to access »%s«" : "Wachtwoord om binnen te komen »%s«",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s deelde »%s« met jou. Je zou al een apart mailbericht moeten hebben ontvangen met een link om er te komen.",
+ "It is protected with the following password: %s" : "Het is beveiligd met het volgende wachtwoord: %s",
"Could not find share" : "Kon gedeeld niet vinden",
"Share by mail" : "Gedeeld via een E-mail",
"Send a personalized link to a file or folder by mail." : "Zend een gepersonialiseerde link naar een bestand of map per mail.",
diff --git a/apps/sharebymail/l10n/nl.json b/apps/sharebymail/l10n/nl.json
index 6cc2c0d4ff9..fcca7203cb9 100644
--- a/apps/sharebymail/l10n/nl.json
+++ b/apps/sharebymail/l10n/nl.json
@@ -11,7 +11,14 @@
"Failed to send share by E-mail" : "Fout bij delen via e-mail",
"%s shared »%s« with you" : "%s deelde »%s« met jou",
"%s shared »%s« with you on behalf of %s" : "%s deelde »%s« met jou in naam van %s",
+ "%s shared »%s« with you." : "%s deelde »%s« met jou.",
+ "%s shared »%s« with you on behalf of %s." : "%s deelde »%s« met jou namens %s.",
+ "Click the button below to open it." : "Klik op onderstaande link om te openen.",
+ "Open »%s«" : "Open »%s«",
"Password to access »%s« shared to you by %s" : "Toegangswachtwoord »%s« gedeeld met je door %s",
+ "Password to access »%s«" : "Wachtwoord om binnen te komen »%s«",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s deelde »%s« met jou. Je zou al een apart mailbericht moeten hebben ontvangen met een link om er te komen.",
+ "It is protected with the following password: %s" : "Het is beveiligd met het volgende wachtwoord: %s",
"Could not find share" : "Kon gedeeld niet vinden",
"Share by mail" : "Gedeeld via een E-mail",
"Send a personalized link to a file or folder by mail." : "Zend een gepersonialiseerde link naar een bestand of map per mail.",
diff --git a/apps/sharebymail/l10n/pl.js b/apps/sharebymail/l10n/pl.js
index b69418f08fb..a5a7d29c1ac 100644
--- a/apps/sharebymail/l10n/pl.js
+++ b/apps/sharebymail/l10n/pl.js
@@ -13,7 +13,14 @@ OC.L10N.register(
"Failed to send share by E-mail" : "Nie udało się wysłać współdzielenia przez e-maila",
"%s shared »%s« with you" : "%s współdzieli »%s« z tobą",
"%s shared »%s« with you on behalf of %s" : "%s współdzieli »%s« z tobą w imieniu %s",
+ "%s shared »%s« with you." : "%s współdzieli »%s« z tobą.",
+ "%s shared »%s« with you on behalf of %s." : "%s współdzieli »%s« z tobą w imieniu %s.",
+ "Click the button below to open it." : "Kliknij przycisk poniżej, żeby to otworzyć.",
+ "Open »%s«" : "Otwórz »%s«",
"Password to access »%s« shared to you by %s" : "Hasło dostępu do »%s« jest udostępnione tobie przez %s",
+ "Password to access »%s«" : "Hasło do dostępu »%s«",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s współdzieli »%s« z tobą. Powinieneś już otrzymać osobnego e-maila z linkiem do dostępu.",
+ "It is protected with the following password: %s" : "To jest chronione z nstępującym hasłem: %s",
"Could not find share" : "Nie można odnaleźć współdzielonego obiektu",
"Share by mail" : "Współdzielone e-mailem",
"Send a personalized link to a file or folder by mail." : "Wyślij spersonalizowany link do pliku lub folderu e-mailem.",
diff --git a/apps/sharebymail/l10n/pl.json b/apps/sharebymail/l10n/pl.json
index bad56e2d23b..43768f6413c 100644
--- a/apps/sharebymail/l10n/pl.json
+++ b/apps/sharebymail/l10n/pl.json
@@ -11,7 +11,14 @@
"Failed to send share by E-mail" : "Nie udało się wysłać współdzielenia przez e-maila",
"%s shared »%s« with you" : "%s współdzieli »%s« z tobą",
"%s shared »%s« with you on behalf of %s" : "%s współdzieli »%s« z tobą w imieniu %s",
+ "%s shared »%s« with you." : "%s współdzieli »%s« z tobą.",
+ "%s shared »%s« with you on behalf of %s." : "%s współdzieli »%s« z tobą w imieniu %s.",
+ "Click the button below to open it." : "Kliknij przycisk poniżej, żeby to otworzyć.",
+ "Open »%s«" : "Otwórz »%s«",
"Password to access »%s« shared to you by %s" : "Hasło dostępu do »%s« jest udostępnione tobie przez %s",
+ "Password to access »%s«" : "Hasło do dostępu »%s«",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s współdzieli »%s« z tobą. Powinieneś już otrzymać osobnego e-maila z linkiem do dostępu.",
+ "It is protected with the following password: %s" : "To jest chronione z nstępującym hasłem: %s",
"Could not find share" : "Nie można odnaleźć współdzielonego obiektu",
"Share by mail" : "Współdzielone e-mailem",
"Send a personalized link to a file or folder by mail." : "Wyślij spersonalizowany link do pliku lub folderu e-mailem.",
diff --git a/apps/sharebymail/l10n/pt_BR.js b/apps/sharebymail/l10n/pt_BR.js
index 91f456cdc2e..3852d9725c8 100644
--- a/apps/sharebymail/l10n/pt_BR.js
+++ b/apps/sharebymail/l10n/pt_BR.js
@@ -13,7 +13,14 @@ OC.L10N.register(
"Failed to send share by E-mail" : "Falha ao enviar compartilhamento por email",
"%s shared »%s« with you" : "%s compartilhado »%s« com você",
"%s shared »%s« with you on behalf of %s" : "%s compartilhado »%s« com você em nome de %s",
+ "%s shared »%s« with you." : "%s compartilhou »%s« com você.",
+ "%s shared »%s« with you on behalf of %s." : "%s compartilhou »%s« com você em nome de %s.",
+ "Click the button below to open it." : "Clique no botão abaixo para abrí-lo.",
+ "Open »%s«" : "Abrir »%s«",
"Password to access »%s« shared to you by %s" : "Senha para acessar %s compartilhado com você por %s",
+ "Password to access »%s«" : "Senha para acessar »%s«",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s compartilhou »%s« com você. Você já deve ter recebido um email com um link para acessá-lo.",
+ "It is protected with the following password: %s" : "Está protegido com a seguinte senha: %s",
"Could not find share" : "Não foi possível encontrar o compartilhamento",
"Share by mail" : "Compartilhar por email",
"Send a personalized link to a file or folder by mail." : "Envie um link personalizado para um arquivo ou pasta por email.",
diff --git a/apps/sharebymail/l10n/pt_BR.json b/apps/sharebymail/l10n/pt_BR.json
index d54d3a30735..3e576927841 100644
--- a/apps/sharebymail/l10n/pt_BR.json
+++ b/apps/sharebymail/l10n/pt_BR.json
@@ -11,7 +11,14 @@
"Failed to send share by E-mail" : "Falha ao enviar compartilhamento por email",
"%s shared »%s« with you" : "%s compartilhado »%s« com você",
"%s shared »%s« with you on behalf of %s" : "%s compartilhado »%s« com você em nome de %s",
+ "%s shared »%s« with you." : "%s compartilhou »%s« com você.",
+ "%s shared »%s« with you on behalf of %s." : "%s compartilhou »%s« com você em nome de %s.",
+ "Click the button below to open it." : "Clique no botão abaixo para abrí-lo.",
+ "Open »%s«" : "Abrir »%s«",
"Password to access »%s« shared to you by %s" : "Senha para acessar %s compartilhado com você por %s",
+ "Password to access »%s«" : "Senha para acessar »%s«",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s compartilhou »%s« com você. Você já deve ter recebido um email com um link para acessá-lo.",
+ "It is protected with the following password: %s" : "Está protegido com a seguinte senha: %s",
"Could not find share" : "Não foi possível encontrar o compartilhamento",
"Share by mail" : "Compartilhar por email",
"Send a personalized link to a file or folder by mail." : "Envie um link personalizado para um arquivo ou pasta por email.",
diff --git a/apps/sharebymail/l10n/ru.js b/apps/sharebymail/l10n/ru.js
index 58eb2236ab2..2c0b7810faf 100644
--- a/apps/sharebymail/l10n/ru.js
+++ b/apps/sharebymail/l10n/ru.js
@@ -13,7 +13,14 @@ OC.L10N.register(
"Failed to send share by E-mail" : "Не удалось поделиться по e-mail",
"%s shared »%s« with you" : "%s поделился »%s« с вами",
"%s shared »%s« with you on behalf of %s" : "%s поделился »%s« с вами от имени %s",
+ "%s shared »%s« with you." : "%s поделился »%s« с вами.",
+ "%s shared »%s« with you on behalf of %s." : "%s поделился »%s« с вами от имени %s.",
+ "Click the button below to open it." : "Для открытия нажмите на кнопку ниже.",
+ "Open »%s«" : "Открыть »%s«",
"Password to access »%s« shared to you by %s" : "Пароль для доступа к »%s«, которым поделился %s",
+ "Password to access »%s«" : "Пародб для доступа »%s«",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s поделился с вами »%s«. Вы уже должны были получить отдельное письмо с сслкой для доступа.",
+ "It is protected with the following password: %s" : "Доступ защищён следующим паролем: %s",
"Could not find share" : "Не удалось найти общий ресурс",
"Share by mail" : "Поделиться по почте",
"Send a personalized link to a file or folder by mail." : "Отправить персональную ссылку на файл или каталог по почте.",
diff --git a/apps/sharebymail/l10n/ru.json b/apps/sharebymail/l10n/ru.json
index 93336804fee..6e27f27d21e 100644
--- a/apps/sharebymail/l10n/ru.json
+++ b/apps/sharebymail/l10n/ru.json
@@ -11,7 +11,14 @@
"Failed to send share by E-mail" : "Не удалось поделиться по e-mail",
"%s shared »%s« with you" : "%s поделился »%s« с вами",
"%s shared »%s« with you on behalf of %s" : "%s поделился »%s« с вами от имени %s",
+ "%s shared »%s« with you." : "%s поделился »%s« с вами.",
+ "%s shared »%s« with you on behalf of %s." : "%s поделился »%s« с вами от имени %s.",
+ "Click the button below to open it." : "Для открытия нажмите на кнопку ниже.",
+ "Open »%s«" : "Открыть »%s«",
"Password to access »%s« shared to you by %s" : "Пароль для доступа к »%s«, которым поделился %s",
+ "Password to access »%s«" : "Пародб для доступа »%s«",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s поделился с вами »%s«. Вы уже должны были получить отдельное письмо с сслкой для доступа.",
+ "It is protected with the following password: %s" : "Доступ защищён следующим паролем: %s",
"Could not find share" : "Не удалось найти общий ресурс",
"Share by mail" : "Поделиться по почте",
"Send a personalized link to a file or folder by mail." : "Отправить персональную ссылку на файл или каталог по почте.",
diff --git a/apps/sharebymail/l10n/tr.js b/apps/sharebymail/l10n/tr.js
index e41fafcb943..a228c1a1fd7 100644
--- a/apps/sharebymail/l10n/tr.js
+++ b/apps/sharebymail/l10n/tr.js
@@ -13,7 +13,14 @@ OC.L10N.register(
"Failed to send share by E-mail" : "Paylaşım e-postası gönderilemedi",
"%s shared »%s« with you" : "%s sizinle »%s« ögesini paylaştı",
"%s shared »%s« with you on behalf of %s" : "%s sizinle »%s« ögesini %s adına paylaştı",
+ "%s shared »%s« with you." : "%s sizinle »%s« ögesini paylaştı.",
+ "%s shared »%s« with you on behalf of %s." : "%s sizinle »%s« ögesini %s adına paylaştı.",
+ "Click the button below to open it." : "Açmak için aşağıdaki düğmeye tıklayın.",
+ "Open »%s«" : "»%s« Aç",
"Password to access »%s« shared to you by %s" : "»%s« için sizin tarafınızdan %s üzerinden paylaşılan erişim parolası",
+ "Password to access »%s«" : "»%s« erişim parolası",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s sizinle »%s« ögesini paylaştı. Erişim bağlantısını içeren başka bir e-posta daha almış olmalısınız.",
+ "It is protected with the following password: %s" : "Öge şu parola ile korunuyor: %s",
"Could not find share" : "Paylaşım bulunamadı",
"Share by mail" : "E-posta ile paylaş",
"Send a personalized link to a file or folder by mail." : "Bir dosya ya da klasörün kişiselleştirilmiş bağlantısını e-posta ile gönderin.",
diff --git a/apps/sharebymail/l10n/tr.json b/apps/sharebymail/l10n/tr.json
index e87aa1ba2c4..6828c054884 100644
--- a/apps/sharebymail/l10n/tr.json
+++ b/apps/sharebymail/l10n/tr.json
@@ -11,7 +11,14 @@
"Failed to send share by E-mail" : "Paylaşım e-postası gönderilemedi",
"%s shared »%s« with you" : "%s sizinle »%s« ögesini paylaştı",
"%s shared »%s« with you on behalf of %s" : "%s sizinle »%s« ögesini %s adına paylaştı",
+ "%s shared »%s« with you." : "%s sizinle »%s« ögesini paylaştı.",
+ "%s shared »%s« with you on behalf of %s." : "%s sizinle »%s« ögesini %s adına paylaştı.",
+ "Click the button below to open it." : "Açmak için aşağıdaki düğmeye tıklayın.",
+ "Open »%s«" : "»%s« Aç",
"Password to access »%s« shared to you by %s" : "»%s« için sizin tarafınızdan %s üzerinden paylaşılan erişim parolası",
+ "Password to access »%s«" : "»%s« erişim parolası",
+ "%s shared »%s« with you. You should have already received a separate mail with a link to access it." : "%s sizinle »%s« ögesini paylaştı. Erişim bağlantısını içeren başka bir e-posta daha almış olmalısınız.",
+ "It is protected with the following password: %s" : "Öge şu parola ile korunuyor: %s",
"Could not find share" : "Paylaşım bulunamadı",
"Share by mail" : "E-posta ile paylaş",
"Send a personalized link to a file or folder by mail." : "Bir dosya ya da klasörün kişiselleştirilmiş bağlantısını e-posta ile gönderin.",
diff --git a/apps/systemtags/l10n/nb.js b/apps/systemtags/l10n/nb.js
index 9ea0d4e6872..925a2d1ef4f 100644
--- a/apps/systemtags/l10n/nb.js
+++ b/apps/systemtags/l10n/nb.js
@@ -4,9 +4,9 @@ OC.L10N.register(
"Tags" : "Merkelapper",
"Update" : "Oppdater",
"Create" : "Opprett",
- "Select tag…" : "Velg merkelapp...",
+ "Select tag…" : "Velg merkelapp…",
"Tagged files" : "Merkede filer",
- "Select tags to filter by" : "Velg merkelapper å filtrere på",
+ "Select tags to filter by" : "Velg merkelapper å filtrere etter",
"No tags found" : "Fant ingen merkelapper",
"Please select tags to filter by" : "Velg merkelapper å filtrere etter",
"No files found for the selected tags" : "Ingen filer funnet for de valgte merkelappene",
diff --git a/apps/systemtags/l10n/nb.json b/apps/systemtags/l10n/nb.json
index bb2527212a7..fb70bfeed84 100644
--- a/apps/systemtags/l10n/nb.json
+++ b/apps/systemtags/l10n/nb.json
@@ -2,9 +2,9 @@
"Tags" : "Merkelapper",
"Update" : "Oppdater",
"Create" : "Opprett",
- "Select tag…" : "Velg merkelapp...",
+ "Select tag…" : "Velg merkelapp…",
"Tagged files" : "Merkede filer",
- "Select tags to filter by" : "Velg merkelapper å filtrere på",
+ "Select tags to filter by" : "Velg merkelapper å filtrere etter",
"No tags found" : "Fant ingen merkelapper",
"Please select tags to filter by" : "Velg merkelapper å filtrere etter",
"No files found for the selected tags" : "Ingen filer funnet for de valgte merkelappene",
diff --git a/apps/testing/appinfo/routes.php b/apps/testing/appinfo/routes.php
index 13caa2289df..d45cfe00eca 100644
--- a/apps/testing/appinfo/routes.php
+++ b/apps/testing/appinfo/routes.php
@@ -25,12 +25,32 @@ namespace OCA\Testing\AppInfo;
use OCA\Testing\Config;
use OCA\Testing\Locking\Provisioning;
use OCP\API;
+use OCP\AppFramework\App;
$config = new Config(
\OC::$server->getConfig(),
\OC::$server->getRequest()
);
+$app = new App('testing');
+$app->registerRoutes(
+ $this,
+ [
+ 'routes' => [
+ [
+ 'name' => 'RateLimitTest#userAndAnonProtected',
+ 'url' => '/userAndAnonProtected',
+ 'verb' => 'GET',
+ ],
+ [
+ 'name' => 'RateLimitTest#onlyAnonProtected',
+ 'url' => '/anonProtected',
+ 'verb' => 'GET',
+ ],
+ ]
+ ]
+);
+
API::register(
'post',
'/apps/testing/api/v1/app/{appid}/{configkey}',
diff --git a/apps/testing/lib/Controller/RateLimitTestController.php b/apps/testing/lib/Controller/RateLimitTestController.php
new file mode 100644
index 00000000000..c43d33e5335
--- /dev/null
+++ b/apps/testing/lib/Controller/RateLimitTestController.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Testing\Controller;
+
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\JSONResponse;
+
+class RateLimitTestController extends Controller {
+ /**
+ * @PublicPage
+ * @NoCSRFRequired
+ *
+ * @UserRateThrottle(limit=5, period=100)
+ * @AnonRateThrottle(limit=1, period=100)
+ *
+ * @return JSONResponse
+ */
+ public function userAndAnonProtected() {
+ return new JSONResponse();
+ }
+
+ /**
+ * @PublicPage
+ * @NoCSRFRequired
+ *
+ * @AnonRateThrottle(limit=1, period=10)
+ *
+ * @return JSONResponse
+ */
+ public function onlyAnonProtected() {
+ return new JSONResponse();
+ }
+}
diff --git a/apps/theming/l10n/el.js b/apps/theming/l10n/el.js
new file mode 100644
index 00000000000..82c5ea726e4
--- /dev/null
+++ b/apps/theming/l10n/el.js
@@ -0,0 +1,27 @@
+OC.L10N.register(
+ "theming",
+ {
+ "Admin" : "Διαχειριστής",
+ "a safe home for all your data" : "μια ασφαλής τοποθεσία για όλα σας τα δεδομένα",
+ "The given name is too long" : "Το όνομα που δόθηκε είναι πολύ μεγάλο",
+ "The given web address is too long" : "Η διεύθυνση ιστοσελίδας που δόθηκε είναι πολύ μεγάλη.",
+ "The given slogan is too long" : "Το ρητό που δόθηκε είναι πολύ μεγάλο",
+ "The given color is invalid" : "Δόθηκε μη έγκυρο χρώμα",
+ "Saved" : "Αποθηκεύτηκαν",
+ "No file uploaded" : "Δεν έχει μεταφορτωθεί αρχείο",
+ "Unsupported image type" : "Μη υποστηριζόμενος τύπος εικόνας",
+ "You are already using a custom theme" : "Χρησιμοποιείτε ήδη προσαρμοσμένο θέμα",
+ "Theming" : "Θεματοποίηση",
+ "Name" : "Όνομα",
+ "reset to default" : "επαναφορά στα προεπιλεγμένα",
+ "Web address" : "Διεύθυση ιστοσελίδας",
+ "Web address https://…" : "Διεύθυνση ιστοσελίδας https://...",
+ "Slogan" : "Ρητό",
+ "Color" : "Χρώμα",
+ "Logo" : "Λογότυπο",
+ "Upload new logo" : "Μεταφόρτωση νέου λογοτύπου",
+ "Login image" : "Εικόνα εισόδου",
+ "Upload new login background" : "Μεταφόρτωση νέου φόντου εισόδου",
+ "Log in image" : "Εικόνα εισόδου"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/theming/l10n/el.json b/apps/theming/l10n/el.json
new file mode 100644
index 00000000000..046209ea285
--- /dev/null
+++ b/apps/theming/l10n/el.json
@@ -0,0 +1,25 @@
+{ "translations": {
+ "Admin" : "Διαχειριστής",
+ "a safe home for all your data" : "μια ασφαλής τοποθεσία για όλα σας τα δεδομένα",
+ "The given name is too long" : "Το όνομα που δόθηκε είναι πολύ μεγάλο",
+ "The given web address is too long" : "Η διεύθυνση ιστοσελίδας που δόθηκε είναι πολύ μεγάλη.",
+ "The given slogan is too long" : "Το ρητό που δόθηκε είναι πολύ μεγάλο",
+ "The given color is invalid" : "Δόθηκε μη έγκυρο χρώμα",
+ "Saved" : "Αποθηκεύτηκαν",
+ "No file uploaded" : "Δεν έχει μεταφορτωθεί αρχείο",
+ "Unsupported image type" : "Μη υποστηριζόμενος τύπος εικόνας",
+ "You are already using a custom theme" : "Χρησιμοποιείτε ήδη προσαρμοσμένο θέμα",
+ "Theming" : "Θεματοποίηση",
+ "Name" : "Όνομα",
+ "reset to default" : "επαναφορά στα προεπιλεγμένα",
+ "Web address" : "Διεύθυση ιστοσελίδας",
+ "Web address https://…" : "Διεύθυνση ιστοσελίδας https://...",
+ "Slogan" : "Ρητό",
+ "Color" : "Χρώμα",
+ "Logo" : "Λογότυπο",
+ "Upload new logo" : "Μεταφόρτωση νέου λογοτύπου",
+ "Login image" : "Εικόνα εισόδου",
+ "Upload new login background" : "Μεταφόρτωση νέου φόντου εισόδου",
+ "Log in image" : "Εικόνα εισόδου"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/theming/l10n/nb.js b/apps/theming/l10n/nb.js
new file mode 100644
index 00000000000..31c44eb75e5
--- /dev/null
+++ b/apps/theming/l10n/nb.js
@@ -0,0 +1,26 @@
+OC.L10N.register(
+ "theming",
+ {
+ "Admin" : "Admin",
+ "a safe home for all your data" : "et trygt hjem for alle dine data",
+ "The given name is too long" : "Navnet er for langt",
+ "The given web address is too long" : "Nettadressen er for lang",
+ "The given slogan is too long" : "Slagordet er for langt",
+ "The given color is invalid" : "Fargen er ugyldig",
+ "Saved" : "Lagret",
+ "No file uploaded" : "Ingen fil lastet opp",
+ "Unsupported image type" : "Filtypen støttes ikke",
+ "You are already using a custom theme" : "Du bruker allerede en egendefinert drakt",
+ "Theming" : "Draktvalg",
+ "Name" : "Navn",
+ "reset to default" : "tilbakestill",
+ "Web address" : "Nettadresse",
+ "Web address https://…" : "Nettadresse https://",
+ "Slogan" : "Slagord",
+ "Color" : "Farge",
+ "Logo" : "Logo",
+ "Upload new logo" : "Last opp ny logo",
+ "Login image" : "Innloggingsbilde",
+ "Log in image" : "Innloggingsbilde"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/theming/l10n/nb.json b/apps/theming/l10n/nb.json
new file mode 100644
index 00000000000..4e295aafd61
--- /dev/null
+++ b/apps/theming/l10n/nb.json
@@ -0,0 +1,24 @@
+{ "translations": {
+ "Admin" : "Admin",
+ "a safe home for all your data" : "et trygt hjem for alle dine data",
+ "The given name is too long" : "Navnet er for langt",
+ "The given web address is too long" : "Nettadressen er for lang",
+ "The given slogan is too long" : "Slagordet er for langt",
+ "The given color is invalid" : "Fargen er ugyldig",
+ "Saved" : "Lagret",
+ "No file uploaded" : "Ingen fil lastet opp",
+ "Unsupported image type" : "Filtypen støttes ikke",
+ "You are already using a custom theme" : "Du bruker allerede en egendefinert drakt",
+ "Theming" : "Draktvalg",
+ "Name" : "Navn",
+ "reset to default" : "tilbakestill",
+ "Web address" : "Nettadresse",
+ "Web address https://…" : "Nettadresse https://",
+ "Slogan" : "Slagord",
+ "Color" : "Farge",
+ "Logo" : "Logo",
+ "Upload new logo" : "Last opp ny logo",
+ "Login image" : "Innloggingsbilde",
+ "Log in image" : "Innloggingsbilde"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/nb.js b/apps/updatenotification/l10n/nb.js
index f5839f09c7c..18ef9f55e48 100644
--- a/apps/updatenotification/l10n/nb.js
+++ b/apps/updatenotification/l10n/nb.js
@@ -2,7 +2,7 @@ OC.L10N.register(
"updatenotification",
{
"Update notifications" : "Oppdateringsvarsel",
- "Could not start updater, please try the manual update" : "Kunne ikke starte oppdateringen, vennligst prøv å oppdatere manuelt",
+ "Could not start updater, please try the manual update" : "Kunne ikke starte oppdateringen, prøv å oppdatere manuelt",
"{version} is available. Get more information on how to update." : "{version} er tilgjengelig. Få mer informasjon om å oppdatere.",
"Channel updated" : "Kanal oppdatert",
"Update to %1$s is available." : "Oppdatering til %1$s er tilgjengelig.",
diff --git a/apps/updatenotification/l10n/nb.json b/apps/updatenotification/l10n/nb.json
index 14cd3a12a69..5781bbda8fa 100644
--- a/apps/updatenotification/l10n/nb.json
+++ b/apps/updatenotification/l10n/nb.json
@@ -1,6 +1,6 @@
{ "translations": {
"Update notifications" : "Oppdateringsvarsel",
- "Could not start updater, please try the manual update" : "Kunne ikke starte oppdateringen, vennligst prøv å oppdatere manuelt",
+ "Could not start updater, please try the manual update" : "Kunne ikke starte oppdateringen, prøv å oppdatere manuelt",
"{version} is available. Get more information on how to update." : "{version} er tilgjengelig. Få mer informasjon om å oppdatere.",
"Channel updated" : "Kanal oppdatert",
"Update to %1$s is available." : "Oppdatering til %1$s er tilgjengelig.",
diff --git a/apps/user_ldap/l10n/da.js b/apps/user_ldap/l10n/da.js
index adb98eac117..8ad05333ed6 100644
--- a/apps/user_ldap/l10n/da.js
+++ b/apps/user_ldap/l10n/da.js
@@ -138,17 +138,25 @@ OC.L10N.register(
"Group Search Attributes" : "Attributter for gruppesøgning",
"Group-Member association" : "Guppemedlem forening",
"Dynamic Group Member URL" : "URL for dynamisk gruppemedlem",
+ "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Den LDAP-attribut, som på gruppeobjekter indeholder en URL for LDAP-søgning, der afgør hvilke objekter som tilhører gruppen. (En værdiløs indstilling deaktiverer funktionalitet for dynamisk gruppemedlemskab.)",
"Nested Groups" : "Indlejrede grupper",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Når slået til, så vil grupper som rummer grupper blive understøttet. (Dette fungerer kun, hvis attributten for gruppemedlem indeholder DN'er.)",
"Paging chunksize" : "Fragmentstørrelse for sideinddeling",
"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.)" : "Fragmentstørrelse som bruges til sideinddelte LDAP-søgninger, der kan returnere omfattende resultater såsom bruger eller gruppe-optælling. (Angivelse til 0 vil slå sideinddelte LDAP-søgninger fra for disse situationer.)",
+ "Enable LDAP password changes per user" : "Aktivér ændringer i LDAP-adgangskoder per bruger",
+ "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." : "Tillader at LDAP-brugere kan ændre deres adgangskode og tillader Superadministratorer og Gruppeadministratorer, at ændre adgangskoden for deres LDAP-brugere. Dette virker kun, hvis rettigheder for adgangskontrol er konfigureret tilsvarende på LDAP-serveren. Da adgangskoder sendes som klartekst til LDAP-serveren, så skal der anvendes en transportkryptering, samtidig som der bør være konfigureret således, at der sker en hashing af adgangskoder på LDAP-serveren.",
+ "(New password is sent as plain text to LDAP)" : "(Ny adgangskode sendes som klartekst til LDAP)",
"Special Attributes" : "Specielle attributter",
"Quota Field" : "Kvote Felt",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Lad stå tom for brugerens standardkvota. Alternativt angives en LDAP/AD-attribut.",
"Quota Default" : "Standard for kvota",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Tilsidesætter standardkvota for LDAP-brugere, der ikke har fået angivet en kvota i feltet Kvota.",
"Email Field" : "Felt for e-mail",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Angiver brugerens e-mail fra deres LDAP-attribut. Lad stå tom for standardadfærd.",
"User Home Folder Naming Rule" : "Navneregel for brugerens hjemmemappe",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Lad stå tom for brugernavn (standard). Alternativt, angiv en LDAP/AD-attribut.",
"Internal Username" : "Internt Brugernavn",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Som udgangspunkt bliver det interne brugernavn oprettet ud fra UUID-attributten. Dette sikrer at brugernavnet er unikt og at ikke nødvendigt at konvertere tegn. Det interne brugernavn har den begrænsning, at alene følgende tegn tillades: [ a-zA-Z0-9_.@- ]. Andre tegn bliver erstattet med deres ASCI-korrespondent eller simpelthen udeladt. I tilfælde af kollisioner tilføjes/forøges et tal. Det interne brugernavn bruges til at identificere en bruger internt. Dette er også standardnavnet for en brugers hjemmemappe. Det er også en del af fjern-URL'er, eks. for alle *DAV-tjenester. Med denne indstilling kan standardadfærden tilsidesættes. Lad den stå tom for standardadfærden. Ændringer vil alene påvirke nyligt kortlagte (tilføjede) LDAP-brugere.",
"Internal Username Attribute:" : "Internt attribut for brugernavn:",
"Override UUID detection" : "Tilsidesæt UUID-detektering",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Som udgangspunkt registreres UUID-attributten automatisk. UUID-attributten bruges til entydig identificering af LDAP-brugere og -grupper. I tillæg vil det interne brugernavn blive oprettes på basis af UUID'et, hvis andet ikke angives ovenfor. Du kan tilsidesætte indstillingen og angive en attribut efter eget valg. Du skal sørge for at dén attribut du selv vælger, kan hentes for både brugere og grupper, samt at den er unik. Lad stå tom for standardadfærd. Ændringer vil kun påvirke nyilgt kortlagte (tilføjede) LDAP-brugere og -grupper.",
diff --git a/apps/user_ldap/l10n/da.json b/apps/user_ldap/l10n/da.json
index 12875885d0a..b33831f90d3 100644
--- a/apps/user_ldap/l10n/da.json
+++ b/apps/user_ldap/l10n/da.json
@@ -136,17 +136,25 @@
"Group Search Attributes" : "Attributter for gruppesøgning",
"Group-Member association" : "Guppemedlem forening",
"Dynamic Group Member URL" : "URL for dynamisk gruppemedlem",
+ "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Den LDAP-attribut, som på gruppeobjekter indeholder en URL for LDAP-søgning, der afgør hvilke objekter som tilhører gruppen. (En værdiløs indstilling deaktiverer funktionalitet for dynamisk gruppemedlemskab.)",
"Nested Groups" : "Indlejrede grupper",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Når slået til, så vil grupper som rummer grupper blive understøttet. (Dette fungerer kun, hvis attributten for gruppemedlem indeholder DN'er.)",
"Paging chunksize" : "Fragmentstørrelse for sideinddeling",
"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.)" : "Fragmentstørrelse som bruges til sideinddelte LDAP-søgninger, der kan returnere omfattende resultater såsom bruger eller gruppe-optælling. (Angivelse til 0 vil slå sideinddelte LDAP-søgninger fra for disse situationer.)",
+ "Enable LDAP password changes per user" : "Aktivér ændringer i LDAP-adgangskoder per bruger",
+ "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." : "Tillader at LDAP-brugere kan ændre deres adgangskode og tillader Superadministratorer og Gruppeadministratorer, at ændre adgangskoden for deres LDAP-brugere. Dette virker kun, hvis rettigheder for adgangskontrol er konfigureret tilsvarende på LDAP-serveren. Da adgangskoder sendes som klartekst til LDAP-serveren, så skal der anvendes en transportkryptering, samtidig som der bør være konfigureret således, at der sker en hashing af adgangskoder på LDAP-serveren.",
+ "(New password is sent as plain text to LDAP)" : "(Ny adgangskode sendes som klartekst til LDAP)",
"Special Attributes" : "Specielle attributter",
"Quota Field" : "Kvote Felt",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Lad stå tom for brugerens standardkvota. Alternativt angives en LDAP/AD-attribut.",
"Quota Default" : "Standard for kvota",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Tilsidesætter standardkvota for LDAP-brugere, der ikke har fået angivet en kvota i feltet Kvota.",
"Email Field" : "Felt for e-mail",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Angiver brugerens e-mail fra deres LDAP-attribut. Lad stå tom for standardadfærd.",
"User Home Folder Naming Rule" : "Navneregel for brugerens hjemmemappe",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Lad stå tom for brugernavn (standard). Alternativt, angiv en LDAP/AD-attribut.",
"Internal Username" : "Internt Brugernavn",
+ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Som udgangspunkt bliver det interne brugernavn oprettet ud fra UUID-attributten. Dette sikrer at brugernavnet er unikt og at ikke nødvendigt at konvertere tegn. Det interne brugernavn har den begrænsning, at alene følgende tegn tillades: [ a-zA-Z0-9_.@- ]. Andre tegn bliver erstattet med deres ASCI-korrespondent eller simpelthen udeladt. I tilfælde af kollisioner tilføjes/forøges et tal. Det interne brugernavn bruges til at identificere en bruger internt. Dette er også standardnavnet for en brugers hjemmemappe. Det er også en del af fjern-URL'er, eks. for alle *DAV-tjenester. Med denne indstilling kan standardadfærden tilsidesættes. Lad den stå tom for standardadfærden. Ændringer vil alene påvirke nyligt kortlagte (tilføjede) LDAP-brugere.",
"Internal Username Attribute:" : "Internt attribut for brugernavn:",
"Override UUID detection" : "Tilsidesæt UUID-detektering",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Som udgangspunkt registreres UUID-attributten automatisk. UUID-attributten bruges til entydig identificering af LDAP-brugere og -grupper. I tillæg vil det interne brugernavn blive oprettes på basis af UUID'et, hvis andet ikke angives ovenfor. Du kan tilsidesætte indstillingen og angive en attribut efter eget valg. Du skal sørge for at dén attribut du selv vælger, kan hentes for både brugere og grupper, samt at den er unik. Lad stå tom for standardadfærd. Ændringer vil kun påvirke nyilgt kortlagte (tilføjede) LDAP-brugere og -grupper.",
diff --git a/apps/user_ldap/l10n/nb.js b/apps/user_ldap/l10n/nb.js
index 973f82b92a0..c127856fa73 100644
--- a/apps/user_ldap/l10n/nb.js
+++ b/apps/user_ldap/l10n/nb.js
@@ -3,48 +3,48 @@ OC.L10N.register(
{
"Failed to clear the mappings." : "Klarte ikke å nullstille tilknytningene.",
"Failed to delete the server configuration" : "Klarte ikke å slette tjener-konfigurasjonen.",
- "The configuration is invalid: anonymous bind is not allowed." : "Konfigurasjonen er ugyldig: Anonym binding er ikke tillatt.",
- "The configuration is valid and the connection could be established!" : "Konfigurasjonen er i orden og tilkoblingen skal være etablert!",
+ "The configuration is invalid: anonymous bind is not allowed." : "Oppsettet er ugyldig: Anonym binding er ikke tillatt.",
+ "The configuration is valid and the connection could be established!" : "Oppsettet er i orden og tilkoblingen skal være etablert!",
"The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Oppsettet er i orden, men binding mislyktes. Sjekk tjener-oppsettet og påloggingsinformasjonen.",
"The configuration is invalid. Please have a look at the logs for further details." : "Oppsettet er ikke gyldig. Sjekk loggene for flere detaljer.",
"No action specified" : "Ingen handling spesifisert",
"No configuration specified" : "Inget oppsett spesifisert",
"No data specified" : "Ingen data spesifisert",
- " Could not set configuration %s" : "Klarte ikke å sette konfigurasjon %s",
- "Action does not exist" : "Aksjonen eksisterer ikke",
+ " Could not set configuration %s" : "Klarte ikke å utføre oppsett %s",
+ "Action does not exist" : "Handlingen finnes ikke",
"The Base DN appears to be wrong" : "Basis-DN ser ut til å være feil",
"Testing configuration…" : "Tester konfigurasjonen...",
- "Configuration incorrect" : "Konfigurasjon feil",
- "Configuration incomplete" : "Konfigurasjon ufullstendig",
- "Configuration OK" : "Konfigurasjon OK",
+ "Configuration incorrect" : "Oppsettet er galt",
+ "Configuration incomplete" : "Ufullstendig oppsett",
+ "Configuration OK" : "Oppsett OK",
"Select groups" : "Velg grupper",
"Select object classes" : "Velg objektklasser",
"Please check the credentials, they seem to be wrong." : "Sjekk påloggingsdetaljene; de ser ut til å være feil.",
- "Please specify the port, it could not be auto-detected." : "Vennligst spesifiser porten. Den kunne ikke påvises automatisk.",
- "Base DN could not be auto-detected, please revise credentials, host and port." : "Basis-DN kunne ikke påvises automatisk. Se igjennom pålogginsdetaljer, vertsnavn og portnummer.",
- "Could not detect Base DN, please enter it manually." : "Klarte ikke å påvise basis-DN. Det må skrives inn manuelt.",
+ "Please specify the port, it could not be auto-detected." : "Spesifiser porten. Den kunne ikke påvises automatisk.",
+ "Base DN could not be auto-detected, please revise credentials, host and port." : "Base-DN kunne ikke påvises automatisk. Se igjennom pålogginsdetaljer, vertsnavn og portnummer.",
+ "Could not detect Base DN, please enter it manually." : "Klarte ikke å påvise base-DN. Det må skrives inn manuelt.",
"{nthServer}. Server" : "{nthServer}. tjener",
- "No object found in the given Base DN. Please revise." : "Intet objekt funnet i angitt basis-DN. Revider oppsettet.",
+ "No object found in the given Base DN. Please revise." : "Intet objekt funnet i angitt base-DN. Revider oppsettet.",
"More than 1,000 directory entries available." : "Mer enn 1.000 katalogoppføringer tilgjengelig.",
- " entries available within the provided Base DN" : "oppføringer tilgjengelig innenfor angitt basis-DN",
- "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Det oppstod en feil. Sjekk basis-DN, tilkoblingsoppsett og påloggingsdetaljer.",
+ " entries available within the provided Base DN" : "oppføringer tilgjengelig innenfor angitt base-DN",
+ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Det oppstod en feil. Sjekk base-DN, tilkoblingsoppsett og påloggingsdetaljer.",
"Do you really want to delete the current Server Configuration?" : "Er du sikker på at du vil slette den aktiver tjenerkonfigurasjon?",
"Confirm Deletion" : "Bekreft sletting",
"Mappings cleared successfully!" : "Tilknytningene ble nullstilt!",
"Error while clearing the mappings." : "Feil ved nullstilling av tilknytningene.",
"Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonym binding er ikke tillatt. Oppgi en bruker-DN og passord.",
"LDAP Operations error. Anonymous bind might not be allowed." : "Feil ved LDAP-operasjon. Anonym binding er kanskje ikke tillatt.",
- "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Lagring fellet. Forsikre deg om at database er i gang. Last på nytt før du fortsetter.",
+ "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Lagring fellet. Forsikre deg om at databasen er i gang. Last på nytt før du fortsetter.",
"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?" : "Endring av modus vil aktivere automatiske LDAP-spørringer. Avhengig av din LDAP-størrelse kan de ta litt tid. Vil du likevel endre modus?",
"Mode switch" : "Endring av modus",
"Select attributes" : "Velg attributter",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Bruker ikke funnet. Sjekk påloggingsattributtene og brukernavnet. Virksomt filter (kopier og lim inn for validering på kommandolinjen): <br/>",
- "User found and settings verified." : "Bruker funnet og innstillingene sjekket.",
+ "User found and settings verified." : "Bruker funnet og innstillinger bekreftet.",
"An unspecified error occurred. Please check the settings and the log." : "En uspesifisert feil oppstod. Sjekk innstillingene og loggen.",
- "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Søkefilteret er ugyldig, antakelig pga. syntaksproblemer som ulikt antall start- og sluttparenteser. Vennligst sjekk.",
+ "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Søkefilteret er ugyldig, antakelig pga. syntaksproblemer som ulikt antall start- og sluttparenteser. Sjekk det.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Det oppstod en feil ved tilkobling til LDAP / AD. Sjekk vertsnavn, portnummer og påloggingsdetaljer.",
- "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Plassholder %uid mangler. Den erstattes av påloggingsnavnet ved spørring mot LDAP / AD.",
- "Please provide a login name to test against" : "Vennligst oppgi et påloggingsnavn å teste mot",
+ "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Plassholder %uID mangler. Den erstattes av påloggingsnavnet ved spørring mot LDAP / AD.",
+ "Please provide a login name to test against" : "Oppgi et påloggingsnavn å teste mot",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Gruppeboksen ble deaktivert fordi LDAP- / AD-tjeneren ikke støtter memberOf.",
"LDAP / AD integration" : "LDAP / AD integrasjon",
"_%s group found_::_%s groups found_" : ["%s gruppe funnet","%s grupper funnet"],
@@ -52,7 +52,7 @@ OC.L10N.register(
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunne ikke påvise attributt for brukers visningsnavn. Du må selv spesifisere det i avanserte LDAP-innstillinger.",
"Could not find the desired feature" : "Fant ikke den ønskede funksjonaliteten",
"Invalid Host" : "Ugyldig tjener",
- "Test Configuration" : "Test konfigurasjonen",
+ "Test Configuration" : "Test oppsettet",
"Help" : "Hjelp",
"Groups meeting these criteria are available in %s:" : "Grupper som tilfredsstiller disse kriteriene er tilgjengelige i %s:",
"Only these object classes:" : "Kun disse objektklassene:",
@@ -63,33 +63,33 @@ OC.L10N.register(
"Edit LDAP Query" : "Rediger LDAP-spørring",
"LDAP Filter:" : "LDAP-filter:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Filteret spesifiserer hvilke LDAP-grupper som skal ha tilgang til %s-instansen.",
- "Verify settings and count groups" : "Sjekk innstillinger og tell grupper",
+ "Verify settings and count groups" : "Sjekk innstillinger og tell gruppene",
"When logging in, %s will find the user based on the following attributes:" : "Ved pålogging vil %s finne brukeren basert på følgende attributter:",
"LDAP / AD Username:" : "LDAP / AD brukernavn:",
- "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Tillater pålogging med LDAP / AD brukernavn, som er enten uid eller samaccountname og vil bli oppdaget.",
- "LDAP / AD Email Address:" : "LDAP / AD Epost-adresse:",
- "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Log alltid på med en epost-attributt. Mail og mailPrimaryAddress vil være tillatt.",
+ "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Tillater pålogging med LDAP / AD brukernavn, som er enten UID eller samaccountname og vil bli oppdaget.",
+ "LDAP / AD Email Address:" : "LDAP / AD e-postadresse:",
+ "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Alltid logg inn med en e-post-attributt. Mail og mailPrimaryAddress tillates.",
"Other Attributes:" : "Andre attributter:",
- "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Definerer filteret som skal brukes når noen prøver å logge inn. %%uid erstatter brukernavnet i innloggingen. Eksempel: \"uid=%%uid\"",
+ "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Definerer filteret som skal brukes når noen prøver å logge inn. %%uid erstatter brukernavnet i innloggingen. Eksempel: \"UID=%%UID\"",
"Test Loginname" : "Test påloggingsnavn",
"Verify settings" : "Sjekk innstillinger",
"1. Server" : "1. Tjener",
"%s. Server:" : "%s. tjener:",
- "Add a new and blank configuration" : "Legg til en ny tom konfigurasjon",
+ "Add a new and blank configuration" : "Legg til et nytt tomt oppsett",
"Copy current configuration into new directory binding" : "Kopier gjeldende konfigurasjon til ny katalogbinding",
"Delete the current configuration" : "Slett gjeldende konfigurasjon",
"Host" : "Tjener",
- "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Du kan utelate protokollen, men du er påkrevd å bruke SSL. Deretter starte med ldaps://",
+ "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Du kan utelate protokollen, men du krever bruk av SSL. Deretter start med ldaps://",
"Port" : "Port",
"Detect Port" : "Påvis port",
- "User DN" : "Bruker DN",
+ "User DN" : "Bruker-DN",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "DN for klientbrukeren som binding skal gjøres med, f.eks. uid=agent,dc=example,dc=com. For anonym tilgang, la DN og passord stå tomme.",
"Password" : "Passord",
"For anonymous access, leave DN and Password empty." : "For anonym tilgang, la DN- og passord-feltet stå tomt.",
- "One Base DN per line" : "En basis-DN pr. linje",
- "You can specify Base DN for users and groups in the Advanced tab" : "Du kan spesifisere basis-DN for brukere og grupper under Avansert fanen",
- "Detect Base DN" : "Påvis basis-DN",
- "Test Base DN" : "Test basis-DN",
+ "One Base DN per line" : "En base-DN pr. linje",
+ "You can specify Base DN for users and groups in the Advanced tab" : "Du kan spesifisere base-DN for brukere og grupper under 'Avansert'-fanen",
+ "Detect Base DN" : "Påvis base-DN",
+ "Test Base DN" : "Test base-DN",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Unngår automatiske LDAP-forespørsler. Bedre for store oppsett men krever litt LDAP-kunnskap.",
"Manually enter LDAP filters (recommended for large directories)" : "Legg inn LDAP-filtre manuelt (anbefalt for store kataloger)",
"The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "De mest vanlige objektklassene for brukere er organizationalPerson, person, user og inetOrgPerson. Kontakt katalogadministratoren hvis du er usikker på hvilken objektklasse du skal velge.",
@@ -106,15 +106,15 @@ OC.L10N.register(
"Expert" : "Ekspert",
"Advanced" : "Avansert",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Advarsel:</b> Appene user_ldap og user_webdavauth er ikke kompatible med hverandre. Uventet oppførsel kan forekomme. Be systemadministratoren om å deaktivere en av dem.",
- "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advarsel:</b> PHP LDAP-modulen er ikke installert og serveren vil ikke virke. Vennligst be systemadministratoren installere den.",
+ "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advarsel:</b> PHP LDAP-modulen er ikke installert og serveren vil ikke virke. Be systemadministratoren installere den.",
"Connection Settings" : "Innstillinger for tilkobling",
- "Configuration Active" : "Konfigurasjon aktiv",
- "When unchecked, this configuration will be skipped." : "Når ikke huket av så vil denne konfigurasjonen bli hoppet over.",
- "Backup (Replica) Host" : "Sikkerhetskopierings (Replica) vert",
+ "Configuration Active" : "Oppsett aktivt",
+ "When unchecked, this configuration will be skipped." : "Overser oppsettet når ikke avhuket.",
+ "Backup (Replica) Host" : "Sikkerhetskopierings (Replica-) vert",
"Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Oppgi en valgfri reservetjener. Den må være en replika av hovedtjeneren for LDAP/AD.",
- "Backup (Replica) Port" : "Reserve (Replika) Port",
- "Disable Main Server" : "Deaktiver hovedtjeneren",
- "Only connect to the replica server." : "Koble til bare replika-tjeneren.",
+ "Backup (Replica) Port" : "Reserve (Replika-) port",
+ "Disable Main Server" : "Skru av hovedtjeneren",
+ "Only connect to the replica server." : "Koble til bare Replika-tjeneren.",
"Turn off SSL certificate validation." : "Slå av SSL-sertifikat validering",
"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Ikke anbefalt, bruk kun for testing! Hvis tilkobling bare virker med dette valget, importer LDAP-tjenerens SSL-sertifikat i %s-tjeneren din.",
"Cache Time-To-Live" : "Levetid i mellomlager",
@@ -124,32 +124,31 @@ OC.L10N.register(
"The LDAP attribute to use to generate the user's display name." : "LDAP-attributten som skal brukes til å generere brukerens visningsnavn.",
"2nd User Display Name Field" : "2. felt med brukerens visningsnavn",
"Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Valgfritt. En LDAP-attributt som skal legges til visningsnavnet i parentes. Resulterer i f.eks. »John Doe (john.doe@example.org)«.",
- "Base User Tree" : "Basis for bruker-tre",
- "One User Base DN per line" : "En basis-DN for brukere pr. linje",
+ "Base User Tree" : "Base for bruker-tre",
+ "One User Base DN per line" : "En base-DN for brukere pr. linje",
"User Search Attributes" : "Attributter for brukersøk",
"Optional; one attribute per line" : "Valgfritt, en attributt pr. linje",
"Group Display Name Field" : "Felt med gruppens visningsnavn",
"The LDAP attribute to use to generate the groups's display name." : "LDAP-attributten som skal brukes til å generere gruppens visningsnavn.",
- "Base Group Tree" : "Basis for gruppe-tre",
- "One Group Base DN per line" : "En basis-DN for grupper pr. linje",
+ "Base Group Tree" : "Base for gruppe-tre",
+ "One Group Base DN per line" : "En base-DN for grupper pr. linje",
"Group Search Attributes" : "Attributter for gruppesøk",
- "Group-Member association" : "gruppe-medlem assosiasjon",
+ "Group-Member association" : "gruppe-medlemstilknytning",
"Dynamic Group Member URL" : "URL for dynamisk gruppemedlem",
"The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "LDAP-attributten som, på gruppe-objekter, inneholder en LDAP søke-URL som bestemmer hvilke objekter som hører til gruppen. (En tom innstilling deaktiverer funksjonaliteten for dynamisk gruppemedlemskap.)",
- "Nested Groups" : "Nestede grupper",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Grupper som inneholder grupper er tillatt når denne er slått på. (Virker bare hvis gruppenes member-attributt inneholder DN-er.)",
"Paging chunksize" : "Sidestørrelse",
- "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.)" : "Sidestørrelsen brukes for sidevise (paged) LDAP-søk som kan returnere store resultater, som f.eks. gjennomløping av brukere eller grupper. (Sett til 0 for å deaktivere sidevis LDAP-spørring i disse situasjonene.)",
+ "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.)" : "Sidestørrelsen brukes for sidevise (paged) LDAP-søk som kan returnere store resultater, som f.eks. gjennomløping av brukere eller grupper. (Sett til 0 for å skru av sidevis LDAP-spørring i disse situasjonene.)",
"Special Attributes" : "Spesielle attributter",
"Quota Field" : "Felt med lagringskvote",
"Quota Default" : "Standard lagringskvote",
"Email Field" : "Felt med e-postadresse",
"User Home Folder Naming Rule" : "Navneregel for brukers hjemmemappe",
- "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "La stå tom for brukernavn (standard). Ellers, spesifiser en LDAP/AD attributt.",
+ "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "La stå tom for brukernavn (forvalg). Ellers, spesifiser en LDAP/AD attributt.",
"Internal Username" : "Internt brukernavn",
"Internal Username Attribute:" : "Attributt for internt brukernavn:",
"Override UUID detection" : "Overstyr UUID-påvisning",
- "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Som standard blir UUID-attributten påvist automatisk. UUID-attributten brukes til å identifisere LDAP-brukere og -grupper unikt. Det interne brukernavnet vil også bli laget basert på UUID, hvis ikke annet er spesifisert ovenfor. Du kan overstyre innstillingen og oppgi den attributten du ønsker. Du må forsikre deg om at din valgte attributt kan hentes ut både for brukere og for grupper og at den er unik. La stå tomt for standard oppførsel. Endringer vil kun påvirke nylig tilknyttede (opprettede) LDAP-brukere og -grupper.",
+ "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Som forvalg blir UUID-attributten påvist automatisk. UUID-attributten brukes til å identifisere LDAP-brukere og -grupper unikt. Det interne brukernavnet vil også bli laget basert på UUID, hvis ikke annet er spesifisert ovenfor. Du kan overstyre innstillingen og oppgi den attributten du ønsker. Du må forsikre deg om at din valgte attributt kan hentes ut både for brukere og for grupper og at den er unik. La stå tomt for forvalgt ppførsel. Endringer vil kun påvirke nylig tilknyttede (opprettede) LDAP-brukere og -grupper.",
"UUID Attribute for Users:" : "UUID-attributt for brukere:",
"UUID Attribute for Groups:" : "UUID-attributt for grupper:",
"Username-LDAP User Mapping" : "Tilknytning av brukernavn til LDAP-bruker",
@@ -157,6 +156,6 @@ OC.L10N.register(
"Clear Username-LDAP User Mapping" : "Nullstill tilknytning av brukernavn til LDAP-bruker",
"Clear Groupname-LDAP Group Mapping" : "Nullstill tilknytning av gruppenavn til LDAP-gruppe",
"Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Innstillinger sjekket, men en bruker funnet. Kun den første vil kunne logge inn. Vurder et smalere filter.",
- "in bytes" : "i bytes"
+ "in bytes" : "i Byte"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/nb.json b/apps/user_ldap/l10n/nb.json
index 828e3623eb2..abfd07d75fc 100644
--- a/apps/user_ldap/l10n/nb.json
+++ b/apps/user_ldap/l10n/nb.json
@@ -1,48 +1,48 @@
{ "translations": {
"Failed to clear the mappings." : "Klarte ikke å nullstille tilknytningene.",
"Failed to delete the server configuration" : "Klarte ikke å slette tjener-konfigurasjonen.",
- "The configuration is invalid: anonymous bind is not allowed." : "Konfigurasjonen er ugyldig: Anonym binding er ikke tillatt.",
- "The configuration is valid and the connection could be established!" : "Konfigurasjonen er i orden og tilkoblingen skal være etablert!",
+ "The configuration is invalid: anonymous bind is not allowed." : "Oppsettet er ugyldig: Anonym binding er ikke tillatt.",
+ "The configuration is valid and the connection could be established!" : "Oppsettet er i orden og tilkoblingen skal være etablert!",
"The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Oppsettet er i orden, men binding mislyktes. Sjekk tjener-oppsettet og påloggingsinformasjonen.",
"The configuration is invalid. Please have a look at the logs for further details." : "Oppsettet er ikke gyldig. Sjekk loggene for flere detaljer.",
"No action specified" : "Ingen handling spesifisert",
"No configuration specified" : "Inget oppsett spesifisert",
"No data specified" : "Ingen data spesifisert",
- " Could not set configuration %s" : "Klarte ikke å sette konfigurasjon %s",
- "Action does not exist" : "Aksjonen eksisterer ikke",
+ " Could not set configuration %s" : "Klarte ikke å utføre oppsett %s",
+ "Action does not exist" : "Handlingen finnes ikke",
"The Base DN appears to be wrong" : "Basis-DN ser ut til å være feil",
"Testing configuration…" : "Tester konfigurasjonen...",
- "Configuration incorrect" : "Konfigurasjon feil",
- "Configuration incomplete" : "Konfigurasjon ufullstendig",
- "Configuration OK" : "Konfigurasjon OK",
+ "Configuration incorrect" : "Oppsettet er galt",
+ "Configuration incomplete" : "Ufullstendig oppsett",
+ "Configuration OK" : "Oppsett OK",
"Select groups" : "Velg grupper",
"Select object classes" : "Velg objektklasser",
"Please check the credentials, they seem to be wrong." : "Sjekk påloggingsdetaljene; de ser ut til å være feil.",
- "Please specify the port, it could not be auto-detected." : "Vennligst spesifiser porten. Den kunne ikke påvises automatisk.",
- "Base DN could not be auto-detected, please revise credentials, host and port." : "Basis-DN kunne ikke påvises automatisk. Se igjennom pålogginsdetaljer, vertsnavn og portnummer.",
- "Could not detect Base DN, please enter it manually." : "Klarte ikke å påvise basis-DN. Det må skrives inn manuelt.",
+ "Please specify the port, it could not be auto-detected." : "Spesifiser porten. Den kunne ikke påvises automatisk.",
+ "Base DN could not be auto-detected, please revise credentials, host and port." : "Base-DN kunne ikke påvises automatisk. Se igjennom pålogginsdetaljer, vertsnavn og portnummer.",
+ "Could not detect Base DN, please enter it manually." : "Klarte ikke å påvise base-DN. Det må skrives inn manuelt.",
"{nthServer}. Server" : "{nthServer}. tjener",
- "No object found in the given Base DN. Please revise." : "Intet objekt funnet i angitt basis-DN. Revider oppsettet.",
+ "No object found in the given Base DN. Please revise." : "Intet objekt funnet i angitt base-DN. Revider oppsettet.",
"More than 1,000 directory entries available." : "Mer enn 1.000 katalogoppføringer tilgjengelig.",
- " entries available within the provided Base DN" : "oppføringer tilgjengelig innenfor angitt basis-DN",
- "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Det oppstod en feil. Sjekk basis-DN, tilkoblingsoppsett og påloggingsdetaljer.",
+ " entries available within the provided Base DN" : "oppføringer tilgjengelig innenfor angitt base-DN",
+ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Det oppstod en feil. Sjekk base-DN, tilkoblingsoppsett og påloggingsdetaljer.",
"Do you really want to delete the current Server Configuration?" : "Er du sikker på at du vil slette den aktiver tjenerkonfigurasjon?",
"Confirm Deletion" : "Bekreft sletting",
"Mappings cleared successfully!" : "Tilknytningene ble nullstilt!",
"Error while clearing the mappings." : "Feil ved nullstilling av tilknytningene.",
"Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonym binding er ikke tillatt. Oppgi en bruker-DN og passord.",
"LDAP Operations error. Anonymous bind might not be allowed." : "Feil ved LDAP-operasjon. Anonym binding er kanskje ikke tillatt.",
- "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Lagring fellet. Forsikre deg om at database er i gang. Last på nytt før du fortsetter.",
+ "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Lagring fellet. Forsikre deg om at databasen er i gang. Last på nytt før du fortsetter.",
"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?" : "Endring av modus vil aktivere automatiske LDAP-spørringer. Avhengig av din LDAP-størrelse kan de ta litt tid. Vil du likevel endre modus?",
"Mode switch" : "Endring av modus",
"Select attributes" : "Velg attributter",
"User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Bruker ikke funnet. Sjekk påloggingsattributtene og brukernavnet. Virksomt filter (kopier og lim inn for validering på kommandolinjen): <br/>",
- "User found and settings verified." : "Bruker funnet og innstillingene sjekket.",
+ "User found and settings verified." : "Bruker funnet og innstillinger bekreftet.",
"An unspecified error occurred. Please check the settings and the log." : "En uspesifisert feil oppstod. Sjekk innstillingene og loggen.",
- "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Søkefilteret er ugyldig, antakelig pga. syntaksproblemer som ulikt antall start- og sluttparenteser. Vennligst sjekk.",
+ "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Søkefilteret er ugyldig, antakelig pga. syntaksproblemer som ulikt antall start- og sluttparenteser. Sjekk det.",
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Det oppstod en feil ved tilkobling til LDAP / AD. Sjekk vertsnavn, portnummer og påloggingsdetaljer.",
- "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Plassholder %uid mangler. Den erstattes av påloggingsnavnet ved spørring mot LDAP / AD.",
- "Please provide a login name to test against" : "Vennligst oppgi et påloggingsnavn å teste mot",
+ "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Plassholder %uID mangler. Den erstattes av påloggingsnavnet ved spørring mot LDAP / AD.",
+ "Please provide a login name to test against" : "Oppgi et påloggingsnavn å teste mot",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Gruppeboksen ble deaktivert fordi LDAP- / AD-tjeneren ikke støtter memberOf.",
"LDAP / AD integration" : "LDAP / AD integrasjon",
"_%s group found_::_%s groups found_" : ["%s gruppe funnet","%s grupper funnet"],
@@ -50,7 +50,7 @@
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunne ikke påvise attributt for brukers visningsnavn. Du må selv spesifisere det i avanserte LDAP-innstillinger.",
"Could not find the desired feature" : "Fant ikke den ønskede funksjonaliteten",
"Invalid Host" : "Ugyldig tjener",
- "Test Configuration" : "Test konfigurasjonen",
+ "Test Configuration" : "Test oppsettet",
"Help" : "Hjelp",
"Groups meeting these criteria are available in %s:" : "Grupper som tilfredsstiller disse kriteriene er tilgjengelige i %s:",
"Only these object classes:" : "Kun disse objektklassene:",
@@ -61,33 +61,33 @@
"Edit LDAP Query" : "Rediger LDAP-spørring",
"LDAP Filter:" : "LDAP-filter:",
"The filter specifies which LDAP groups shall have access to the %s instance." : "Filteret spesifiserer hvilke LDAP-grupper som skal ha tilgang til %s-instansen.",
- "Verify settings and count groups" : "Sjekk innstillinger og tell grupper",
+ "Verify settings and count groups" : "Sjekk innstillinger og tell gruppene",
"When logging in, %s will find the user based on the following attributes:" : "Ved pålogging vil %s finne brukeren basert på følgende attributter:",
"LDAP / AD Username:" : "LDAP / AD brukernavn:",
- "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Tillater pålogging med LDAP / AD brukernavn, som er enten uid eller samaccountname og vil bli oppdaget.",
- "LDAP / AD Email Address:" : "LDAP / AD Epost-adresse:",
- "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Log alltid på med en epost-attributt. Mail og mailPrimaryAddress vil være tillatt.",
+ "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Tillater pålogging med LDAP / AD brukernavn, som er enten UID eller samaccountname og vil bli oppdaget.",
+ "LDAP / AD Email Address:" : "LDAP / AD e-postadresse:",
+ "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Alltid logg inn med en e-post-attributt. Mail og mailPrimaryAddress tillates.",
"Other Attributes:" : "Andre attributter:",
- "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Definerer filteret som skal brukes når noen prøver å logge inn. %%uid erstatter brukernavnet i innloggingen. Eksempel: \"uid=%%uid\"",
+ "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Definerer filteret som skal brukes når noen prøver å logge inn. %%uid erstatter brukernavnet i innloggingen. Eksempel: \"UID=%%UID\"",
"Test Loginname" : "Test påloggingsnavn",
"Verify settings" : "Sjekk innstillinger",
"1. Server" : "1. Tjener",
"%s. Server:" : "%s. tjener:",
- "Add a new and blank configuration" : "Legg til en ny tom konfigurasjon",
+ "Add a new and blank configuration" : "Legg til et nytt tomt oppsett",
"Copy current configuration into new directory binding" : "Kopier gjeldende konfigurasjon til ny katalogbinding",
"Delete the current configuration" : "Slett gjeldende konfigurasjon",
"Host" : "Tjener",
- "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Du kan utelate protokollen, men du er påkrevd å bruke SSL. Deretter starte med ldaps://",
+ "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Du kan utelate protokollen, men du krever bruk av SSL. Deretter start med ldaps://",
"Port" : "Port",
"Detect Port" : "Påvis port",
- "User DN" : "Bruker DN",
+ "User DN" : "Bruker-DN",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "DN for klientbrukeren som binding skal gjøres med, f.eks. uid=agent,dc=example,dc=com. For anonym tilgang, la DN og passord stå tomme.",
"Password" : "Passord",
"For anonymous access, leave DN and Password empty." : "For anonym tilgang, la DN- og passord-feltet stå tomt.",
- "One Base DN per line" : "En basis-DN pr. linje",
- "You can specify Base DN for users and groups in the Advanced tab" : "Du kan spesifisere basis-DN for brukere og grupper under Avansert fanen",
- "Detect Base DN" : "Påvis basis-DN",
- "Test Base DN" : "Test basis-DN",
+ "One Base DN per line" : "En base-DN pr. linje",
+ "You can specify Base DN for users and groups in the Advanced tab" : "Du kan spesifisere base-DN for brukere og grupper under 'Avansert'-fanen",
+ "Detect Base DN" : "Påvis base-DN",
+ "Test Base DN" : "Test base-DN",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Unngår automatiske LDAP-forespørsler. Bedre for store oppsett men krever litt LDAP-kunnskap.",
"Manually enter LDAP filters (recommended for large directories)" : "Legg inn LDAP-filtre manuelt (anbefalt for store kataloger)",
"The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "De mest vanlige objektklassene for brukere er organizationalPerson, person, user og inetOrgPerson. Kontakt katalogadministratoren hvis du er usikker på hvilken objektklasse du skal velge.",
@@ -104,15 +104,15 @@
"Expert" : "Ekspert",
"Advanced" : "Avansert",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Advarsel:</b> Appene user_ldap og user_webdavauth er ikke kompatible med hverandre. Uventet oppførsel kan forekomme. Be systemadministratoren om å deaktivere en av dem.",
- "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advarsel:</b> PHP LDAP-modulen er ikke installert og serveren vil ikke virke. Vennligst be systemadministratoren installere den.",
+ "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advarsel:</b> PHP LDAP-modulen er ikke installert og serveren vil ikke virke. Be systemadministratoren installere den.",
"Connection Settings" : "Innstillinger for tilkobling",
- "Configuration Active" : "Konfigurasjon aktiv",
- "When unchecked, this configuration will be skipped." : "Når ikke huket av så vil denne konfigurasjonen bli hoppet over.",
- "Backup (Replica) Host" : "Sikkerhetskopierings (Replica) vert",
+ "Configuration Active" : "Oppsett aktivt",
+ "When unchecked, this configuration will be skipped." : "Overser oppsettet når ikke avhuket.",
+ "Backup (Replica) Host" : "Sikkerhetskopierings (Replica-) vert",
"Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Oppgi en valgfri reservetjener. Den må være en replika av hovedtjeneren for LDAP/AD.",
- "Backup (Replica) Port" : "Reserve (Replika) Port",
- "Disable Main Server" : "Deaktiver hovedtjeneren",
- "Only connect to the replica server." : "Koble til bare replika-tjeneren.",
+ "Backup (Replica) Port" : "Reserve (Replika-) port",
+ "Disable Main Server" : "Skru av hovedtjeneren",
+ "Only connect to the replica server." : "Koble til bare Replika-tjeneren.",
"Turn off SSL certificate validation." : "Slå av SSL-sertifikat validering",
"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Ikke anbefalt, bruk kun for testing! Hvis tilkobling bare virker med dette valget, importer LDAP-tjenerens SSL-sertifikat i %s-tjeneren din.",
"Cache Time-To-Live" : "Levetid i mellomlager",
@@ -122,32 +122,31 @@
"The LDAP attribute to use to generate the user's display name." : "LDAP-attributten som skal brukes til å generere brukerens visningsnavn.",
"2nd User Display Name Field" : "2. felt med brukerens visningsnavn",
"Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Valgfritt. En LDAP-attributt som skal legges til visningsnavnet i parentes. Resulterer i f.eks. »John Doe (john.doe@example.org)«.",
- "Base User Tree" : "Basis for bruker-tre",
- "One User Base DN per line" : "En basis-DN for brukere pr. linje",
+ "Base User Tree" : "Base for bruker-tre",
+ "One User Base DN per line" : "En base-DN for brukere pr. linje",
"User Search Attributes" : "Attributter for brukersøk",
"Optional; one attribute per line" : "Valgfritt, en attributt pr. linje",
"Group Display Name Field" : "Felt med gruppens visningsnavn",
"The LDAP attribute to use to generate the groups's display name." : "LDAP-attributten som skal brukes til å generere gruppens visningsnavn.",
- "Base Group Tree" : "Basis for gruppe-tre",
- "One Group Base DN per line" : "En basis-DN for grupper pr. linje",
+ "Base Group Tree" : "Base for gruppe-tre",
+ "One Group Base DN per line" : "En base-DN for grupper pr. linje",
"Group Search Attributes" : "Attributter for gruppesøk",
- "Group-Member association" : "gruppe-medlem assosiasjon",
+ "Group-Member association" : "gruppe-medlemstilknytning",
"Dynamic Group Member URL" : "URL for dynamisk gruppemedlem",
"The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "LDAP-attributten som, på gruppe-objekter, inneholder en LDAP søke-URL som bestemmer hvilke objekter som hører til gruppen. (En tom innstilling deaktiverer funksjonaliteten for dynamisk gruppemedlemskap.)",
- "Nested Groups" : "Nestede grupper",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Grupper som inneholder grupper er tillatt når denne er slått på. (Virker bare hvis gruppenes member-attributt inneholder DN-er.)",
"Paging chunksize" : "Sidestørrelse",
- "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.)" : "Sidestørrelsen brukes for sidevise (paged) LDAP-søk som kan returnere store resultater, som f.eks. gjennomløping av brukere eller grupper. (Sett til 0 for å deaktivere sidevis LDAP-spørring i disse situasjonene.)",
+ "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.)" : "Sidestørrelsen brukes for sidevise (paged) LDAP-søk som kan returnere store resultater, som f.eks. gjennomløping av brukere eller grupper. (Sett til 0 for å skru av sidevis LDAP-spørring i disse situasjonene.)",
"Special Attributes" : "Spesielle attributter",
"Quota Field" : "Felt med lagringskvote",
"Quota Default" : "Standard lagringskvote",
"Email Field" : "Felt med e-postadresse",
"User Home Folder Naming Rule" : "Navneregel for brukers hjemmemappe",
- "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "La stå tom for brukernavn (standard). Ellers, spesifiser en LDAP/AD attributt.",
+ "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "La stå tom for brukernavn (forvalg). Ellers, spesifiser en LDAP/AD attributt.",
"Internal Username" : "Internt brukernavn",
"Internal Username Attribute:" : "Attributt for internt brukernavn:",
"Override UUID detection" : "Overstyr UUID-påvisning",
- "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Som standard blir UUID-attributten påvist automatisk. UUID-attributten brukes til å identifisere LDAP-brukere og -grupper unikt. Det interne brukernavnet vil også bli laget basert på UUID, hvis ikke annet er spesifisert ovenfor. Du kan overstyre innstillingen og oppgi den attributten du ønsker. Du må forsikre deg om at din valgte attributt kan hentes ut både for brukere og for grupper og at den er unik. La stå tomt for standard oppførsel. Endringer vil kun påvirke nylig tilknyttede (opprettede) LDAP-brukere og -grupper.",
+ "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Som forvalg blir UUID-attributten påvist automatisk. UUID-attributten brukes til å identifisere LDAP-brukere og -grupper unikt. Det interne brukernavnet vil også bli laget basert på UUID, hvis ikke annet er spesifisert ovenfor. Du kan overstyre innstillingen og oppgi den attributten du ønsker. Du må forsikre deg om at din valgte attributt kan hentes ut både for brukere og for grupper og at den er unik. La stå tomt for forvalgt ppførsel. Endringer vil kun påvirke nylig tilknyttede (opprettede) LDAP-brukere og -grupper.",
"UUID Attribute for Users:" : "UUID-attributt for brukere:",
"UUID Attribute for Groups:" : "UUID-attributt for grupper:",
"Username-LDAP User Mapping" : "Tilknytning av brukernavn til LDAP-bruker",
@@ -155,6 +154,6 @@
"Clear Username-LDAP User Mapping" : "Nullstill tilknytning av brukernavn til LDAP-bruker",
"Clear Groupname-LDAP Group Mapping" : "Nullstill tilknytning av gruppenavn til LDAP-gruppe",
"Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Innstillinger sjekket, men en bruker funnet. Kun den første vil kunne logge inn. Vurder et smalere filter.",
- "in bytes" : "i bytes"
+ "in bytes" : "i Byte"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/sk.js b/apps/user_ldap/l10n/sk.js
index 3730ab5d564..b3c1c4e72a0 100644
--- a/apps/user_ldap/l10n/sk.js
+++ b/apps/user_ldap/l10n/sk.js
@@ -13,6 +13,7 @@ OC.L10N.register(
" Could not set configuration %s" : "Nemôžem nastaviť konfiguráciu %s",
"Action does not exist" : "Takáto akcia neexistuje",
"The Base DN appears to be wrong" : "Základné DN je chybné",
+ "Testing configuration…" : "Overujú sa nastavenia...",
"Configuration incorrect" : "Nesprávna konfigurácia",
"Configuration incomplete" : "Nekompletná konfigurácia",
"Configuration OK" : "Konfigurácia je v poriadku",
@@ -24,6 +25,7 @@ OC.L10N.register(
"Could not detect Base DN, please enter it manually." : "Nemožno automaticky detekovať základnú DN, zadajte ručne prosím.",
"{nthServer}. Server" : "{nthServer}. Server",
"No object found in the given Base DN. Please revise." : "Objekt nebol nájdený v zadanej základnej DN. Overte to prosím.",
+ "More than 1,000 directory entries available." : "V adresári je dostupných viac ako 1000 položiek.",
" entries available within the provided Base DN" : "dostupných záznamov v zadanej základnej DN",
"An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Nastala chyba. Overte základnú DN, nastavenia pripojenia a prihlasovacie údaje.",
"Do you really want to delete the current Server Configuration?" : "Naozaj chcete zmazať súčasné nastavenie servera?",
@@ -44,6 +46,8 @@ OC.L10N.register(
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Chýba zástupný znak %uid. Bude nahradený prihlasovacím menom pri požiadavke do LDAP / AD.",
"Please provide a login name to test against" : "Zadajte prihlasovacie meno na otestovanie",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Pole skupín bolo vypnuté, pretože LDAP / AD server nepodporuje memberOf.",
+ "Password change rejected. Hint: " : "Zmena hesla zamietnutá. Vodítko:",
+ "LDAP / AD integration" : "Spolupráca s LDAP/AD",
"_%s group found_::_%s groups found_" : ["%s nájdená skupina","%s nájdené skupiny","%s nájdených skupín"],
"_%s user found_::_%s users found_" : ["%s nájdený používateľ","%s nájdení používatelia","%s nájdených používateľov"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nemožno zistiť používateľský atribút pre zobrazenie používateľského mena. Prosím, zadajte ho sami v pokročilých nastaveniach LDAP.",
diff --git a/apps/user_ldap/l10n/sk.json b/apps/user_ldap/l10n/sk.json
index 09a8e5b65a9..f04c2f424fd 100644
--- a/apps/user_ldap/l10n/sk.json
+++ b/apps/user_ldap/l10n/sk.json
@@ -11,6 +11,7 @@
" Could not set configuration %s" : "Nemôžem nastaviť konfiguráciu %s",
"Action does not exist" : "Takáto akcia neexistuje",
"The Base DN appears to be wrong" : "Základné DN je chybné",
+ "Testing configuration…" : "Overujú sa nastavenia...",
"Configuration incorrect" : "Nesprávna konfigurácia",
"Configuration incomplete" : "Nekompletná konfigurácia",
"Configuration OK" : "Konfigurácia je v poriadku",
@@ -22,6 +23,7 @@
"Could not detect Base DN, please enter it manually." : "Nemožno automaticky detekovať základnú DN, zadajte ručne prosím.",
"{nthServer}. Server" : "{nthServer}. Server",
"No object found in the given Base DN. Please revise." : "Objekt nebol nájdený v zadanej základnej DN. Overte to prosím.",
+ "More than 1,000 directory entries available." : "V adresári je dostupných viac ako 1000 položiek.",
" entries available within the provided Base DN" : "dostupných záznamov v zadanej základnej DN",
"An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Nastala chyba. Overte základnú DN, nastavenia pripojenia a prihlasovacie údaje.",
"Do you really want to delete the current Server Configuration?" : "Naozaj chcete zmazať súčasné nastavenie servera?",
@@ -42,6 +44,8 @@
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Chýba zástupný znak %uid. Bude nahradený prihlasovacím menom pri požiadavke do LDAP / AD.",
"Please provide a login name to test against" : "Zadajte prihlasovacie meno na otestovanie",
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Pole skupín bolo vypnuté, pretože LDAP / AD server nepodporuje memberOf.",
+ "Password change rejected. Hint: " : "Zmena hesla zamietnutá. Vodítko:",
+ "LDAP / AD integration" : "Spolupráca s LDAP/AD",
"_%s group found_::_%s groups found_" : ["%s nájdená skupina","%s nájdené skupiny","%s nájdených skupín"],
"_%s user found_::_%s users found_" : ["%s nájdený používateľ","%s nájdení používatelia","%s nájdených používateľov"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nemožno zistiť používateľský atribút pre zobrazenie používateľského mena. Prosím, zadajte ho sami v pokročilých nastaveniach LDAP.",
diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php
index dbc4f5b0448..959a8dd2b8e 100644
--- a/apps/user_ldap/lib/Access.php
+++ b/apps/user_ldap/lib/Access.php
@@ -595,8 +595,8 @@ class Access extends LDAPUtility implements IUserTools {
*
* gives back the user names as they are used ownClod internally
*/
- public function ownCloudUserNames($ldapUsers) {
- return $this->ldap2ownCloudNames($ldapUsers, true);
+ public function nextcloudUserNames($ldapUsers) {
+ return $this->ldap2NextcloudNames($ldapUsers, true);
}
/**
@@ -606,8 +606,8 @@ class Access extends LDAPUtility implements IUserTools {
*
* gives back the group names as they are used ownClod internally
*/
- public function ownCloudGroupNames($ldapGroups) {
- return $this->ldap2ownCloudNames($ldapGroups, false);
+ public function nextcloudGroupNames($ldapGroups) {
+ return $this->ldap2NextcloudNames($ldapGroups, false);
}
/**
@@ -615,14 +615,14 @@ class Access extends LDAPUtility implements IUserTools {
* @param bool $isUsers
* @return array
*/
- private function ldap2ownCloudNames($ldapObjects, $isUsers) {
+ private function ldap2NextcloudNames($ldapObjects, $isUsers) {
if($isUsers) {
$nameAttribute = $this->connection->ldapUserDisplayName;
$sndAttribute = $this->connection->ldapUserDisplayName2;
} else {
$nameAttribute = $this->connection->ldapGroupDisplayName;
}
- $ownCloudNames = array();
+ $nextcloudNames = array();
foreach($ldapObjects as $ldapObject) {
$nameByLDAP = null;
@@ -634,9 +634,9 @@ class Access extends LDAPUtility implements IUserTools {
$nameByLDAP = $ldapObject[$nameAttribute][0];
}
- $ocName = $this->dn2ocname($ldapObject['dn'][0], $nameByLDAP, $isUsers);
- if($ocName) {
- $ownCloudNames[] = $ocName;
+ $ncName = $this->dn2ocname($ldapObject['dn'][0], $nameByLDAP, $isUsers);
+ if($ncName) {
+ $nextcloudNames[] = $ncName;
if($isUsers) {
//cache the user names so it does not need to be retrieved
//again later (e.g. sharing dialogue).
@@ -645,11 +645,11 @@ class Access extends LDAPUtility implements IUserTools {
}
$sndName = isset($ldapObject[$sndAttribute][0])
? $ldapObject[$sndAttribute][0] : '';
- $this->cacheUserDisplayName($ocName, $nameByLDAP, $sndName);
+ $this->cacheUserDisplayName($ncName, $nameByLDAP, $sndName);
}
}
}
- return $NextcloudNames;
+ return $nextcloudNames;
}
/**
diff --git a/apps/user_ldap/lib/Group_LDAP.php b/apps/user_ldap/lib/Group_LDAP.php
index f1ea831e485..b6013e77766 100644
--- a/apps/user_ldap/lib/Group_LDAP.php
+++ b/apps/user_ldap/lib/Group_LDAP.php
@@ -388,7 +388,7 @@ class Group_LDAP extends BackendUtility implements \OCP\GroupInterface {
$limit,
$offset
);
- return $this->access->ownCloudUserNames($users);
+ return $this->access->nextcloudUserNames($users);
} catch (\Exception $e) {
return array();
}
@@ -541,7 +541,7 @@ class Group_LDAP extends BackendUtility implements \OCP\GroupInterface {
$groups = array_merge($groups, $this->cachedGroupsByMember[$uid]);
} else {
$groupsByMember = array_values($this->getGroupsByMember($uid));
- $groupsByMember = $this->access->ownCloudGroupNames($groupsByMember);
+ $groupsByMember = $this->access->nextcloudGroupNames($groupsByMember);
$this->cachedGroupsByMember[$uid] = $groupsByMember;
$groups = array_merge($groups, $groupsByMember);
}
@@ -804,7 +804,7 @@ class Group_LDAP extends BackendUtility implements \OCP\GroupInterface {
array($this->access->connection->ldapGroupDisplayName, 'dn'),
$limit,
$offset);
- $ldap_groups = $this->access->ownCloudGroupNames($ldap_groups);
+ $ldap_groups = $this->access->nextcloudGroupNames($ldap_groups);
$this->access->connection->writeToCache($cacheKey, $ldap_groups);
return $ldap_groups;
diff --git a/apps/user_ldap/lib/User_LDAP.php b/apps/user_ldap/lib/User_LDAP.php
index 44de3f5da40..fa959fd9a81 100644
--- a/apps/user_ldap/lib/User_LDAP.php
+++ b/apps/user_ldap/lib/User_LDAP.php
@@ -234,7 +234,7 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
$filter,
$this->access->userManager->getAttributes(true),
$limit, $offset);
- $ldap_users = $this->access->ownCloudUserNames($ldap_users);
+ $ldap_users = $this->access->nextcloudUserNames($ldap_users);
Util::writeLog('user_ldap', 'getUsers: '.count($ldap_users). ' Users found', Util::DEBUG);
$this->access->connection->writeToCache($cachekey, $ldap_users);
diff --git a/apps/user_ldap/tests/Group_LDAPTest.php b/apps/user_ldap/tests/Group_LDAPTest.php
index 906db6bb17b..621a427eaac 100644
--- a/apps/user_ldap/tests/Group_LDAPTest.php
+++ b/apps/user_ldap/tests/Group_LDAPTest.php
@@ -315,7 +315,7 @@ class Group_LDAPTest extends \Test\TestCase {
$this->enableGroups($access);
$access->expects($this->once())
- ->method('ownCloudGroupNames')
+ ->method('nextcloudGroupNames')
->will($this->returnValue(array('group1', 'group2')));
$groupBackend = new GroupLDAP($access);
@@ -350,7 +350,7 @@ class Group_LDAPTest extends \Test\TestCase {
->will($this->returnValue('cn=foobar,dc=foo,dc=bar'));
$access->expects($this->once())
- ->method('ownCloudUserNames')
+ ->method('nextcloudUserNames')
->will($this->returnValue(array('lisa', 'bart', 'kira', 'brad')));
$groupBackend = new GroupLDAP($access);
@@ -451,7 +451,7 @@ class Group_LDAPTest extends \Test\TestCase {
->with($dn, 'memberOf');
$access->expects($this->once())
- ->method('ownCloudGroupNames')
+ ->method('nextcloudGroupNames')
->will($this->returnValue([]));
$groupBackend = new GroupLDAP($access);
@@ -496,7 +496,7 @@ class Group_LDAPTest extends \Test\TestCase {
];
$access->expects($this->once())
- ->method('ownCloudGroupNames')
+ ->method('nextcloudGroupNames')
->with([$group1, $group2])
->will($this->returnValue(['group1', 'group2']));
diff --git a/apps/user_ldap/tests/User_LDAPTest.php b/apps/user_ldap/tests/User_LDAPTest.php
index f1a23f9a6c8..1b1f9fdec78 100644
--- a/apps/user_ldap/tests/User_LDAPTest.php
+++ b/apps/user_ldap/tests/User_LDAPTest.php
@@ -349,7 +349,7 @@ class User_LDAPTest extends TestCase {
}));
$access->expects($this->any())
- ->method('ownCloudUserNames')
+ ->method('nextcloudUserNames')
->will($this->returnArgument(0));
}
diff --git a/apps/workflowengine/l10n/es.js b/apps/workflowengine/l10n/es.js
index bb1faff8615..035efbf65c8 100644
--- a/apps/workflowengine/l10n/es.js
+++ b/apps/workflowengine/l10n/es.js
@@ -3,7 +3,7 @@ OC.L10N.register(
{
"Successfully saved" : "Guardado con éxito",
"Saving failed:" : "Guardado fallido:",
- "File mime type" : "Tipo mime del fichero",
+ "File mime type" : "Tipo MIME del archivo",
"is" : "es/esta",
"is not" : "no es/esta",
"matches" : "coincidencias",
@@ -42,7 +42,7 @@ OC.L10N.register(
"is not member of" : "no es miembro de",
"The given operator is invalid" : "La operación dada no es valida",
"The given regular expression is invalid" : "La expresión regular dada no es valida",
- "The given file size is invalid" : "El tamaño de fichero dado no es valido ",
+ "The given file size is invalid" : "El tamaño del archivo dado no es válido ",
"The given tag id is invalid" : "El id de etiqueta dado no es valido",
"The given IP range is invalid" : "El rango de IPs no es valido",
"The given IP range is not valid for IPv4" : "El rango de IP no es valida para IPv4",
diff --git a/apps/workflowengine/l10n/es.json b/apps/workflowengine/l10n/es.json
index 98fd00b678e..0522b3d0b3f 100644
--- a/apps/workflowengine/l10n/es.json
+++ b/apps/workflowengine/l10n/es.json
@@ -1,7 +1,7 @@
{ "translations": {
"Successfully saved" : "Guardado con éxito",
"Saving failed:" : "Guardado fallido:",
- "File mime type" : "Tipo mime del fichero",
+ "File mime type" : "Tipo MIME del archivo",
"is" : "es/esta",
"is not" : "no es/esta",
"matches" : "coincidencias",
@@ -40,7 +40,7 @@
"is not member of" : "no es miembro de",
"The given operator is invalid" : "La operación dada no es valida",
"The given regular expression is invalid" : "La expresión regular dada no es valida",
- "The given file size is invalid" : "El tamaño de fichero dado no es valido ",
+ "The given file size is invalid" : "El tamaño del archivo dado no es válido ",
"The given tag id is invalid" : "El id de etiqueta dado no es valido",
"The given IP range is invalid" : "El rango de IPs no es valido",
"The given IP range is not valid for IPv4" : "El rango de IP no es valida para IPv4",
diff --git a/apps/workflowengine/l10n/nb.js b/apps/workflowengine/l10n/nb.js
index f2d2b4d2e47..d10f052e4f8 100644
--- a/apps/workflowengine/l10n/nb.js
+++ b/apps/workflowengine/l10n/nb.js
@@ -1,9 +1,9 @@
OC.L10N.register(
"workflowengine",
{
- "Successfully saved" : "Lagring var vellykket",
- "Saving failed:" : "Lagring feilet:",
- "File mime type" : "Filens mimetype",
+ "Successfully saved" : "Lagret",
+ "Saving failed:" : "Lagring mislyktes:",
+ "File mime type" : "Filens MIME-type",
"is" : "er",
"is not" : "er ikke",
"matches" : "passer",
diff --git a/apps/workflowengine/l10n/nb.json b/apps/workflowengine/l10n/nb.json
index b337654c2c9..54aec8e82ac 100644
--- a/apps/workflowengine/l10n/nb.json
+++ b/apps/workflowengine/l10n/nb.json
@@ -1,7 +1,7 @@
{ "translations": {
- "Successfully saved" : "Lagring var vellykket",
- "Saving failed:" : "Lagring feilet:",
- "File mime type" : "Filens mimetype",
+ "Successfully saved" : "Lagret",
+ "Saving failed:" : "Lagring mislyktes:",
+ "File mime type" : "Filens MIME-type",
"is" : "er",
"is not" : "er ikke",
"matches" : "passer",
diff --git a/build/integration/features/ratelimiting.feature b/build/integration/features/ratelimiting.feature
new file mode 100644
index 00000000000..bd8b2e30a73
--- /dev/null
+++ b/build/integration/features/ratelimiting.feature
@@ -0,0 +1,58 @@
+Feature: ratelimiting
+
+ Background:
+ Given user "user0" exists
+ Given As an "admin"
+ Given app "testing" is enabled
+
+ Scenario: Accessing a page with only an AnonRateThrottle as user
+ Given user "user0" exists
+ # First request should work
+ When requesting "/index.php/apps/testing/anonProtected" with "GET" using basic auth
+ Then the HTTP status code should be "200"
+ # Second one should fail
+ When requesting "/index.php/apps/testing/anonProtected" with "GET" using basic auth
+ Then the HTTP status code should be "429"
+ # After 11 seconds the next request should work
+ And Sleep for "11" seconds
+ When requesting "/index.php/apps/testing/anonProtected" with "GET" using basic auth
+ Then the HTTP status code should be "200"
+
+ Scenario: Accessing a page with only an AnonRateThrottle as guest
+ Given Sleep for "11" seconds
+ # First request should work
+ When requesting "/index.php/apps/testing/anonProtected" with "GET"
+ Then the HTTP status code should be "200"
+ # Second one should fail
+ When requesting "/index.php/apps/testing/anonProtected" with "GET" using basic auth
+ Then the HTTP status code should be "429"
+ # After 11 seconds the next request should work
+ And Sleep for "11" seconds
+ When requesting "/index.php/apps/testing/anonProtected" with "GET" using basic auth
+ Then the HTTP status code should be "200"
+
+ Scenario: Accessing a page with UserRateThrottle and AnonRateThrottle
+ # First request should work as guest
+ When requesting "/index.php/apps/testing/userAndAnonProtected" with "GET"
+ Then the HTTP status code should be "200"
+ # Second request should fail as guest
+ When requesting "/index.php/apps/testing/userAndAnonProtected" with "GET"
+ Then the HTTP status code should be "429"
+ # First request should work as user
+ When requesting "/index.php/apps/testing/userAndAnonProtected" with "GET" using basic auth
+ Then the HTTP status code should be "200"
+ # Second request should work as user
+ When requesting "/index.php/apps/testing/userAndAnonProtected" with "GET" using basic auth
+ Then the HTTP status code should be "200"
+ # Third request should work as user
+ When requesting "/index.php/apps/testing/userAndAnonProtected" with "GET" using basic auth
+ Then the HTTP status code should be "200"
+ # Fourth request should work as user
+ When requesting "/index.php/apps/testing/userAndAnonProtected" with "GET" using basic auth
+ Then the HTTP status code should be "200"
+ # Fifth request should work as user
+ When requesting "/index.php/apps/testing/userAndAnonProtected" with "GET" using basic auth
+ Then the HTTP status code should be "200"
+ # Sixth request should fail as user
+ When requesting "/index.php/apps/testing/userAndAnonProtected" with "GET"
+ Then the HTTP status code should be "429"
diff --git a/core/Controller/LoginController.php b/core/Controller/LoginController.php
index a61d087965f..9f8b2b75fd0 100644
--- a/core/Controller/LoginController.php
+++ b/core/Controller/LoginController.php
@@ -29,7 +29,6 @@
namespace OC\Core\Controller;
use OC\Authentication\TwoFactorAuth\Manager;
-use OC\Security\Bruteforce\Throttler;
use OC\User\Session;
use OC_App;
use OC_Util;
@@ -64,8 +63,6 @@ class LoginController extends Controller {
private $logger;
/** @var Manager */
private $twoFactorManager;
- /** @var Throttler */
- private $throttler;
/**
* @param string $appName
@@ -77,7 +74,6 @@ class LoginController extends Controller {
* @param IURLGenerator $urlGenerator
* @param ILogger $logger
* @param Manager $twoFactorManager
- * @param Throttler $throttler
*/
public function __construct($appName,
IRequest $request,
@@ -87,8 +83,7 @@ class LoginController extends Controller {
IUserSession $userSession,
IURLGenerator $urlGenerator,
ILogger $logger,
- Manager $twoFactorManager,
- Throttler $throttler) {
+ Manager $twoFactorManager) {
parent::__construct($appName, $request);
$this->userManager = $userManager;
$this->config = $config;
@@ -97,7 +92,6 @@ class LoginController extends Controller {
$this->urlGenerator = $urlGenerator;
$this->logger = $logger;
$this->twoFactorManager = $twoFactorManager;
- $this->throttler = $throttler;
}
/**
@@ -203,6 +197,7 @@ class LoginController extends Controller {
* @PublicPage
* @UseSession
* @NoCSRFRequired
+ * @BruteForceProtection(action=login)
*
* @param string $user
* @param string $password
@@ -213,8 +208,9 @@ class LoginController extends Controller {
* @return RedirectResponse
*/
public function tryLogin($user, $password, $redirect_url, $remember_login = false, $timezone = '', $timezone_offset = '') {
- $currentDelay = $this->throttler->getDelay($this->request->getRemoteAddress(), 'login');
- $this->throttler->sleepDelay($this->request->getRemoteAddress(), 'login');
+ if(!is_string($user)) {
+ throw new \InvalidArgumentException('Username must be string');
+ }
// If the user is already logged in and the CSRF check does not pass then
// simply redirect the user to the correct page as required. This is the
@@ -242,20 +238,18 @@ class LoginController extends Controller {
}
}
if ($loginResult === false) {
- $this->throttler->registerAttempt('login', $this->request->getRemoteAddress(), ['user' => $originalUser]);
- if($currentDelay === 0) {
- $this->throttler->sleepDelay($this->request->getRemoteAddress(), 'login');
- }
+ // Read current user and append if possible - we need to return the unmodified user otherwise we will leak the login name
+ $args = !is_null($user) ? ['user' => $originalUser] : [];
+ $response = new RedirectResponse($this->urlGenerator->linkToRoute('core.login.showLoginForm', $args));
+ $response->throttle();
$this->session->set('loginMessages', [
['invalidpassword'], []
]);
- // Read current user and append if possible - we need to return the unmodified user otherwise we will leak the login name
- $args = !is_null($user) ? ['user' => $originalUser] : [];
- return new RedirectResponse($this->urlGenerator->linkToRoute('core.login.showLoginForm', $args));
+ return $response;
}
// TODO: remove password checks from above and let the user session handle failures
// requires https://github.com/owncloud/core/pull/24616
- $this->userSession->login($user, $password);
+ $this->userSession->completeLogin($loginResult, ['loginName' => $user, 'password' => $password]);
$this->userSession->createSessionToken($this->request, $loginResult->getUID(), $user, $password, (int)$remember_login);
// User has successfully logged in, now remove the password reset link, when it is available
@@ -302,6 +296,7 @@ class LoginController extends Controller {
/**
* @NoAdminRequired
* @UseSession
+ * @BruteForceProtection(action=sudo)
*
* @license GNU AGPL version 3 or any later version
*
@@ -309,18 +304,12 @@ class LoginController extends Controller {
* @return DataResponse
*/
public function confirmPassword($password) {
- $currentDelay = $this->throttler->getDelay($this->request->getRemoteAddress(), 'sudo');
- $this->throttler->sleepDelay($this->request->getRemoteAddress(), 'sudo');
-
$loginName = $this->userSession->getLoginName();
$loginResult = $this->userManager->checkPassword($loginName, $password);
if ($loginResult === false) {
- $this->throttler->registerAttempt('sudo', $this->request->getRemoteAddress(), ['user' => $loginName]);
- if ($currentDelay === 0) {
- $this->throttler->sleepDelay($this->request->getRemoteAddress(), 'sudo');
- }
-
- return new DataResponse([], Http::STATUS_FORBIDDEN);
+ $response = new DataResponse([], Http::STATUS_FORBIDDEN);
+ $response->throttle();
+ return $response;
}
$confirmTimestamp = time();
diff --git a/core/Controller/LostController.php b/core/Controller/LostController.php
index 639dd9da574..4597124897b 100644
--- a/core/Controller/LostController.php
+++ b/core/Controller/LostController.php
@@ -204,7 +204,7 @@ class LostController extends Controller {
/**
* @PublicPage
- * @BruteForceProtection passwordResetEmail
+ * @BruteForceProtection(action=passwordResetEmail)
*
* @param string $user
* @return array
@@ -284,15 +284,29 @@ class LostController extends Controller {
$link = $this->urlGenerator->linkToRouteAbsolute('core.lost.resetform', array('userId' => $user->getUID(), 'token' => $token));
- $tmpl = new \OC_Template('core', 'lostpassword/email');
- $tmpl->assign('link', $link);
- $msg = $tmpl->fetchPage();
+ $emailTemplate = $this->mailer->createEMailTemplate();
+
+ $emailTemplate->addHeader();
+ $emailTemplate->addHeading($this->l10n->t('Password reset'));
+
+ $emailTemplate->addBodyText(
+ $this->l10n->t('Click the following button to reset your password. If you have not requested the password reset, then ignore this email.'),
+ $this->l10n->t('Click the following link to reset your password. If you have not requested the password reset, then ignore this email.')
+ );
+
+ $emailTemplate->addBodyButton(
+ $this->l10n->t('Reset your password'),
+ $link,
+ false
+ );
+ $emailTemplate->addFooter();
try {
$message = $this->mailer->createMessage();
$message->setTo([$email => $user->getUID()]);
$message->setSubject($this->l10n->t('%s password reset', [$this->defaults->getName()]));
- $message->setPlainBody($msg);
+ $message->setPlainBody($emailTemplate->renderText());
+ $message->setHtmlBody($emailTemplate->renderHTML());
$message->setFrom([$this->from => $this->defaults->getName()]);
$this->mailer->send($message);
} catch (\Exception $e) {
diff --git a/core/css/icons.scss b/core/css/icons.scss
index d6a03b3187b..1ca29f22600 100644
--- a/core/css/icons.scss
+++ b/core/css/icons.scss
@@ -326,14 +326,12 @@ img, object, video, button, textarea, input, select {
background-image: url('../img/actions/settings-white.svg?v=1');
}
+/* always use icon-shared, AdBlock blocks icon-share */
+.icon-shared,
.icon-share {
background-image: url('../img/actions/share.svg?v=1');
}
-.icon-shared {
- background-image: url('../img/actions/shared.svg?v=1');
-}
-
.icon-sound {
background-image: url('../img/actions/sound.svg?v=1');
}
diff --git a/core/css/inputs.scss b/core/css/inputs.scss
index 13a164e13f2..e76e5bea150 100644
--- a/core/css/inputs.scss
+++ b/core/css/inputs.scss
@@ -206,6 +206,7 @@ input {
height: 1px;
overflow: hidden;
+ label {
+ padding: 6px 0;
user-select: none;
}
&:disabled + label,
@@ -219,8 +220,8 @@ input {
width: 12px;
vertical-align: middle;
border-radius: 50%;
- margin: 3px;
- margin-top: 1px;
+ margin: 6px;
+ margin-top: -2px;
border: 1px solid nc-lighten($color-main-text, 53%);
}
&:not(:disabled):not(:checked) + label:hover:before,
diff --git a/core/js/share.js b/core/js/share.js
index ba1afe08190..262d0a5d166 100644
--- a/core/js/share.js
+++ b/core/js/share.js
@@ -107,7 +107,7 @@ OC.Share = _.extend(OC.Share || {}, {
}
// TODO: iterating over the files might be more efficient
for (item in OC.Share.statuses){
- var iconClass = 'icon-share';
+ var iconClass = 'icon-shared';
var data = OC.Share.statuses[item];
var hasLink = data.link;
// Links override shared in terms of icon display
@@ -115,7 +115,7 @@ OC.Share = _.extend(OC.Share || {}, {
iconClass = 'icon-public';
}
if (itemType !== 'file' && itemType !== 'folder') {
- $('a.share[data-item="'+item+'"] .icon').removeClass('icon-share icon-public').addClass(iconClass);
+ $('a.share[data-item="'+item+'"] .icon').removeClass('icon-shared icon-public').addClass(iconClass);
} else {
// TODO: ultimately this part should be moved to files_sharing app
var file = $fileList.find('tr[data-id="'+item+'"]');
@@ -173,12 +173,12 @@ OC.Share = _.extend(OC.Share || {}, {
}
} else if (OC.Share.itemShares[index].length > 0) {
shares = true;
- iconClass = 'icon-share';
+ iconClass = 'icon-shared';
}
}
});
if (itemType != 'file' && itemType != 'folder') {
- $('a.share[data-item="'+itemSource+'"] .icon').removeClass('icon-share icon-public').addClass(iconClass);
+ $('a.share[data-item="'+itemSource+'"] .icon').removeClass('icon-shared icon-public').addClass(iconClass);
} else {
var $tr = $('tr').filterAttr('data-id', String(itemSource));
if ($tr.length > 0) {
@@ -262,7 +262,7 @@ OC.Share = _.extend(OC.Share || {}, {
var recipients;
var owner = $tr.attr('data-share-owner');
var shareFolderIcon;
- var iconClass = 'icon-share';
+ var iconClass = 'icon-shared';
action.removeClass('shared-style');
// update folder icon
if (type === 'dir' && (hasShares || hasLink || owner)) {
@@ -312,7 +312,7 @@ OC.Share = _.extend(OC.Share || {}, {
if (hasLink) {
iconClass = 'icon-public';
}
- icon.removeClass('icon-share icon-public').addClass(iconClass);
+ icon.removeClass('icon-shared icon-public').addClass(iconClass);
},
/**
*
diff --git a/core/l10n/bg.js b/core/l10n/bg.js
index 5f409e995d7..9762e148fed 100644
--- a/core/l10n/bg.js
+++ b/core/l10n/bg.js
@@ -240,7 +240,6 @@ OC.L10N.register(
"Log in" : "Вписване",
"Stay logged in" : "Остани вписан",
"Alternative Logins" : "Алтернативни методи на вписване",
- "Use the following link to reset your password: {link}" : "Използвайте следната връзка, за да възстановите паролата си: {link}",
"New password" : "Нова парола",
"New Password" : "Нова парола",
"Reset password" : "Възстановяване на паролата",
@@ -285,6 +284,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Здравейте,\n\nсамо да ви уведомяваме, че %s сподели %s с вас.\nРазгледай го: %s\n\n",
"The share will expire on %s." : "Споделянето ще изтече на %s.",
"Cheers!" : "Поздрави!",
+ "Use the following link to reset your password: {link}" : "Използвайте следната връзка, за да възстановите паролата си: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Здравейте,<br><br>само ви уведомяваме, че %s сподели <strong>%s</strong> с вас.\n<br><a href=\"%s\">Разгледай го!</a><br><br>."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/bg.json b/core/l10n/bg.json
index e4be2c68cc7..5700e2276a0 100644
--- a/core/l10n/bg.json
+++ b/core/l10n/bg.json
@@ -238,7 +238,6 @@
"Log in" : "Вписване",
"Stay logged in" : "Остани вписан",
"Alternative Logins" : "Алтернативни методи на вписване",
- "Use the following link to reset your password: {link}" : "Използвайте следната връзка, за да възстановите паролата си: {link}",
"New password" : "Нова парола",
"New Password" : "Нова парола",
"Reset password" : "Възстановяване на паролата",
@@ -283,6 +282,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Здравейте,\n\nсамо да ви уведомяваме, че %s сподели %s с вас.\nРазгледай го: %s\n\n",
"The share will expire on %s." : "Споделянето ще изтече на %s.",
"Cheers!" : "Поздрави!",
+ "Use the following link to reset your password: {link}" : "Използвайте следната връзка, за да възстановите паролата си: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Здравейте,<br><br>само ви уведомяваме, че %s сподели <strong>%s</strong> с вас.\n<br><a href=\"%s\">Разгледай го!</a><br><br>."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/ca.js b/core/l10n/ca.js
index 28505e50cd3..cb02a87e995 100644
--- a/core/l10n/ca.js
+++ b/core/l10n/ca.js
@@ -200,7 +200,6 @@ OC.L10N.register(
"Log in" : "Inici de sessió",
"Stay logged in" : "Mantén la sessió connectada",
"Alternative Logins" : "Acreditacions alternatives",
- "Use the following link to reset your password: {link}" : "Useu l'enllaç següent per restablir la contrasenya: {link}",
"New password" : "Contrasenya nova",
"New Password" : "Contrasenya nova",
"Reset password" : "Reinicialitza la contrasenya",
@@ -237,6 +236,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Ei,\n\nnomés fer-te saber que %s ha compartit %s amb tu.\nMira-ho a: %s\n\n",
"The share will expire on %s." : "La compartició venç el %s.",
"Cheers!" : "Salut!",
+ "Use the following link to reset your password: {link}" : "Useu l'enllaç següent per restablir la contrasenya: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Ei, <br><br>només fer-vos saber que %s us ha comparti <strong>%s</strong>. <br><a href=\"%s\">Mireu-ho!</a>"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/ca.json b/core/l10n/ca.json
index c9e5ffc460e..57156371206 100644
--- a/core/l10n/ca.json
+++ b/core/l10n/ca.json
@@ -198,7 +198,6 @@
"Log in" : "Inici de sessió",
"Stay logged in" : "Mantén la sessió connectada",
"Alternative Logins" : "Acreditacions alternatives",
- "Use the following link to reset your password: {link}" : "Useu l'enllaç següent per restablir la contrasenya: {link}",
"New password" : "Contrasenya nova",
"New Password" : "Contrasenya nova",
"Reset password" : "Reinicialitza la contrasenya",
@@ -235,6 +234,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Ei,\n\nnomés fer-te saber que %s ha compartit %s amb tu.\nMira-ho a: %s\n\n",
"The share will expire on %s." : "La compartició venç el %s.",
"Cheers!" : "Salut!",
+ "Use the following link to reset your password: {link}" : "Useu l'enllaç següent per restablir la contrasenya: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Ei, <br><br>només fer-vos saber que %s us ha comparti <strong>%s</strong>. <br><a href=\"%s\">Mireu-ho!</a>"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/cs.js b/core/l10n/cs.js
index dfb92b4a508..71b1b8c0b82 100644
--- a/core/l10n/cs.js
+++ b/core/l10n/cs.js
@@ -252,7 +252,6 @@ OC.L10N.register(
"Log in" : "Přihlásit",
"Stay logged in" : "Neodhlašovat",
"Alternative Logins" : "Alternativní přihlášení",
- "Use the following link to reset your password: {link}" : "Heslo obnovíte použitím následujícího odkazu: {link}",
"New password" : "Nové heslo",
"New Password" : "Nové heslo",
"Reset password" : "Obnovit heslo",
@@ -297,6 +296,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hej ty tam,\n\njen ti chci dát vědět, že %s sdílel %s s tebou.\nZobraz si to: %s\n\n",
"The share will expire on %s." : "Sdílení vyprší %s.",
"Cheers!" : "Ať slouží!",
+ "Use the following link to reset your password: {link}" : "Heslo obnovíte použitím následujícího odkazu: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Ahoj,<br><br>jen ti dávám vědět, že s tebou %s sdílí <strong>%s</strong>.<br><a href=\"%s\">Zkontroluj to!</a><br><br>"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/core/l10n/cs.json b/core/l10n/cs.json
index dd94f0b94ab..3f8322b9d24 100644
--- a/core/l10n/cs.json
+++ b/core/l10n/cs.json
@@ -250,7 +250,6 @@
"Log in" : "Přihlásit",
"Stay logged in" : "Neodhlašovat",
"Alternative Logins" : "Alternativní přihlášení",
- "Use the following link to reset your password: {link}" : "Heslo obnovíte použitím následujícího odkazu: {link}",
"New password" : "Nové heslo",
"New Password" : "Nové heslo",
"Reset password" : "Obnovit heslo",
@@ -295,6 +294,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hej ty tam,\n\njen ti chci dát vědět, že %s sdílel %s s tebou.\nZobraz si to: %s\n\n",
"The share will expire on %s." : "Sdílení vyprší %s.",
"Cheers!" : "Ať slouží!",
+ "Use the following link to reset your password: {link}" : "Heslo obnovíte použitím následujícího odkazu: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Ahoj,<br><br>jen ti dávám vědět, že s tebou %s sdílí <strong>%s</strong>.<br><a href=\"%s\">Zkontroluj to!</a><br><br>"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/core/l10n/da.js b/core/l10n/da.js
index d14b0262f8f..dfac7abe452 100644
--- a/core/l10n/da.js
+++ b/core/l10n/da.js
@@ -231,7 +231,6 @@ OC.L10N.register(
"Log in" : "Log ind",
"Stay logged in" : "Forbliv logget ind",
"Alternative Logins" : "Alternative logins",
- "Use the following link to reset your password: {link}" : "Anvend følgende link til at nulstille din adgangskode: {link}",
"New password" : "Ny adgangskode",
"New Password" : "Ny adgangskode",
"Reset password" : "Nulstil kodeord",
@@ -269,6 +268,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hej\n\nDette blot for at lade dig vide, at %s har delt %s med dig.\n\nSe det her: %s\n\n",
"The share will expire on %s." : "Delingen vil udløbe om %s.",
"Cheers!" : "Hav en fortsat god dag.",
+ "Use the following link to reset your password: {link}" : "Anvend følgende link til at nulstille din adgangskode: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej med dig,<br><br>Dette er blot for at informere dig om, at %s har delt <strong>%s</strong> med dig.<br><a href=\"%s\">Se det her!</a><br><br>"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/da.json b/core/l10n/da.json
index 5ed2ce55381..2fdefe259eb 100644
--- a/core/l10n/da.json
+++ b/core/l10n/da.json
@@ -229,7 +229,6 @@
"Log in" : "Log ind",
"Stay logged in" : "Forbliv logget ind",
"Alternative Logins" : "Alternative logins",
- "Use the following link to reset your password: {link}" : "Anvend følgende link til at nulstille din adgangskode: {link}",
"New password" : "Ny adgangskode",
"New Password" : "Ny adgangskode",
"Reset password" : "Nulstil kodeord",
@@ -267,6 +266,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hej\n\nDette blot for at lade dig vide, at %s har delt %s med dig.\n\nSe det her: %s\n\n",
"The share will expire on %s." : "Delingen vil udløbe om %s.",
"Cheers!" : "Hav en fortsat god dag.",
+ "Use the following link to reset your password: {link}" : "Anvend følgende link til at nulstille din adgangskode: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej med dig,<br><br>Dette er blot for at informere dig om, at %s har delt <strong>%s</strong> med dig.<br><a href=\"%s\">Se det her!</a><br><br>"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/de.js b/core/l10n/de.js
index 15b9c130ce2..4d89478b1bf 100644
--- a/core/l10n/de.js
+++ b/core/l10n/de.js
@@ -17,6 +17,10 @@ OC.L10N.register(
"Couldn't reset password because the token is invalid" : "Das Passwort konnte aufgrund eines ungültigen Tokens nicht zurückgesetzt werden",
"Couldn't reset password because the token is expired" : "Das Passwort konnte nicht zurückgesetzt werden, da der Token abgelaufen ist",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Es konnte keine E-Mail verschickt werden um das Passwort zurückzusetzten, da keine E-Mail im Benutzerkonto hinterlegt ist. Bitte kontaktiere deinen Administrator.",
+ "Password reset" : "Passwort zurücksetzen",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Klicke zum Zurücksetzen des Passworts auf die folgende Schaltfläche. Wenn du das Zurücksetzen des Passworts nicht angefordert hast, ignoriere diese E-Mail.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Klicke zum Zurücksetzen des Passworts auf den folgenden Link. Wenn du das Zurücksetzen des Passworts nicht angefordert hast, ignoriere diese E-Mail.",
+ "Reset your password" : "Setze dein Passwort zurück",
"%s password reset" : "%s-Passwort zurücksetzen",
"Couldn't send reset email. Please contact your administrator." : "Die E-Mail zum Zurücksetzen konnte nicht versendet werden. Bitte kontaktiere deinen Administrator.",
"Couldn't send reset email. Please make sure your username is correct." : "E-Mail zum Zurücksetzen kann nicht versendet werden. Bitte deinen Benutzernamen überprüfen.",
@@ -263,7 +267,6 @@ OC.L10N.register(
"Log in" : "Anmelden",
"Stay logged in" : "Angemeldet bleiben",
"Alternative Logins" : "Alternative Logins",
- "Use the following link to reset your password: {link}" : "Verwende den folgenden Link, um dein Passwort zurückzusetzen: {link}",
"New password" : "Neues Passwort",
"New Password" : "Neues Passwort",
"Reset password" : "Passwort zurücksetzen",
@@ -308,6 +311,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hallo,\n\nhier nur kurz die Mitteilung, dass %s %s mit Dir geteilt hat.\nZum Anzeigen: %s\n\n",
"The share will expire on %s." : "Die Freigabe wird am %s ablaufen.",
"Cheers!" : "Noch einen schönen Tag!",
+ "Use the following link to reset your password: {link}" : "Verwende den folgenden Link, um dein Passwort zurückzusetzen: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hallo,<br><br>hier nur kurz die Mitteilung, dass %s <strong>%s</strong> mit dir geteilt hat.<br><a href=\"%s\">Sieh es Dir an!</a><br><br>"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/de.json b/core/l10n/de.json
index 9ba15574714..484b2f2250a 100644
--- a/core/l10n/de.json
+++ b/core/l10n/de.json
@@ -15,6 +15,10 @@
"Couldn't reset password because the token is invalid" : "Das Passwort konnte aufgrund eines ungültigen Tokens nicht zurückgesetzt werden",
"Couldn't reset password because the token is expired" : "Das Passwort konnte nicht zurückgesetzt werden, da der Token abgelaufen ist",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Es konnte keine E-Mail verschickt werden um das Passwort zurückzusetzten, da keine E-Mail im Benutzerkonto hinterlegt ist. Bitte kontaktiere deinen Administrator.",
+ "Password reset" : "Passwort zurücksetzen",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Klicke zum Zurücksetzen des Passworts auf die folgende Schaltfläche. Wenn du das Zurücksetzen des Passworts nicht angefordert hast, ignoriere diese E-Mail.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Klicke zum Zurücksetzen des Passworts auf den folgenden Link. Wenn du das Zurücksetzen des Passworts nicht angefordert hast, ignoriere diese E-Mail.",
+ "Reset your password" : "Setze dein Passwort zurück",
"%s password reset" : "%s-Passwort zurücksetzen",
"Couldn't send reset email. Please contact your administrator." : "Die E-Mail zum Zurücksetzen konnte nicht versendet werden. Bitte kontaktiere deinen Administrator.",
"Couldn't send reset email. Please make sure your username is correct." : "E-Mail zum Zurücksetzen kann nicht versendet werden. Bitte deinen Benutzernamen überprüfen.",
@@ -261,7 +265,6 @@
"Log in" : "Anmelden",
"Stay logged in" : "Angemeldet bleiben",
"Alternative Logins" : "Alternative Logins",
- "Use the following link to reset your password: {link}" : "Verwende den folgenden Link, um dein Passwort zurückzusetzen: {link}",
"New password" : "Neues Passwort",
"New Password" : "Neues Passwort",
"Reset password" : "Passwort zurücksetzen",
@@ -306,6 +309,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hallo,\n\nhier nur kurz die Mitteilung, dass %s %s mit Dir geteilt hat.\nZum Anzeigen: %s\n\n",
"The share will expire on %s." : "Die Freigabe wird am %s ablaufen.",
"Cheers!" : "Noch einen schönen Tag!",
+ "Use the following link to reset your password: {link}" : "Verwende den folgenden Link, um dein Passwort zurückzusetzen: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hallo,<br><br>hier nur kurz die Mitteilung, dass %s <strong>%s</strong> mit dir geteilt hat.<br><a href=\"%s\">Sieh es Dir an!</a><br><br>"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js
index 994a8c12e56..b08b09b9422 100644
--- a/core/l10n/de_DE.js
+++ b/core/l10n/de_DE.js
@@ -17,6 +17,10 @@ OC.L10N.register(
"Couldn't reset password because the token is invalid" : "Das Passwort konnte aufgrund eines ungültigen Tokens nicht zurückgesetzt werden",
"Couldn't reset password because the token is expired" : "Das Passwort konnte nicht zurückgesetzt werden, da der Token abgelaufen ist",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Es konnte keine E-Mail verschickt werden um das Passwort zurückzusetzten, da keine E-Mail im Benutzerkonto hinterlegt ist. Bitte kontaktieren Sie den Administrator.",
+ "Password reset" : "Passwort zurücksetzen",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Klicken Sie zum Zurücksetzen des Passworts auf die folgende Schaltfläche. Wenn Sie das Zurücksetzen des Passworts nicht angefordert haben, ignorieren Sie bitte diese E-Mail.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Klicken Sie zum Zurücksetzen des Passworts auf den folgenden Link. Wenn Sie das Zurücksetzen des Passworts nicht angefordert haben, ignorieren Sie bitte diese E-Mail.",
+ "Reset your password" : "Setzen Sie Ihr Passwort zurück",
"%s password reset" : "%s-Passwort zurücksetzen",
"Couldn't send reset email. Please contact your administrator." : "Die E-Mail zum Zurücksetzen konnte nicht versendet werden. Bitte kontaktieren Sie Ihren Administrator.",
"Couldn't send reset email. Please make sure your username is correct." : "E-Mail zum Zurücksetzen kann nicht versendet werden. Bitte stellen Sie sicher, dass Ihr Benutzername richtig ist.",
@@ -263,7 +267,6 @@ OC.L10N.register(
"Log in" : "Einloggen",
"Stay logged in" : "Angemeldet bleiben",
"Alternative Logins" : "Alternative Logins",
- "Use the following link to reset your password: {link}" : "Benutzen Sie den folgenden Link, um Ihr Passwort zurückzusetzen: {link}",
"New password" : "Neues Passwort",
"New Password" : "Neues Passwort",
"Reset password" : "Passwort zurücksetzen",
@@ -308,6 +311,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hallo,\n\nhier nur kurz die Mitteilung, dass %s %s mit Ihnen geteilt hat.\nZum Anzeigen: %s\n\n",
"The share will expire on %s." : "Die Freigabe wird am %s ablaufen.",
"Cheers!" : "Noch einen schönen Tag!",
+ "Use the following link to reset your password: {link}" : "Benutzen Sie den folgenden Link, um Ihr Passwort zurückzusetzen: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hallo,<br><br>hier nur kurz die Mitteilung, dass %s <strong>%s</strong> mit Ihnen geteilt hat.<br><a href=\"%s\">Sehen Sie es sich an!</a><br><br>"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json
index 0c966201a45..129c9a6cee1 100644
--- a/core/l10n/de_DE.json
+++ b/core/l10n/de_DE.json
@@ -15,6 +15,10 @@
"Couldn't reset password because the token is invalid" : "Das Passwort konnte aufgrund eines ungültigen Tokens nicht zurückgesetzt werden",
"Couldn't reset password because the token is expired" : "Das Passwort konnte nicht zurückgesetzt werden, da der Token abgelaufen ist",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Es konnte keine E-Mail verschickt werden um das Passwort zurückzusetzten, da keine E-Mail im Benutzerkonto hinterlegt ist. Bitte kontaktieren Sie den Administrator.",
+ "Password reset" : "Passwort zurücksetzen",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Klicken Sie zum Zurücksetzen des Passworts auf die folgende Schaltfläche. Wenn Sie das Zurücksetzen des Passworts nicht angefordert haben, ignorieren Sie bitte diese E-Mail.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Klicken Sie zum Zurücksetzen des Passworts auf den folgenden Link. Wenn Sie das Zurücksetzen des Passworts nicht angefordert haben, ignorieren Sie bitte diese E-Mail.",
+ "Reset your password" : "Setzen Sie Ihr Passwort zurück",
"%s password reset" : "%s-Passwort zurücksetzen",
"Couldn't send reset email. Please contact your administrator." : "Die E-Mail zum Zurücksetzen konnte nicht versendet werden. Bitte kontaktieren Sie Ihren Administrator.",
"Couldn't send reset email. Please make sure your username is correct." : "E-Mail zum Zurücksetzen kann nicht versendet werden. Bitte stellen Sie sicher, dass Ihr Benutzername richtig ist.",
@@ -261,7 +265,6 @@
"Log in" : "Einloggen",
"Stay logged in" : "Angemeldet bleiben",
"Alternative Logins" : "Alternative Logins",
- "Use the following link to reset your password: {link}" : "Benutzen Sie den folgenden Link, um Ihr Passwort zurückzusetzen: {link}",
"New password" : "Neues Passwort",
"New Password" : "Neues Passwort",
"Reset password" : "Passwort zurücksetzen",
@@ -306,6 +309,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hallo,\n\nhier nur kurz die Mitteilung, dass %s %s mit Ihnen geteilt hat.\nZum Anzeigen: %s\n\n",
"The share will expire on %s." : "Die Freigabe wird am %s ablaufen.",
"Cheers!" : "Noch einen schönen Tag!",
+ "Use the following link to reset your password: {link}" : "Benutzen Sie den folgenden Link, um Ihr Passwort zurückzusetzen: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hallo,<br><br>hier nur kurz die Mitteilung, dass %s <strong>%s</strong> mit Ihnen geteilt hat.<br><a href=\"%s\">Sehen Sie es sich an!</a><br><br>"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/el.js b/core/l10n/el.js
index ff567a9273d..f5bae2dab5b 100644
--- a/core/l10n/el.js
+++ b/core/l10n/el.js
@@ -9,22 +9,22 @@ OC.L10N.register(
"No image or file provided" : "Δεν δόθηκε εικόνα ή αρχείο",
"Unknown filetype" : "Άγνωστος τύπος αρχείου",
"Invalid image" : "Μη έγκυρη εικόνα",
- "An error occurred. Please contact your admin." : "Προέκυψε σφάλμα. Παρακαλώ επικοινωνήστε με τον διαχειριστή σας.",
+ "An error occurred. Please contact your admin." : "Προέκυψε σφάλμα. Παρακαλώ επικοινωνήστε με τον διαχειριστή.",
"No temporary profile picture available, try again" : "Δεν υπάρχει προσωρινή φωτογραφία προφίλ, δοκιμάστε ξανά",
"No crop data provided" : "Δεν δόθηκαν δεδομένα περικοπής",
"No valid crop data provided" : "Έχουν δοθεί μη έγκυρα δεδομένα περικοπής",
"Crop is not square" : "Η περικοπή δεν εχει τετραγωνικό σχήμα",
"Couldn't reset password because the token is invalid" : "Αδυναμία επαναφοράς συνθηματικού λόγω μη έγκυρου διακριτικού",
"Couldn't reset password because the token is expired" : "Αδυναμία επαναφοράς συνθηματικού επειδή το διακριτικό έχει λήξει",
- "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς γιατί δεν υπάρχει διεύθυνση ηλ. αλληλογραφίας για αυτόν τον χρήστη. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Αδυναμία αποστολής ηλεκτρονικού μηνύματος επαναφοράς διότι δεν υπάρχει διεύθυνση ηλεκτρινικής αλληλογραφίας για αυτόν τον χρήστη. Παρακαλώ επικοινωνήστε με το διαχειριστή.",
"%s password reset" : "%s επαναφορά συνθηματικού",
- "Couldn't send reset email. Please contact your administrator." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
- "Couldn't send reset email. Please make sure your username is correct." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς. Παρακαλώ ελέγξτε ότι το όνομα χρήστη σας είναι ορθό.",
+ "Couldn't send reset email. Please contact your administrator." : "Αδυναμία αποστολής ηλεκτρονικού μηνύματος επαναφοράς. Παρακαλώ επικοινωνήστε με το διαχειριστή.",
+ "Couldn't send reset email. Please make sure your username is correct." : "Αδυναμία αποστολής ηλεκτρονικού μηνύματος επαναφοράς. Παρακαλώ ελέγξτε ότι το όνομα χρήστη σας είναι σωστό.",
"Preparing update" : "Προετοιμασία ενημέρωσης",
"[%d / %d]: %s" : "[%d / %d]: %s",
"Repair warning: " : "Προειδοποίηση διόρθωσης:",
"Repair error: " : "Σφάλμα διόρθωσης:",
- "Please use the command line updater because automatic updating is disabled in the config.php." : "Παρακαλώ αναβαθμίστε μέσω γραμμής εντολών διότι η αυτόματη ενημέρωση έχει απενεργοποιηθεί στο αρχείο config.php.",
+ "Please use the command line updater because automatic updating is disabled in the config.php." : "Παρακαλώ ενημερώστε μέσω γραμμής εντολών διότι η αυτόματη ενημέρωση έχει απενεργοποιηθεί στο αρχείο config.php.",
"[%d / %d]: Checking table %s" : "[%d / %d]: Έλεγχος πίνακα %s",
"Turned on maintenance mode" : "Η λειτουργία συντήρησης ενεργοποιήθηκε",
"Turned off maintenance mode" : "Η λειτουργία συντήρησης απενεργοποιήθηκε",
@@ -59,10 +59,10 @@ OC.L10N.register(
"Failed to authenticate, try again" : "Αποτυχία πιστοποίησης, δοκιμάστε πάλι",
"seconds ago" : "δευτερόλεπτα πριν",
"Logging in …" : "Σύνδεση ...",
- "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Ο σύνδεσμος για την επαναφορά του συνθηματικού σας απεστάλη στο ηλ. ταχυδρομείο σας. Εάν δεν το παραλάβετε μέσα σε ένα εύλογο χρονικό διάστημα, ελέγξτε το φάκελο ανεπιθύμητων μηνυμάτων σας. <br> Εάν δεν βρίσκεται εκεί ρωτήστε τον διαχειριστή σας.",
- "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Δεν θα υπάρξει κανένας τρόπος για να πάρετε τα δεδομένα σας πίσω μετά την επαναφορά του συνθηματικού σας. <br /> Αν δεν είστε σίγουροι για το τι πρέπει να κάνετε, επικοινωνήστε με το διαχειριστή σας, πριν να συνεχίσετε. <br /> Θέλετε πραγματικά να συνεχίσετε;",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Ο σύνδεσμος για την επαναφορά του συνθηματικού σας απεστάλη με ηλεκτρονικό ταχυδρομείο. Εάν δεν το παραλάβετε μέσα σε ένα εύλογο χρονικό διάστημα, ελέγξτε το φάκελο ανεπιθύμητων μηνυμάτων σας. <br> Εάν δεν βρίσκεται εκεί ρωτήστε τον διαχειριστή.",
+ "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Δεν θα υπάρξει κανένας τρόπος για να έχετε πρόσβαση στα δεδομένα σας μετά την επαναφορά του συνθηματικού σας. <br /> Αν δεν είστε σίγουροι για το τι πρέπει να κάνετε, επικοινωνήστε με το διαχειριστή, πριν να συνεχίσετε. <br /> Θέλετε να συνεχίσετε;",
"I know what I'm doing" : "Γνωρίζω τι κάνω",
- "Password can not be changed. Please contact your administrator." : "Το συνθηματικό σας δεν μπορεί να αλλάξει. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
+ "Password can not be changed. Please contact your administrator." : "Το συνθηματικό σας δεν μπορεί να αλλάξει. Παρακαλώ επικοινωνήστε με το διαχειριστή.",
"No" : "Όχι",
"Yes" : "Ναι",
"No files in here" : "Δεν υπάρχουν αρχεία",
@@ -76,7 +76,7 @@ OC.L10N.register(
"New Files" : "Νέα αρχεία",
"Already existing files" : "Ήδη υπάρχοντα αρχεία",
"Which files do you want to keep?" : "Ποια αρχεία θέλετε να κρατήσετε;",
- "If you select both versions, the copied file will have a number added to its name." : "Εάν επιλέξετε και τις δυο εκδοχές, ένας αριθμός θα προστεθεί στο αντιγραφόμενο αρχείο.",
+ "If you select both versions, the copied file will have a number added to its name." : "Εάν επιλέξετε και τις δυο εκδοχές, ένας αριθμός θα προστεθεί στο αρχείο που αντιγράφεται.",
"Continue" : "Συνέχεια",
"(all selected)" : "(όλα τα επιλεγμένα)",
"({count} selected)" : "({count} επιλέχθηκαν)",
@@ -88,172 +88,226 @@ OC.L10N.register(
"Good password" : "Καλό συνθηματικό",
"Strong password" : "Δυνατό συνθηματικό",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιτρέπει τον συγχρονισμό αρχείων διότι η διεπαφή WebDAV πιθανόν να μην λειτουργεί.",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιλύει το \"{url}\". Περαιτέρω πληροφορίες μπορούν να βρεθούν στην <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">τεκμηρίωση</a>.",
- "This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Αυτός ο διακομιστής δεν έχει καθόλου σύνδεση στο διαδίκτυο. Διάφορα τερματικά σημεία δεν είναι δυνατόν να προσπελαστούν.Αυτό σημαίνει ότι κάποια χαρακτηριστικά, όπως η τοποθέτηση εξωτερικού εξοπλισμού ,ειδοποιήσεις σχετικά με αναβάθμιση διαφόρων ενημερώσεων ή εγκατάσταση εφαρμογών τρίτων δεν θα λειτουργήσουν.' Όπως ενδέχεται προσβάσιμα αρχεία εξ αποστάσεως ή ειδοποιήσεις ηλεκτρονικού ταχυδρομείου να μη λειτουργήσουν επίσης.Εμείς προτείνουμε να ενεργοποιήσετε την κατάλληλη δυνατή σύνδεση στο διαδίκτυο για τον συγκεκριμένο διακομιστή για να έχετε εφικτά όλα τα χαρακτηριστικά.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Δεν έχει ρυθμιστεί η χρήση λανθάνουσας μνήμης. Για να βελτιώσετε τις επιδόσεις παρακαλούμε να ρυθμίσετε κάποιο σύστημα memcache, εφόσον είναι διαθέσιμη. Περαιτέρω πληροφορίες μπορείτε να βρείτε στην <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\"> τεκμηρίωση</a> μας.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Η συσκευή /dev/urandom δεν μπορεί να αναγνωσθεί από την PHP κάτι που θα έπρεπε να μπορεί για λόγους ασφάλειας. Περαιτέρω πληροφορίες μπορείτε να βρείτε στην <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">τεκμηρίωσή</a> μας.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Έχετε εγκατεστημένη έκδοση PHP {version}}. Σας ενθαρρύνουμε να αναβαθμίσετε την έκδοση της PHP σας για να εκμεταλλευτείτε τις <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\"> επιδόσεις και τις ενημερώσεις ασφάλεια που παρέχονται από την ομάδα PHP </a> το συντομότερο δυνατόν με βάση την υποστήριξη της διανομής σας.",
- "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Η διαμόρφωση των reverse proxy headers είναι εσφαλμένη, ή \nέχετε πρόσβαση στο Nextcloud από έναν αξιόπιστο διαμεσολαβητή.Εάν δεν έχετε πρόσβαση στο Nextcloud από έναν αξιόπιστο διαμεσολαβητή,αυτό είναι ένα ζήτημα ασφαλείας και μπορείτε να επιτρέψετε σε κάποιον εισβολέα με παραπλάνηση να παρουσιάσει την διεύθυνση IP τους ως ορατή στο Nextcloud.Περαιτέρω πληροφορίες μπορείτε να βρείτε στο δικό μας <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\"> αξιόπιστο έγγραφο</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Το Memcached είναι ρυθμισμένο ως κατανεμημένη λανθάνουσα μνήμη, αλλά είναι εγκατεστημένη η λάθος άρθρωμα \"memcache\" της PHP. Το \\OC\\Memcache\\Memcached υποστηρίζει μόνο τη \"memcached\" και όχι τη \"memcache\". Δείτε το <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki και για τα δύο αρθρώματα</a>.",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Μερικά αρχεία δεν επικυρώθηκαν από τον έλεγχο της ακεραιότητας. Περαιτέρω πληροφορίες μπορείτε να βρείτε στην <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">τεκμηρίωσή</a> μας. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)",
+ "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιλύει το \"{url}\". Περισσότερες πληροφορίες μπορείτε να βρείτε στην <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">τεκμηρίωση</a>.",
+ "This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Αυτός ο διακομιστής δεν έχει καθόλου σύνδεση στο διαδίκτυο. Διάφορα τερματικά σημεία δεν είναι δυνατόν να προσπελαστούν. Αυτό σημαίνει ότι κάποιες λειτουργίες, όπως η προσάρτηση εξωτερικού αποθηκευτικού χώρου, οι ειδοποιήσεις σχετικά με ενημέρωση ή εγκατάσταση εφαρμογών τρίτων παρόχων δεν θα λειτουργήσουν. Όπως ενδέχεται να μη λειτουργήσουν επίσης η απομακρυσμένη πρόσβαση αρχείων ή ειδοποιήσεις μέσω ηλεκτρονικού ταχυδρομείου. Σας προτείνουμε να ενεργοποιήσετε την σύνδεση στο διαδίκτυο για τον συγκεκριμένο διακομιστή εάν θέλετε να έχετε όλες τις λειτουργίες.",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Δεν έχει ρυθμιστεί η χρήση λανθάνουσας μνήμης. Για να βελτιώσετε τις επιδόσεις παρακαλούμε να ρυθμίσετε το memcache, εφόσον είναι διαθέσιμο. Περισσότερες πληροφορίες μπορείτε να βρείτε στην <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\"> τεκμηρίωση</a>.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Η συσκευή /dev/urandom δεν είναι αναγνώσιμη από την PHP κάτι που θα έπρεπε να μπορεί για λόγους ασφάλειας. Περισσότερες πληροφορίες μπορείτε να βρείτε στην <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">τεκμηρίωση</a>.",
+ "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Έχετε εγκατεστημένη έκδοση PHP {version}. Σας ενθαρρύνουμε να αναβαθμίσετε την έκδοση της PHP το συντομότερο δυνατόν που η διανομή σας το υποστηρίξει ώστε να εκμεταλλευτείτε τις <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">επιδόσεις και τις ενημερώσεις ασφάλειας που παρέχονται από την ομάδα PHP </a>.",
+ "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Η διαμόρφωση των reverse proxy headers είναι εσφαλμένη, ή έχετε πρόσβαση στο Nextcloud από έναν αξιόπιστο διαμεσολαβητή. Εάν δεν έχετε πρόσβαση στο Nextcloud από έναν αξιόπιστο διαμεσολαβητή, αυτό είναι ένα ζήτημα ασφαλείας και μπορείτε να επιτρέψετε σε κάποιον εισβολέα να παρουσιάσει την διεύθυνση IP του παραπλανητικά ως ορατή στο Nextcloud. Περισσότερες πληροφορίες μπορείτε να βρείτε στην <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">τεκμηρίωση</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Το Memcached είναι ρυθμισμένο ως κατανεμημένη λανθάνουσα μνήμη, αλλά είναι εγκατεστημένη το λάθος άρθρωμα \"memcache\" της PHP. Το \\OC\\Memcache\\Memcached υποστηρίζει μόνο τη \"memcached\" και όχι τη \"memcache\". Δείτε το <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki και για τα δύο αρθρώματα</a>.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Μερικά αρχεία δεν πέρασαν από τον έλεγχο της ακεραιότητας. Περισσότερες πληροφορίες για το πως να επιλύσετε πρόβλημα μπορείτε να βρείτε στην <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">τεκμηρίωση</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Λίστα από μή έγκυρα αρχεία…</a> / <a href=\"{rescanEndpoint}\">Σάρωση ξανά…</a>)",
+ "The PHP Opcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend ↗</a> to use following settings in the <code>php.ini</code>:" : "Η PHP Opcache δεν είναι ρυθμισμένη σωστά. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\"Για καλύτερη απόδοση σας συνιστούμε ↗</a> να χρησιμοποιήσετε τις ακόλουθες ρυθμίσεις στο αρχείο <code>php.ini</code>:",
+ "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "Μη διαθέσιμη η λειτουργία της PHP \"set_time_limit\". Αυτό μπορεί να διακόψει την εκτέλεση των διαφόρων scripts με αποτέλεσμα να διακοπεί η εγκατάστασή σας. Σας συνιστούμε να ενεργοποιήσετε αυτή τη λειτουργία.",
"Error occurred while checking server setup" : "Παρουσιάστηκε σφάλμα κατά τον έλεγχο των ρυθμίσεων του διακομιστή σας",
- "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανόν διαθέσιμα στο διαδίκτυο. Το αρχείο .htaccess δεν λειτουργεί. Σας προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας με τέτοιο τρόπο ώστε ο κατάλογος δεδομένων να μην είναι πλέον προσβάσιμος ή να μετακινήσετε τον κατάλογο δεδομένων εκτός του ριζικού καταλόγου του διακομιστή document root.",
- "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "H \"{header}\" κεφαλίδα HTTP δεν έχει ρυθμιστεί ώστε να ισούται με \"{expected}\". Αυτό αποτελεί ενδεχόμενο κίνδυνο ασφάλειας ή ιδιωτικότητας και συστήνουμε τη διόρθωση αυτής της ρύθμισης.",
- "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Η «Strict-Transport-Security\" κεφαλίδα HTTP δεν έχει ρυθμιστεί για τουλάχιστον \"{seconds}\" δευτερόλεπτα. Για αυξημένη ασφάλεια συστήνουμε την ενεργοποίηση του HSTS όπως περιγράφεται στις <a href=\"{docUrl}\" rel=\"noreferrer\">προτάσεις ασφαλείας</a> μας.",
- "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Έχετε πρόσβαση σε αυτό τον ιστότοπο μέσω HTTP. Προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας ώστε να απαιτεί τη χρήση HTTPS όπως περιγράφεται στις <a href=\"{docUrl}\">προτάσεις ασφαλείας</a> μας.",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανόν προσβάσιμα από το διαδίκτυο. Το αρχείο .htaccess δεν λειτουργεί. Σας προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας με τέτοιο τρόπο ώστε ο κατάλογος δεδομένων να μην είναι πλέον προσβάσιμος ή να μετακινήσετε τον κατάλογο δεδομένων εκτός του ριζικού καταλόγου εγγράφων του διακομιστή.",
+ "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "H \"{header}\" κεφαλίδα HTTP δεν έχει ρυθμιστεί ώστε να ισούται με \"{expected}\". Αυτό αποτελεί ενδεχόμενο κίνδυνο ασφάλειας ή ιδιωτικότητας και συστήνουμε τη προσαρμογή αυτής της ρύθμισης.",
+ "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Η \"Strict-Transport-Security\" κεφαλίδα HTTP δεν έχει ρυθμιστεί για τουλάχιστον \"{seconds}\" δευτερόλεπτα. Για αυξημένη ασφάλεια συστήνουμε την ενεργοποίηση του HSTS όπως περιγράφεται στις <a href=\"{docUrl}\" rel=\"noreferrer\">συμβουλές ασφαλείας</a>.",
+ "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Έχετε πρόσβαση σε αυτό τον ιστότοπο μέσω HTTP. Προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας ώστε να απαιτεί τη χρήση HTTPS όπως περιγράφεται στις <a href=\"{docUrl}\">συμβουλές ασφαλείας</a>.",
"Shared" : "Κοινόχρηστα",
"Shared with {recipients}" : "Διαμοιράστηκε με {recipients}",
"Error" : "Σφάλμα",
"Error while sharing" : "Σφάλμα κατά τον διαμοιρασμό",
- "Error while unsharing" : "Σφάλμα κατά το σταμάτημα του διαμοιρασμού",
- "Error setting expiration date" : "Σφάλμα κατά τον ορισμό ημ. λήξης",
- "The public link will expire no later than {days} days after it is created" : "Ο δημόσιος σύνδεσμος θα απενεργοποιηθεί το πολύ {days} ημέρες μετά την δημιουργία του",
- "Set expiration date" : "Ορισμός ημ. λήξης",
+ "Error while unsharing" : "Σφάλμα κατά την αναίρεση του διαμοιρασμού",
+ "Error setting expiration date" : "Σφάλμα κατά τον ορισμό ημερομηνίας λήξης",
+ "The public link will expire no later than {days} days after it is created" : "Ο δημόσιος σύνδεσμος θα απενεργοποιηθεί το πολύ σε {days} ημέρες μετά την δημιουργία του",
+ "Set expiration date" : "Ορισμός ημερομηνίας λήξης",
"Expiration" : "Λήξη",
"Expiration date" : "Ημερομηνία λήξης",
- "Choose a password for the public link" : "Επιλέξτε κωδικό για τον δημόσιο σύνδεσμο",
+ "Choose a password for the public link" : "Επιλέξτε συνθηματικό για τον δημόσιο σύνδεσμο",
+ "Choose a password for the public link or press enter" : "Επιλέξτε συνθηματικό για τον δημόσιο σύνδεσμο ή πατήστε enter",
"Copied!" : "Αντιγράφτηκε!",
"Copy" : "Αντιγραφή",
"Not supported!" : "Δεν υποστηρίζεται!",
"Press ⌘-C to copy." : "Για αντιγραφή πατήστε ⌘-C.",
"Press Ctrl-C to copy." : "Για αντιγραφή πατήστε Ctrl-C.",
- "Resharing is not allowed" : "Ξαναμοιρασμός δεν επιτρέπεται",
+ "Resharing is not allowed" : "Δεν επιτρέπεται να διαμοιραστεί ξανά",
+ "Share to {name}" : "Διαμοιρασμός με {name}",
"Share link" : "Διαμοιρασμός συνδέσμου",
"Link" : "Σύνδεσμος",
"Password protect" : "Προστασία συνθηματικού",
+ "Allow upload and editing" : "Επιτρέπονται η μεταφόρτωση και η επεξεργασία",
"Allow editing" : "Επιτρέπεται η επεξεργασία",
- "Email link to person" : "Αποστολή συνδέσμου με email ",
+ "upload only" : "μόνο μεταφόρτωση",
+ "Email link to person" : "Αποστολή συνδέσμου με email",
"Send" : "Αποστολή",
"Shared with you and the group {group} by {owner}" : "Διαμοιράστηκε με σας και με την ομάδα {group} του {owner}",
"Shared with you by {owner}" : "Διαμοιράστηκε με σας από τον {owner}",
+ "Choose a password for the mail share" : "Επιλογή συνθηματικού για διαμοιρασμό με αλληλογραφία",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} διαμοιράστηκε με σύνδεσμο",
"group" : "ομάδα",
"remote" : "απομακρυσμένα",
"email" : "ηλεκτρονικό ταχυδρομείο",
- "Unshare" : "Διακοπή διαμοιρασμού",
+ "shared by {sharer}" : "διαμοιράστηκε από {sharer}",
+ "Unshare" : "Αναίρεση διαμοιρασμού",
+ "Can reshare" : "Δυνατότητα να διαμοιραστεί ξανά",
+ "Can edit" : "Δυνατότητα επεξεργασίας",
+ "Can create" : "Δυνατότητα δημιουργίας",
+ "Can change" : "Δυνατότητα αλλαγής",
+ "Can delete" : "Δυνατότητα διαγραφής",
+ "Secure drop (upload only)" : "Ασφαλής απόθεση (μόνο μεταφόρτωση)",
+ "Access control" : "Έλεγχος πρόσβασης",
"Could not unshare" : "Δεν μπορεί να γίνει αναίρεση διαμοιρασμού",
"Share details could not be loaded for this item." : "Αδυναμία φόρτωσης λεπτομερειών διαμοιρασμού για αυτό το αντικείμενο.",
+ "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Απαιτείται τουλάχιστο {count} χαρακτήρας για αυτόματη συμπλήρωση","Απαιτούνται τουλάχιστο {count} χαρακτήρες για αυτόματη συμπλήρωση"],
+ "This list is maybe truncated - please refine your search term to see more results." : "Αυτή η λίστα είναι ίσως περικοπεί - παρακαλούμε βελτιώσετε τους όρους αναζήτησης για περισσότερα αποτελέσματα.",
+ "No users or groups found for {search}" : "Δεν βρέθηκαν χρήστες ή ομάδες για την αναζήτηση {search}",
"No users found for {search}" : "Δεν βρέθηκαν χρήστες για την αναζήτηση {search}",
"An error occurred. Please try again" : "Παρουσιάστηκε σφάλμα. Παρακαλώ δοκιμάστε αργότερα",
"{sharee} (group)" : "{sharee} (ομάδα)",
+ "{sharee} (remote)" : "{sharee} (απομακρυσμένα)",
+ "{sharee} (email)" : "{sharee} (email)",
+ "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
"Share" : "Διαμοιρασμός",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Διαμοιρασμός με άτομα σε άλλους διακομιστές με χρήση της ταυτότητας Federated Cloud username@example.com/nextcloud",
+ "Share with users or by mail..." : "Διαμοιρασμός με χρήστες ή με mail...",
+ "Share with users or remote users..." : "Διαμοιρασμός με χρήστες ή απομακρυσμένους χρήστες...",
+ "Share with users, remote users or by mail..." : "Διαμοιρασμός με χρήστες, απομακρυσμένους χρήστες ή με mail...",
+ "Share with users or groups..." : "Διαμοιρασμός με χρήστες ή ομάδες...",
+ "Share with users, groups or by mail..." : "Διαμοιρασμός με χρήστες, ομάδες ή με mail...",
+ "Share with users, groups or remote users..." : "Διαμοιρασμός με χρήστες, ομάδες ή απομακρυσμένους χρήστες...",
+ "Share with users, groups, remote users or by mail..." : "Διαμοιρασμός με χρήστες, ομάδες, απομακρυσμένους χρήστες ή με mail...",
+ "Share with users..." : "Διαμοιρασμός με χρήστες...",
"Error removing share" : "Σφάλμα αφαίρεσης κοινόχρηστου",
+ "Non-existing tag #{tag}" : "Μη υπάρχουσα ετικέτα #{tag}",
+ "restricted" : "περιορισμένο",
+ "invisible" : "αόρατο",
"({scope})" : "({scope})",
"Delete" : "Διαγραφή",
"Rename" : "Μετονομασία",
+ "Collaborative tags" : "Συνεργατική ετικέτα",
+ "No tags found" : "Δεν βρέθηκαν ετικέτες",
"The object type is not specified." : "Δεν καθορίστηκε ο τύπος του αντικειμένου.",
"Enter new" : "Εισαγωγή νέου",
"Add" : "Προσθήκη",
"Edit tags" : "Επεξεργασία ετικετών",
- "Error loading dialog template: {error}" : "Σφάλμα φόρτωσης προτύπου διαλόγων: {σφάλμα}",
- "No tags selected for deletion." : "Καμμία ετικέτα δεν επιλέχθηκε για διαγραφή.",
+ "Error loading dialog template: {error}" : "Σφάλμα φόρτωσης προτύπου διαλόγων: {error}",
+ "No tags selected for deletion." : "Δεν επιλέχτηκε καμμία ετικέτα για διαγραφή.",
"unknown text" : "άγνωστο κείμενο",
"Hello world!" : "Γεια σου κόσμε!",
"sunny" : "ηλιόλουστη",
- "Hello {name}, the weather is {weather}" : "Γειά σου {name}, ο καιρός είναι {weather}",
+ "Hello {name}, the weather is {weather}" : "Γεια σου {name}, ο καιρός είναι {weather}",
"Hello {name}" : "Γεια σου {name}",
+ "<strong>These are your search results<script>alert(1)</script></strong>" : "<strong>Αυτά είναι τα αποτελέσματα της αναζήτησής σας<script>ειδοποίηση(1)</script></strong>",
"new" : "νέο",
"_download %n file_::_download %n files_" : ["λήψη %n αρχείου","λήψη %n αρχείων"],
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "Η ενημέρωση είναι σε εξέλιξη, αποχωρώντας από αυτή τη σελίδα μπορεί να διακοπεί τη διαδικασία σε ορισμένα περιβάλλοντα.",
"Update to {version}" : "Ενημέρωση στην έκδοση {version}",
- "An error occurred." : "Παρουσιάστηκε σφάλμα",
- "Please reload the page." : "Παρακαλώ επαναφορτώστε τη σελίδα.",
+ "An error occurred." : "Παρουσιάστηκε σφάλμα.",
+ "Please reload the page." : "Παρακαλούμε φορτώστε ξανά τη σελίδα.",
+ "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Μη επιτυχημένη ενημέρωση. Για περισσότερες πληροφορίες <a href=\"{url}\">δείτε αυτή τη δημοσίευση στο forum</a> που καλύπτει αυτό το θέμα.",
+ "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Μη επιτυχημένη ενημέρωση. Παρακαλούμε αναφέρετε αυτό το πρόβλημα στην <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">κοινότητα Nextcloud</a>.",
"Continue to Nextcloud" : "Συνέχεια στον Nextcloud",
+ "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["Επιτυχημένη ενημέρωση. Θα γίνει ανακατεύθυνση στο Nextcloud σε %n δευτερόλεπτο.","Επιτυχημένη ενημέρωση. Θα γίνει ανακατεύθυνση στο Nextcloud σε %n δευτερόλεπτα."],
"Searching other places" : "Έρευνα σε άλλα σημεία.",
+ "No search results in other folders for {tag}{filter}{endtag}" : "Κανένα αποτέλεσμα αναζήτησης σε άλλους φακέλους για {tag}{filter}{endtag}",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} αποτέλεσμα αναζήτησης σε άλλο φάκελο","{count} αποτελέσματα αναζήτησης σε άλλους φακέλους"],
"Personal" : "Προσωπικά",
"Users" : "Χρήστες",
"Apps" : "Εφαρμογές",
- "Admin" : "Διαχείριση",
+ "Admin" : "Διαχειριστής",
"Help" : "Βοήθεια",
- "Access forbidden" : "Δεν επιτρέπεται η πρόσβαση",
+ "Access forbidden" : "Απαγορεύεται η πρόσβαση",
"File not found" : "Το αρχείο δεν βρέθηκε",
"The specified document has not been found on the server." : "Το συγκεκριμένο έγγραφο δεν έχει βρεθεί στο διακομιστή.",
"You can click here to return to %s." : "Μπορείτε να κάνετε κλικ εδώ για να επιστρέψετε στο %s.",
"Internal Server Error" : "Εσωτερικό Σφάλμα Διακομιστή",
"The server encountered an internal error and was unable to complete your request." : "Ο διακομιστής αντιμετώπισε ένα εσωτερικό σφάλμα και δεν μπόρεσε να ολοκληρώσει το αίτημά σας.",
- "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Παρακαλώ επικοινωνήστε με το διαχειριστή του διακομιστή, εάν αυτό το σφάλμα επανεμφανίζεται πολλές φορές, παρακαλούμε να συμπεριλάβετε τις τεχνικές λεπτομέρειες παρακάτω στην αναφορά σας.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Παρακαλούμε επικοινωνήστε με το διαχειριστή του διακομιστή, εάν αυτό το σφάλμα επανεμφανίζεται πολλές φορές, παρακαλούμε να συμπεριλάβετε τις τεχνικές λεπτομέρειες παρακάτω στην αναφορά σας.",
"More details can be found in the server log." : "Περισσότερες λεπτομέρειες μπορείτε να βρείτε στο αρχείο καταγραφής του διακομιστή.",
"Technical details" : "Τεχνικές λεπτομέρειες",
- "Remote Address: %s" : "Απομακρυσμένη Διεύθυνση: %s",
- "Request ID: %s" : "Αίτημα ID: %s",
+ "Remote Address: %s" : "Απομακρυσμένη διεύθυνση: %s",
+ "Request ID: %s" : "Ταυτότητα αιτήματος: %s",
"Type: %s" : "Τύπος: %s",
"Code: %s" : "Κωδικός: %s",
"Message: %s" : "Μήνυμα: %s",
"File: %s" : "Αρχείο: %s",
"Line: %s" : "Γραμμή: %s",
"Trace" : "Ανίχνευση",
- "Security warning" : "Προειδοποίηση Ασφαλείας",
- "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανό προσβάσιμα από το internet γιατί δεν δουλεύει το αρχείο .htaccess.",
+ "Security warning" : "Προειδοποίηση ασφαλείας",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανό προσβάσιμα από το διαδίκτυο διότι δεν δουλεύει το αρχείο .htaccess.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Για πληροφορίες πως μπορείτε να ρυθμίσετε σωστά τον διακομιστή, παρακαλούμε δείτε την <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">τεκμηρίωση</a>.",
"Create an <strong>admin account</strong>" : "Δημιουργήστε έναν <strong>λογαριασμό διαχειριστή</strong>",
"Username" : "Όνομα χρήστη",
- "Storage & database" : "Αποθήκευση & βάση δεδομένων",
+ "Storage & database" : "Αποθηκευτικός χώρος & βάση δεδομένων",
"Data folder" : "Φάκελος δεδομένων",
"Configure the database" : "Ρύθμιση της βάσης δεδομένων",
"Only %s is available." : "Μόνο %s είναι διαθέσιμο.",
"Install and activate additional PHP modules to choose other database types." : "Εγκαταστήστε και ενεργοποιείστε επιπλέον αρθρώματα PHP για να επιλέξετε άλλους τύπους βάσεων δεδομένων.",
"For more details check out the documentation." : "Για περισσότερες πληροφορίες ανατρέξτε στην τεκμηρίωση.",
- "Database user" : "Χρήστης της βάσης δεδομένων",
+ "Database user" : "Χρήστης βάσης δεδομένων",
"Database password" : "Συνθηματικό βάσης δεδομένων",
"Database name" : "Όνομα βάσης δεδομένων",
- "Database tablespace" : "Κενά Πινάκων Βάσης Δεδομένων",
+ "Database tablespace" : "Κενά πινάκων βάσης δεδομένων",
"Database host" : "Διακομιστής βάσης δεδομένων",
- "Please specify the port number along with the host name (e.g., localhost:5432)." : "Παρακαλώ καθορίστε τον αριθμό της πόρτας μαζί με το όνομα κεντρικού υπολογιστή (πχ localhost: 5432).",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Παρακαλώ καθορίστε τον αριθμό της θύρας μαζί με το όνομα κεντρικού υπολογιστή (πχ localhost: 5432).",
"Performance warning" : "Προειδοποίηση απόδοσης",
"SQLite will be used as database." : "Η SQLite θα χρησιμοποιηθεί ως βάση δεδομένων.",
"For larger installations we recommend to choose a different database backend." : "Για μεγαλύτερες εγκαταστάσεις συνιστούμε να επιλέξετε διαφορετικό σύστημα υποστήριξης βάσης δεδομένων.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Ειδικά όταν χρησιμοποιείτε τον πελάτη για συγχρονισμό στον υπολογιστή σας, δεν συνίσταται η χρήση της SQLite.",
- "Finish setup" : "Ολοκλήρωση εγκατάστασης",
+ "Finish setup" : "Ολοκλήρωση ρύθμισης",
"Finishing …" : "Ολοκλήρωση...",
"Need help?" : "Θέλετε βοήθεια;",
"See the documentation" : "Δείτε την τεκμηρίωση",
- "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Αυτή η εφαρμογή απαιτεί JavaScript για σωστή λειτουργία. Παρακαλώ {linkstart} ενεργοποιήστε τη JavaScrip {linkend} και επαναφορτώστε τη σελίδα.",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Αυτή η εφαρμογή απαιτεί JavaScript για σωστή λειτουργία. Παρακαλώ {linkstart}ενεργοποιήστε τη JavaScrip{linkend} και φορτώστε ξανά τη σελίδα.",
+ "More apps" : "Περισσότερες εφαρμογές",
"Search" : "Αναζήτηση",
- "Server side authentication failed!" : "Η διαδικασία επικύρωσης απέτυχε από την πλευρά του διακομιστή!",
- "Please contact your administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή.",
+ "This action requires you to confirm your password:" : "Αυτή η ενέργεια απαιτεί επιβεβαίωση του συνθηματικού σας:",
+ "Confirm your password" : "Επιβεβαίωση συνθηματικού",
+ "Server side authentication failed!" : "Αποτυχημένη πιστοποίηση από την πλευράς διακομιστή!",
+ "Please contact your administrator." : "Παρακαλούμε επικοινωνήστε με τον διαχειριστή.",
"An internal error occurred." : "Παρουσιάστηκε ένα εσωτερικό σφάλμα.",
- "Please try again or contact your administrator." : "Παρακαλώ δοκιμάστε ξανά ή επικοινωνήστε με τον διαχειριστή σας.",
+ "Please try again or contact your administrator." : "Παρακαλούμε δοκιμάστε ξανά ή επικοινωνήστε με τον διαχειριστή.",
"Username or email" : "Όνομα χρήστη ή email",
- "Wrong password. Reset it?" : "Λάθος Κωδικός. Επαναφορά;",
- "Wrong password." : "Λανθασμένο συνθηματικό.",
+ "Wrong password. Reset it?" : "Λάθος συνθηματικο. Επαναφορά;",
+ "Wrong password." : "Λάθος συνθηματικό.",
"Log in" : "Είσοδος",
"Stay logged in" : "Μείνετε συνδεδεμένος",
- "Alternative Logins" : "Εναλλακτικές Συνδέσεις",
- "Use the following link to reset your password: {link}" : "Χρησιμοποιήστε τον ακόλουθο σύνδεσμο για να επανεκδόσετε τον κωδικό: {link}",
+ "Alternative Logins" : "Εναλλακτικές συνδέσεις",
"New password" : "Νέο συνθηματικό",
- "New Password" : "Νέος Κωδικός",
+ "New Password" : "Νέο συνθηματικό",
"Reset password" : "Επαναφορά συνθηματικού",
"This Nextcloud instance is currently in single user mode." : "Αυτή η εγκατάσταση Nextcloud είναι τώρα σε κατάσταση ενός χρήστη.",
"This means only administrators can use the instance." : "Αυτό σημαίνει ότι μόνο διαχειριστές μπορούν να χρησιμοποιήσουν την εγκατάσταση.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Επικοινωνήστε με το διαχειριστή του συστήματος αν αυτό το μήνυμα συνεχίζει να εμφανίζεται ή εμφανίστηκε απρόσμενα.",
"Thank you for your patience." : "Σας ευχαριστούμε για την υπομονή σας.",
"Log out" : "Αποσύνδεση",
- "Two-factor authentication" : "Πιστοποίηση σε 2 βήματα",
+ "Two-factor authentication" : "Πιστοποίηση με 2 παράγοντες",
"Enhanced security is enabled for your account. Please authenticate using a second factor." : "Έχει ενεργοποιηθεί βελτιωμένη ασφάλεια για τον λογαριασμό σας. Παρακαλώ πιστοποιήστε με την χρήση δεύτερου παράγοντα",
"Cancel log in" : "Ακύρωση εισόδου",
+ "Use backup code" : "Χρήση εφεδρικών κωδικών",
+ "Error while validating your second factor" : "Σφάλμα κατά την επικύρωση του δεύτερου παράγοντα",
"You are accessing the server from an untrusted domain." : "Η προσπέλαση του διακομιστή γίνεται από μη έμπιστο τομέα.",
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Παρακαλώ επικοινωνήστε με το διαχειριστή του συστήματος. Αν είστε ο διαχειριστής, ρυθμίστε την επιλογή \"trusted_domain\" στο αρχείο config/config.php. Μπορείτε να βρείτε παράδειγμα στο αρχείο config/config.sample.php.",
- "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Ανάλογα με τις ρυθμίσεις σας, σαν διαχειριστής θα μπορούσατε επίσης να χρησιμοποιήσετε το παρακάτω κουμπί για να εμπιστευθείτε αυτή την περιοχή.",
- "Add \"%s\" as trusted domain" : "Προσθήκη \"%s\" ως αξιόπιστη περιοχή",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Ανάλογα με τις ρυθμίσεις σας, σαν διαχειριστής θα μπορούσατε επίσης να χρησιμοποιήσετε το παρακάτω κουμπί για να εμπιστευθείτε αυτόν τον τομέα.",
+ "Add \"%s\" as trusted domain" : "Προσθήκη \"%s\" ως αξιόπιστου τομέα",
"App update required" : "Απαιτείται ενημέρωση εφαρμογής",
- "%s will be updated to version %s" : "%s θα αναβαθμιστεί σε έκδοση %s",
- "These apps will be updated:" : "Αυτές οι εφαρμογές θα αναβαθμιστούν:",
+ "%s will be updated to version %s" : "%s θα ενημερωθεί σε έκδοση %s",
+ "These apps will be updated:" : "Αυτές οι εφαρμογές θα ενημερωθούν:",
"These incompatible apps will be disabled:" : "Αυτές οι μη συμβατές εφαρμογές θα απενεργοποιηθούν:",
"The theme %s has been disabled." : "Το θέμα %s έχει απενεργοποιηθεί.",
- "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Παρακαλώ βεβαιωθείτε ότι έχουν ληψθεί αντίγραφα ασφαλείας της βάσης δεδομένων, του φακέλου ρυθμίσεων και του φακέλου δεδομένων πριν προχωρήσετε.",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Παρακαλούμε βεβαιωθείτε ότι έχουν ληφθεί αντίγραφα ασφαλείας της βάσης δεδομένων, του φακέλου ρυθμίσεων και του φακέλου δεδομένων πριν προχωρήσετε.",
"Start update" : "Έναρξη ενημέρωσης",
- "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Για να αποφύγετε τη λήξη χρόνου με μεγαλύτερες εγκαταστάσεις, μπορείτε αντί αυτού να τρέξετε την ακόλουθη εντολή από τον κατάλογο αρχείων εφαρμογών:",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Για να αποφύγετε τη λήξη χρόνου με μεγαλύτερες εγκαταστάσεις, μπορείτε αντί αυτού να εκτελέσετε την ακόλουθη εντολή στον κατάλογο εγκατάστασης:",
"Detailed logs" : "Λεπτομερές ιστορικό",
"Update needed" : "Απαιτείται ενημέρωση",
+ "Please use the command line updater because you have a big instance." : "Παρακαλούμε χρησιμοποιήστε την ενημέρωση μέσω γραμμής εντολών διότι έχετε μεγάλη εγκατάσταση.",
"For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Για βοήθεια, δείτε στην <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">τεκμηρίωση</a>.",
- "This %s instance is currently in maintenance mode, which may take a while." : "Αυτή %s η εγκατάσταση είναι σε λειτουργία συντήρησης, η οποία μπορεί να πάρει κάποιο χρόνο.",
+ "This %s instance is currently in maintenance mode, which may take a while." : "Αυτή %s η εγκατάσταση είναι σε λειτουργία συντήρησης, η οποία μπορεί να διαρκέσει κάποιο χρόνο.",
"This page will refresh itself when the %s instance is available again." : "Αυτή η σελίδα θα ανανεωθεί από μόνη της όταν η %s εγκατάσταση είναι διαθέσιμη ξανά.",
- "Problem loading page, reloading in 5 seconds" : "Πρόβλημα φόρτωσης σελίδας, επαναφόρτωση σε 5 λεπτά",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Εάν δεν έχετε ενεργοποιήσει το κλειδί επαναφοράς, δεν θα υπάρχει τρόπος να ανακτήσετε τα δεδομένα σας μετά την επαναφορά του κωδικού πρόσβασής σας.<br />Εάν δεν είστε σίγουροι για το τι θα θέλατε να κάνετε, παρακαλώ επικοινωνήστε με το διαχειριστή σας πριν συνεχίσετε. <br />Θέλετε στ' αλήθεια να συνεχίσετε;",
+ "Problem loading page, reloading in 5 seconds" : "Πρόβλημα φόρτωσης σελίδας, φόρτωση ξανά σε 5 λεπτά",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Εάν δεν έχετε ενεργοποιήσει το κλειδί επαναφοράς, δεν θα υπάρχει τρόπος να ανακτήσετε τα δεδομένα σας μετά την επαναφορά του συνθηματικού σας.<br />Εάν δεν είστε σίγουροι για το τι θα θέλατε να κάνετε, παρακαλώ επικοινωνήστε με το διαχειριστή σας πριν συνεχίσετε. <br />Θέλετε να συνεχίσετε;",
+ "File drop (upload only)" : "Απόθεση αρχείου (μόνο μεταφόρτωση)",
+ "can reshare" : "δυνατότητα να διαμοιραστεί ξανά",
"can edit" : "δυνατότητα αλλαγής",
+ "can create" : "δυνατότητα δημιουργίας",
+ "can change" : "δυνατότητα αλλαγής",
+ "can delete" : "δυνατότητα διαγραφής",
"access control" : "έλεγχος πρόσβασης",
- "The update was successful. Redirecting you to Nextcloud now." : "Η ενημέρωση ήταν επιτυχής. Ανακατεύθυνση στο Nextcloud.",
- "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Γειά χαρά,\n\nαπλά σας ενημερώνω πως ο %s μοιράστηκε το %s με εσάς.\nΔείτε το: %s\n\n",
+ "The update was successful. Redirecting you to Nextcloud now." : "Η ενημέρωση ήταν επιτυχής. Θα γίνει ανακατεύθυνση στο Nextcloud.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Γεια χαρά,\n\nαπλά σας ενημερώνω πως ο %s μοιράστηκε το %s με εσάς.\nΔείτε το: %s\n\n",
"The share will expire on %s." : "Ο διαμοιρασμός θα λήξει σε %s.",
- "Cheers!" : "Χαιρετισμούς!",
- "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Γειά χαρά,<br><br>απλά σας ενημερώνω πως ο %s μοιράστηκε το<strong>%s</strong> με εσάς.<br><a href=\"%s\">Δείτε το!</a><br><br>"
+ "Cheers!" : "Με εκτίμηση!",
+ "Use the following link to reset your password: {link}" : "Χρησιμοποιήστε τον ακόλουθο σύνδεσμο για να επαναφέρετε το συνθηματικό: {link}",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Γεια χαρά,<br><br>απλά σας ενημερώνω πως ο %s μοιράστηκε το<strong>%s</strong> με εσάς.<br><a href=\"%s\">Δείτε το!</a><br><br>"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/el.json b/core/l10n/el.json
index 6ba0e553f39..5363c5e576d 100644
--- a/core/l10n/el.json
+++ b/core/l10n/el.json
@@ -7,22 +7,22 @@
"No image or file provided" : "Δεν δόθηκε εικόνα ή αρχείο",
"Unknown filetype" : "Άγνωστος τύπος αρχείου",
"Invalid image" : "Μη έγκυρη εικόνα",
- "An error occurred. Please contact your admin." : "Προέκυψε σφάλμα. Παρακαλώ επικοινωνήστε με τον διαχειριστή σας.",
+ "An error occurred. Please contact your admin." : "Προέκυψε σφάλμα. Παρακαλώ επικοινωνήστε με τον διαχειριστή.",
"No temporary profile picture available, try again" : "Δεν υπάρχει προσωρινή φωτογραφία προφίλ, δοκιμάστε ξανά",
"No crop data provided" : "Δεν δόθηκαν δεδομένα περικοπής",
"No valid crop data provided" : "Έχουν δοθεί μη έγκυρα δεδομένα περικοπής",
"Crop is not square" : "Η περικοπή δεν εχει τετραγωνικό σχήμα",
"Couldn't reset password because the token is invalid" : "Αδυναμία επαναφοράς συνθηματικού λόγω μη έγκυρου διακριτικού",
"Couldn't reset password because the token is expired" : "Αδυναμία επαναφοράς συνθηματικού επειδή το διακριτικό έχει λήξει",
- "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς γιατί δεν υπάρχει διεύθυνση ηλ. αλληλογραφίας για αυτόν τον χρήστη. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Αδυναμία αποστολής ηλεκτρονικού μηνύματος επαναφοράς διότι δεν υπάρχει διεύθυνση ηλεκτρινικής αλληλογραφίας για αυτόν τον χρήστη. Παρακαλώ επικοινωνήστε με το διαχειριστή.",
"%s password reset" : "%s επαναφορά συνθηματικού",
- "Couldn't send reset email. Please contact your administrator." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
- "Couldn't send reset email. Please make sure your username is correct." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς. Παρακαλώ ελέγξτε ότι το όνομα χρήστη σας είναι ορθό.",
+ "Couldn't send reset email. Please contact your administrator." : "Αδυναμία αποστολής ηλεκτρονικού μηνύματος επαναφοράς. Παρακαλώ επικοινωνήστε με το διαχειριστή.",
+ "Couldn't send reset email. Please make sure your username is correct." : "Αδυναμία αποστολής ηλεκτρονικού μηνύματος επαναφοράς. Παρακαλώ ελέγξτε ότι το όνομα χρήστη σας είναι σωστό.",
"Preparing update" : "Προετοιμασία ενημέρωσης",
"[%d / %d]: %s" : "[%d / %d]: %s",
"Repair warning: " : "Προειδοποίηση διόρθωσης:",
"Repair error: " : "Σφάλμα διόρθωσης:",
- "Please use the command line updater because automatic updating is disabled in the config.php." : "Παρακαλώ αναβαθμίστε μέσω γραμμής εντολών διότι η αυτόματη ενημέρωση έχει απενεργοποιηθεί στο αρχείο config.php.",
+ "Please use the command line updater because automatic updating is disabled in the config.php." : "Παρακαλώ ενημερώστε μέσω γραμμής εντολών διότι η αυτόματη ενημέρωση έχει απενεργοποιηθεί στο αρχείο config.php.",
"[%d / %d]: Checking table %s" : "[%d / %d]: Έλεγχος πίνακα %s",
"Turned on maintenance mode" : "Η λειτουργία συντήρησης ενεργοποιήθηκε",
"Turned off maintenance mode" : "Η λειτουργία συντήρησης απενεργοποιήθηκε",
@@ -57,10 +57,10 @@
"Failed to authenticate, try again" : "Αποτυχία πιστοποίησης, δοκιμάστε πάλι",
"seconds ago" : "δευτερόλεπτα πριν",
"Logging in …" : "Σύνδεση ...",
- "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Ο σύνδεσμος για την επαναφορά του συνθηματικού σας απεστάλη στο ηλ. ταχυδρομείο σας. Εάν δεν το παραλάβετε μέσα σε ένα εύλογο χρονικό διάστημα, ελέγξτε το φάκελο ανεπιθύμητων μηνυμάτων σας. <br> Εάν δεν βρίσκεται εκεί ρωτήστε τον διαχειριστή σας.",
- "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Δεν θα υπάρξει κανένας τρόπος για να πάρετε τα δεδομένα σας πίσω μετά την επαναφορά του συνθηματικού σας. <br /> Αν δεν είστε σίγουροι για το τι πρέπει να κάνετε, επικοινωνήστε με το διαχειριστή σας, πριν να συνεχίσετε. <br /> Θέλετε πραγματικά να συνεχίσετε;",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Ο σύνδεσμος για την επαναφορά του συνθηματικού σας απεστάλη με ηλεκτρονικό ταχυδρομείο. Εάν δεν το παραλάβετε μέσα σε ένα εύλογο χρονικό διάστημα, ελέγξτε το φάκελο ανεπιθύμητων μηνυμάτων σας. <br> Εάν δεν βρίσκεται εκεί ρωτήστε τον διαχειριστή.",
+ "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Δεν θα υπάρξει κανένας τρόπος για να έχετε πρόσβαση στα δεδομένα σας μετά την επαναφορά του συνθηματικού σας. <br /> Αν δεν είστε σίγουροι για το τι πρέπει να κάνετε, επικοινωνήστε με το διαχειριστή, πριν να συνεχίσετε. <br /> Θέλετε να συνεχίσετε;",
"I know what I'm doing" : "Γνωρίζω τι κάνω",
- "Password can not be changed. Please contact your administrator." : "Το συνθηματικό σας δεν μπορεί να αλλάξει. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
+ "Password can not be changed. Please contact your administrator." : "Το συνθηματικό σας δεν μπορεί να αλλάξει. Παρακαλώ επικοινωνήστε με το διαχειριστή.",
"No" : "Όχι",
"Yes" : "Ναι",
"No files in here" : "Δεν υπάρχουν αρχεία",
@@ -74,7 +74,7 @@
"New Files" : "Νέα αρχεία",
"Already existing files" : "Ήδη υπάρχοντα αρχεία",
"Which files do you want to keep?" : "Ποια αρχεία θέλετε να κρατήσετε;",
- "If you select both versions, the copied file will have a number added to its name." : "Εάν επιλέξετε και τις δυο εκδοχές, ένας αριθμός θα προστεθεί στο αντιγραφόμενο αρχείο.",
+ "If you select both versions, the copied file will have a number added to its name." : "Εάν επιλέξετε και τις δυο εκδοχές, ένας αριθμός θα προστεθεί στο αρχείο που αντιγράφεται.",
"Continue" : "Συνέχεια",
"(all selected)" : "(όλα τα επιλεγμένα)",
"({count} selected)" : "({count} επιλέχθηκαν)",
@@ -86,172 +86,226 @@
"Good password" : "Καλό συνθηματικό",
"Strong password" : "Δυνατό συνθηματικό",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιτρέπει τον συγχρονισμό αρχείων διότι η διεπαφή WebDAV πιθανόν να μην λειτουργεί.",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιλύει το \"{url}\". Περαιτέρω πληροφορίες μπορούν να βρεθούν στην <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">τεκμηρίωση</a>.",
- "This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Αυτός ο διακομιστής δεν έχει καθόλου σύνδεση στο διαδίκτυο. Διάφορα τερματικά σημεία δεν είναι δυνατόν να προσπελαστούν.Αυτό σημαίνει ότι κάποια χαρακτηριστικά, όπως η τοποθέτηση εξωτερικού εξοπλισμού ,ειδοποιήσεις σχετικά με αναβάθμιση διαφόρων ενημερώσεων ή εγκατάσταση εφαρμογών τρίτων δεν θα λειτουργήσουν.' Όπως ενδέχεται προσβάσιμα αρχεία εξ αποστάσεως ή ειδοποιήσεις ηλεκτρονικού ταχυδρομείου να μη λειτουργήσουν επίσης.Εμείς προτείνουμε να ενεργοποιήσετε την κατάλληλη δυνατή σύνδεση στο διαδίκτυο για τον συγκεκριμένο διακομιστή για να έχετε εφικτά όλα τα χαρακτηριστικά.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Δεν έχει ρυθμιστεί η χρήση λανθάνουσας μνήμης. Για να βελτιώσετε τις επιδόσεις παρακαλούμε να ρυθμίσετε κάποιο σύστημα memcache, εφόσον είναι διαθέσιμη. Περαιτέρω πληροφορίες μπορείτε να βρείτε στην <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\"> τεκμηρίωση</a> μας.",
- "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Η συσκευή /dev/urandom δεν μπορεί να αναγνωσθεί από την PHP κάτι που θα έπρεπε να μπορεί για λόγους ασφάλειας. Περαιτέρω πληροφορίες μπορείτε να βρείτε στην <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">τεκμηρίωσή</a> μας.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Έχετε εγκατεστημένη έκδοση PHP {version}}. Σας ενθαρρύνουμε να αναβαθμίσετε την έκδοση της PHP σας για να εκμεταλλευτείτε τις <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\"> επιδόσεις και τις ενημερώσεις ασφάλεια που παρέχονται από την ομάδα PHP </a> το συντομότερο δυνατόν με βάση την υποστήριξη της διανομής σας.",
- "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Η διαμόρφωση των reverse proxy headers είναι εσφαλμένη, ή \nέχετε πρόσβαση στο Nextcloud από έναν αξιόπιστο διαμεσολαβητή.Εάν δεν έχετε πρόσβαση στο Nextcloud από έναν αξιόπιστο διαμεσολαβητή,αυτό είναι ένα ζήτημα ασφαλείας και μπορείτε να επιτρέψετε σε κάποιον εισβολέα με παραπλάνηση να παρουσιάσει την διεύθυνση IP τους ως ορατή στο Nextcloud.Περαιτέρω πληροφορίες μπορείτε να βρείτε στο δικό μας <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\"> αξιόπιστο έγγραφο</a>.",
- "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Το Memcached είναι ρυθμισμένο ως κατανεμημένη λανθάνουσα μνήμη, αλλά είναι εγκατεστημένη η λάθος άρθρωμα \"memcache\" της PHP. Το \\OC\\Memcache\\Memcached υποστηρίζει μόνο τη \"memcached\" και όχι τη \"memcache\". Δείτε το <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki και για τα δύο αρθρώματα</a>.",
- "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Μερικά αρχεία δεν επικυρώθηκαν από τον έλεγχο της ακεραιότητας. Περαιτέρω πληροφορίες μπορείτε να βρείτε στην <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">τεκμηρίωσή</a> μας. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)",
+ "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιλύει το \"{url}\". Περισσότερες πληροφορίες μπορείτε να βρείτε στην <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">τεκμηρίωση</a>.",
+ "This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Αυτός ο διακομιστής δεν έχει καθόλου σύνδεση στο διαδίκτυο. Διάφορα τερματικά σημεία δεν είναι δυνατόν να προσπελαστούν. Αυτό σημαίνει ότι κάποιες λειτουργίες, όπως η προσάρτηση εξωτερικού αποθηκευτικού χώρου, οι ειδοποιήσεις σχετικά με ενημέρωση ή εγκατάσταση εφαρμογών τρίτων παρόχων δεν θα λειτουργήσουν. Όπως ενδέχεται να μη λειτουργήσουν επίσης η απομακρυσμένη πρόσβαση αρχείων ή ειδοποιήσεις μέσω ηλεκτρονικού ταχυδρομείου. Σας προτείνουμε να ενεργοποιήσετε την σύνδεση στο διαδίκτυο για τον συγκεκριμένο διακομιστή εάν θέλετε να έχετε όλες τις λειτουργίες.",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Δεν έχει ρυθμιστεί η χρήση λανθάνουσας μνήμης. Για να βελτιώσετε τις επιδόσεις παρακαλούμε να ρυθμίσετε το memcache, εφόσον είναι διαθέσιμο. Περισσότερες πληροφορίες μπορείτε να βρείτε στην <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\"> τεκμηρίωση</a>.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Η συσκευή /dev/urandom δεν είναι αναγνώσιμη από την PHP κάτι που θα έπρεπε να μπορεί για λόγους ασφάλειας. Περισσότερες πληροφορίες μπορείτε να βρείτε στην <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">τεκμηρίωση</a>.",
+ "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Έχετε εγκατεστημένη έκδοση PHP {version}. Σας ενθαρρύνουμε να αναβαθμίσετε την έκδοση της PHP το συντομότερο δυνατόν που η διανομή σας το υποστηρίξει ώστε να εκμεταλλευτείτε τις <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">επιδόσεις και τις ενημερώσεις ασφάλειας που παρέχονται από την ομάδα PHP </a>.",
+ "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Η διαμόρφωση των reverse proxy headers είναι εσφαλμένη, ή έχετε πρόσβαση στο Nextcloud από έναν αξιόπιστο διαμεσολαβητή. Εάν δεν έχετε πρόσβαση στο Nextcloud από έναν αξιόπιστο διαμεσολαβητή, αυτό είναι ένα ζήτημα ασφαλείας και μπορείτε να επιτρέψετε σε κάποιον εισβολέα να παρουσιάσει την διεύθυνση IP του παραπλανητικά ως ορατή στο Nextcloud. Περισσότερες πληροφορίες μπορείτε να βρείτε στην <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">τεκμηρίωση</a>.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Το Memcached είναι ρυθμισμένο ως κατανεμημένη λανθάνουσα μνήμη, αλλά είναι εγκατεστημένη το λάθος άρθρωμα \"memcache\" της PHP. Το \\OC\\Memcache\\Memcached υποστηρίζει μόνο τη \"memcached\" και όχι τη \"memcache\". Δείτε το <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki και για τα δύο αρθρώματα</a>.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Μερικά αρχεία δεν πέρασαν από τον έλεγχο της ακεραιότητας. Περισσότερες πληροφορίες για το πως να επιλύσετε πρόβλημα μπορείτε να βρείτε στην <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">τεκμηρίωση</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Λίστα από μή έγκυρα αρχεία…</a> / <a href=\"{rescanEndpoint}\">Σάρωση ξανά…</a>)",
+ "The PHP Opcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend ↗</a> to use following settings in the <code>php.ini</code>:" : "Η PHP Opcache δεν είναι ρυθμισμένη σωστά. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\"Για καλύτερη απόδοση σας συνιστούμε ↗</a> να χρησιμοποιήσετε τις ακόλουθες ρυθμίσεις στο αρχείο <code>php.ini</code>:",
+ "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "Μη διαθέσιμη η λειτουργία της PHP \"set_time_limit\". Αυτό μπορεί να διακόψει την εκτέλεση των διαφόρων scripts με αποτέλεσμα να διακοπεί η εγκατάστασή σας. Σας συνιστούμε να ενεργοποιήσετε αυτή τη λειτουργία.",
"Error occurred while checking server setup" : "Παρουσιάστηκε σφάλμα κατά τον έλεγχο των ρυθμίσεων του διακομιστή σας",
- "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανόν διαθέσιμα στο διαδίκτυο. Το αρχείο .htaccess δεν λειτουργεί. Σας προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας με τέτοιο τρόπο ώστε ο κατάλογος δεδομένων να μην είναι πλέον προσβάσιμος ή να μετακινήσετε τον κατάλογο δεδομένων εκτός του ριζικού καταλόγου του διακομιστή document root.",
- "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "H \"{header}\" κεφαλίδα HTTP δεν έχει ρυθμιστεί ώστε να ισούται με \"{expected}\". Αυτό αποτελεί ενδεχόμενο κίνδυνο ασφάλειας ή ιδιωτικότητας και συστήνουμε τη διόρθωση αυτής της ρύθμισης.",
- "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Η «Strict-Transport-Security\" κεφαλίδα HTTP δεν έχει ρυθμιστεί για τουλάχιστον \"{seconds}\" δευτερόλεπτα. Για αυξημένη ασφάλεια συστήνουμε την ενεργοποίηση του HSTS όπως περιγράφεται στις <a href=\"{docUrl}\" rel=\"noreferrer\">προτάσεις ασφαλείας</a> μας.",
- "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Έχετε πρόσβαση σε αυτό τον ιστότοπο μέσω HTTP. Προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας ώστε να απαιτεί τη χρήση HTTPS όπως περιγράφεται στις <a href=\"{docUrl}\">προτάσεις ασφαλείας</a> μας.",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανόν προσβάσιμα από το διαδίκτυο. Το αρχείο .htaccess δεν λειτουργεί. Σας προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας με τέτοιο τρόπο ώστε ο κατάλογος δεδομένων να μην είναι πλέον προσβάσιμος ή να μετακινήσετε τον κατάλογο δεδομένων εκτός του ριζικού καταλόγου εγγράφων του διακομιστή.",
+ "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "H \"{header}\" κεφαλίδα HTTP δεν έχει ρυθμιστεί ώστε να ισούται με \"{expected}\". Αυτό αποτελεί ενδεχόμενο κίνδυνο ασφάλειας ή ιδιωτικότητας και συστήνουμε τη προσαρμογή αυτής της ρύθμισης.",
+ "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "Η \"Strict-Transport-Security\" κεφαλίδα HTTP δεν έχει ρυθμιστεί για τουλάχιστον \"{seconds}\" δευτερόλεπτα. Για αυξημένη ασφάλεια συστήνουμε την ενεργοποίηση του HSTS όπως περιγράφεται στις <a href=\"{docUrl}\" rel=\"noreferrer\">συμβουλές ασφαλείας</a>.",
+ "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Έχετε πρόσβαση σε αυτό τον ιστότοπο μέσω HTTP. Προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας ώστε να απαιτεί τη χρήση HTTPS όπως περιγράφεται στις <a href=\"{docUrl}\">συμβουλές ασφαλείας</a>.",
"Shared" : "Κοινόχρηστα",
"Shared with {recipients}" : "Διαμοιράστηκε με {recipients}",
"Error" : "Σφάλμα",
"Error while sharing" : "Σφάλμα κατά τον διαμοιρασμό",
- "Error while unsharing" : "Σφάλμα κατά το σταμάτημα του διαμοιρασμού",
- "Error setting expiration date" : "Σφάλμα κατά τον ορισμό ημ. λήξης",
- "The public link will expire no later than {days} days after it is created" : "Ο δημόσιος σύνδεσμος θα απενεργοποιηθεί το πολύ {days} ημέρες μετά την δημιουργία του",
- "Set expiration date" : "Ορισμός ημ. λήξης",
+ "Error while unsharing" : "Σφάλμα κατά την αναίρεση του διαμοιρασμού",
+ "Error setting expiration date" : "Σφάλμα κατά τον ορισμό ημερομηνίας λήξης",
+ "The public link will expire no later than {days} days after it is created" : "Ο δημόσιος σύνδεσμος θα απενεργοποιηθεί το πολύ σε {days} ημέρες μετά την δημιουργία του",
+ "Set expiration date" : "Ορισμός ημερομηνίας λήξης",
"Expiration" : "Λήξη",
"Expiration date" : "Ημερομηνία λήξης",
- "Choose a password for the public link" : "Επιλέξτε κωδικό για τον δημόσιο σύνδεσμο",
+ "Choose a password for the public link" : "Επιλέξτε συνθηματικό για τον δημόσιο σύνδεσμο",
+ "Choose a password for the public link or press enter" : "Επιλέξτε συνθηματικό για τον δημόσιο σύνδεσμο ή πατήστε enter",
"Copied!" : "Αντιγράφτηκε!",
"Copy" : "Αντιγραφή",
"Not supported!" : "Δεν υποστηρίζεται!",
"Press ⌘-C to copy." : "Για αντιγραφή πατήστε ⌘-C.",
"Press Ctrl-C to copy." : "Για αντιγραφή πατήστε Ctrl-C.",
- "Resharing is not allowed" : "Ξαναμοιρασμός δεν επιτρέπεται",
+ "Resharing is not allowed" : "Δεν επιτρέπεται να διαμοιραστεί ξανά",
+ "Share to {name}" : "Διαμοιρασμός με {name}",
"Share link" : "Διαμοιρασμός συνδέσμου",
"Link" : "Σύνδεσμος",
"Password protect" : "Προστασία συνθηματικού",
+ "Allow upload and editing" : "Επιτρέπονται η μεταφόρτωση και η επεξεργασία",
"Allow editing" : "Επιτρέπεται η επεξεργασία",
- "Email link to person" : "Αποστολή συνδέσμου με email ",
+ "upload only" : "μόνο μεταφόρτωση",
+ "Email link to person" : "Αποστολή συνδέσμου με email",
"Send" : "Αποστολή",
"Shared with you and the group {group} by {owner}" : "Διαμοιράστηκε με σας και με την ομάδα {group} του {owner}",
"Shared with you by {owner}" : "Διαμοιράστηκε με σας από τον {owner}",
+ "Choose a password for the mail share" : "Επιλογή συνθηματικού για διαμοιρασμό με αλληλογραφία",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} διαμοιράστηκε με σύνδεσμο",
"group" : "ομάδα",
"remote" : "απομακρυσμένα",
"email" : "ηλεκτρονικό ταχυδρομείο",
- "Unshare" : "Διακοπή διαμοιρασμού",
+ "shared by {sharer}" : "διαμοιράστηκε από {sharer}",
+ "Unshare" : "Αναίρεση διαμοιρασμού",
+ "Can reshare" : "Δυνατότητα να διαμοιραστεί ξανά",
+ "Can edit" : "Δυνατότητα επεξεργασίας",
+ "Can create" : "Δυνατότητα δημιουργίας",
+ "Can change" : "Δυνατότητα αλλαγής",
+ "Can delete" : "Δυνατότητα διαγραφής",
+ "Secure drop (upload only)" : "Ασφαλής απόθεση (μόνο μεταφόρτωση)",
+ "Access control" : "Έλεγχος πρόσβασης",
"Could not unshare" : "Δεν μπορεί να γίνει αναίρεση διαμοιρασμού",
"Share details could not be loaded for this item." : "Αδυναμία φόρτωσης λεπτομερειών διαμοιρασμού για αυτό το αντικείμενο.",
+ "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Απαιτείται τουλάχιστο {count} χαρακτήρας για αυτόματη συμπλήρωση","Απαιτούνται τουλάχιστο {count} χαρακτήρες για αυτόματη συμπλήρωση"],
+ "This list is maybe truncated - please refine your search term to see more results." : "Αυτή η λίστα είναι ίσως περικοπεί - παρακαλούμε βελτιώσετε τους όρους αναζήτησης για περισσότερα αποτελέσματα.",
+ "No users or groups found for {search}" : "Δεν βρέθηκαν χρήστες ή ομάδες για την αναζήτηση {search}",
"No users found for {search}" : "Δεν βρέθηκαν χρήστες για την αναζήτηση {search}",
"An error occurred. Please try again" : "Παρουσιάστηκε σφάλμα. Παρακαλώ δοκιμάστε αργότερα",
"{sharee} (group)" : "{sharee} (ομάδα)",
+ "{sharee} (remote)" : "{sharee} (απομακρυσμένα)",
+ "{sharee} (email)" : "{sharee} (email)",
+ "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
"Share" : "Διαμοιρασμός",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Διαμοιρασμός με άτομα σε άλλους διακομιστές με χρήση της ταυτότητας Federated Cloud username@example.com/nextcloud",
+ "Share with users or by mail..." : "Διαμοιρασμός με χρήστες ή με mail...",
+ "Share with users or remote users..." : "Διαμοιρασμός με χρήστες ή απομακρυσμένους χρήστες...",
+ "Share with users, remote users or by mail..." : "Διαμοιρασμός με χρήστες, απομακρυσμένους χρήστες ή με mail...",
+ "Share with users or groups..." : "Διαμοιρασμός με χρήστες ή ομάδες...",
+ "Share with users, groups or by mail..." : "Διαμοιρασμός με χρήστες, ομάδες ή με mail...",
+ "Share with users, groups or remote users..." : "Διαμοιρασμός με χρήστες, ομάδες ή απομακρυσμένους χρήστες...",
+ "Share with users, groups, remote users or by mail..." : "Διαμοιρασμός με χρήστες, ομάδες, απομακρυσμένους χρήστες ή με mail...",
+ "Share with users..." : "Διαμοιρασμός με χρήστες...",
"Error removing share" : "Σφάλμα αφαίρεσης κοινόχρηστου",
+ "Non-existing tag #{tag}" : "Μη υπάρχουσα ετικέτα #{tag}",
+ "restricted" : "περιορισμένο",
+ "invisible" : "αόρατο",
"({scope})" : "({scope})",
"Delete" : "Διαγραφή",
"Rename" : "Μετονομασία",
+ "Collaborative tags" : "Συνεργατική ετικέτα",
+ "No tags found" : "Δεν βρέθηκαν ετικέτες",
"The object type is not specified." : "Δεν καθορίστηκε ο τύπος του αντικειμένου.",
"Enter new" : "Εισαγωγή νέου",
"Add" : "Προσθήκη",
"Edit tags" : "Επεξεργασία ετικετών",
- "Error loading dialog template: {error}" : "Σφάλμα φόρτωσης προτύπου διαλόγων: {σφάλμα}",
- "No tags selected for deletion." : "Καμμία ετικέτα δεν επιλέχθηκε για διαγραφή.",
+ "Error loading dialog template: {error}" : "Σφάλμα φόρτωσης προτύπου διαλόγων: {error}",
+ "No tags selected for deletion." : "Δεν επιλέχτηκε καμμία ετικέτα για διαγραφή.",
"unknown text" : "άγνωστο κείμενο",
"Hello world!" : "Γεια σου κόσμε!",
"sunny" : "ηλιόλουστη",
- "Hello {name}, the weather is {weather}" : "Γειά σου {name}, ο καιρός είναι {weather}",
+ "Hello {name}, the weather is {weather}" : "Γεια σου {name}, ο καιρός είναι {weather}",
"Hello {name}" : "Γεια σου {name}",
+ "<strong>These are your search results<script>alert(1)</script></strong>" : "<strong>Αυτά είναι τα αποτελέσματα της αναζήτησής σας<script>ειδοποίηση(1)</script></strong>",
"new" : "νέο",
"_download %n file_::_download %n files_" : ["λήψη %n αρχείου","λήψη %n αρχείων"],
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "Η ενημέρωση είναι σε εξέλιξη, αποχωρώντας από αυτή τη σελίδα μπορεί να διακοπεί τη διαδικασία σε ορισμένα περιβάλλοντα.",
"Update to {version}" : "Ενημέρωση στην έκδοση {version}",
- "An error occurred." : "Παρουσιάστηκε σφάλμα",
- "Please reload the page." : "Παρακαλώ επαναφορτώστε τη σελίδα.",
+ "An error occurred." : "Παρουσιάστηκε σφάλμα.",
+ "Please reload the page." : "Παρακαλούμε φορτώστε ξανά τη σελίδα.",
+ "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Μη επιτυχημένη ενημέρωση. Για περισσότερες πληροφορίες <a href=\"{url}\">δείτε αυτή τη δημοσίευση στο forum</a> που καλύπτει αυτό το θέμα.",
+ "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Μη επιτυχημένη ενημέρωση. Παρακαλούμε αναφέρετε αυτό το πρόβλημα στην <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">κοινότητα Nextcloud</a>.",
"Continue to Nextcloud" : "Συνέχεια στον Nextcloud",
+ "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["Επιτυχημένη ενημέρωση. Θα γίνει ανακατεύθυνση στο Nextcloud σε %n δευτερόλεπτο.","Επιτυχημένη ενημέρωση. Θα γίνει ανακατεύθυνση στο Nextcloud σε %n δευτερόλεπτα."],
"Searching other places" : "Έρευνα σε άλλα σημεία.",
+ "No search results in other folders for {tag}{filter}{endtag}" : "Κανένα αποτέλεσμα αναζήτησης σε άλλους φακέλους για {tag}{filter}{endtag}",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} αποτέλεσμα αναζήτησης σε άλλο φάκελο","{count} αποτελέσματα αναζήτησης σε άλλους φακέλους"],
"Personal" : "Προσωπικά",
"Users" : "Χρήστες",
"Apps" : "Εφαρμογές",
- "Admin" : "Διαχείριση",
+ "Admin" : "Διαχειριστής",
"Help" : "Βοήθεια",
- "Access forbidden" : "Δεν επιτρέπεται η πρόσβαση",
+ "Access forbidden" : "Απαγορεύεται η πρόσβαση",
"File not found" : "Το αρχείο δεν βρέθηκε",
"The specified document has not been found on the server." : "Το συγκεκριμένο έγγραφο δεν έχει βρεθεί στο διακομιστή.",
"You can click here to return to %s." : "Μπορείτε να κάνετε κλικ εδώ για να επιστρέψετε στο %s.",
"Internal Server Error" : "Εσωτερικό Σφάλμα Διακομιστή",
"The server encountered an internal error and was unable to complete your request." : "Ο διακομιστής αντιμετώπισε ένα εσωτερικό σφάλμα και δεν μπόρεσε να ολοκληρώσει το αίτημά σας.",
- "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Παρακαλώ επικοινωνήστε με το διαχειριστή του διακομιστή, εάν αυτό το σφάλμα επανεμφανίζεται πολλές φορές, παρακαλούμε να συμπεριλάβετε τις τεχνικές λεπτομέρειες παρακάτω στην αναφορά σας.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Παρακαλούμε επικοινωνήστε με το διαχειριστή του διακομιστή, εάν αυτό το σφάλμα επανεμφανίζεται πολλές φορές, παρακαλούμε να συμπεριλάβετε τις τεχνικές λεπτομέρειες παρακάτω στην αναφορά σας.",
"More details can be found in the server log." : "Περισσότερες λεπτομέρειες μπορείτε να βρείτε στο αρχείο καταγραφής του διακομιστή.",
"Technical details" : "Τεχνικές λεπτομέρειες",
- "Remote Address: %s" : "Απομακρυσμένη Διεύθυνση: %s",
- "Request ID: %s" : "Αίτημα ID: %s",
+ "Remote Address: %s" : "Απομακρυσμένη διεύθυνση: %s",
+ "Request ID: %s" : "Ταυτότητα αιτήματος: %s",
"Type: %s" : "Τύπος: %s",
"Code: %s" : "Κωδικός: %s",
"Message: %s" : "Μήνυμα: %s",
"File: %s" : "Αρχείο: %s",
"Line: %s" : "Γραμμή: %s",
"Trace" : "Ανίχνευση",
- "Security warning" : "Προειδοποίηση Ασφαλείας",
- "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανό προσβάσιμα από το internet γιατί δεν δουλεύει το αρχείο .htaccess.",
+ "Security warning" : "Προειδοποίηση ασφαλείας",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανό προσβάσιμα από το διαδίκτυο διότι δεν δουλεύει το αρχείο .htaccess.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Για πληροφορίες πως μπορείτε να ρυθμίσετε σωστά τον διακομιστή, παρακαλούμε δείτε την <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">τεκμηρίωση</a>.",
"Create an <strong>admin account</strong>" : "Δημιουργήστε έναν <strong>λογαριασμό διαχειριστή</strong>",
"Username" : "Όνομα χρήστη",
- "Storage & database" : "Αποθήκευση & βάση δεδομένων",
+ "Storage & database" : "Αποθηκευτικός χώρος & βάση δεδομένων",
"Data folder" : "Φάκελος δεδομένων",
"Configure the database" : "Ρύθμιση της βάσης δεδομένων",
"Only %s is available." : "Μόνο %s είναι διαθέσιμο.",
"Install and activate additional PHP modules to choose other database types." : "Εγκαταστήστε και ενεργοποιείστε επιπλέον αρθρώματα PHP για να επιλέξετε άλλους τύπους βάσεων δεδομένων.",
"For more details check out the documentation." : "Για περισσότερες πληροφορίες ανατρέξτε στην τεκμηρίωση.",
- "Database user" : "Χρήστης της βάσης δεδομένων",
+ "Database user" : "Χρήστης βάσης δεδομένων",
"Database password" : "Συνθηματικό βάσης δεδομένων",
"Database name" : "Όνομα βάσης δεδομένων",
- "Database tablespace" : "Κενά Πινάκων Βάσης Δεδομένων",
+ "Database tablespace" : "Κενά πινάκων βάσης δεδομένων",
"Database host" : "Διακομιστής βάσης δεδομένων",
- "Please specify the port number along with the host name (e.g., localhost:5432)." : "Παρακαλώ καθορίστε τον αριθμό της πόρτας μαζί με το όνομα κεντρικού υπολογιστή (πχ localhost: 5432).",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Παρακαλώ καθορίστε τον αριθμό της θύρας μαζί με το όνομα κεντρικού υπολογιστή (πχ localhost: 5432).",
"Performance warning" : "Προειδοποίηση απόδοσης",
"SQLite will be used as database." : "Η SQLite θα χρησιμοποιηθεί ως βάση δεδομένων.",
"For larger installations we recommend to choose a different database backend." : "Για μεγαλύτερες εγκαταστάσεις συνιστούμε να επιλέξετε διαφορετικό σύστημα υποστήριξης βάσης δεδομένων.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Ειδικά όταν χρησιμοποιείτε τον πελάτη για συγχρονισμό στον υπολογιστή σας, δεν συνίσταται η χρήση της SQLite.",
- "Finish setup" : "Ολοκλήρωση εγκατάστασης",
+ "Finish setup" : "Ολοκλήρωση ρύθμισης",
"Finishing …" : "Ολοκλήρωση...",
"Need help?" : "Θέλετε βοήθεια;",
"See the documentation" : "Δείτε την τεκμηρίωση",
- "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Αυτή η εφαρμογή απαιτεί JavaScript για σωστή λειτουργία. Παρακαλώ {linkstart} ενεργοποιήστε τη JavaScrip {linkend} και επαναφορτώστε τη σελίδα.",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Αυτή η εφαρμογή απαιτεί JavaScript για σωστή λειτουργία. Παρακαλώ {linkstart}ενεργοποιήστε τη JavaScrip{linkend} και φορτώστε ξανά τη σελίδα.",
+ "More apps" : "Περισσότερες εφαρμογές",
"Search" : "Αναζήτηση",
- "Server side authentication failed!" : "Η διαδικασία επικύρωσης απέτυχε από την πλευρά του διακομιστή!",
- "Please contact your administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή.",
+ "This action requires you to confirm your password:" : "Αυτή η ενέργεια απαιτεί επιβεβαίωση του συνθηματικού σας:",
+ "Confirm your password" : "Επιβεβαίωση συνθηματικού",
+ "Server side authentication failed!" : "Αποτυχημένη πιστοποίηση από την πλευράς διακομιστή!",
+ "Please contact your administrator." : "Παρακαλούμε επικοινωνήστε με τον διαχειριστή.",
"An internal error occurred." : "Παρουσιάστηκε ένα εσωτερικό σφάλμα.",
- "Please try again or contact your administrator." : "Παρακαλώ δοκιμάστε ξανά ή επικοινωνήστε με τον διαχειριστή σας.",
+ "Please try again or contact your administrator." : "Παρακαλούμε δοκιμάστε ξανά ή επικοινωνήστε με τον διαχειριστή.",
"Username or email" : "Όνομα χρήστη ή email",
- "Wrong password. Reset it?" : "Λάθος Κωδικός. Επαναφορά;",
- "Wrong password." : "Λανθασμένο συνθηματικό.",
+ "Wrong password. Reset it?" : "Λάθος συνθηματικο. Επαναφορά;",
+ "Wrong password." : "Λάθος συνθηματικό.",
"Log in" : "Είσοδος",
"Stay logged in" : "Μείνετε συνδεδεμένος",
- "Alternative Logins" : "Εναλλακτικές Συνδέσεις",
- "Use the following link to reset your password: {link}" : "Χρησιμοποιήστε τον ακόλουθο σύνδεσμο για να επανεκδόσετε τον κωδικό: {link}",
+ "Alternative Logins" : "Εναλλακτικές συνδέσεις",
"New password" : "Νέο συνθηματικό",
- "New Password" : "Νέος Κωδικός",
+ "New Password" : "Νέο συνθηματικό",
"Reset password" : "Επαναφορά συνθηματικού",
"This Nextcloud instance is currently in single user mode." : "Αυτή η εγκατάσταση Nextcloud είναι τώρα σε κατάσταση ενός χρήστη.",
"This means only administrators can use the instance." : "Αυτό σημαίνει ότι μόνο διαχειριστές μπορούν να χρησιμοποιήσουν την εγκατάσταση.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Επικοινωνήστε με το διαχειριστή του συστήματος αν αυτό το μήνυμα συνεχίζει να εμφανίζεται ή εμφανίστηκε απρόσμενα.",
"Thank you for your patience." : "Σας ευχαριστούμε για την υπομονή σας.",
"Log out" : "Αποσύνδεση",
- "Two-factor authentication" : "Πιστοποίηση σε 2 βήματα",
+ "Two-factor authentication" : "Πιστοποίηση με 2 παράγοντες",
"Enhanced security is enabled for your account. Please authenticate using a second factor." : "Έχει ενεργοποιηθεί βελτιωμένη ασφάλεια για τον λογαριασμό σας. Παρακαλώ πιστοποιήστε με την χρήση δεύτερου παράγοντα",
"Cancel log in" : "Ακύρωση εισόδου",
+ "Use backup code" : "Χρήση εφεδρικών κωδικών",
+ "Error while validating your second factor" : "Σφάλμα κατά την επικύρωση του δεύτερου παράγοντα",
"You are accessing the server from an untrusted domain." : "Η προσπέλαση του διακομιστή γίνεται από μη έμπιστο τομέα.",
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Παρακαλώ επικοινωνήστε με το διαχειριστή του συστήματος. Αν είστε ο διαχειριστής, ρυθμίστε την επιλογή \"trusted_domain\" στο αρχείο config/config.php. Μπορείτε να βρείτε παράδειγμα στο αρχείο config/config.sample.php.",
- "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Ανάλογα με τις ρυθμίσεις σας, σαν διαχειριστής θα μπορούσατε επίσης να χρησιμοποιήσετε το παρακάτω κουμπί για να εμπιστευθείτε αυτή την περιοχή.",
- "Add \"%s\" as trusted domain" : "Προσθήκη \"%s\" ως αξιόπιστη περιοχή",
+ "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Ανάλογα με τις ρυθμίσεις σας, σαν διαχειριστής θα μπορούσατε επίσης να χρησιμοποιήσετε το παρακάτω κουμπί για να εμπιστευθείτε αυτόν τον τομέα.",
+ "Add \"%s\" as trusted domain" : "Προσθήκη \"%s\" ως αξιόπιστου τομέα",
"App update required" : "Απαιτείται ενημέρωση εφαρμογής",
- "%s will be updated to version %s" : "%s θα αναβαθμιστεί σε έκδοση %s",
- "These apps will be updated:" : "Αυτές οι εφαρμογές θα αναβαθμιστούν:",
+ "%s will be updated to version %s" : "%s θα ενημερωθεί σε έκδοση %s",
+ "These apps will be updated:" : "Αυτές οι εφαρμογές θα ενημερωθούν:",
"These incompatible apps will be disabled:" : "Αυτές οι μη συμβατές εφαρμογές θα απενεργοποιηθούν:",
"The theme %s has been disabled." : "Το θέμα %s έχει απενεργοποιηθεί.",
- "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Παρακαλώ βεβαιωθείτε ότι έχουν ληψθεί αντίγραφα ασφαλείας της βάσης δεδομένων, του φακέλου ρυθμίσεων και του φακέλου δεδομένων πριν προχωρήσετε.",
+ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Παρακαλούμε βεβαιωθείτε ότι έχουν ληφθεί αντίγραφα ασφαλείας της βάσης δεδομένων, του φακέλου ρυθμίσεων και του φακέλου δεδομένων πριν προχωρήσετε.",
"Start update" : "Έναρξη ενημέρωσης",
- "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Για να αποφύγετε τη λήξη χρόνου με μεγαλύτερες εγκαταστάσεις, μπορείτε αντί αυτού να τρέξετε την ακόλουθη εντολή από τον κατάλογο αρχείων εφαρμογών:",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Για να αποφύγετε τη λήξη χρόνου με μεγαλύτερες εγκαταστάσεις, μπορείτε αντί αυτού να εκτελέσετε την ακόλουθη εντολή στον κατάλογο εγκατάστασης:",
"Detailed logs" : "Λεπτομερές ιστορικό",
"Update needed" : "Απαιτείται ενημέρωση",
+ "Please use the command line updater because you have a big instance." : "Παρακαλούμε χρησιμοποιήστε την ενημέρωση μέσω γραμμής εντολών διότι έχετε μεγάλη εγκατάσταση.",
"For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Για βοήθεια, δείτε στην <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">τεκμηρίωση</a>.",
- "This %s instance is currently in maintenance mode, which may take a while." : "Αυτή %s η εγκατάσταση είναι σε λειτουργία συντήρησης, η οποία μπορεί να πάρει κάποιο χρόνο.",
+ "This %s instance is currently in maintenance mode, which may take a while." : "Αυτή %s η εγκατάσταση είναι σε λειτουργία συντήρησης, η οποία μπορεί να διαρκέσει κάποιο χρόνο.",
"This page will refresh itself when the %s instance is available again." : "Αυτή η σελίδα θα ανανεωθεί από μόνη της όταν η %s εγκατάσταση είναι διαθέσιμη ξανά.",
- "Problem loading page, reloading in 5 seconds" : "Πρόβλημα φόρτωσης σελίδας, επαναφόρτωση σε 5 λεπτά",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Εάν δεν έχετε ενεργοποιήσει το κλειδί επαναφοράς, δεν θα υπάρχει τρόπος να ανακτήσετε τα δεδομένα σας μετά την επαναφορά του κωδικού πρόσβασής σας.<br />Εάν δεν είστε σίγουροι για το τι θα θέλατε να κάνετε, παρακαλώ επικοινωνήστε με το διαχειριστή σας πριν συνεχίσετε. <br />Θέλετε στ' αλήθεια να συνεχίσετε;",
+ "Problem loading page, reloading in 5 seconds" : "Πρόβλημα φόρτωσης σελίδας, φόρτωση ξανά σε 5 λεπτά",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Τα αρχεία σας είναι κρυπτογραφημένα. Εάν δεν έχετε ενεργοποιήσει το κλειδί επαναφοράς, δεν θα υπάρχει τρόπος να ανακτήσετε τα δεδομένα σας μετά την επαναφορά του συνθηματικού σας.<br />Εάν δεν είστε σίγουροι για το τι θα θέλατε να κάνετε, παρακαλώ επικοινωνήστε με το διαχειριστή σας πριν συνεχίσετε. <br />Θέλετε να συνεχίσετε;",
+ "File drop (upload only)" : "Απόθεση αρχείου (μόνο μεταφόρτωση)",
+ "can reshare" : "δυνατότητα να διαμοιραστεί ξανά",
"can edit" : "δυνατότητα αλλαγής",
+ "can create" : "δυνατότητα δημιουργίας",
+ "can change" : "δυνατότητα αλλαγής",
+ "can delete" : "δυνατότητα διαγραφής",
"access control" : "έλεγχος πρόσβασης",
- "The update was successful. Redirecting you to Nextcloud now." : "Η ενημέρωση ήταν επιτυχής. Ανακατεύθυνση στο Nextcloud.",
- "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Γειά χαρά,\n\nαπλά σας ενημερώνω πως ο %s μοιράστηκε το %s με εσάς.\nΔείτε το: %s\n\n",
+ "The update was successful. Redirecting you to Nextcloud now." : "Η ενημέρωση ήταν επιτυχής. Θα γίνει ανακατεύθυνση στο Nextcloud.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Γεια χαρά,\n\nαπλά σας ενημερώνω πως ο %s μοιράστηκε το %s με εσάς.\nΔείτε το: %s\n\n",
"The share will expire on %s." : "Ο διαμοιρασμός θα λήξει σε %s.",
- "Cheers!" : "Χαιρετισμούς!",
- "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Γειά χαρά,<br><br>απλά σας ενημερώνω πως ο %s μοιράστηκε το<strong>%s</strong> με εσάς.<br><a href=\"%s\">Δείτε το!</a><br><br>"
+ "Cheers!" : "Με εκτίμηση!",
+ "Use the following link to reset your password: {link}" : "Χρησιμοποιήστε τον ακόλουθο σύνδεσμο για να επαναφέρετε το συνθηματικό: {link}",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Γεια χαρά,<br><br>απλά σας ενημερώνω πως ο %s μοιράστηκε το<strong>%s</strong> με εσάς.<br><a href=\"%s\">Δείτε το!</a><br><br>"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/en_GB.js b/core/l10n/en_GB.js
index eae9de3df40..f4163234b50 100644
--- a/core/l10n/en_GB.js
+++ b/core/l10n/en_GB.js
@@ -216,7 +216,6 @@ OC.L10N.register(
"Log in" : "Log in",
"Stay logged in" : "Stay logged in",
"Alternative Logins" : "Alternative Logins",
- "Use the following link to reset your password: {link}" : "Use the following link to reset your password: {link}",
"New password" : "New password",
"New Password" : "New Password",
"Reset password" : "Reset password",
@@ -251,6 +250,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n",
"The share will expire on %s." : "The share will expire on %s.",
"Cheers!" : "Cheers!",
+ "Use the following link to reset your password: {link}" : "Use the following link to reset your password: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/en_GB.json b/core/l10n/en_GB.json
index 77df78e0d90..9798dad24d5 100644
--- a/core/l10n/en_GB.json
+++ b/core/l10n/en_GB.json
@@ -214,7 +214,6 @@
"Log in" : "Log in",
"Stay logged in" : "Stay logged in",
"Alternative Logins" : "Alternative Logins",
- "Use the following link to reset your password: {link}" : "Use the following link to reset your password: {link}",
"New password" : "New password",
"New Password" : "New Password",
"Reset password" : "Reset password",
@@ -249,6 +248,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n",
"The share will expire on %s." : "The share will expire on %s.",
"Cheers!" : "Cheers!",
+ "Use the following link to reset your password: {link}" : "Use the following link to reset your password: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/es.js b/core/l10n/es.js
index d6fe53e9954..0e40dbf7341 100644
--- a/core/l10n/es.js
+++ b/core/l10n/es.js
@@ -17,6 +17,10 @@ OC.L10N.register(
"Couldn't reset password because the token is invalid" : "No se puede restablecer la contraseña porque el vale de identificación es inválido.",
"Couldn't reset password because the token is expired" : "No se puede restablecer la contraseña porque el vale de identificación ha caducado.",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "No se pudo enviar el correo electrónico de restablecimiento porque no hay una dirección de correo electrónico para este nombre de usuario. Póngase en contacto con un administrador.",
+ "Password reset" : "Resetear contraseña",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Presione el siguiente botón para resetear su contraseña. Si usted no ha solicitado el reseteo de la contraseña, entonces ignore este correo.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Presione el siguiente enlace para resetear su contraseña. Si usted no ha solicitado el reseteo de la contraseña, entonces ignore este correo.",
+ "Reset your password" : "Resetear su contraseña",
"%s password reset" : "%s restablecer contraseña",
"Couldn't send reset email. Please contact your administrator." : "No pudo enviarse el correo para restablecer la contraseña. Por favor, contacte con su administrador.",
"Couldn't send reset email. Please make sure your username is correct." : "No se pudo enviar el correo electrónico para el restablecimiento. Por favor, asegúrese de que su nombre de usuario es el correcto.",
@@ -137,6 +141,7 @@ OC.L10N.register(
"group" : "grupo",
"remote" : "remoto",
"email" : "email",
+ "shared by {sharer}" : "compartido por {sharer}",
"Unshare" : "Dejar de compartir",
"Can reshare" : "Puede compartir",
"Can edit" : "Puede editar",
@@ -188,7 +193,7 @@ OC.L10N.register(
"Hello {name}" : "Hola {name}",
"<strong>These are your search results<script>alert(1)</script></strong>" : "<strong>Estos son sus resultados de búsqueda<script>alert(1)</script></strong>",
"new" : "Nuevo",
- "_download %n file_::_download %n files_" : ["descargar %n ficheros","descargar %n archivos"],
+ "_download %n file_::_download %n files_" : ["descargar %n archivos","descargar %n archivos"],
"The update is in progress, leaving this page might interrupt the process in some environments." : "La actualización está en curso, salir de esta página podrían interrumpir el proceso en algunos entornos.",
"Update to {version}" : "Actualice a {version}",
"An error occurred." : "Ocurrió un error.",
@@ -242,7 +247,7 @@ OC.L10N.register(
"Performance warning" : "Advertencia de rendimiento",
"SQLite will be used as database." : "Se utilizará SQLite como base de datos.",
"For larger installations we recommend to choose a different database backend." : "Para grandes instalaciones recomendamos seleccionar una base de datos diferente",
- "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "El uso de SQLite esta desaconsejado especialmente cuando se usa el cliente de escritorio para sincronizar los ficheros.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "El uso de SQLite esta desaconsejado especialmente cuando se usa el cliente de escritorio para sincronizar los archivos.",
"Finish setup" : "Completar la instalación",
"Finishing …" : "Finalizando...",
"Need help?" : "¿Necesita ayuda?",
@@ -262,7 +267,6 @@ OC.L10N.register(
"Log in" : "Iniciar sesión",
"Stay logged in" : "Permanecer autenticado",
"Alternative Logins" : "Inicios de sesión alternativos",
- "Use the following link to reset your password: {link}" : "Utilice el siguiente enlace para restablecer su contraseña: {link}",
"New password" : "Nueva contraseña",
"New Password" : "Contraseña nueva",
"Reset password" : "Restablecer contraseña",
@@ -307,6 +311,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hola:\n\nTan solo queremos informarte que %s compartió %s contigo.\nMíralo aquí: %s\n\n",
"The share will expire on %s." : "El objeto dejará de ser compartido el %s.",
"Cheers!" : "¡Saludos!",
+ "Use the following link to reset your password: {link}" : "Utilice el siguiente enlace para restablecer su contraseña: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hola:<br><br>Te comentamos que %s compartió <strong>%s</strong> contigo.<br><a href=\"%s\">¡Échale un vistazo!</a><br><br>"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/es.json b/core/l10n/es.json
index c84a0a967c2..c368a475e6c 100644
--- a/core/l10n/es.json
+++ b/core/l10n/es.json
@@ -15,6 +15,10 @@
"Couldn't reset password because the token is invalid" : "No se puede restablecer la contraseña porque el vale de identificación es inválido.",
"Couldn't reset password because the token is expired" : "No se puede restablecer la contraseña porque el vale de identificación ha caducado.",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "No se pudo enviar el correo electrónico de restablecimiento porque no hay una dirección de correo electrónico para este nombre de usuario. Póngase en contacto con un administrador.",
+ "Password reset" : "Resetear contraseña",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Presione el siguiente botón para resetear su contraseña. Si usted no ha solicitado el reseteo de la contraseña, entonces ignore este correo.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Presione el siguiente enlace para resetear su contraseña. Si usted no ha solicitado el reseteo de la contraseña, entonces ignore este correo.",
+ "Reset your password" : "Resetear su contraseña",
"%s password reset" : "%s restablecer contraseña",
"Couldn't send reset email. Please contact your administrator." : "No pudo enviarse el correo para restablecer la contraseña. Por favor, contacte con su administrador.",
"Couldn't send reset email. Please make sure your username is correct." : "No se pudo enviar el correo electrónico para el restablecimiento. Por favor, asegúrese de que su nombre de usuario es el correcto.",
@@ -135,6 +139,7 @@
"group" : "grupo",
"remote" : "remoto",
"email" : "email",
+ "shared by {sharer}" : "compartido por {sharer}",
"Unshare" : "Dejar de compartir",
"Can reshare" : "Puede compartir",
"Can edit" : "Puede editar",
@@ -186,7 +191,7 @@
"Hello {name}" : "Hola {name}",
"<strong>These are your search results<script>alert(1)</script></strong>" : "<strong>Estos son sus resultados de búsqueda<script>alert(1)</script></strong>",
"new" : "Nuevo",
- "_download %n file_::_download %n files_" : ["descargar %n ficheros","descargar %n archivos"],
+ "_download %n file_::_download %n files_" : ["descargar %n archivos","descargar %n archivos"],
"The update is in progress, leaving this page might interrupt the process in some environments." : "La actualización está en curso, salir de esta página podrían interrumpir el proceso en algunos entornos.",
"Update to {version}" : "Actualice a {version}",
"An error occurred." : "Ocurrió un error.",
@@ -240,7 +245,7 @@
"Performance warning" : "Advertencia de rendimiento",
"SQLite will be used as database." : "Se utilizará SQLite como base de datos.",
"For larger installations we recommend to choose a different database backend." : "Para grandes instalaciones recomendamos seleccionar una base de datos diferente",
- "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "El uso de SQLite esta desaconsejado especialmente cuando se usa el cliente de escritorio para sincronizar los ficheros.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "El uso de SQLite esta desaconsejado especialmente cuando se usa el cliente de escritorio para sincronizar los archivos.",
"Finish setup" : "Completar la instalación",
"Finishing …" : "Finalizando...",
"Need help?" : "¿Necesita ayuda?",
@@ -260,7 +265,6 @@
"Log in" : "Iniciar sesión",
"Stay logged in" : "Permanecer autenticado",
"Alternative Logins" : "Inicios de sesión alternativos",
- "Use the following link to reset your password: {link}" : "Utilice el siguiente enlace para restablecer su contraseña: {link}",
"New password" : "Nueva contraseña",
"New Password" : "Contraseña nueva",
"Reset password" : "Restablecer contraseña",
@@ -305,6 +309,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hola:\n\nTan solo queremos informarte que %s compartió %s contigo.\nMíralo aquí: %s\n\n",
"The share will expire on %s." : "El objeto dejará de ser compartido el %s.",
"Cheers!" : "¡Saludos!",
+ "Use the following link to reset your password: {link}" : "Utilice el siguiente enlace para restablecer su contraseña: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hola:<br><br>Te comentamos que %s compartió <strong>%s</strong> contigo.<br><a href=\"%s\">¡Échale un vistazo!</a><br><br>"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/es_MX.js b/core/l10n/es_MX.js
index c0f3e85265e..f6c9c3a35e2 100644
--- a/core/l10n/es_MX.js
+++ b/core/l10n/es_MX.js
@@ -262,7 +262,6 @@ OC.L10N.register(
"Log in" : "Ingresar",
"Stay logged in" : "Mantener la sesión abierta",
"Alternative Logins" : "Accesos Alternativos",
- "Use the following link to reset your password: {link}" : "Use la siguiente liga para restablecer su contraseña: {link}",
"New password" : "Nueva contraseña",
"New Password" : "Nueva Contraseña",
"Reset password" : "Restablecer contraseña",
@@ -307,6 +306,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hola,\n\nsólo queremos informarle que %s ha compartido %s con usted.\n\nConsúltelo aquí: %s\n\n",
"The share will expire on %s." : "El recurso dejará de ser compartido el %s.",
"Cheers!" : "¡Saludos!",
+ "Use the following link to reset your password: {link}" : "Use la siguiente liga para restablecer su contraseña: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hola,<br><br> sólo queremos informarle que %s ha compartido <strong>%s</strong> con usted. <br><a href=\"%s\">¡Véalo!</a><br><br>"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/es_MX.json b/core/l10n/es_MX.json
index 413d306172b..9596098a3ae 100644
--- a/core/l10n/es_MX.json
+++ b/core/l10n/es_MX.json
@@ -260,7 +260,6 @@
"Log in" : "Ingresar",
"Stay logged in" : "Mantener la sesión abierta",
"Alternative Logins" : "Accesos Alternativos",
- "Use the following link to reset your password: {link}" : "Use la siguiente liga para restablecer su contraseña: {link}",
"New password" : "Nueva contraseña",
"New Password" : "Nueva Contraseña",
"Reset password" : "Restablecer contraseña",
@@ -305,6 +304,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hola,\n\nsólo queremos informarle que %s ha compartido %s con usted.\n\nConsúltelo aquí: %s\n\n",
"The share will expire on %s." : "El recurso dejará de ser compartido el %s.",
"Cheers!" : "¡Saludos!",
+ "Use the following link to reset your password: {link}" : "Use la siguiente liga para restablecer su contraseña: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hola,<br><br> sólo queremos informarle que %s ha compartido <strong>%s</strong> con usted. <br><a href=\"%s\">¡Véalo!</a><br><br>"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/eu.js b/core/l10n/eu.js
index 57102fec7f2..6c0f367c90f 100644
--- a/core/l10n/eu.js
+++ b/core/l10n/eu.js
@@ -242,7 +242,6 @@ OC.L10N.register(
"Log in" : "Hasi saioa",
"Stay logged in" : "Ez amaitu saioa",
"Alternative Logins" : "Beste erabiltzaile izenak",
- "Use the following link to reset your password: {link}" : "Eribili hurrengo lotura zure pasahitza berrezartzeko: {link}",
"New password" : "Pasahitz berria",
"New Password" : "Pasahitz Berria",
"Reset password" : "Berrezarri pasahitza",
@@ -287,6 +286,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Kaixo\n\n%s-ek %s zurekin partekatu duela jakin dezazun.\nIkusi ezazu: %s\n\n",
"The share will expire on %s." : "Elkarbanaketa %s-n iraungiko da.",
"Cheers!" : "Ongi izan!",
+ "Use the following link to reset your password: {link}" : "Eribili hurrengo lotura zure pasahitza berrezartzeko: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Kaixo<br><br>%s-ek %s zurekin partekatu duela jakin dezazun.\nIkusi ezazu: %s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/eu.json b/core/l10n/eu.json
index c47e661fe26..03b950af160 100644
--- a/core/l10n/eu.json
+++ b/core/l10n/eu.json
@@ -240,7 +240,6 @@
"Log in" : "Hasi saioa",
"Stay logged in" : "Ez amaitu saioa",
"Alternative Logins" : "Beste erabiltzaile izenak",
- "Use the following link to reset your password: {link}" : "Eribili hurrengo lotura zure pasahitza berrezartzeko: {link}",
"New password" : "Pasahitz berria",
"New Password" : "Pasahitz Berria",
"Reset password" : "Berrezarri pasahitza",
@@ -285,6 +284,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Kaixo\n\n%s-ek %s zurekin partekatu duela jakin dezazun.\nIkusi ezazu: %s\n\n",
"The share will expire on %s." : "Elkarbanaketa %s-n iraungiko da.",
"Cheers!" : "Ongi izan!",
+ "Use the following link to reset your password: {link}" : "Eribili hurrengo lotura zure pasahitza berrezartzeko: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Kaixo<br><br>%s-ek %s zurekin partekatu duela jakin dezazun.\nIkusi ezazu: %s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/fi.js b/core/l10n/fi.js
index e3bb3ae0225..eb7314ef925 100644
--- a/core/l10n/fi.js
+++ b/core/l10n/fi.js
@@ -17,6 +17,7 @@ OC.L10N.register(
"Couldn't reset password because the token is invalid" : "Salasanaa ei voitu palauttaa, koska valtuutus on virheellinen",
"Couldn't reset password because the token is expired" : "Salasanaa ei voitu palauttaa, koska valtuutus on vanhentunut",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Salasanan palautusviestiä ei voitu lähettää sähköpostitse, koska käyttäjätunnukselle ei ole määritetty sähköpostiosoitetta. Ota yhteys ylläpitäjään.",
+ "Password reset" : "Salasanan palautus",
"%s password reset" : "%s salasanan palautus",
"Couldn't send reset email. Please contact your administrator." : "Palautussähköpostin lähettäminen ei onnistunut. Ota yhteys ylläpitäjään.",
"Couldn't send reset email. Please make sure your username is correct." : "Palautussähköpostin lähettäminen ei onnistunut. Varmista, että käyttäjätunnuksesi on oikein.",
@@ -251,7 +252,6 @@ OC.L10N.register(
"Log in" : "Kirjaudu sisään",
"Stay logged in" : "Pysy sisäänkirjautuneena",
"Alternative Logins" : "Vaihtoehtoiset kirjautumistavat",
- "Use the following link to reset your password: {link}" : "Voit palauttaa salasanasi seuraavassa osoitteessa: {link}",
"New password" : "Uusi salasana",
"New Password" : "Uusi salasana",
"Reset password" : "Palauta salasana",
@@ -296,6 +296,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hei,\n\n%s jakoi kohteen %s kanssasi.\nTutustu siihen: %s\n\n",
"The share will expire on %s." : "Jakaminen päättyy %s.",
"Cheers!" : "Kiitos!",
+ "Use the following link to reset your password: {link}" : "Voit palauttaa salasanasi seuraavassa osoitteessa: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hei,<br><br>%s jakoi kanssasi kohteen <strong>%s</strong>.<br><a href=\"%s\">Tutustu siihen!</a><br><br>"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/fi.json b/core/l10n/fi.json
index 0970506fd4c..4d6c083c674 100644
--- a/core/l10n/fi.json
+++ b/core/l10n/fi.json
@@ -15,6 +15,7 @@
"Couldn't reset password because the token is invalid" : "Salasanaa ei voitu palauttaa, koska valtuutus on virheellinen",
"Couldn't reset password because the token is expired" : "Salasanaa ei voitu palauttaa, koska valtuutus on vanhentunut",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Salasanan palautusviestiä ei voitu lähettää sähköpostitse, koska käyttäjätunnukselle ei ole määritetty sähköpostiosoitetta. Ota yhteys ylläpitäjään.",
+ "Password reset" : "Salasanan palautus",
"%s password reset" : "%s salasanan palautus",
"Couldn't send reset email. Please contact your administrator." : "Palautussähköpostin lähettäminen ei onnistunut. Ota yhteys ylläpitäjään.",
"Couldn't send reset email. Please make sure your username is correct." : "Palautussähköpostin lähettäminen ei onnistunut. Varmista, että käyttäjätunnuksesi on oikein.",
@@ -249,7 +250,6 @@
"Log in" : "Kirjaudu sisään",
"Stay logged in" : "Pysy sisäänkirjautuneena",
"Alternative Logins" : "Vaihtoehtoiset kirjautumistavat",
- "Use the following link to reset your password: {link}" : "Voit palauttaa salasanasi seuraavassa osoitteessa: {link}",
"New password" : "Uusi salasana",
"New Password" : "Uusi salasana",
"Reset password" : "Palauta salasana",
@@ -294,6 +294,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hei,\n\n%s jakoi kohteen %s kanssasi.\nTutustu siihen: %s\n\n",
"The share will expire on %s." : "Jakaminen päättyy %s.",
"Cheers!" : "Kiitos!",
+ "Use the following link to reset your password: {link}" : "Voit palauttaa salasanasi seuraavassa osoitteessa: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hei,<br><br>%s jakoi kanssasi kohteen <strong>%s</strong>.<br><a href=\"%s\">Tutustu siihen!</a><br><br>"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/fr.js b/core/l10n/fr.js
index 0307d5e8d0a..730caf94a74 100644
--- a/core/l10n/fr.js
+++ b/core/l10n/fr.js
@@ -17,6 +17,10 @@ OC.L10N.register(
"Couldn't reset password because the token is invalid" : "Impossible de réinitialiser le mot de passe car le jeton n'est pas valable",
"Couldn't reset password because the token is expired" : "Impossible de réinitialiser le mot de passe car le jeton a expiré",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Impossible d'envoyer le courriel de réinitialisation car il n'y a aucune adresse de courriel pour cet utilisateur. Veuillez contacter votre administrateur.",
+ "Password reset" : "Réinitialiser le mot de passe",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Cliquer sur le bouton suivant pour réinitialiser votre mot de passe. Si vous n'avez pas demandé cette réinitialisation de mot de passe, alors ignorez ce courriel.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Cliquer sur le lien suivant pour réinitialiser votre mot de passe. Si vous n'avez pas demandé cette réinitialisation de mot de passe, alors ignorez ce courriel.",
+ "Reset your password" : "Réinitialiser votre mot de passe",
"%s password reset" : "Réinitialisation de votre mot de passe %s",
"Couldn't send reset email. Please contact your administrator." : "Impossible d'envoyer le courriel de réinitialisation. Veuillez contacter votre administrateur.",
"Couldn't send reset email. Please make sure your username is correct." : "Impossible d'envoyer le courriel de réinitialisation. Veuillez vérifier que votre nom d'utilisateur est correct.",
@@ -263,7 +267,6 @@ OC.L10N.register(
"Log in" : "Se connecter",
"Stay logged in" : "Rester connecté",
"Alternative Logins" : "Identifiants alternatifs",
- "Use the following link to reset your password: {link}" : "Utilisez le lien suivant pour réinitialiser votre mot de passe : {link}",
"New password" : "Nouveau mot de passe",
"New Password" : "Nouveau mot de passe",
"Reset password" : "Réinitialiser le mot de passe",
@@ -308,6 +311,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Bonjour,\n\nNous vous informons que %s a partagé %s avec vous.\nVous pouvez y accéder à l'adresse suivante : %s\n",
"The share will expire on %s." : "Le partage expirera le %s.",
"Cheers!" : "À bientôt !",
+ "Use the following link to reset your password: {link}" : "Utilisez le lien suivant pour réinitialiser votre mot de passe : {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Bonjour,<br><br>Nous vous informons que %s a partagé <strong>%s</strong> avec vous.<br><a href=\"%s\">Cliquez ici pour y accéder !</a><br><br>"
},
"nplurals=2; plural=(n > 1);");
diff --git a/core/l10n/fr.json b/core/l10n/fr.json
index 7b14d8e66dd..e4cc808f32e 100644
--- a/core/l10n/fr.json
+++ b/core/l10n/fr.json
@@ -15,6 +15,10 @@
"Couldn't reset password because the token is invalid" : "Impossible de réinitialiser le mot de passe car le jeton n'est pas valable",
"Couldn't reset password because the token is expired" : "Impossible de réinitialiser le mot de passe car le jeton a expiré",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Impossible d'envoyer le courriel de réinitialisation car il n'y a aucune adresse de courriel pour cet utilisateur. Veuillez contacter votre administrateur.",
+ "Password reset" : "Réinitialiser le mot de passe",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Cliquer sur le bouton suivant pour réinitialiser votre mot de passe. Si vous n'avez pas demandé cette réinitialisation de mot de passe, alors ignorez ce courriel.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Cliquer sur le lien suivant pour réinitialiser votre mot de passe. Si vous n'avez pas demandé cette réinitialisation de mot de passe, alors ignorez ce courriel.",
+ "Reset your password" : "Réinitialiser votre mot de passe",
"%s password reset" : "Réinitialisation de votre mot de passe %s",
"Couldn't send reset email. Please contact your administrator." : "Impossible d'envoyer le courriel de réinitialisation. Veuillez contacter votre administrateur.",
"Couldn't send reset email. Please make sure your username is correct." : "Impossible d'envoyer le courriel de réinitialisation. Veuillez vérifier que votre nom d'utilisateur est correct.",
@@ -261,7 +265,6 @@
"Log in" : "Se connecter",
"Stay logged in" : "Rester connecté",
"Alternative Logins" : "Identifiants alternatifs",
- "Use the following link to reset your password: {link}" : "Utilisez le lien suivant pour réinitialiser votre mot de passe : {link}",
"New password" : "Nouveau mot de passe",
"New Password" : "Nouveau mot de passe",
"Reset password" : "Réinitialiser le mot de passe",
@@ -306,6 +309,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Bonjour,\n\nNous vous informons que %s a partagé %s avec vous.\nVous pouvez y accéder à l'adresse suivante : %s\n",
"The share will expire on %s." : "Le partage expirera le %s.",
"Cheers!" : "À bientôt !",
+ "Use the following link to reset your password: {link}" : "Utilisez le lien suivant pour réinitialiser votre mot de passe : {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Bonjour,<br><br>Nous vous informons que %s a partagé <strong>%s</strong> avec vous.<br><a href=\"%s\">Cliquez ici pour y accéder !</a><br><br>"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/core/l10n/he.js b/core/l10n/he.js
index ca61edbe54e..3f95d240a85 100644
--- a/core/l10n/he.js
+++ b/core/l10n/he.js
@@ -202,7 +202,6 @@ OC.L10N.register(
"Log in" : "כניסה",
"Stay logged in" : "השאר מחובר",
"Alternative Logins" : "כניסות אלטרנטיביות",
- "Use the following link to reset your password: {link}" : "יש להשתמש בקישור הבא כדי לאפס את הססמה שלך: {link}",
"New password" : "ססמה חדשה",
"New Password" : "סיסמא חדשה",
"Reset password" : "איפוס ססמה",
@@ -236,6 +235,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "שלום רב,\n\nרצינו לעדכן אותך ש- %s שיתף/שיתפה %s איתך.\nניתן לצפות בשיתוף כאן: %s\n\n",
"The share will expire on %s." : "השיתוף יפוג תוקף ב- %s.",
"Cheers!" : "לחיים!",
+ "Use the following link to reset your password: {link}" : "יש להשתמש בקישור הבא כדי לאפס את הססמה שלך: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "הי לך,<br><br>כדאי לך לדעת ש- %s משתף/פת <strong>%s</strong> אתך.<br><a href=\"%s\">לצפייה!</a><br><br>"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/he.json b/core/l10n/he.json
index 35e0d040f9c..98aeb4fc28d 100644
--- a/core/l10n/he.json
+++ b/core/l10n/he.json
@@ -200,7 +200,6 @@
"Log in" : "כניסה",
"Stay logged in" : "השאר מחובר",
"Alternative Logins" : "כניסות אלטרנטיביות",
- "Use the following link to reset your password: {link}" : "יש להשתמש בקישור הבא כדי לאפס את הססמה שלך: {link}",
"New password" : "ססמה חדשה",
"New Password" : "סיסמא חדשה",
"Reset password" : "איפוס ססמה",
@@ -234,6 +233,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "שלום רב,\n\nרצינו לעדכן אותך ש- %s שיתף/שיתפה %s איתך.\nניתן לצפות בשיתוף כאן: %s\n\n",
"The share will expire on %s." : "השיתוף יפוג תוקף ב- %s.",
"Cheers!" : "לחיים!",
+ "Use the following link to reset your password: {link}" : "יש להשתמש בקישור הבא כדי לאפס את הססמה שלך: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "הי לך,<br><br>כדאי לך לדעת ש- %s משתף/פת <strong>%s</strong> אתך.<br><a href=\"%s\">לצפייה!</a><br><br>"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/hu.js b/core/l10n/hu.js
index 65cbfa35dfa..7668ce3acac 100644
--- a/core/l10n/hu.js
+++ b/core/l10n/hu.js
@@ -242,7 +242,6 @@ OC.L10N.register(
"Log in" : "Bejelentkezés",
"Stay logged in" : "Maradjon bejelentkezve",
"Alternative Logins" : "Alternatív bejelentkezés",
- "Use the following link to reset your password: {link}" : "Használja ezt a hivatkozást a jelszó ismételt beállításához: {link}",
"New password" : "Új jelszó",
"New Password" : "Új jelszó",
"Reset password" : "Jelszó-visszaállítás",
@@ -287,6 +286,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Üdv!\n\nÉrtesítünk, hogy %s megosztotta veled a következőt: %s.\nItt nézheted meg: %s\n\n",
"The share will expire on %s." : "A megosztás lejár ekkor: %s.",
"Cheers!" : "Üdv.",
+ "Use the following link to reset your password: {link}" : "Használja ezt a hivatkozást a jelszó ismételt beállításához: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Üdv!<br /><br />\n\nÉrtesítünk, hogy %s megosztotta veled a következőt: <strong>%s</strong><br />\n<a href=\"%s\">Itt nézheted meg.</a><br /><br />"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/hu.json b/core/l10n/hu.json
index e8b20d74cab..a2702f623a4 100644
--- a/core/l10n/hu.json
+++ b/core/l10n/hu.json
@@ -240,7 +240,6 @@
"Log in" : "Bejelentkezés",
"Stay logged in" : "Maradjon bejelentkezve",
"Alternative Logins" : "Alternatív bejelentkezés",
- "Use the following link to reset your password: {link}" : "Használja ezt a hivatkozást a jelszó ismételt beállításához: {link}",
"New password" : "Új jelszó",
"New Password" : "Új jelszó",
"Reset password" : "Jelszó-visszaállítás",
@@ -285,6 +284,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Üdv!\n\nÉrtesítünk, hogy %s megosztotta veled a következőt: %s.\nItt nézheted meg: %s\n\n",
"The share will expire on %s." : "A megosztás lejár ekkor: %s.",
"Cheers!" : "Üdv.",
+ "Use the following link to reset your password: {link}" : "Használja ezt a hivatkozást a jelszó ismételt beállításához: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Üdv!<br /><br />\n\nÉrtesítünk, hogy %s megosztotta veled a következőt: <strong>%s</strong><br />\n<a href=\"%s\">Itt nézheted meg.</a><br /><br />"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/id.js b/core/l10n/id.js
index 04555d5ff5e..433c52f99cc 100644
--- a/core/l10n/id.js
+++ b/core/l10n/id.js
@@ -245,7 +245,6 @@ OC.L10N.register(
"Log in" : "Masuk",
"Stay logged in" : "Tetap masuk",
"Alternative Logins" : "Cara Alternatif untuk Masuk",
- "Use the following link to reset your password: {link}" : "Gunakan tautan berikut untuk menyetel ulang sandi Anda: {link}",
"New password" : "Sandi baru",
"New Password" : "Sandi Baru",
"Reset password" : "Setel ulang sandi",
@@ -290,6 +289,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hai,\n\nhanya supaya anda tahu bahwa %s membagikan %s dengan anda.\nLihat: %s\n\n",
"The share will expire on %s." : "Pembagian akan berakhir pada %s.",
"Cheers!" : "Horee!",
+ "Use the following link to reset your password: {link}" : "Gunakan tautan berikut untuk menyetel ulang sandi Anda: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hai,<br><br>hanya memberi tahu jika %s membagikan <strong>%s</strong> dengan Anda.<br><a href=\"%s\">Lihat!</a><br><br>"
},
"nplurals=1; plural=0;");
diff --git a/core/l10n/id.json b/core/l10n/id.json
index 75a3ed238f7..010332f9fb8 100644
--- a/core/l10n/id.json
+++ b/core/l10n/id.json
@@ -243,7 +243,6 @@
"Log in" : "Masuk",
"Stay logged in" : "Tetap masuk",
"Alternative Logins" : "Cara Alternatif untuk Masuk",
- "Use the following link to reset your password: {link}" : "Gunakan tautan berikut untuk menyetel ulang sandi Anda: {link}",
"New password" : "Sandi baru",
"New Password" : "Sandi Baru",
"Reset password" : "Setel ulang sandi",
@@ -288,6 +287,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hai,\n\nhanya supaya anda tahu bahwa %s membagikan %s dengan anda.\nLihat: %s\n\n",
"The share will expire on %s." : "Pembagian akan berakhir pada %s.",
"Cheers!" : "Horee!",
+ "Use the following link to reset your password: {link}" : "Gunakan tautan berikut untuk menyetel ulang sandi Anda: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hai,<br><br>hanya memberi tahu jika %s membagikan <strong>%s</strong> dengan Anda.<br><a href=\"%s\">Lihat!</a><br><br>"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/core/l10n/is.js b/core/l10n/is.js
index f875d12ce2a..e0e46556bcf 100644
--- a/core/l10n/is.js
+++ b/core/l10n/is.js
@@ -254,7 +254,6 @@ OC.L10N.register(
"Log in" : "Skrá inn",
"Stay logged in" : "Haldast skráður inn",
"Alternative Logins" : "Aðrar innskráningar",
- "Use the following link to reset your password: {link}" : "Notað eftirfarandi veftengil til að endursetja lykilorðið þitt: {link}",
"New password" : "Nýtt lykilorð",
"New Password" : "Nýtt lykilorð",
"Reset password" : "Endursetja lykilorð",
@@ -299,6 +298,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Sælir,\n\nbara láta þig vita að %s deildi %s með þér.\n\nSkoðaðu það: %s\n\n",
"The share will expire on %s." : "Gildistími sameignar rennur út %s.",
"Cheers!" : "Skál!",
+ "Use the following link to reset your password: {link}" : "Notað eftirfarandi veftengil til að endursetja lykilorðið þitt: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hæ þú,<br><br>bara að láta þig vita að %s deildi <strong>%s</strong> með þér.<br><a href=\"%s\">Skoðaðu það!</a><br><br>"
},
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
diff --git a/core/l10n/is.json b/core/l10n/is.json
index 0a39b3fd24f..8a3120b2efd 100644
--- a/core/l10n/is.json
+++ b/core/l10n/is.json
@@ -252,7 +252,6 @@
"Log in" : "Skrá inn",
"Stay logged in" : "Haldast skráður inn",
"Alternative Logins" : "Aðrar innskráningar",
- "Use the following link to reset your password: {link}" : "Notað eftirfarandi veftengil til að endursetja lykilorðið þitt: {link}",
"New password" : "Nýtt lykilorð",
"New Password" : "Nýtt lykilorð",
"Reset password" : "Endursetja lykilorð",
@@ -297,6 +296,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Sælir,\n\nbara láta þig vita að %s deildi %s með þér.\n\nSkoðaðu það: %s\n\n",
"The share will expire on %s." : "Gildistími sameignar rennur út %s.",
"Cheers!" : "Skál!",
+ "Use the following link to reset your password: {link}" : "Notað eftirfarandi veftengil til að endursetja lykilorðið þitt: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hæ þú,<br><br>bara að láta þig vita að %s deildi <strong>%s</strong> með þér.<br><a href=\"%s\">Skoðaðu það!</a><br><br>"
},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
} \ No newline at end of file
diff --git a/core/l10n/it.js b/core/l10n/it.js
index 342ad7904e5..03bfc8f8870 100644
--- a/core/l10n/it.js
+++ b/core/l10n/it.js
@@ -259,7 +259,6 @@ OC.L10N.register(
"Log in" : "Accedi",
"Stay logged in" : "Rimani collegato",
"Alternative Logins" : "Accessi alternativi",
- "Use the following link to reset your password: {link}" : "Usa il collegamento seguente per ripristinare la password: {link}",
"New password" : "Nuova password",
"New Password" : "Nuova password",
"Reset password" : "Ripristina la password",
@@ -304,6 +303,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Ciao,\n\nvolevo informarti che %s ha condiviso %s con te.\nVedi: %s\n\n",
"The share will expire on %s." : "La condivisione scadrà il %s.",
"Cheers!" : "Saluti!",
+ "Use the following link to reset your password: {link}" : "Usa il collegamento seguente per ripristinare la password: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Ciao,<br><br>volevo informarti che %s ha condiviso <strong>%s</strong> con te.<br><a href=\"%s\">Guarda!</a><br><br>"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/it.json b/core/l10n/it.json
index 3cf98f345d5..d88bb0c4dcc 100644
--- a/core/l10n/it.json
+++ b/core/l10n/it.json
@@ -257,7 +257,6 @@
"Log in" : "Accedi",
"Stay logged in" : "Rimani collegato",
"Alternative Logins" : "Accessi alternativi",
- "Use the following link to reset your password: {link}" : "Usa il collegamento seguente per ripristinare la password: {link}",
"New password" : "Nuova password",
"New Password" : "Nuova password",
"Reset password" : "Ripristina la password",
@@ -302,6 +301,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Ciao,\n\nvolevo informarti che %s ha condiviso %s con te.\nVedi: %s\n\n",
"The share will expire on %s." : "La condivisione scadrà il %s.",
"Cheers!" : "Saluti!",
+ "Use the following link to reset your password: {link}" : "Usa il collegamento seguente per ripristinare la password: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Ciao,<br><br>volevo informarti che %s ha condiviso <strong>%s</strong> con te.<br><a href=\"%s\">Guarda!</a><br><br>"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/ja.js b/core/l10n/ja.js
index 259bba1b0e1..1bb8efffe51 100644
--- a/core/l10n/ja.js
+++ b/core/l10n/ja.js
@@ -254,7 +254,6 @@ OC.L10N.register(
"Log in" : "ログイン",
"Stay logged in" : "ログインしたままにする",
"Alternative Logins" : "代替ログイン",
- "Use the following link to reset your password: {link}" : "パスワードをリセットするには次のリンクをクリックしてください: {link}",
"New password" : "新しいパスワードを入力",
"New Password" : "新しいパスワード",
"Reset password" : "パスワードをリセット",
@@ -299,6 +298,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "こんにちは、\n\n%s があなたと %s を共有したことをお知らせします。\nそれを表示: %s\n",
"The share will expire on %s." : "共有は %s で有効期限が切れます。",
"Cheers!" : "それでは!",
+ "Use the following link to reset your password: {link}" : "パスワードをリセットするには次のリンクをクリックしてください: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "こんにちは、<br><br>%sがあなたと »%s« を共有したことをお知らせします。<br><a href=\"%s\">それを表示</a><br><br>"
},
"nplurals=1; plural=0;");
diff --git a/core/l10n/ja.json b/core/l10n/ja.json
index 698f41cc82d..33feb89ff26 100644
--- a/core/l10n/ja.json
+++ b/core/l10n/ja.json
@@ -252,7 +252,6 @@
"Log in" : "ログイン",
"Stay logged in" : "ログインしたままにする",
"Alternative Logins" : "代替ログイン",
- "Use the following link to reset your password: {link}" : "パスワードをリセットするには次のリンクをクリックしてください: {link}",
"New password" : "新しいパスワードを入力",
"New Password" : "新しいパスワード",
"Reset password" : "パスワードをリセット",
@@ -297,6 +296,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "こんにちは、\n\n%s があなたと %s を共有したことをお知らせします。\nそれを表示: %s\n",
"The share will expire on %s." : "共有は %s で有効期限が切れます。",
"Cheers!" : "それでは!",
+ "Use the following link to reset your password: {link}" : "パスワードをリセットするには次のリンクをクリックしてください: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "こんにちは、<br><br>%sがあなたと »%s« を共有したことをお知らせします。<br><a href=\"%s\">それを表示</a><br><br>"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/core/l10n/ko.js b/core/l10n/ko.js
index 9f3c00f9015..a2b0309e6ac 100644
--- a/core/l10n/ko.js
+++ b/core/l10n/ko.js
@@ -225,7 +225,6 @@ OC.L10N.register(
"Log in" : "로그인",
"Stay logged in" : "로그인 유지",
"Alternative Logins" : "대체 로그인",
- "Use the following link to reset your password: {link}" : "다음 링크를 사용하여 암호를 재설정할 수 있습니다: {link}",
"New password" : "새 암호",
"New Password" : "새 암호",
"Reset password" : "암호 재설정",
@@ -266,6 +265,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "안녕하세요,\n\n%s 님이 %s을(를) 공유하였음을 알려 드립니다.\n보기 링크: %s\n\n",
"The share will expire on %s." : "이 공유는 %s 까지 유지됩니다.",
"Cheers!" : "감사합니다!",
+ "Use the following link to reset your password: {link}" : "다음 링크를 사용하여 암호를 재설정할 수 있습니다: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "안녕하세요,<br><br>%s 님이 <strong>%s</strong>을(를) 공유하였음을 알려 드립니다.<br><a href=\"%s\">보러 가기!</a><br><br>"
},
"nplurals=1; plural=0;");
diff --git a/core/l10n/ko.json b/core/l10n/ko.json
index 99649582411..55cb40e5a69 100644
--- a/core/l10n/ko.json
+++ b/core/l10n/ko.json
@@ -223,7 +223,6 @@
"Log in" : "로그인",
"Stay logged in" : "로그인 유지",
"Alternative Logins" : "대체 로그인",
- "Use the following link to reset your password: {link}" : "다음 링크를 사용하여 암호를 재설정할 수 있습니다: {link}",
"New password" : "새 암호",
"New Password" : "새 암호",
"Reset password" : "암호 재설정",
@@ -264,6 +263,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "안녕하세요,\n\n%s 님이 %s을(를) 공유하였음을 알려 드립니다.\n보기 링크: %s\n\n",
"The share will expire on %s." : "이 공유는 %s 까지 유지됩니다.",
"Cheers!" : "감사합니다!",
+ "Use the following link to reset your password: {link}" : "다음 링크를 사용하여 암호를 재설정할 수 있습니다: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "안녕하세요,<br><br>%s 님이 <strong>%s</strong>을(를) 공유하였음을 알려 드립니다.<br><a href=\"%s\">보러 가기!</a><br><br>"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/core/l10n/lv.js b/core/l10n/lv.js
index 70961cca037..d2c155f5a68 100644
--- a/core/l10n/lv.js
+++ b/core/l10n/lv.js
@@ -202,7 +202,6 @@ OC.L10N.register(
"Log in" : "Ierakstīties",
"Stay logged in" : "Palikt ierakstītam",
"Alternative Logins" : "Alternatīvās pieteikšanās",
- "Use the following link to reset your password: {link}" : "Izmantojiet šo saiti, lai mainītu paroli: {link}",
"New password" : "Jauna parole",
"New Password" : "Jauna parole",
"Reset password" : "Mainīt paroli",
@@ -235,6 +234,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Sveiki,\n\ninformējam, ka %s koplietoja ar jums %s.\nApskati to: %s\n",
"The share will expire on %s." : "Koplietošana beigsies %s.",
"Cheers!" : "Priekā!",
+ "Use the following link to reset your password: {link}" : "Izmantojiet šo saiti, lai mainītu paroli: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Sveiki,<br><br>informējam, ka %s koplietoja ar jums <strong>%s</strong>.<br><a href=\"%s\">Apskati to!</a><br><br>"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);");
diff --git a/core/l10n/lv.json b/core/l10n/lv.json
index 2689e8bd1b0..17bf9dd00e3 100644
--- a/core/l10n/lv.json
+++ b/core/l10n/lv.json
@@ -200,7 +200,6 @@
"Log in" : "Ierakstīties",
"Stay logged in" : "Palikt ierakstītam",
"Alternative Logins" : "Alternatīvās pieteikšanās",
- "Use the following link to reset your password: {link}" : "Izmantojiet šo saiti, lai mainītu paroli: {link}",
"New password" : "Jauna parole",
"New Password" : "Jauna parole",
"Reset password" : "Mainīt paroli",
@@ -233,6 +232,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Sveiki,\n\ninformējam, ka %s koplietoja ar jums %s.\nApskati to: %s\n",
"The share will expire on %s." : "Koplietošana beigsies %s.",
"Cheers!" : "Priekā!",
+ "Use the following link to reset your password: {link}" : "Izmantojiet šo saiti, lai mainītu paroli: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Sveiki,<br><br>informējam, ka %s koplietoja ar jums <strong>%s</strong>.<br><a href=\"%s\">Apskati to!</a><br><br>"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"
} \ No newline at end of file
diff --git a/core/l10n/nb.js b/core/l10n/nb.js
index ec3eaf75bef..2d0f3cd6789 100644
--- a/core/l10n/nb.js
+++ b/core/l10n/nb.js
@@ -10,13 +10,15 @@ OC.L10N.register(
"Unknown filetype" : "Ukjent filtype",
"Invalid image" : "Ugyldig bilde",
"An error occurred. Please contact your admin." : "Det oppstod en feil. Kontakt din administrator.",
- "No temporary profile picture available, try again" : "Foreløpig profilbilde ikke tilgjengelig. Prøv igjen",
+ "No temporary profile picture available, try again" : "Midlertidig profilbilde ikke tilgjengelig. Prøv igjen",
"No crop data provided" : "Ingen beskjæringsinformasjon angitt",
"No valid crop data provided" : "Ingen gyldige beskjæringsdata oppgitt",
"Crop is not square" : "Beskjæringen er ikke kvadratisk",
- "Couldn't reset password because the token is invalid" : "Klarte ikke å tilbakestille passordet fordi token er ugyldig.",
- "Couldn't reset password because the token is expired" : "Klarte ikke å tilbakestille passordet fordi token er utløpt.",
+ "Couldn't reset password because the token is invalid" : "Klarte ikke å tilbakestille passordet fordi symbolet er ugyldig.",
+ "Couldn't reset password because the token is expired" : "Klarte ikke å tilbakestille passordet fordi symbolet er utløpt.",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Klarte ikke å sende e-post for tilbakestilling av passord fordi det ikke finnes noen e-postadresse for dette brukernavnet. Kontakt administratoren din.",
+ "Password reset" : "Tilbakestilling av passord",
+ "Reset your password" : "Tilbakestill passordet ditt",
"%s password reset" : "%s tilbakestilling av passord",
"Couldn't send reset email. Please contact your administrator." : "Klarte ikke å sende e-post for tilbakestilling. Kontakt administratoren.",
"Couldn't send reset email. Please make sure your username is correct." : "Klarte ikke å sende e-post for tilbakestilling av passord. Sjekk at brukernavnet ditt er korrekt.",
@@ -33,23 +35,23 @@ OC.L10N.register(
"Updated database" : "Oppdaterte databasen",
"Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Sjekker om databaseskjemaet kan oppdateres (dette kan ta lang tid hvis databasen er stor)",
"Checked database schema update" : "Sjekket oppdatering av databaseskjema",
- "Checking updates of apps" : "Ser etter oppdateringer av applikasjoner",
+ "Checking updates of apps" : "Ser etter oppdateringer av programmer",
"Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Sjekker om databaseskjemaet for %s kan oppdateres (dette kan ta lang tid hvis databasen er stor)",
- "Checked database schema update for apps" : "Sjekket databaseskjema-oppdatering for apper",
+ "Checked database schema update for apps" : "Sjekket databaseskjema-oppdatering for programmer",
"Updated \"%s\" to %s" : "Oppdaterte \"%s\" til %s",
"Set log level to debug" : "Sett loggnivå til feilsøking",
"Reset log level" : "Nullstill loggnivå",
"Starting code integrity check" : "Starter sjekk av kode-integritet",
- "Finished code integrity check" : "Ferdig med sjekk av kode-integritet",
+ "Finished code integrity check" : "Fullførte sjekk av kodeintegritet",
"%s (3rdparty)" : "%s (3dje-part)",
"%s (incompatible)" : "%s (ikke kompatibel)",
- "Following apps have been disabled: %s" : "Følgende apper har blitt deaktivert: %s",
+ "Following apps have been disabled: %s" : "Følgende programmer har blitt avskrudd: %s",
"Already up to date" : "Allerede oppdatert",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Det oppstod problemer med sjekk av kode-integritet. Mer informasjon…</a>",
"Settings" : "Innstillinger",
"Connection to server lost" : "Mistet tilkobling til tjener",
"_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problem ved lasting av side, laster på nytt om %n sekund","Problem ved lasting av side, laster på nytt om %n sekunder"],
- "Saving..." : "Lagrer...",
+ "Saving..." : "Lagrer…",
"Dismiss" : "Forkast",
"This action requires you to confirm your password" : "Denne handlingen krever at du bekrefter ditt passord",
"Authentication required" : "Autentisering påkrevd",
@@ -68,7 +70,7 @@ OC.L10N.register(
"No files in here" : "Ingen filer her",
"Choose" : "Velg",
"Error loading file picker template: {error}" : "Feil ved lasting av filvelger-mal: {error}",
- "Ok" : "Ok",
+ "Ok" : "OK",
"Error loading message template: {error}" : "Feil ved lasting av meldingsmal: {error}",
"read-only" : "skrivebeskyttet",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} filkonflikt","{count} filkonflikter"],
@@ -84,18 +86,18 @@ OC.L10N.register(
"Pending" : "Venter",
"Very weak password" : "Veldig svakt passord",
"Weak password" : "Svakt passord",
- "So-so password" : "So-so-passord",
+ "So-so password" : "Bob-bob-passord",
"Good password" : "Bra passord",
"Strong password" : "Sterkt passord",
- "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web-serveren din er ikke satt opp til å tillate synkronisering av filer ennå, fordi WebDAV-grensesnittet ikke ser ut til å virke.",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Din webtjener er ikke satt opp korrekt for å hente \"{url}\". Mer informasjon finner du i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</a>.",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Vev-tjeneren din er ikke satt opp til å tillate synkronisering av filer ennå, fordi WebDAV-grensesnittet ikke ser ut til å virke.",
+ "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Din vevtjener er ikke satt opp korrekt for å hente \"{url}\". Mer informasjon finner du i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</a>.",
"This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Denne serveren har ingen fungerende internett-forbindelse. Dette betyr at noen funksjoner, som tilknytning av eksterne lagre, varslinger om oppdateringer eller installering av tredjeparts apper ikke vil virke. Fjerntilgang til filer og utsending av varsler på e-post vil kanskje ikke virke heller. Vi anbefaler å aktivere en internett-forbindelse for denne serveren hvis du vil ha full funksjonalitet.",
"No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Ingen hurtigminne har blitt satt opp. For å øke ytelsen bør du sette opp et hurtigminne hvis det er tilgjengelig. Mer informasjon finnes i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</a>.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "/dev/urandom er ikke lesbar for PHP, noe som frarådes av sikkerhetsgrunner. Mer informasjon finnes i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</a>.",
"You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Du bruker PHP versjonen {version}. Vi anbefaler deg å oppgradere PHP versjonen for å utnytte <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\"> ytelse og sikkerhetsoppdateringer som tilbys av PHP Group</a>, så fort din distribusjon støtter det.",
"Error occurred while checking server setup" : "Feil oppstod ved sjekking av tjener-oppsett",
- "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Vi anbefaler sterkt at du konfigurerer web-serveren slik at datamappen ikke kan aksesseres eller at du flytter datamappen ut av web-serverens dokumentrot.",
- "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-header \"{header}\" er ikke konfigurert lik \"{expected}\". Dette kan være en sikkerhetsrisiko og vi anbefaler at denne innstillingen endres.",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Det anbefales sterkt at du setter opp vev-tjeneren slik at datamappen ikke kan aksesseres eller at du flytter datamappen ut av vev-tjenerens dokumentrot.",
+ "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-header \"{header}\" er ikke satt opp lik \"{expected}\". Dette kan være en sikkerhetsrisiko og vi anbefaler at denne innstillingen endres.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Du aksesserer denne nettsiden via HTTP. Vi anbefaler på det sterkeste at du konfigurerer tjeneren til å kreve HTTPS i stedet, som beskrevet i <a href=\"{docUrl}\">sikkerhetstips</a>.",
"Shared" : "Delt",
"Shared with {recipients}" : "Delt med {recipients}",
@@ -120,7 +122,7 @@ OC.L10N.register(
"Password protect" : "Passordbeskyttet",
"Allow upload and editing" : "Tillatt opplasting og redigering",
"Allow editing" : "Tillat redigering",
- "Email link to person" : "Email lenke til person",
+ "Email link to person" : "Send lenke til person via e-post",
"Send" : "Send",
"Shared with you and the group {group} by {owner}" : "Delt med deg og gruppen {group} av {owner}",
"Shared with you by {owner}" : "Delt med deg av {owner}",
@@ -129,6 +131,11 @@ OC.L10N.register(
"remote" : "ekstern",
"email" : "e-post",
"Unshare" : "Avslutt deling",
+ "Can edit" : "Kan endre",
+ "Can create" : "Kan opprette",
+ "Can change" : "Kan endre",
+ "Can delete" : "Kan slette",
+ "Access control" : "Tilgangskontroll",
"Could not unshare" : "Kunne ikke avslutte deling",
"Share details could not be loaded for this item." : "Klarte ikke å laste inn detaljer om deling for dette elementet.",
"_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Minst {count} tegn er nødvendig for autofullføring","Minst {count} antall tegn er nødvendig for autofullføring"],
@@ -166,7 +173,7 @@ OC.L10N.register(
"Error loading dialog template: {error}" : "Feil ved lasting av dialogmal: {error}",
"No tags selected for deletion." : "Ingen merkelapper valgt for sletting.",
"unknown text" : "ukjent tekst",
- "Hello world!" : "Hei, Verden!",
+ "Hello world!" : "Hei, verden!",
"sunny" : "solfylt",
"Hello {name}, the weather is {weather}" : "Hallo {name}, været er {weather}",
"Hello {name}" : "Hallo {name}",
@@ -176,7 +183,7 @@ OC.L10N.register(
"The update is in progress, leaving this page might interrupt the process in some environments." : "En oppdatering foregår, lukking av denne siden kan forstyrre prosessen på enkelte systemer.",
"Update to {version}" : "Oppdater til {version}",
"An error occurred." : "En feil oppstod.",
- "Please reload the page." : "Vennligst last siden på nytt.",
+ "Please reload the page." : "Last inn siden på nytt.",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Oppdateringen var mislykket. For mer informasjon <a href=\"{url}\">se vår forum-artikkel</a> som beskriver dette problemet.",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Oppdateringen feilet. Vennligst rapporter dette problemet til <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud miljøet</a>.",
"Continue to Nextcloud" : "Fortsett til Nextcloud",
@@ -186,7 +193,7 @@ OC.L10N.register(
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} søkeresultat i en annen mappe","{count} søkeresultater i andre mapper"],
"Personal" : "Personlig",
"Users" : "Brukere",
- "Apps" : "Apper",
+ "Apps" : "Programmer",
"Admin" : "Admin",
"Help" : "Hjelp",
"Access forbidden" : "Tilgang nektet",
@@ -205,7 +212,6 @@ OC.L10N.register(
"Message: %s" : "Melding: %s",
"File: %s" : "Fil: %s",
"Line: %s" : "Linje: %s",
- "Trace" : "Trace",
"Security warning" : "Sikkerhetsadvarsel",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datamappen og filene dine er sannsynligvis tilgjengelig fra Internett fordi .htaccess-filen ikke fungerer.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "For informasjon om hvordan du skal konfigurere tjeneren skikkelig, vennligst se i <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dokumentasjonen</a>.",
@@ -213,31 +219,31 @@ OC.L10N.register(
"Username" : "Brukernavn",
"Storage & database" : "Lagring og database",
"Data folder" : "Datamappe",
- "Configure the database" : "Konfigurer databasen",
+ "Configure the database" : "Sett opp databasen",
"Only %s is available." : "Kun %s er tilgjengelig.",
"Install and activate additional PHP modules to choose other database types." : "Installer og aktiver flere PHP-moduler for å velge andre databasetyper.",
"For more details check out the documentation." : "Sjekk dokumentasjonen for flere detaljer.",
"Database user" : "Databasebruker",
"Database password" : "Databasepassord",
"Database name" : "Databasenavn",
- "Database tablespace" : "Database tabellområde",
+ "Database tablespace" : "Database-tabellområde",
"Database host" : "Databasevert",
"Please specify the port number along with the host name (e.g., localhost:5432)." : "Vennligst spesifiser portnr. sammen med tjenernavnet (eks., localhost:5432).",
"Performance warning" : "Ytelsesadvarsel",
"SQLite will be used as database." : "SQLite vil bli brukt som database.",
"For larger installations we recommend to choose a different database backend." : "For større installasjoner anbefaler vi å velge en annen database.",
- "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "SQLite er spesielt frarådet om man bruker desktopklienten til filsynkronisering",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "SQLite er spesielt frarådet om man bruker skrivebordsklienten til filsynkronisering",
"Finish setup" : "Fullfør oppsetting",
- "Finishing …" : "Ferdigstiller ...",
+ "Finishing …" : "Ferdigstiller…",
"Need help?" : "Trenger du hjelp?",
"See the documentation" : "Se dokumentasjonen",
- "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikasjonen krever JavaScript for å fungere korrekt. Vennligst {linkstart}aktiver JavaScript{linkend} og last siden på nytt.",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikasjonen krever JavaScript for å fungere korrekt. {linkstart}Aktiver JavaScript{linkend} og last siden på nytt.",
"More apps" : "Flere apper",
"Search" : "Søk",
"This action requires you to confirm your password:" : "Denne handlingen krever at du bekrefter ditt passord:",
"Confirm your password" : "Bekreft ditt passord",
"Server side authentication failed!" : "Autentisering feilet på tjeneren!",
- "Please contact your administrator." : "Vennligst kontakt administratoren din.",
+ "Please contact your administrator." : "Kontakt administratoren din.",
"An internal error occurred." : "En intern feil oppstod",
"Please try again or contact your administrator." : "Prøv igjen eller kontakt en administrator.",
"Username or email" : "Brukernavn eller e-post",
@@ -246,7 +252,6 @@ OC.L10N.register(
"Log in" : "Logg inn",
"Stay logged in" : "Forbli innlogget",
"Alternative Logins" : "Alternative innlogginger",
- "Use the following link to reset your password: {link}" : "Bruk følgende lenke for å tilbakestille passordet ditt: {link}",
"New password" : "Nytt passord",
"New Password" : "Nytt passord",
"Reset password" : "Tilbakestill passord",
@@ -291,6 +296,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hei,\n\nDette er en beskjed om at %s delte %s med deg.\nVis den: %s\n\n",
"The share will expire on %s." : "Delingen vil opphøre %s.",
"Cheers!" : "Ha det!",
+ "Use the following link to reset your password: {link}" : "Bruk følgende lenke for å tilbakestille passordet ditt: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hei,<br><br>Dette er en beskjed om at %s delte <strong>%s</strong> med deg.<br><a href=\"%s\">Vis den!</a><br><br>"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/nb.json b/core/l10n/nb.json
index ce051fbee48..2f3819f2647 100644
--- a/core/l10n/nb.json
+++ b/core/l10n/nb.json
@@ -8,13 +8,15 @@
"Unknown filetype" : "Ukjent filtype",
"Invalid image" : "Ugyldig bilde",
"An error occurred. Please contact your admin." : "Det oppstod en feil. Kontakt din administrator.",
- "No temporary profile picture available, try again" : "Foreløpig profilbilde ikke tilgjengelig. Prøv igjen",
+ "No temporary profile picture available, try again" : "Midlertidig profilbilde ikke tilgjengelig. Prøv igjen",
"No crop data provided" : "Ingen beskjæringsinformasjon angitt",
"No valid crop data provided" : "Ingen gyldige beskjæringsdata oppgitt",
"Crop is not square" : "Beskjæringen er ikke kvadratisk",
- "Couldn't reset password because the token is invalid" : "Klarte ikke å tilbakestille passordet fordi token er ugyldig.",
- "Couldn't reset password because the token is expired" : "Klarte ikke å tilbakestille passordet fordi token er utløpt.",
+ "Couldn't reset password because the token is invalid" : "Klarte ikke å tilbakestille passordet fordi symbolet er ugyldig.",
+ "Couldn't reset password because the token is expired" : "Klarte ikke å tilbakestille passordet fordi symbolet er utløpt.",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Klarte ikke å sende e-post for tilbakestilling av passord fordi det ikke finnes noen e-postadresse for dette brukernavnet. Kontakt administratoren din.",
+ "Password reset" : "Tilbakestilling av passord",
+ "Reset your password" : "Tilbakestill passordet ditt",
"%s password reset" : "%s tilbakestilling av passord",
"Couldn't send reset email. Please contact your administrator." : "Klarte ikke å sende e-post for tilbakestilling. Kontakt administratoren.",
"Couldn't send reset email. Please make sure your username is correct." : "Klarte ikke å sende e-post for tilbakestilling av passord. Sjekk at brukernavnet ditt er korrekt.",
@@ -31,23 +33,23 @@
"Updated database" : "Oppdaterte databasen",
"Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Sjekker om databaseskjemaet kan oppdateres (dette kan ta lang tid hvis databasen er stor)",
"Checked database schema update" : "Sjekket oppdatering av databaseskjema",
- "Checking updates of apps" : "Ser etter oppdateringer av applikasjoner",
+ "Checking updates of apps" : "Ser etter oppdateringer av programmer",
"Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Sjekker om databaseskjemaet for %s kan oppdateres (dette kan ta lang tid hvis databasen er stor)",
- "Checked database schema update for apps" : "Sjekket databaseskjema-oppdatering for apper",
+ "Checked database schema update for apps" : "Sjekket databaseskjema-oppdatering for programmer",
"Updated \"%s\" to %s" : "Oppdaterte \"%s\" til %s",
"Set log level to debug" : "Sett loggnivå til feilsøking",
"Reset log level" : "Nullstill loggnivå",
"Starting code integrity check" : "Starter sjekk av kode-integritet",
- "Finished code integrity check" : "Ferdig med sjekk av kode-integritet",
+ "Finished code integrity check" : "Fullførte sjekk av kodeintegritet",
"%s (3rdparty)" : "%s (3dje-part)",
"%s (incompatible)" : "%s (ikke kompatibel)",
- "Following apps have been disabled: %s" : "Følgende apper har blitt deaktivert: %s",
+ "Following apps have been disabled: %s" : "Følgende programmer har blitt avskrudd: %s",
"Already up to date" : "Allerede oppdatert",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Det oppstod problemer med sjekk av kode-integritet. Mer informasjon…</a>",
"Settings" : "Innstillinger",
"Connection to server lost" : "Mistet tilkobling til tjener",
"_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problem ved lasting av side, laster på nytt om %n sekund","Problem ved lasting av side, laster på nytt om %n sekunder"],
- "Saving..." : "Lagrer...",
+ "Saving..." : "Lagrer…",
"Dismiss" : "Forkast",
"This action requires you to confirm your password" : "Denne handlingen krever at du bekrefter ditt passord",
"Authentication required" : "Autentisering påkrevd",
@@ -66,7 +68,7 @@
"No files in here" : "Ingen filer her",
"Choose" : "Velg",
"Error loading file picker template: {error}" : "Feil ved lasting av filvelger-mal: {error}",
- "Ok" : "Ok",
+ "Ok" : "OK",
"Error loading message template: {error}" : "Feil ved lasting av meldingsmal: {error}",
"read-only" : "skrivebeskyttet",
"_{count} file conflict_::_{count} file conflicts_" : ["{count} filkonflikt","{count} filkonflikter"],
@@ -82,18 +84,18 @@
"Pending" : "Venter",
"Very weak password" : "Veldig svakt passord",
"Weak password" : "Svakt passord",
- "So-so password" : "So-so-passord",
+ "So-so password" : "Bob-bob-passord",
"Good password" : "Bra passord",
"Strong password" : "Sterkt passord",
- "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web-serveren din er ikke satt opp til å tillate synkronisering av filer ennå, fordi WebDAV-grensesnittet ikke ser ut til å virke.",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Din webtjener er ikke satt opp korrekt for å hente \"{url}\". Mer informasjon finner du i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</a>.",
+ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Vev-tjeneren din er ikke satt opp til å tillate synkronisering av filer ennå, fordi WebDAV-grensesnittet ikke ser ut til å virke.",
+ "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Din vevtjener er ikke satt opp korrekt for å hente \"{url}\". Mer informasjon finner du i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</a>.",
"This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Denne serveren har ingen fungerende internett-forbindelse. Dette betyr at noen funksjoner, som tilknytning av eksterne lagre, varslinger om oppdateringer eller installering av tredjeparts apper ikke vil virke. Fjerntilgang til filer og utsending av varsler på e-post vil kanskje ikke virke heller. Vi anbefaler å aktivere en internett-forbindelse for denne serveren hvis du vil ha full funksjonalitet.",
"No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Ingen hurtigminne har blitt satt opp. For å øke ytelsen bør du sette opp et hurtigminne hvis det er tilgjengelig. Mer informasjon finnes i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</a>.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "/dev/urandom er ikke lesbar for PHP, noe som frarådes av sikkerhetsgrunner. Mer informasjon finnes i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</a>.",
"You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Du bruker PHP versjonen {version}. Vi anbefaler deg å oppgradere PHP versjonen for å utnytte <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\"> ytelse og sikkerhetsoppdateringer som tilbys av PHP Group</a>, så fort din distribusjon støtter det.",
"Error occurred while checking server setup" : "Feil oppstod ved sjekking av tjener-oppsett",
- "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Vi anbefaler sterkt at du konfigurerer web-serveren slik at datamappen ikke kan aksesseres eller at du flytter datamappen ut av web-serverens dokumentrot.",
- "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-header \"{header}\" er ikke konfigurert lik \"{expected}\". Dette kan være en sikkerhetsrisiko og vi anbefaler at denne innstillingen endres.",
+ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Det anbefales sterkt at du setter opp vev-tjeneren slik at datamappen ikke kan aksesseres eller at du flytter datamappen ut av vev-tjenerens dokumentrot.",
+ "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-header \"{header}\" er ikke satt opp lik \"{expected}\". Dette kan være en sikkerhetsrisiko og vi anbefaler at denne innstillingen endres.",
"You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Du aksesserer denne nettsiden via HTTP. Vi anbefaler på det sterkeste at du konfigurerer tjeneren til å kreve HTTPS i stedet, som beskrevet i <a href=\"{docUrl}\">sikkerhetstips</a>.",
"Shared" : "Delt",
"Shared with {recipients}" : "Delt med {recipients}",
@@ -118,7 +120,7 @@
"Password protect" : "Passordbeskyttet",
"Allow upload and editing" : "Tillatt opplasting og redigering",
"Allow editing" : "Tillat redigering",
- "Email link to person" : "Email lenke til person",
+ "Email link to person" : "Send lenke til person via e-post",
"Send" : "Send",
"Shared with you and the group {group} by {owner}" : "Delt med deg og gruppen {group} av {owner}",
"Shared with you by {owner}" : "Delt med deg av {owner}",
@@ -127,6 +129,11 @@
"remote" : "ekstern",
"email" : "e-post",
"Unshare" : "Avslutt deling",
+ "Can edit" : "Kan endre",
+ "Can create" : "Kan opprette",
+ "Can change" : "Kan endre",
+ "Can delete" : "Kan slette",
+ "Access control" : "Tilgangskontroll",
"Could not unshare" : "Kunne ikke avslutte deling",
"Share details could not be loaded for this item." : "Klarte ikke å laste inn detaljer om deling for dette elementet.",
"_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Minst {count} tegn er nødvendig for autofullføring","Minst {count} antall tegn er nødvendig for autofullføring"],
@@ -164,7 +171,7 @@
"Error loading dialog template: {error}" : "Feil ved lasting av dialogmal: {error}",
"No tags selected for deletion." : "Ingen merkelapper valgt for sletting.",
"unknown text" : "ukjent tekst",
- "Hello world!" : "Hei, Verden!",
+ "Hello world!" : "Hei, verden!",
"sunny" : "solfylt",
"Hello {name}, the weather is {weather}" : "Hallo {name}, været er {weather}",
"Hello {name}" : "Hallo {name}",
@@ -174,7 +181,7 @@
"The update is in progress, leaving this page might interrupt the process in some environments." : "En oppdatering foregår, lukking av denne siden kan forstyrre prosessen på enkelte systemer.",
"Update to {version}" : "Oppdater til {version}",
"An error occurred." : "En feil oppstod.",
- "Please reload the page." : "Vennligst last siden på nytt.",
+ "Please reload the page." : "Last inn siden på nytt.",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Oppdateringen var mislykket. For mer informasjon <a href=\"{url}\">se vår forum-artikkel</a> som beskriver dette problemet.",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Oppdateringen feilet. Vennligst rapporter dette problemet til <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud miljøet</a>.",
"Continue to Nextcloud" : "Fortsett til Nextcloud",
@@ -184,7 +191,7 @@
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} søkeresultat i en annen mappe","{count} søkeresultater i andre mapper"],
"Personal" : "Personlig",
"Users" : "Brukere",
- "Apps" : "Apper",
+ "Apps" : "Programmer",
"Admin" : "Admin",
"Help" : "Hjelp",
"Access forbidden" : "Tilgang nektet",
@@ -203,7 +210,6 @@
"Message: %s" : "Melding: %s",
"File: %s" : "Fil: %s",
"Line: %s" : "Linje: %s",
- "Trace" : "Trace",
"Security warning" : "Sikkerhetsadvarsel",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datamappen og filene dine er sannsynligvis tilgjengelig fra Internett fordi .htaccess-filen ikke fungerer.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "For informasjon om hvordan du skal konfigurere tjeneren skikkelig, vennligst se i <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dokumentasjonen</a>.",
@@ -211,31 +217,31 @@
"Username" : "Brukernavn",
"Storage & database" : "Lagring og database",
"Data folder" : "Datamappe",
- "Configure the database" : "Konfigurer databasen",
+ "Configure the database" : "Sett opp databasen",
"Only %s is available." : "Kun %s er tilgjengelig.",
"Install and activate additional PHP modules to choose other database types." : "Installer og aktiver flere PHP-moduler for å velge andre databasetyper.",
"For more details check out the documentation." : "Sjekk dokumentasjonen for flere detaljer.",
"Database user" : "Databasebruker",
"Database password" : "Databasepassord",
"Database name" : "Databasenavn",
- "Database tablespace" : "Database tabellområde",
+ "Database tablespace" : "Database-tabellområde",
"Database host" : "Databasevert",
"Please specify the port number along with the host name (e.g., localhost:5432)." : "Vennligst spesifiser portnr. sammen med tjenernavnet (eks., localhost:5432).",
"Performance warning" : "Ytelsesadvarsel",
"SQLite will be used as database." : "SQLite vil bli brukt som database.",
"For larger installations we recommend to choose a different database backend." : "For større installasjoner anbefaler vi å velge en annen database.",
- "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "SQLite er spesielt frarådet om man bruker desktopklienten til filsynkronisering",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "SQLite er spesielt frarådet om man bruker skrivebordsklienten til filsynkronisering",
"Finish setup" : "Fullfør oppsetting",
- "Finishing …" : "Ferdigstiller ...",
+ "Finishing …" : "Ferdigstiller…",
"Need help?" : "Trenger du hjelp?",
"See the documentation" : "Se dokumentasjonen",
- "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikasjonen krever JavaScript for å fungere korrekt. Vennligst {linkstart}aktiver JavaScript{linkend} og last siden på nytt.",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikasjonen krever JavaScript for å fungere korrekt. {linkstart}Aktiver JavaScript{linkend} og last siden på nytt.",
"More apps" : "Flere apper",
"Search" : "Søk",
"This action requires you to confirm your password:" : "Denne handlingen krever at du bekrefter ditt passord:",
"Confirm your password" : "Bekreft ditt passord",
"Server side authentication failed!" : "Autentisering feilet på tjeneren!",
- "Please contact your administrator." : "Vennligst kontakt administratoren din.",
+ "Please contact your administrator." : "Kontakt administratoren din.",
"An internal error occurred." : "En intern feil oppstod",
"Please try again or contact your administrator." : "Prøv igjen eller kontakt en administrator.",
"Username or email" : "Brukernavn eller e-post",
@@ -244,7 +250,6 @@
"Log in" : "Logg inn",
"Stay logged in" : "Forbli innlogget",
"Alternative Logins" : "Alternative innlogginger",
- "Use the following link to reset your password: {link}" : "Bruk følgende lenke for å tilbakestille passordet ditt: {link}",
"New password" : "Nytt passord",
"New Password" : "Nytt passord",
"Reset password" : "Tilbakestill passord",
@@ -289,6 +294,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hei,\n\nDette er en beskjed om at %s delte %s med deg.\nVis den: %s\n\n",
"The share will expire on %s." : "Delingen vil opphøre %s.",
"Cheers!" : "Ha det!",
+ "Use the following link to reset your password: {link}" : "Bruk følgende lenke for å tilbakestille passordet ditt: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hei,<br><br>Dette er en beskjed om at %s delte <strong>%s</strong> med deg.<br><a href=\"%s\">Vis den!</a><br><br>"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/nl.js b/core/l10n/nl.js
index 00590ffceb5..3a60d199642 100644
--- a/core/l10n/nl.js
+++ b/core/l10n/nl.js
@@ -17,6 +17,10 @@ OC.L10N.register(
"Couldn't reset password because the token is invalid" : "Kon het wachtwoord niet herstellen, omdat het token ongeldig is",
"Couldn't reset password because the token is expired" : "Kon het wachtwoord niet herstellen, omdat het token verlopen is",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Kon geen herstel e-mail versturen, omdat er geen e-mailadres bekend is bij deze gebruikersnaam. Neem contact op met je beheerder.",
+ "Password reset" : "Herstel wachtwoord",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Klik op de volgende knop om je wachtwoord te herstellen. Als je geen wachtwoordherstel hebt aangevraagd, negeer dan dit e-mailbericht.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Klik op de volgende link om je wachtwoord te herstellen. Als je geen wachtwoordherstel hebt aangevraagd, negeer dan dit e-mailbericht.",
+ "Reset your password" : "Herstel je wachtwoord",
"%s password reset" : "%s reset wachtwoord",
"Couldn't send reset email. Please contact your administrator." : "Kon herstel e-mail niet versturen. Neem contact op met je beheerder.",
"Couldn't send reset email. Please make sure your username is correct." : "Kon e-mail niet versturen. Verifieer of je gebruikersnaam correct is.",
@@ -263,7 +267,6 @@ OC.L10N.register(
"Log in" : "Meld u aan",
"Stay logged in" : "Ingelogd blijven",
"Alternative Logins" : "Alternatieve inlogs",
- "Use the following link to reset your password: {link}" : "Gebruik de volgende link om je wachtwoord te resetten: {link}",
"New password" : "Nieuw wachtwoord",
"New Password" : "Nieuw wachtwoord",
"Reset password" : "Reset wachtwoord",
@@ -308,6 +311,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hallo daar,\n\n%s deelt %s met je.\nBekijk het hier: %s\n\n",
"The share will expire on %s." : "Het gedeelde vervalt op %s.",
"Cheers!" : "Proficiat!",
+ "Use the following link to reset your password: {link}" : "Gebruik de volgende link om je wachtwoord te resetten: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hallo daar,<br><br>%s deelde <strong>%s</strong> met je.<br><a href=\"%s\">Bekijk het hier!</a><br><br>"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/nl.json b/core/l10n/nl.json
index 3a53381e6b7..7cf609a467c 100644
--- a/core/l10n/nl.json
+++ b/core/l10n/nl.json
@@ -15,6 +15,10 @@
"Couldn't reset password because the token is invalid" : "Kon het wachtwoord niet herstellen, omdat het token ongeldig is",
"Couldn't reset password because the token is expired" : "Kon het wachtwoord niet herstellen, omdat het token verlopen is",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Kon geen herstel e-mail versturen, omdat er geen e-mailadres bekend is bij deze gebruikersnaam. Neem contact op met je beheerder.",
+ "Password reset" : "Herstel wachtwoord",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Klik op de volgende knop om je wachtwoord te herstellen. Als je geen wachtwoordherstel hebt aangevraagd, negeer dan dit e-mailbericht.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Klik op de volgende link om je wachtwoord te herstellen. Als je geen wachtwoordherstel hebt aangevraagd, negeer dan dit e-mailbericht.",
+ "Reset your password" : "Herstel je wachtwoord",
"%s password reset" : "%s reset wachtwoord",
"Couldn't send reset email. Please contact your administrator." : "Kon herstel e-mail niet versturen. Neem contact op met je beheerder.",
"Couldn't send reset email. Please make sure your username is correct." : "Kon e-mail niet versturen. Verifieer of je gebruikersnaam correct is.",
@@ -261,7 +265,6 @@
"Log in" : "Meld u aan",
"Stay logged in" : "Ingelogd blijven",
"Alternative Logins" : "Alternatieve inlogs",
- "Use the following link to reset your password: {link}" : "Gebruik de volgende link om je wachtwoord te resetten: {link}",
"New password" : "Nieuw wachtwoord",
"New Password" : "Nieuw wachtwoord",
"Reset password" : "Reset wachtwoord",
@@ -306,6 +309,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hallo daar,\n\n%s deelt %s met je.\nBekijk het hier: %s\n\n",
"The share will expire on %s." : "Het gedeelde vervalt op %s.",
"Cheers!" : "Proficiat!",
+ "Use the following link to reset your password: {link}" : "Gebruik de volgende link om je wachtwoord te resetten: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hallo daar,<br><br>%s deelde <strong>%s</strong> met je.<br><a href=\"%s\">Bekijk het hier!</a><br><br>"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/pl.js b/core/l10n/pl.js
index abfc1ea3121..e0ca01536ef 100644
--- a/core/l10n/pl.js
+++ b/core/l10n/pl.js
@@ -17,6 +17,10 @@ OC.L10N.register(
"Couldn't reset password because the token is invalid" : "Nie można zresetować hasła, ponieważ token jest niepoprawny",
"Couldn't reset password because the token is expired" : "Nie można zresetować hasła, ponieważ token wygasł",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Nie udało się wysłać ponownego e-maila, ponieważ nie ma adresu e-mail do tego użytkownika. Proszę skontaktować się z administratorem.",
+ "Password reset" : "Reset hasła",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Kliknij następujący przycisk, żeby zresetować hasło. Jeśli nie prosiłeś o zmianę hasła możesz zignorować tego e-maila.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Kliknij następujący przycisk, żeby zresetować hasło. Jeśli nie prosiłeś o zmianę hasła możesz zignorować tego e-maila.",
+ "Reset your password" : "Zresetuj hasło",
"%s password reset" : "%s reset hasła",
"Couldn't send reset email. Please contact your administrator." : "Nie mogę wysłać maila resetującego. Skontaktuj się z administratorem.",
"Couldn't send reset email. Please make sure your username is correct." : "Nie mogę wysłać maila resetującego. Sprawdź czy nazwa użytkownika jest poprawna.",
@@ -263,7 +267,6 @@ OC.L10N.register(
"Log in" : "Zaloguj",
"Stay logged in" : "Pozostań zalogowany",
"Alternative Logins" : "Alternatywne loginy",
- "Use the following link to reset your password: {link}" : "Użyj tego odnośnika by zresetować hasło: {link}",
"New password" : "Nowe hasło",
"New Password" : "Nowe hasło",
"Reset password" : "Zresetuj hasło",
@@ -308,6 +311,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Witaj,\n\ntylko informuję, że %s współdzieli z Tobą %s.\nZobacz tutaj: %s\n\n",
"The share will expire on %s." : "Ten zasób wygaśnie %s",
"Cheers!" : "Pozdrawiam!",
+ "Use the following link to reset your password: {link}" : "Użyj tego odnośnika by zresetować hasło: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Witam, <br><br>informuję, że %s udostępnianych zasobów <strong>%s</strong> jest z Tobą.<br><a href=\"%s\">Zobacz!</a><br><br>"
},
"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);");
diff --git a/core/l10n/pl.json b/core/l10n/pl.json
index 069f91e07fd..ac1fd96f247 100644
--- a/core/l10n/pl.json
+++ b/core/l10n/pl.json
@@ -15,6 +15,10 @@
"Couldn't reset password because the token is invalid" : "Nie można zresetować hasła, ponieważ token jest niepoprawny",
"Couldn't reset password because the token is expired" : "Nie można zresetować hasła, ponieważ token wygasł",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Nie udało się wysłać ponownego e-maila, ponieważ nie ma adresu e-mail do tego użytkownika. Proszę skontaktować się z administratorem.",
+ "Password reset" : "Reset hasła",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Kliknij następujący przycisk, żeby zresetować hasło. Jeśli nie prosiłeś o zmianę hasła możesz zignorować tego e-maila.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Kliknij następujący przycisk, żeby zresetować hasło. Jeśli nie prosiłeś o zmianę hasła możesz zignorować tego e-maila.",
+ "Reset your password" : "Zresetuj hasło",
"%s password reset" : "%s reset hasła",
"Couldn't send reset email. Please contact your administrator." : "Nie mogę wysłać maila resetującego. Skontaktuj się z administratorem.",
"Couldn't send reset email. Please make sure your username is correct." : "Nie mogę wysłać maila resetującego. Sprawdź czy nazwa użytkownika jest poprawna.",
@@ -261,7 +265,6 @@
"Log in" : "Zaloguj",
"Stay logged in" : "Pozostań zalogowany",
"Alternative Logins" : "Alternatywne loginy",
- "Use the following link to reset your password: {link}" : "Użyj tego odnośnika by zresetować hasło: {link}",
"New password" : "Nowe hasło",
"New Password" : "Nowe hasło",
"Reset password" : "Zresetuj hasło",
@@ -306,6 +309,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Witaj,\n\ntylko informuję, że %s współdzieli z Tobą %s.\nZobacz tutaj: %s\n\n",
"The share will expire on %s." : "Ten zasób wygaśnie %s",
"Cheers!" : "Pozdrawiam!",
+ "Use the following link to reset your password: {link}" : "Użyj tego odnośnika by zresetować hasło: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Witam, <br><br>informuję, że %s udostępnianych zasobów <strong>%s</strong> jest z Tobą.<br><a href=\"%s\">Zobacz!</a><br><br>"
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
} \ No newline at end of file
diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js
index be1d711da17..82f84d212a2 100644
--- a/core/l10n/pt_BR.js
+++ b/core/l10n/pt_BR.js
@@ -11,19 +11,23 @@ OC.L10N.register(
"Invalid image" : "Imagem inválida",
"An error occurred. Please contact your admin." : "Ocorreu um erro. Entre em contato com seu administrador.",
"No temporary profile picture available, try again" : "Nenhuma imagem temporária disponível no perfil, tente novamente",
- "No crop data provided" : "Nenhum dado para coleta foi fornecido",
+ "No crop data provided" : "Nenhum dado recortado fornecido",
"No valid crop data provided" : "Nenhum dado recortado válido",
"Crop is not square" : "Recorte não é quadrado",
"Couldn't reset password because the token is invalid" : "Não foi possível redefinir a senha porque o token é inválido",
"Couldn't reset password because the token is expired" : "Não foi possível redefinir a senha porque o token expirou",
- "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Não foi possível enviar email de redefinição porque não há nenhum endereço de e-mail para este nome de usuário. Entre em contato com o administrador.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Não foi possível enviar email de redefinição porque não há nenhum endereço de email para este nome de usuário. Entre em contato com o administrador.",
+ "Password reset" : "Redefinir a senha",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Clique no botão abaixo para redefinir sua senha. Se você não solicitou isso, ignore este email.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Clique no link abaixo para redefinir sua senha. Se você não solicitou isso, ignore este email.",
+ "Reset your password" : "Redefinir sua senha",
"%s password reset" : "%s redefinir senha",
- "Couldn't send reset email. Please contact your administrator." : "Não foi possível enviar e-mail de redefinição. Por favor, contate o administrador.",
- "Couldn't send reset email. Please make sure your username is correct." : "Não foi possível enviar e-mail de redefinição. Verifique se o seu nome de usuário está correto.",
- "Preparing update" : "Preparando atualização",
+ "Couldn't send reset email. Please contact your administrator." : "Não foi possível enviar o email de redefinição. Por favor, contate o administrador.",
+ "Couldn't send reset email. Please make sure your username is correct." : "Não foi possível enviar o email de redefinição. Verifique se o seu nome de usuário está correto.",
+ "Preparing update" : "Preparando a atualização",
"[%d / %d]: %s" : "[%d / %d]: %s",
- "Repair warning: " : "Aviso na reparação:",
- "Repair error: " : "Erro na reparação :",
+ "Repair warning: " : "Aviso da reparação:",
+ "Repair error: " : "Erro da reparação :",
"Please use the command line updater because automatic updating is disabled in the config.php." : "Por favor, use a atualização de linha de comando, porque a atualização automática está desativada no config.php.",
"[%d / %d]: Checking table %s" : "[%d / %d]: Verificando tabela %s",
"Turned on maintenance mode" : "Ativar o modo de manutenção",
@@ -31,14 +35,14 @@ OC.L10N.register(
"Maintenance mode is kept active" : "O modo de manutenção está sendo mantido como ativo",
"Updating database schema" : "Atualização de esquema do banco de dados",
"Updated database" : "Atualizar o banco de dados",
- "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Verificar se o esquema do banco de dados pode ser atualizado (isso pode levar muito tempo, dependendo do tamanho do banco de dados)",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Verificando se o esquema do banco de dados pode ser atualizado (isso pode levar muito tempo, dependendo do tamanho do banco de dados)",
"Checked database schema update" : "Verificada a atualização do esquema de banco de dados",
- "Checking updates of apps" : "Verificar atualizações de aplicativos",
- "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Verificar se o esquema do banco de dados para %s pode ser atualizado (isso pode levar muito tempo, dependendo do tamanho do banco de dados)",
+ "Checking updates of apps" : "Verificando atualizações de aplicativos",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Verificando se o esquema do banco de dados para %s pode ser atualizado (isso pode levar muito tempo, dependendo do tamanho do banco de dados)",
"Checked database schema update for apps" : "Verificar atualização do esquema de banco de dados para aplicativos",
"Updated \"%s\" to %s" : "Atualizado \"%s\" para %s",
"Set log level to debug" : "Definir o nível de log para debug",
- "Reset log level" : "Resetar o nível do log",
+ "Reset log level" : "Redefinir o nível do log",
"Starting code integrity check" : "Inicializando a verificação da integridade do código",
"Finished code integrity check" : "Finalizada a verificação de integridade do código",
"%s (3rdparty)" : "%s (terceiros)",
@@ -47,7 +51,7 @@ OC.L10N.register(
"Already up to date" : "Já está atualizado",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Houve problemas com a verificação de integridade do código. Mais informações…</a>",
"Settings" : "Configurações",
- "Connection to server lost" : "Conexão com servidor perdida",
+ "Connection to server lost" : "Conexão perdida com o servidor",
"_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problema no carregamento da página, recarregando em %n segundo","Problema no carregamento da página, recarregando em %n segundos"],
"Saving..." : "Salvando...",
"Dismiss" : "Dispensar",
@@ -59,13 +63,13 @@ OC.L10N.register(
"Failed to authenticate, try again" : "Falha na autenticação, tente novamente",
"seconds ago" : "segundos atrás",
"Logging in …" : "Entrando ...",
- "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "O link para redefinir sua senha foi enviado para seu e-mail. Se você não recebê-lo dentro de um período razoável de tempo, verifique suas pastas de spam/lixo.<br> Se ele não estiver lá, pergunte ao administrador local.",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "O link para redefinir sua senha foi enviado para seu email. Se você não recebê-lo dentro de um período razoável de tempo, verifique suas pastas de spam/lixo.<br> Se ele não estiver lá, pergunte ao administrador local.",
"Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Seus arquivos são criptografados. Não existe nenhuma maneira de ter seus dados de volta depois que sua senha seja redefinida.<br /> Se você não tem certeza do que fazer, por favor contate seu administrador antes de continuar.<br />Você realmente deseja continuar?",
"I know what I'm doing" : "Eu sei o que estou fazendo",
"Password can not be changed. Please contact your administrator." : "A senha não pode ser alterada. Por favor, contate o administrador.",
"No" : "Não",
"Yes" : "Sim",
- "No files in here" : "Sem arquivos aqui",
+ "No files in here" : "Nenhum arquivos aqui",
"Choose" : "Escolher",
"Error loading file picker template: {error}" : "Erro carregando o seletor de modelo de arquivos: {error}",
"Ok" : "Ok",
@@ -75,12 +79,12 @@ OC.L10N.register(
"One file conflict" : "Conflito em um arquivo",
"New Files" : "Novos Arquivos",
"Already existing files" : "Arquivos já existentes",
- "Which files do you want to keep?" : "Qual arquivo você quer manter?",
+ "Which files do you want to keep?" : "Quais arquivos você quer manter?",
"If you select both versions, the copied file will have a number added to its name." : "Se você selecionar ambas as versões, o arquivo copiado terá um número adicionado ao seu nome.",
"Continue" : "Continuar",
- "(all selected)" : "(todos os selecionados)",
+ "(all selected)" : "(todos selecionados)",
"({count} selected)" : "({count} selecionados)",
- "Error loading file exists template" : "Erro carregando arquivo existe modelo",
+ "Error loading file exists template" : "Erro carregando arquivo. Já existe o modelo",
"Pending" : "Pendente",
"Very weak password" : "Senha muito fraca",
"Weak password" : "Senha fraca",
@@ -89,15 +93,15 @@ OC.L10N.register(
"Strong password" : "Senha forte",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Seu servidor web ainda não está configurado corretamente para permitir a sincronização de arquivos, pois a interface WebDAV parece ser desconfigurada.",
"Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Seu servidor web não está configurado corretamente para resolver \"{url}\". Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
- "This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor não tem nenhuma conexão com a Internet: Várias terminações finais não podem ser encontrados. Isso significa que alguns dos recursos como montagem de armazenamento externo, notificações sobre atualizações ou instalação de aplicativos de terceiros não vai funcionar. Acesso a arquivos remotamente e envio de e-mails de notificação podem não funcionar também. Sugerimos habilitar a conexão com a Internet para este servidor, se você quer ter todas as funcionalidades.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Nenhum cache de memória foi configurado. Para melhorar o seu desempenho, por favor configure um memcached se disponível. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
+ "This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor não tem nenhuma conexão com a Internet: Várias terminações finais podem não ser encontradas. Isso significa que alguns dos recursos como montagem de armazenamento externo, notificações sobre atualizações ou instalação de aplicativos de terceiros podem não funcionar. Acesso a arquivos remotos e envio de e-mails de notificação podem não funcionar também. Sugerimos habilitar a conexão com a Internet para este servidor, se você quer ter todas as funcionalidades.",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Nenhum cache de memória foi configurado. Para melhorar o desempenho, por favor configure um memcached se disponível. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "/dev/urandom não pode ser lido pelo PHP e é altamente desencorajado por razões de segurança. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
"You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Você está atualmente executando PHP {version}. Nós o incentivamos a atualizar sua versão do PHP para aproveitar as<a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">atualizações de segurança e desempenho proporcionados pelo Grupo PHP</a> assim que sua distribuição suportar.",
- "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "O cabeçalho do proxy reverso está incorreto, ou você está acessando a partir de um proxy confiável. Se voce não está usando um proxy confiável, essa é uma falha de segurança e pode permitir um ataque. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
+ "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "O cabeçalho do proxy reverso está incorreto, ou você está acessando a partir de um proxy confiável. Se voce não está usando um proxy confiável, há uma falha de segurança que pode permitir um ataque. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
"Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached está configurado como cache distribuído, mas o módulo PHP errado \"memcache\" está instalado. \\OC\\Memcache\\Memcached suporta apenas \"memcached\" e não \"memcache\". Veja a <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">wiki memcached sobre ambos os módulos </a>.",
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Alguns arquivos não passaram na verificação de integridade. Mais informações sobre como resolver este problema pode ser encontrado em nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lista de arquivos inválidos…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)",
"The PHP Opcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend ↗</a> to use following settings in the <code>php.ini</code>:" : "O Opcache do PHP não está configurado corretamente. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Para um melhor desempenho recomendamos ↗</a> usar as seguintes configurações no <code>php.ini</code>:",
- "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "A função PHP \"set_time_limit\" não está disponível. Isso pode resultar em scripts pendurados durante a execução, prejudicando sua instalação. Sugerimos fortemente habilitar esta função.",
+ "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "A função PHP \"set_time_limit\" não está disponível. Isso pode resultar em scripts pendurados durante a execução e prejudicando sua instalação. Sugerimos fortemente habilitar esta função.",
"Error occurred while checking server setup" : "Erro ao verificar a configuração do servidor",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "O seu diretório de dados e os arquivos provavelmente estão acessíveis a partir da Internet. O arquivo .htaccess não está funcionando. Sugerimos que você configure o servidor web de maneira que o diretório de dados não seja acessível ou mova o diretório de dados para fora do diretório raiz de documentos do servidor web.",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "O cabeçalho HTTP \"{header}\" não está configurado igual ao \"{expected}\". Este é um risco potencial para a segurança e recomendamos ajustar essa configuração.",
@@ -128,7 +132,7 @@ OC.L10N.register(
"Allow upload and editing" : "Permitir envio e edição",
"Allow editing" : "Permitir edição",
"upload only" : "somente envio",
- "Email link to person" : "Enviar link por e-mail",
+ "Email link to person" : "Enviar link por email",
"Send" : "Enviar",
"Shared with you and the group {group} by {owner}" : "Compartilhado com você e com o grupo {group} por {owner}",
"Shared with you by {owner}" : "Compartilhado com você por {owner}",
@@ -144,12 +148,12 @@ OC.L10N.register(
"Can create" : "Pode criar",
"Can change" : "Pode modificar",
"Can delete" : "Pode excluir",
- "Secure drop (upload only)" : "Drop seguro (apenas carregamento)",
+ "Secure drop (upload only)" : "Drop seguro (apenas envio)",
"Access control" : "Controle de acesso",
"Could not unshare" : "Não foi possível descompartilhar",
"Share details could not be loaded for this item." : "Detalhes de compartilhamento não puderam ser carregados para este item.",
"_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Pelo menos {count} caractere é necessário para completar automaticamente","Pelo menos {count} caracteres são necessários para completar automaticamente"],
- "This list is maybe truncated - please refine your search term to see more results." : "Esta lista pode estar truncada - por favor refine seus termos de pesquisa para ver mais resultados",
+ "This list is maybe truncated - please refine your search term to see more results." : "Esta lista pode estar truncada - por favor refina seus termos de pesquisa para ver mais resultados",
"No users or groups found for {search}" : "Nenhum usuário ou grupo encontrado para {search}",
"No users found for {search}" : "Nenhum usuário encontrado para {search}",
"An error occurred. Please try again" : "Ocorreu um erro. Por favor tente novamente",
@@ -158,7 +162,7 @@ OC.L10N.register(
"{sharee} (email)" : "{sharee} (email)",
"{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
"Share" : "Compartilhar",
- "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Compartilhe com pessoas de outros servidores usando o ID Cloud Federado username@example.com/nextcloud",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Compartilhe com pessoas de outros servidores usando o ID de nuvem federada username@example.com/nextcloud",
"Share with users or by mail..." : "Compartilhe com usuários internos ou por email...",
"Share with users or remote users..." : "Compartilhe com usuários internos ou usuários remotos...",
"Share with users, remote users or by mail..." : "Compartilhe com usuários internos, usuários remotos ou por email...",
@@ -174,7 +178,7 @@ OC.L10N.register(
"({scope})" : "({scope})",
"Delete" : "Excluir",
"Rename" : "Renomear",
- "Collaborative tags" : "Etiquetas de colaboração",
+ "Collaborative tags" : "Etiquetas colaborativas",
"No tags found" : "Nenhuma etiqueta encontrada",
"The object type is not specified." : "O tipo de objeto não foi especificado.",
"Enter new" : "Entre nova",
@@ -196,15 +200,15 @@ OC.L10N.register(
"Please reload the page." : "Por favor recarregue a página",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "A atualização não foi realizada com sucesso. Para mais informações <a href=\"{url}\">verifique nosso post no fórum</a> que abrange esta questão.",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "A atualização não foi realizada com sucesso. Por favor, informe este problema para  a <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">comunidade Nextcloud</a>.",
- "Continue to Nextcloud" : "Continuar no Nextcloud",
+ "Continue to Nextcloud" : "Prosseguir para Nextcloud",
"_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["A atualização terminou com sucesso. Redirecionando você para Nextcloud em %n segundos.","A atualização terminou com sucesso. Redirecionando você para Nextcloud em %n segundos."],
"Searching other places" : "Pesquisando em outros lugares",
"No search results in other folders for {tag}{filter}{endtag}" : "Pesquisa sem resultados em outras pastas para {tag}{filter}{endtag}",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} resultado da pesquisa em outras pastas","{count} resultados da pesquisa em outras pastas"],
"Personal" : "Pessoal",
"Users" : "Usuários",
- "Apps" : "Aplicações",
- "Admin" : "Admin",
+ "Apps" : "Aplicativos",
+ "Admin" : "Administrar",
"Help" : "Ajuda",
"Access forbidden" : "Acesso proibido",
"File not found" : "Arquivo não encontrado",
@@ -212,7 +216,7 @@ OC.L10N.register(
"You can click here to return to %s." : "Você pode clicar aqui para retornar para %s.",
"Internal Server Error" : "Erro Interno do Servidor",
"The server encountered an internal error and was unable to complete your request." : "O servidor encontrou um erro interno e não conseguiu concluir o seu pedido.",
- "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Entre em contato com o administrador do servidor se este erro reaparece várias vezes, por favor, inclua os detalhes técnicos abaixo em seu relatório.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Entre em contato com o administrador do servidor se este erro reaparecer várias vezes. Por favor, inclua os detalhes técnicos abaixo em seu relatório.",
"More details can be found in the server log." : "Mais detalhes podem ser encontrados no log do servidor.",
"Technical details" : "Detalhes técnicos",
"Remote Address: %s" : "Endereço Remoto: %s",
@@ -224,22 +228,22 @@ OC.L10N.register(
"Line: %s" : "Linha: %s",
"Trace" : "Rastreamento",
"Security warning" : "Alerta de Segurança",
- "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Seu diretório de dados e arquivos são provavelmente acessíveis pela internet, porque o .htaccess não funciona.",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Seu diretório de dados e arquivos provavelmente estão acessíveis pela internet, porque o .htaccess não funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Para obter informações sobre como configurar corretamente o servidor, consulte a <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentação</a>.",
"Create an <strong>admin account</strong>" : "Criar uma <strong>conta de administrador</strong>",
- "Username" : "Nome de usuário",
+ "Username" : "Nome do usuário",
"Storage & database" : "Armazenamento & banco de dados",
"Data folder" : "Pasta de dados",
"Configure the database" : "Configurar o banco de dados",
"Only %s is available." : "Somente %s está disponível.",
- "Install and activate additional PHP modules to choose other database types." : "Instalar e ativar os módulos adicionais do PHP para escolher outros tipos de banco de dados.",
+ "Install and activate additional PHP modules to choose other database types." : "Instale e ative os módulos adicionais do PHP para escolher outros tipos de banco de dados.",
"For more details check out the documentation." : "Para mais informações consulte a documentação.",
"Database user" : "Usuário do banco de dados",
"Database password" : "Senha do banco de dados",
"Database name" : "Nome do banco de dados",
"Database tablespace" : "Espaço de tabela do banco de dados",
"Database host" : "Host do banco de dados",
- "Please specify the port number along with the host name (e.g., localhost:5432)." : "Por favor especifique o nome do host e o número de porta  (e.g., localhost:5432).",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Por favor especifique o nome do host e o número de porta  (ex., localhost:5432).",
"Performance warning" : "Alerta de performance",
"SQLite will be used as database." : "SQLite será usado como banco de dados",
"For larger installations we recommend to choose a different database backend." : "Para instalações maiores é recomendável escolher um backend de banco de dados diferente.",
@@ -249,39 +253,38 @@ OC.L10N.register(
"Need help?" : "Precisa de ajuda?",
"See the documentation" : "Veja a documentação",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicação requer JavaScript para sua correta operação. Por favor {linkstart}habilite o JavaScript{linkend} e recarregue a página.",
- "More apps" : "Mais aplicações",
+ "More apps" : "Mais aplicativos",
"Search" : "Pesquisar",
"This action requires you to confirm your password:" : "Essa ação requer a confirmação da sua senha:",
"Confirm your password" : "Confirme sua senha",
"Server side authentication failed!" : "Autenticação do servidor falhou!",
- "Please contact your administrator." : "Por favor, contate o administrador.",
+ "Please contact your administrator." : "Por favor, contacte o administrador.",
"An internal error occurred." : "Ocorreu um erro interno.",
- "Please try again or contact your administrator." : "Por favor tente novamente ou faça contato com o seu administrador.",
+ "Please try again or contact your administrator." : "Por favor tente novamente ou contacte o administrador.",
"Username or email" : "Nome de usuário ou email",
"Wrong password. Reset it?" : "Senha incorreta. Redefini-la?",
"Wrong password." : "Senha errada",
"Log in" : "Entrar",
"Stay logged in" : "Permaneça logado",
- "Alternative Logins" : "Logins Alternativos",
- "Use the following link to reset your password: {link}" : "Use o seguinte link para redefinir sua senha: {link}",
+ "Alternative Logins" : "Logins alternativos",
"New password" : "Nova senha",
"New Password" : "Nova senha",
"Reset password" : "Redefinir senha",
- "This Nextcloud instance is currently in single user mode." : "Nesta instância Nextcloud está em modo de usuário único.",
+ "This Nextcloud instance is currently in single user mode." : "Esta instância Nextcloud está em modo de usuário único.",
"This means only administrators can use the instance." : "Isso significa que apenas os administradores podem usar esta instância.",
- "Contact your system administrator if this message persists or appeared unexpectedly." : "Contacte o seu administrador do sistema se esta mensagem persistir ou aparecer inesperadamente.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Contacte o administrador do sistema se esta mensagem persistir ou aparecer inesperadamente.",
"Thank you for your patience." : "Obrigado pela sua paciência.",
"Log out" : "Sair",
"Two-factor authentication" : "Autenticação de dois fatores",
- "Enhanced security is enabled for your account. Please authenticate using a second factor." : "Segurança aprimorada está habilitada para sua conta. Por favor autenticar usando um segundo fator.",
- "Cancel log in" : "Cancelar entrada",
+ "Enhanced security is enabled for your account. Please authenticate using a second factor." : "A segurança aprimorada está habilitada para sua conta. Por favor autentique usando um segundo fator.",
+ "Cancel log in" : "Cancelar login",
"Use backup code" : "Use o código de backup",
- "Error while validating your second factor" : "Erro ao validar o seu segundo fator",
+ "Error while validating your second factor" : "Erro ao validar o segundo fator",
"You are accessing the server from an untrusted domain." : "Você está acessando o servidor a partir de um domínio não confiável.",
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Por favor entre em contato com o administrador. Se você é o administrador, configure a definição \"trusted_domains\" em config/config.php. Um exemplo de configuração é fornecido em config/config.sample.php.",
"Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Dependendo da configuração, como administrador você também pode usar o botão abaixo para confiar neste domínio.",
"Add \"%s\" as trusted domain" : "Adicionar \"%s\" como um domínio confiável",
- "App update required" : "Atualização de aplicativo é requerida",
+ "App update required" : "Atualização de aplicativo é necessária",
"%s will be updated to version %s" : "%s será atualizado para a versão %s",
"These apps will be updated:" : "Esses aplicativos serão atualizados:",
"These incompatible apps will be disabled:" : "Esses aplicativos incompatíveis serão desabilitados:",
@@ -296,18 +299,19 @@ OC.L10N.register(
"This %s instance is currently in maintenance mode, which may take a while." : "Esta instância %s está em modo de manutenção, o que pode demorar um pouco.",
"This page will refresh itself when the %s instance is available again." : "Esta página será atualizada automaticamente quando a instância %s estiver disponível novamente.",
"Problem loading page, reloading in 5 seconds" : "Problema no carregamento da página, recarregando em 5 segundos",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Seus arquivos são criptografados. Se você não ativou a chave de recuperação, não haverá maneira de obter seus dados de volta após a sua senha ser redefinida.<br/>Se não tiver certeza do que deve fazer, contate o administrador antes de continuar. <br/>Deseja realmente continuar?",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Seus arquivos estão criptografados. Se você não ativou a chave de recuperação, não haverá maneira de obter seus dados de volta após a sua senha ser redefinida.<br/>Se não tiver certeza do que deve fazer, contate o administrador antes de continuar. <br/>Deseja realmente continuar?",
"File drop (upload only)" : "Zona de arquivos (somente upload)",
"can reshare" : "pode recompartilhar",
"can edit" : "pode editar",
"can create" : "Pode criar",
"can change" : "Pode alterar",
- "can delete" : "Pode deletar",
+ "can delete" : "Pode excluir",
"access control" : "controle de acesso",
"The update was successful. Redirecting you to Nextcloud now." : "A atualização terminou com sucesso. Redirecionando para Nextcloud agora.",
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Olá,\n\napenas para avisar que %s compartilhou %s com você.\nVeja isto: %s\n\n",
"The share will expire on %s." : "O compartilhamento irá expirar em %s.",
- "Cheers!" : "Saudações!",
+ "Cheers!" : "Saúde!",
+ "Use the following link to reset your password: {link}" : "Use o seguinte link para redefinir sua senha: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Olá,<br><br>só para avisar que %s compartilhou <strong>%s</strong> com você. <br><a href=\"%s\">Visualize-o!</a><br><br>"
},
"nplurals=2; plural=(n > 1);");
diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json
index 46e6c7289ea..d9ffd2c667c 100644
--- a/core/l10n/pt_BR.json
+++ b/core/l10n/pt_BR.json
@@ -9,19 +9,23 @@
"Invalid image" : "Imagem inválida",
"An error occurred. Please contact your admin." : "Ocorreu um erro. Entre em contato com seu administrador.",
"No temporary profile picture available, try again" : "Nenhuma imagem temporária disponível no perfil, tente novamente",
- "No crop data provided" : "Nenhum dado para coleta foi fornecido",
+ "No crop data provided" : "Nenhum dado recortado fornecido",
"No valid crop data provided" : "Nenhum dado recortado válido",
"Crop is not square" : "Recorte não é quadrado",
"Couldn't reset password because the token is invalid" : "Não foi possível redefinir a senha porque o token é inválido",
"Couldn't reset password because the token is expired" : "Não foi possível redefinir a senha porque o token expirou",
- "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Não foi possível enviar email de redefinição porque não há nenhum endereço de e-mail para este nome de usuário. Entre em contato com o administrador.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Não foi possível enviar email de redefinição porque não há nenhum endereço de email para este nome de usuário. Entre em contato com o administrador.",
+ "Password reset" : "Redefinir a senha",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Clique no botão abaixo para redefinir sua senha. Se você não solicitou isso, ignore este email.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Clique no link abaixo para redefinir sua senha. Se você não solicitou isso, ignore este email.",
+ "Reset your password" : "Redefinir sua senha",
"%s password reset" : "%s redefinir senha",
- "Couldn't send reset email. Please contact your administrator." : "Não foi possível enviar e-mail de redefinição. Por favor, contate o administrador.",
- "Couldn't send reset email. Please make sure your username is correct." : "Não foi possível enviar e-mail de redefinição. Verifique se o seu nome de usuário está correto.",
- "Preparing update" : "Preparando atualização",
+ "Couldn't send reset email. Please contact your administrator." : "Não foi possível enviar o email de redefinição. Por favor, contate o administrador.",
+ "Couldn't send reset email. Please make sure your username is correct." : "Não foi possível enviar o email de redefinição. Verifique se o seu nome de usuário está correto.",
+ "Preparing update" : "Preparando a atualização",
"[%d / %d]: %s" : "[%d / %d]: %s",
- "Repair warning: " : "Aviso na reparação:",
- "Repair error: " : "Erro na reparação :",
+ "Repair warning: " : "Aviso da reparação:",
+ "Repair error: " : "Erro da reparação :",
"Please use the command line updater because automatic updating is disabled in the config.php." : "Por favor, use a atualização de linha de comando, porque a atualização automática está desativada no config.php.",
"[%d / %d]: Checking table %s" : "[%d / %d]: Verificando tabela %s",
"Turned on maintenance mode" : "Ativar o modo de manutenção",
@@ -29,14 +33,14 @@
"Maintenance mode is kept active" : "O modo de manutenção está sendo mantido como ativo",
"Updating database schema" : "Atualização de esquema do banco de dados",
"Updated database" : "Atualizar o banco de dados",
- "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Verificar se o esquema do banco de dados pode ser atualizado (isso pode levar muito tempo, dependendo do tamanho do banco de dados)",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Verificando se o esquema do banco de dados pode ser atualizado (isso pode levar muito tempo, dependendo do tamanho do banco de dados)",
"Checked database schema update" : "Verificada a atualização do esquema de banco de dados",
- "Checking updates of apps" : "Verificar atualizações de aplicativos",
- "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Verificar se o esquema do banco de dados para %s pode ser atualizado (isso pode levar muito tempo, dependendo do tamanho do banco de dados)",
+ "Checking updates of apps" : "Verificando atualizações de aplicativos",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Verificando se o esquema do banco de dados para %s pode ser atualizado (isso pode levar muito tempo, dependendo do tamanho do banco de dados)",
"Checked database schema update for apps" : "Verificar atualização do esquema de banco de dados para aplicativos",
"Updated \"%s\" to %s" : "Atualizado \"%s\" para %s",
"Set log level to debug" : "Definir o nível de log para debug",
- "Reset log level" : "Resetar o nível do log",
+ "Reset log level" : "Redefinir o nível do log",
"Starting code integrity check" : "Inicializando a verificação da integridade do código",
"Finished code integrity check" : "Finalizada a verificação de integridade do código",
"%s (3rdparty)" : "%s (terceiros)",
@@ -45,7 +49,7 @@
"Already up to date" : "Já está atualizado",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Houve problemas com a verificação de integridade do código. Mais informações…</a>",
"Settings" : "Configurações",
- "Connection to server lost" : "Conexão com servidor perdida",
+ "Connection to server lost" : "Conexão perdida com o servidor",
"_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problema no carregamento da página, recarregando em %n segundo","Problema no carregamento da página, recarregando em %n segundos"],
"Saving..." : "Salvando...",
"Dismiss" : "Dispensar",
@@ -57,13 +61,13 @@
"Failed to authenticate, try again" : "Falha na autenticação, tente novamente",
"seconds ago" : "segundos atrás",
"Logging in …" : "Entrando ...",
- "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "O link para redefinir sua senha foi enviado para seu e-mail. Se você não recebê-lo dentro de um período razoável de tempo, verifique suas pastas de spam/lixo.<br> Se ele não estiver lá, pergunte ao administrador local.",
+ "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "O link para redefinir sua senha foi enviado para seu email. Se você não recebê-lo dentro de um período razoável de tempo, verifique suas pastas de spam/lixo.<br> Se ele não estiver lá, pergunte ao administrador local.",
"Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Seus arquivos são criptografados. Não existe nenhuma maneira de ter seus dados de volta depois que sua senha seja redefinida.<br /> Se você não tem certeza do que fazer, por favor contate seu administrador antes de continuar.<br />Você realmente deseja continuar?",
"I know what I'm doing" : "Eu sei o que estou fazendo",
"Password can not be changed. Please contact your administrator." : "A senha não pode ser alterada. Por favor, contate o administrador.",
"No" : "Não",
"Yes" : "Sim",
- "No files in here" : "Sem arquivos aqui",
+ "No files in here" : "Nenhum arquivos aqui",
"Choose" : "Escolher",
"Error loading file picker template: {error}" : "Erro carregando o seletor de modelo de arquivos: {error}",
"Ok" : "Ok",
@@ -73,12 +77,12 @@
"One file conflict" : "Conflito em um arquivo",
"New Files" : "Novos Arquivos",
"Already existing files" : "Arquivos já existentes",
- "Which files do you want to keep?" : "Qual arquivo você quer manter?",
+ "Which files do you want to keep?" : "Quais arquivos você quer manter?",
"If you select both versions, the copied file will have a number added to its name." : "Se você selecionar ambas as versões, o arquivo copiado terá um número adicionado ao seu nome.",
"Continue" : "Continuar",
- "(all selected)" : "(todos os selecionados)",
+ "(all selected)" : "(todos selecionados)",
"({count} selected)" : "({count} selecionados)",
- "Error loading file exists template" : "Erro carregando arquivo existe modelo",
+ "Error loading file exists template" : "Erro carregando arquivo. Já existe o modelo",
"Pending" : "Pendente",
"Very weak password" : "Senha muito fraca",
"Weak password" : "Senha fraca",
@@ -87,15 +91,15 @@
"Strong password" : "Senha forte",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Seu servidor web ainda não está configurado corretamente para permitir a sincronização de arquivos, pois a interface WebDAV parece ser desconfigurada.",
"Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Seu servidor web não está configurado corretamente para resolver \"{url}\". Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
- "This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor não tem nenhuma conexão com a Internet: Várias terminações finais não podem ser encontrados. Isso significa que alguns dos recursos como montagem de armazenamento externo, notificações sobre atualizações ou instalação de aplicativos de terceiros não vai funcionar. Acesso a arquivos remotamente e envio de e-mails de notificação podem não funcionar também. Sugerimos habilitar a conexão com a Internet para este servidor, se você quer ter todas as funcionalidades.",
- "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Nenhum cache de memória foi configurado. Para melhorar o seu desempenho, por favor configure um memcached se disponível. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
+ "This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor não tem nenhuma conexão com a Internet: Várias terminações finais podem não ser encontradas. Isso significa que alguns dos recursos como montagem de armazenamento externo, notificações sobre atualizações ou instalação de aplicativos de terceiros podem não funcionar. Acesso a arquivos remotos e envio de e-mails de notificação podem não funcionar também. Sugerimos habilitar a conexão com a Internet para este servidor, se você quer ter todas as funcionalidades.",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Nenhum cache de memória foi configurado. Para melhorar o desempenho, por favor configure um memcached se disponível. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "/dev/urandom não pode ser lido pelo PHP e é altamente desencorajado por razões de segurança. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
"You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Você está atualmente executando PHP {version}. Nós o incentivamos a atualizar sua versão do PHP para aproveitar as<a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">atualizações de segurança e desempenho proporcionados pelo Grupo PHP</a> assim que sua distribuição suportar.",
- "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "O cabeçalho do proxy reverso está incorreto, ou você está acessando a partir de um proxy confiável. Se voce não está usando um proxy confiável, essa é uma falha de segurança e pode permitir um ataque. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
+ "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "O cabeçalho do proxy reverso está incorreto, ou você está acessando a partir de um proxy confiável. Se voce não está usando um proxy confiável, há uma falha de segurança que pode permitir um ataque. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>.",
"Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached está configurado como cache distribuído, mas o módulo PHP errado \"memcache\" está instalado. \\OC\\Memcache\\Memcached suporta apenas \"memcached\" e não \"memcache\". Veja a <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">wiki memcached sobre ambos os módulos </a>.",
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Alguns arquivos não passaram na verificação de integridade. Mais informações sobre como resolver este problema pode ser encontrado em nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lista de arquivos inválidos…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)",
"The PHP Opcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend ↗</a> to use following settings in the <code>php.ini</code>:" : "O Opcache do PHP não está configurado corretamente. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Para um melhor desempenho recomendamos ↗</a> usar as seguintes configurações no <code>php.ini</code>:",
- "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "A função PHP \"set_time_limit\" não está disponível. Isso pode resultar em scripts pendurados durante a execução, prejudicando sua instalação. Sugerimos fortemente habilitar esta função.",
+ "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "A função PHP \"set_time_limit\" não está disponível. Isso pode resultar em scripts pendurados durante a execução e prejudicando sua instalação. Sugerimos fortemente habilitar esta função.",
"Error occurred while checking server setup" : "Erro ao verificar a configuração do servidor",
"Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "O seu diretório de dados e os arquivos provavelmente estão acessíveis a partir da Internet. O arquivo .htaccess não está funcionando. Sugerimos que você configure o servidor web de maneira que o diretório de dados não seja acessível ou mova o diretório de dados para fora do diretório raiz de documentos do servidor web.",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "O cabeçalho HTTP \"{header}\" não está configurado igual ao \"{expected}\". Este é um risco potencial para a segurança e recomendamos ajustar essa configuração.",
@@ -126,7 +130,7 @@
"Allow upload and editing" : "Permitir envio e edição",
"Allow editing" : "Permitir edição",
"upload only" : "somente envio",
- "Email link to person" : "Enviar link por e-mail",
+ "Email link to person" : "Enviar link por email",
"Send" : "Enviar",
"Shared with you and the group {group} by {owner}" : "Compartilhado com você e com o grupo {group} por {owner}",
"Shared with you by {owner}" : "Compartilhado com você por {owner}",
@@ -142,12 +146,12 @@
"Can create" : "Pode criar",
"Can change" : "Pode modificar",
"Can delete" : "Pode excluir",
- "Secure drop (upload only)" : "Drop seguro (apenas carregamento)",
+ "Secure drop (upload only)" : "Drop seguro (apenas envio)",
"Access control" : "Controle de acesso",
"Could not unshare" : "Não foi possível descompartilhar",
"Share details could not be loaded for this item." : "Detalhes de compartilhamento não puderam ser carregados para este item.",
"_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Pelo menos {count} caractere é necessário para completar automaticamente","Pelo menos {count} caracteres são necessários para completar automaticamente"],
- "This list is maybe truncated - please refine your search term to see more results." : "Esta lista pode estar truncada - por favor refine seus termos de pesquisa para ver mais resultados",
+ "This list is maybe truncated - please refine your search term to see more results." : "Esta lista pode estar truncada - por favor refina seus termos de pesquisa para ver mais resultados",
"No users or groups found for {search}" : "Nenhum usuário ou grupo encontrado para {search}",
"No users found for {search}" : "Nenhum usuário encontrado para {search}",
"An error occurred. Please try again" : "Ocorreu um erro. Por favor tente novamente",
@@ -156,7 +160,7 @@
"{sharee} (email)" : "{sharee} (email)",
"{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
"Share" : "Compartilhar",
- "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Compartilhe com pessoas de outros servidores usando o ID Cloud Federado username@example.com/nextcloud",
+ "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Compartilhe com pessoas de outros servidores usando o ID de nuvem federada username@example.com/nextcloud",
"Share with users or by mail..." : "Compartilhe com usuários internos ou por email...",
"Share with users or remote users..." : "Compartilhe com usuários internos ou usuários remotos...",
"Share with users, remote users or by mail..." : "Compartilhe com usuários internos, usuários remotos ou por email...",
@@ -172,7 +176,7 @@
"({scope})" : "({scope})",
"Delete" : "Excluir",
"Rename" : "Renomear",
- "Collaborative tags" : "Etiquetas de colaboração",
+ "Collaborative tags" : "Etiquetas colaborativas",
"No tags found" : "Nenhuma etiqueta encontrada",
"The object type is not specified." : "O tipo de objeto não foi especificado.",
"Enter new" : "Entre nova",
@@ -194,15 +198,15 @@
"Please reload the page." : "Por favor recarregue a página",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "A atualização não foi realizada com sucesso. Para mais informações <a href=\"{url}\">verifique nosso post no fórum</a> que abrange esta questão.",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "A atualização não foi realizada com sucesso. Por favor, informe este problema para  a <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">comunidade Nextcloud</a>.",
- "Continue to Nextcloud" : "Continuar no Nextcloud",
+ "Continue to Nextcloud" : "Prosseguir para Nextcloud",
"_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["A atualização terminou com sucesso. Redirecionando você para Nextcloud em %n segundos.","A atualização terminou com sucesso. Redirecionando você para Nextcloud em %n segundos."],
"Searching other places" : "Pesquisando em outros lugares",
"No search results in other folders for {tag}{filter}{endtag}" : "Pesquisa sem resultados em outras pastas para {tag}{filter}{endtag}",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} resultado da pesquisa em outras pastas","{count} resultados da pesquisa em outras pastas"],
"Personal" : "Pessoal",
"Users" : "Usuários",
- "Apps" : "Aplicações",
- "Admin" : "Admin",
+ "Apps" : "Aplicativos",
+ "Admin" : "Administrar",
"Help" : "Ajuda",
"Access forbidden" : "Acesso proibido",
"File not found" : "Arquivo não encontrado",
@@ -210,7 +214,7 @@
"You can click here to return to %s." : "Você pode clicar aqui para retornar para %s.",
"Internal Server Error" : "Erro Interno do Servidor",
"The server encountered an internal error and was unable to complete your request." : "O servidor encontrou um erro interno e não conseguiu concluir o seu pedido.",
- "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Entre em contato com o administrador do servidor se este erro reaparece várias vezes, por favor, inclua os detalhes técnicos abaixo em seu relatório.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Entre em contato com o administrador do servidor se este erro reaparecer várias vezes. Por favor, inclua os detalhes técnicos abaixo em seu relatório.",
"More details can be found in the server log." : "Mais detalhes podem ser encontrados no log do servidor.",
"Technical details" : "Detalhes técnicos",
"Remote Address: %s" : "Endereço Remoto: %s",
@@ -222,22 +226,22 @@
"Line: %s" : "Linha: %s",
"Trace" : "Rastreamento",
"Security warning" : "Alerta de Segurança",
- "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Seu diretório de dados e arquivos são provavelmente acessíveis pela internet, porque o .htaccess não funciona.",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Seu diretório de dados e arquivos provavelmente estão acessíveis pela internet, porque o .htaccess não funciona.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Para obter informações sobre como configurar corretamente o servidor, consulte a <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentação</a>.",
"Create an <strong>admin account</strong>" : "Criar uma <strong>conta de administrador</strong>",
- "Username" : "Nome de usuário",
+ "Username" : "Nome do usuário",
"Storage & database" : "Armazenamento & banco de dados",
"Data folder" : "Pasta de dados",
"Configure the database" : "Configurar o banco de dados",
"Only %s is available." : "Somente %s está disponível.",
- "Install and activate additional PHP modules to choose other database types." : "Instalar e ativar os módulos adicionais do PHP para escolher outros tipos de banco de dados.",
+ "Install and activate additional PHP modules to choose other database types." : "Instale e ative os módulos adicionais do PHP para escolher outros tipos de banco de dados.",
"For more details check out the documentation." : "Para mais informações consulte a documentação.",
"Database user" : "Usuário do banco de dados",
"Database password" : "Senha do banco de dados",
"Database name" : "Nome do banco de dados",
"Database tablespace" : "Espaço de tabela do banco de dados",
"Database host" : "Host do banco de dados",
- "Please specify the port number along with the host name (e.g., localhost:5432)." : "Por favor especifique o nome do host e o número de porta  (e.g., localhost:5432).",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Por favor especifique o nome do host e o número de porta  (ex., localhost:5432).",
"Performance warning" : "Alerta de performance",
"SQLite will be used as database." : "SQLite será usado como banco de dados",
"For larger installations we recommend to choose a different database backend." : "Para instalações maiores é recomendável escolher um backend de banco de dados diferente.",
@@ -247,39 +251,38 @@
"Need help?" : "Precisa de ajuda?",
"See the documentation" : "Veja a documentação",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicação requer JavaScript para sua correta operação. Por favor {linkstart}habilite o JavaScript{linkend} e recarregue a página.",
- "More apps" : "Mais aplicações",
+ "More apps" : "Mais aplicativos",
"Search" : "Pesquisar",
"This action requires you to confirm your password:" : "Essa ação requer a confirmação da sua senha:",
"Confirm your password" : "Confirme sua senha",
"Server side authentication failed!" : "Autenticação do servidor falhou!",
- "Please contact your administrator." : "Por favor, contate o administrador.",
+ "Please contact your administrator." : "Por favor, contacte o administrador.",
"An internal error occurred." : "Ocorreu um erro interno.",
- "Please try again or contact your administrator." : "Por favor tente novamente ou faça contato com o seu administrador.",
+ "Please try again or contact your administrator." : "Por favor tente novamente ou contacte o administrador.",
"Username or email" : "Nome de usuário ou email",
"Wrong password. Reset it?" : "Senha incorreta. Redefini-la?",
"Wrong password." : "Senha errada",
"Log in" : "Entrar",
"Stay logged in" : "Permaneça logado",
- "Alternative Logins" : "Logins Alternativos",
- "Use the following link to reset your password: {link}" : "Use o seguinte link para redefinir sua senha: {link}",
+ "Alternative Logins" : "Logins alternativos",
"New password" : "Nova senha",
"New Password" : "Nova senha",
"Reset password" : "Redefinir senha",
- "This Nextcloud instance is currently in single user mode." : "Nesta instância Nextcloud está em modo de usuário único.",
+ "This Nextcloud instance is currently in single user mode." : "Esta instância Nextcloud está em modo de usuário único.",
"This means only administrators can use the instance." : "Isso significa que apenas os administradores podem usar esta instância.",
- "Contact your system administrator if this message persists or appeared unexpectedly." : "Contacte o seu administrador do sistema se esta mensagem persistir ou aparecer inesperadamente.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Contacte o administrador do sistema se esta mensagem persistir ou aparecer inesperadamente.",
"Thank you for your patience." : "Obrigado pela sua paciência.",
"Log out" : "Sair",
"Two-factor authentication" : "Autenticação de dois fatores",
- "Enhanced security is enabled for your account. Please authenticate using a second factor." : "Segurança aprimorada está habilitada para sua conta. Por favor autenticar usando um segundo fator.",
- "Cancel log in" : "Cancelar entrada",
+ "Enhanced security is enabled for your account. Please authenticate using a second factor." : "A segurança aprimorada está habilitada para sua conta. Por favor autentique usando um segundo fator.",
+ "Cancel log in" : "Cancelar login",
"Use backup code" : "Use o código de backup",
- "Error while validating your second factor" : "Erro ao validar o seu segundo fator",
+ "Error while validating your second factor" : "Erro ao validar o segundo fator",
"You are accessing the server from an untrusted domain." : "Você está acessando o servidor a partir de um domínio não confiável.",
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Por favor entre em contato com o administrador. Se você é o administrador, configure a definição \"trusted_domains\" em config/config.php. Um exemplo de configuração é fornecido em config/config.sample.php.",
"Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Dependendo da configuração, como administrador você também pode usar o botão abaixo para confiar neste domínio.",
"Add \"%s\" as trusted domain" : "Adicionar \"%s\" como um domínio confiável",
- "App update required" : "Atualização de aplicativo é requerida",
+ "App update required" : "Atualização de aplicativo é necessária",
"%s will be updated to version %s" : "%s será atualizado para a versão %s",
"These apps will be updated:" : "Esses aplicativos serão atualizados:",
"These incompatible apps will be disabled:" : "Esses aplicativos incompatíveis serão desabilitados:",
@@ -294,18 +297,19 @@
"This %s instance is currently in maintenance mode, which may take a while." : "Esta instância %s está em modo de manutenção, o que pode demorar um pouco.",
"This page will refresh itself when the %s instance is available again." : "Esta página será atualizada automaticamente quando a instância %s estiver disponível novamente.",
"Problem loading page, reloading in 5 seconds" : "Problema no carregamento da página, recarregando em 5 segundos",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Seus arquivos são criptografados. Se você não ativou a chave de recuperação, não haverá maneira de obter seus dados de volta após a sua senha ser redefinida.<br/>Se não tiver certeza do que deve fazer, contate o administrador antes de continuar. <br/>Deseja realmente continuar?",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Seus arquivos estão criptografados. Se você não ativou a chave de recuperação, não haverá maneira de obter seus dados de volta após a sua senha ser redefinida.<br/>Se não tiver certeza do que deve fazer, contate o administrador antes de continuar. <br/>Deseja realmente continuar?",
"File drop (upload only)" : "Zona de arquivos (somente upload)",
"can reshare" : "pode recompartilhar",
"can edit" : "pode editar",
"can create" : "Pode criar",
"can change" : "Pode alterar",
- "can delete" : "Pode deletar",
+ "can delete" : "Pode excluir",
"access control" : "controle de acesso",
"The update was successful. Redirecting you to Nextcloud now." : "A atualização terminou com sucesso. Redirecionando para Nextcloud agora.",
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Olá,\n\napenas para avisar que %s compartilhou %s com você.\nVeja isto: %s\n\n",
"The share will expire on %s." : "O compartilhamento irá expirar em %s.",
- "Cheers!" : "Saudações!",
+ "Cheers!" : "Saúde!",
+ "Use the following link to reset your password: {link}" : "Use o seguinte link para redefinir sua senha: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Olá,<br><br>só para avisar que %s compartilhou <strong>%s</strong> com você. <br><a href=\"%s\">Visualize-o!</a><br><br>"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/core/l10n/pt_PT.js b/core/l10n/pt_PT.js
index cce1708f8af..ba51faf68e3 100644
--- a/core/l10n/pt_PT.js
+++ b/core/l10n/pt_PT.js
@@ -262,7 +262,6 @@ OC.L10N.register(
"Log in" : "Iniciar Sessão",
"Stay logged in" : "Manter sessão iniciada",
"Alternative Logins" : "Contas de Acesso Alternativas",
- "Use the following link to reset your password: {link}" : "Utilize a seguinte hiperligação para repor a sua palavra-passe: {link}",
"New password" : "Nova palavra-passe",
"New Password" : "Nova palavra-passe",
"Reset password" : "Repor palavra-passe",
@@ -307,6 +306,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Olá,\n\napenas para informar que %s partilhou »%s« consigo.\nConsulte aqui: %s\n",
"The share will expire on %s." : "Esta partilha irá expirar em %s.",
"Cheers!" : "Parabéns!",
+ "Use the following link to reset your password: {link}" : "Utilize a seguinte hiperligação para repor a sua palavra-passe: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Olá,<br><br>apenas para informar que %s partilhou <strong>%s</strong> consigo.<br><a href=\"%s\">Consulte aqui!</a><br><br>"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/pt_PT.json b/core/l10n/pt_PT.json
index d40a2aa1803..f0333a23c6b 100644
--- a/core/l10n/pt_PT.json
+++ b/core/l10n/pt_PT.json
@@ -260,7 +260,6 @@
"Log in" : "Iniciar Sessão",
"Stay logged in" : "Manter sessão iniciada",
"Alternative Logins" : "Contas de Acesso Alternativas",
- "Use the following link to reset your password: {link}" : "Utilize a seguinte hiperligação para repor a sua palavra-passe: {link}",
"New password" : "Nova palavra-passe",
"New Password" : "Nova palavra-passe",
"Reset password" : "Repor palavra-passe",
@@ -305,6 +304,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Olá,\n\napenas para informar que %s partilhou »%s« consigo.\nConsulte aqui: %s\n",
"The share will expire on %s." : "Esta partilha irá expirar em %s.",
"Cheers!" : "Parabéns!",
+ "Use the following link to reset your password: {link}" : "Utilize a seguinte hiperligação para repor a sua palavra-passe: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Olá,<br><br>apenas para informar que %s partilhou <strong>%s</strong> consigo.<br><a href=\"%s\">Consulte aqui!</a><br><br>"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/ro.js b/core/l10n/ro.js
index 7433b451213..dfdf214b969 100644
--- a/core/l10n/ro.js
+++ b/core/l10n/ro.js
@@ -245,7 +245,6 @@ OC.L10N.register(
"Log in" : "Autentificare",
"Stay logged in" : "Rămâi autentificat",
"Alternative Logins" : "Conectări alternative",
- "Use the following link to reset your password: {link}" : "Folosește următorul link pentru a reseta parola: {link}",
"New password" : "Noua parolă",
"New Password" : "Noua parolă",
"Reset password" : "Resetează parola",
@@ -290,6 +289,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Salutare,\n\nvrem să te anunțăm că %s a partajat %s cu tine.\nPoți vedea aici: %s\n\n",
"The share will expire on %s." : "Partajarea va expira în data de %s.",
"Cheers!" : "Noroc!",
+ "Use the following link to reset your password: {link}" : "Folosește următorul link pentru a reseta parola: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Salutare,<br><br>te anunțăm pe această cale că %s a partajat <strong>%s</strong> cu tine.<br><a href=\"%s\">Accesează!</a><br><br>"
},
"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));");
diff --git a/core/l10n/ro.json b/core/l10n/ro.json
index 95cc6d3c66b..13e6861ac93 100644
--- a/core/l10n/ro.json
+++ b/core/l10n/ro.json
@@ -243,7 +243,6 @@
"Log in" : "Autentificare",
"Stay logged in" : "Rămâi autentificat",
"Alternative Logins" : "Conectări alternative",
- "Use the following link to reset your password: {link}" : "Folosește următorul link pentru a reseta parola: {link}",
"New password" : "Noua parolă",
"New Password" : "Noua parolă",
"Reset password" : "Resetează parola",
@@ -288,6 +287,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Salutare,\n\nvrem să te anunțăm că %s a partajat %s cu tine.\nPoți vedea aici: %s\n\n",
"The share will expire on %s." : "Partajarea va expira în data de %s.",
"Cheers!" : "Noroc!",
+ "Use the following link to reset your password: {link}" : "Folosește următorul link pentru a reseta parola: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Salutare,<br><br>te anunțăm pe această cale că %s a partajat <strong>%s</strong> cu tine.<br><a href=\"%s\">Accesează!</a><br><br>"
},"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"
} \ No newline at end of file
diff --git a/core/l10n/ru.js b/core/l10n/ru.js
index 5d3a2ffb7f2..9396ec53321 100644
--- a/core/l10n/ru.js
+++ b/core/l10n/ru.js
@@ -17,6 +17,10 @@ OC.L10N.register(
"Couldn't reset password because the token is invalid" : "Не удалось сбросить пароль из-за неверного токена",
"Couldn't reset password because the token is expired" : "Не удалось сбросить пароль, так как срок действия токена истек.",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Не удалось отправить письмо сброса так как у данного пользователя не задан адрес электронной почты. Пожалуйста, обратитесь к администратору.",
+ "Password reset" : "Сброс пароля",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Для сброса пароля нажмите на кнопку. Если вы не запрашивали сброс пароля, просто проигнорируйе это письмо.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Для сброса пароля нажмите на ссылку. Если вы не запрашивали сброс пароля, просто проигнорируйе это письмо.",
+ "Reset your password" : "Сбросить пароль",
"%s password reset" : "Сброс пароля %s",
"Couldn't send reset email. Please contact your administrator." : "Не удалось отправить письмо для сброса пароля. Пожалуйста, свяжитесь с вашим администратором.",
"Couldn't send reset email. Please make sure your username is correct." : "Не удалось отправить письмо для сброса пароля. Убедитесь, что имя пользователя указано верно.",
@@ -263,7 +267,6 @@ OC.L10N.register(
"Log in" : "Войти",
"Stay logged in" : "Оставаться в системе",
"Alternative Logins" : "Альтернативные имена пользователя",
- "Use the following link to reset your password: {link}" : "Используйте следующую ссылку чтобы сбросить пароль: {link}",
"New password" : "Новый пароль",
"New Password" : "Новый пароль",
"Reset password" : "Сбросить пароль",
@@ -308,6 +311,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Здравствуйте,\n\n%s поделился %s с вами.\nПосмотреть: %s\n",
"The share will expire on %s." : "Доступ будет закрыт %s",
"Cheers!" : "Всего наилучшего!",
+ "Use the following link to reset your password: {link}" : "Используйте следующую ссылку чтобы сбросить пароль: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Здравствуйте,<br><br>%s поделился с вами <strong>%s</strong>.<br>Перейдите по <a href=\"%s\">ссылке</a>, чтобы посмотреть<br><br>"
},
"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/core/l10n/ru.json b/core/l10n/ru.json
index a85e8e0577e..33392075d42 100644
--- a/core/l10n/ru.json
+++ b/core/l10n/ru.json
@@ -15,6 +15,10 @@
"Couldn't reset password because the token is invalid" : "Не удалось сбросить пароль из-за неверного токена",
"Couldn't reset password because the token is expired" : "Не удалось сбросить пароль, так как срок действия токена истек.",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Не удалось отправить письмо сброса так как у данного пользователя не задан адрес электронной почты. Пожалуйста, обратитесь к администратору.",
+ "Password reset" : "Сброс пароля",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Для сброса пароля нажмите на кнопку. Если вы не запрашивали сброс пароля, просто проигнорируйе это письмо.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Для сброса пароля нажмите на ссылку. Если вы не запрашивали сброс пароля, просто проигнорируйе это письмо.",
+ "Reset your password" : "Сбросить пароль",
"%s password reset" : "Сброс пароля %s",
"Couldn't send reset email. Please contact your administrator." : "Не удалось отправить письмо для сброса пароля. Пожалуйста, свяжитесь с вашим администратором.",
"Couldn't send reset email. Please make sure your username is correct." : "Не удалось отправить письмо для сброса пароля. Убедитесь, что имя пользователя указано верно.",
@@ -261,7 +265,6 @@
"Log in" : "Войти",
"Stay logged in" : "Оставаться в системе",
"Alternative Logins" : "Альтернативные имена пользователя",
- "Use the following link to reset your password: {link}" : "Используйте следующую ссылку чтобы сбросить пароль: {link}",
"New password" : "Новый пароль",
"New Password" : "Новый пароль",
"Reset password" : "Сбросить пароль",
@@ -306,6 +309,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Здравствуйте,\n\n%s поделился %s с вами.\nПосмотреть: %s\n",
"The share will expire on %s." : "Доступ будет закрыт %s",
"Cheers!" : "Всего наилучшего!",
+ "Use the following link to reset your password: {link}" : "Используйте следующую ссылку чтобы сбросить пароль: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Здравствуйте,<br><br>%s поделился с вами <strong>%s</strong>.<br>Перейдите по <a href=\"%s\">ссылке</a>, чтобы посмотреть<br><br>"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
} \ No newline at end of file
diff --git a/core/l10n/sk.js b/core/l10n/sk.js
index 0abbc1aa7bc..87f76ec482e 100644
--- a/core/l10n/sk.js
+++ b/core/l10n/sk.js
@@ -21,6 +21,7 @@ OC.L10N.register(
"Couldn't send reset email. Please contact your administrator." : "Nemožno poslať email pre obnovu. Kontaktujte prosím vášho administrátora.",
"Couldn't send reset email. Please make sure your username is correct." : "Nemožno poslať email pre obnovu. Uistite sa, či vkladáte správne používateľské meno.",
"Preparing update" : "Pripravuje sa aktualizácia",
+ "[%d / %d]: %s" : "[%d / %d]: %s",
"Repair warning: " : "Oznámenie opravy:",
"Repair error: " : "Chyba opravy:",
"Please use the command line updater because automatic updating is disabled in the config.php." : "Automatická aktualizácia je zakázaná v config.php, použite prosím aktualizáciu cez príkazový riadok.",
@@ -47,6 +48,7 @@ OC.L10N.register(
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Pri kontrole integrity kódu sa vyskytli chyby. Viac informácií…</a>",
"Settings" : "Nastavenia",
"Connection to server lost" : "Stratené spojenie so serverom",
+ "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Nepodarilo sa načítať stránku, opätovný pokus o %n sekundu","Nepodarilo sa načítať stránku, opätovný pokus o %n sekundy","Nepodarilo sa načítať stránku, opätovný pokus o %n sekúnd"],
"Saving..." : "Ukladám...",
"Dismiss" : "Odmietnuť",
"This action requires you to confirm your password" : "Táto akcia vyžaduje potvrdenie vášho hesla",
@@ -107,29 +109,51 @@ OC.L10N.register(
"Press ⌘-C to copy." : "Stlač ⌘-C pre skopírovanie.",
"Press Ctrl-C to copy." : "Stlač Ctrl-C pre skopírovanie.",
"Resharing is not allowed" : "Sprístupnenie už sprístupnenej položky nie je povolené",
+ "Share to {name}" : "Zdieľať s {name}",
"Share link" : "Sprístupniť odkaz",
"Link" : "Odkaz",
"Password protect" : "Chrániť heslom",
"Allow upload and editing" : "Povoliť nahratie a úpravy",
"Allow editing" : "Povoliť úpravy",
+ "upload only" : "len odoslať",
"Email link to person" : "Odoslať odkaz emailom",
"Send" : "Odoslať",
"Shared with you and the group {group} by {owner}" : "Sprístupnené vám a skupine {group} používateľom {owner}",
"Shared with you by {owner}" : "Sprístupnené vám používateľom {owner}",
+ "Choose a password for the mail share" : "Zvoľte heslo pre zdieľanie pošty",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} zdieľané odkazom",
"group" : "skupina",
"remote" : "vzdialený",
+ "shared by {sharer}" : "vyzdieľal {sharer}",
"Unshare" : "Zneprístupniť",
+ "Can reshare" : "Môže opätovne zdieľať",
+ "Can edit" : "Môže upravovať",
+ "Can create" : "Môže vytvárať",
+ "Can change" : "Môže meniť",
+ "Can delete" : "Môže odstraňovať",
"Could not unshare" : "Nepodarilo sa zrušiť sprístupnenie",
"Share details could not be loaded for this item." : "Nebolo možné načítať údaje o sprístupnení tejto položky.",
+ "No users or groups found for {search}" : "Výrazu {search} nezodpovedá žiadny používateľ ani skupina",
+ "No users found for {search}" : "Výrazu {search} nezodpovedá žiadny používateľ",
"An error occurred. Please try again" : "Nastala chyba. Skúste to prosím znovu",
+ "{sharee} (group)" : "{sharee} (skupina)",
+ "{sharee} (remote)" : "{sharee} (vzdialene)",
+ "{sharee} (email)" : "{sharee} (pošta)",
+ "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
"Share" : "Sprístupniť",
+ "Share with users or by mail..." : "Zdieľať s používateľmi alebo prostredníctvom pošty...",
"Share with users or remote users..." : "Sprístupniť používateľom alebo vzdialeným používateľom...",
+ "Share with users, remote users or by mail..." : "Zdieľať spoužívateľmi, vzdialenými používateľmi alebo prostredníctvom pošty...",
"Share with users or groups..." : "Sprístupniť používateľom alebo skupinám",
+ "Share with users, groups or by mail..." : "Zdieľať s používateľmi, skupinami alebo prostredníctvom pošty..",
"Share with users, groups or remote users..." : "Sprístupniť používateľom, skupinám alebo vzdialeným používateľom...",
+ "Share with users, groups, remote users or by mail..." : "Zdieľať s používateľmi, skupinami, vzdialenými používateľmi alebo prostredníctvom pošty..",
"Share with users..." : "Sprístupniť používateľom...",
"Error removing share" : "Chyba pri rušení sprístupnenia",
+ "Non-existing tag #{tag}" : "Neexistujúca značka #{tag}",
"restricted" : "obmedzený",
"invisible" : "neviditeľný",
+ "({scope})" : "({scope})",
"Delete" : "Zmazať",
"Rename" : "Premenovať",
"No tags found" : "Štítky sa nenašli",
@@ -209,7 +233,6 @@ OC.L10N.register(
"Log in" : "Prihlásiť sa",
"Stay logged in" : "Zostať prihlásený",
"Alternative Logins" : "Alternatívne prihlásenie",
- "Use the following link to reset your password: {link}" : "Použite nasledujúci odkaz pre obnovenie vášho hesla: {link}",
"New password" : "Nové heslo",
"New Password" : "Nové heslo",
"Reset password" : "Obnovenie hesla",
@@ -245,6 +268,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Dobrý deň,\n\npoužívateľ %s Vám sprístupnil položku s názvom %s.\nPre zobrazenie kliknite na odkaz: %s\n",
"The share will expire on %s." : "Sprístupnenie vyprší %s.",
"Cheers!" : "Pekný deň!",
+ "Use the following link to reset your password: {link}" : "Použite nasledujúci odkaz pre obnovenie vášho hesla: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Dobrý deň,<br><br>používateľ %s Vám sprístupnil položku s názvom »%s«.<br><a href=\"%s\">Zobraziť!</a><br><br>"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/core/l10n/sk.json b/core/l10n/sk.json
index c04044d1919..c3a59035767 100644
--- a/core/l10n/sk.json
+++ b/core/l10n/sk.json
@@ -19,6 +19,7 @@
"Couldn't send reset email. Please contact your administrator." : "Nemožno poslať email pre obnovu. Kontaktujte prosím vášho administrátora.",
"Couldn't send reset email. Please make sure your username is correct." : "Nemožno poslať email pre obnovu. Uistite sa, či vkladáte správne používateľské meno.",
"Preparing update" : "Pripravuje sa aktualizácia",
+ "[%d / %d]: %s" : "[%d / %d]: %s",
"Repair warning: " : "Oznámenie opravy:",
"Repair error: " : "Chyba opravy:",
"Please use the command line updater because automatic updating is disabled in the config.php." : "Automatická aktualizácia je zakázaná v config.php, použite prosím aktualizáciu cez príkazový riadok.",
@@ -45,6 +46,7 @@
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Pri kontrole integrity kódu sa vyskytli chyby. Viac informácií…</a>",
"Settings" : "Nastavenia",
"Connection to server lost" : "Stratené spojenie so serverom",
+ "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Nepodarilo sa načítať stránku, opätovný pokus o %n sekundu","Nepodarilo sa načítať stránku, opätovný pokus o %n sekundy","Nepodarilo sa načítať stránku, opätovný pokus o %n sekúnd"],
"Saving..." : "Ukladám...",
"Dismiss" : "Odmietnuť",
"This action requires you to confirm your password" : "Táto akcia vyžaduje potvrdenie vášho hesla",
@@ -105,29 +107,51 @@
"Press ⌘-C to copy." : "Stlač ⌘-C pre skopírovanie.",
"Press Ctrl-C to copy." : "Stlač Ctrl-C pre skopírovanie.",
"Resharing is not allowed" : "Sprístupnenie už sprístupnenej položky nie je povolené",
+ "Share to {name}" : "Zdieľať s {name}",
"Share link" : "Sprístupniť odkaz",
"Link" : "Odkaz",
"Password protect" : "Chrániť heslom",
"Allow upload and editing" : "Povoliť nahratie a úpravy",
"Allow editing" : "Povoliť úpravy",
+ "upload only" : "len odoslať",
"Email link to person" : "Odoslať odkaz emailom",
"Send" : "Odoslať",
"Shared with you and the group {group} by {owner}" : "Sprístupnené vám a skupine {group} používateľom {owner}",
"Shared with you by {owner}" : "Sprístupnené vám používateľom {owner}",
+ "Choose a password for the mail share" : "Zvoľte heslo pre zdieľanie pošty",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} zdieľané odkazom",
"group" : "skupina",
"remote" : "vzdialený",
+ "shared by {sharer}" : "vyzdieľal {sharer}",
"Unshare" : "Zneprístupniť",
+ "Can reshare" : "Môže opätovne zdieľať",
+ "Can edit" : "Môže upravovať",
+ "Can create" : "Môže vytvárať",
+ "Can change" : "Môže meniť",
+ "Can delete" : "Môže odstraňovať",
"Could not unshare" : "Nepodarilo sa zrušiť sprístupnenie",
"Share details could not be loaded for this item." : "Nebolo možné načítať údaje o sprístupnení tejto položky.",
+ "No users or groups found for {search}" : "Výrazu {search} nezodpovedá žiadny používateľ ani skupina",
+ "No users found for {search}" : "Výrazu {search} nezodpovedá žiadny používateľ",
"An error occurred. Please try again" : "Nastala chyba. Skúste to prosím znovu",
+ "{sharee} (group)" : "{sharee} (skupina)",
+ "{sharee} (remote)" : "{sharee} (vzdialene)",
+ "{sharee} (email)" : "{sharee} (pošta)",
+ "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
"Share" : "Sprístupniť",
+ "Share with users or by mail..." : "Zdieľať s používateľmi alebo prostredníctvom pošty...",
"Share with users or remote users..." : "Sprístupniť používateľom alebo vzdialeným používateľom...",
+ "Share with users, remote users or by mail..." : "Zdieľať spoužívateľmi, vzdialenými používateľmi alebo prostredníctvom pošty...",
"Share with users or groups..." : "Sprístupniť používateľom alebo skupinám",
+ "Share with users, groups or by mail..." : "Zdieľať s používateľmi, skupinami alebo prostredníctvom pošty..",
"Share with users, groups or remote users..." : "Sprístupniť používateľom, skupinám alebo vzdialeným používateľom...",
+ "Share with users, groups, remote users or by mail..." : "Zdieľať s používateľmi, skupinami, vzdialenými používateľmi alebo prostredníctvom pošty..",
"Share with users..." : "Sprístupniť používateľom...",
"Error removing share" : "Chyba pri rušení sprístupnenia",
+ "Non-existing tag #{tag}" : "Neexistujúca značka #{tag}",
"restricted" : "obmedzený",
"invisible" : "neviditeľný",
+ "({scope})" : "({scope})",
"Delete" : "Zmazať",
"Rename" : "Premenovať",
"No tags found" : "Štítky sa nenašli",
@@ -207,7 +231,6 @@
"Log in" : "Prihlásiť sa",
"Stay logged in" : "Zostať prihlásený",
"Alternative Logins" : "Alternatívne prihlásenie",
- "Use the following link to reset your password: {link}" : "Použite nasledujúci odkaz pre obnovenie vášho hesla: {link}",
"New password" : "Nové heslo",
"New Password" : "Nové heslo",
"Reset password" : "Obnovenie hesla",
@@ -243,6 +266,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Dobrý deň,\n\npoužívateľ %s Vám sprístupnil položku s názvom %s.\nPre zobrazenie kliknite na odkaz: %s\n",
"The share will expire on %s." : "Sprístupnenie vyprší %s.",
"Cheers!" : "Pekný deň!",
+ "Use the following link to reset your password: {link}" : "Použite nasledujúci odkaz pre obnovenie vášho hesla: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Dobrý deň,<br><br>používateľ %s Vám sprístupnil položku s názvom »%s«.<br><a href=\"%s\">Zobraziť!</a><br><br>"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/core/l10n/sl.js b/core/l10n/sl.js
index 9e6ce12b376..e8de6642a5c 100644
--- a/core/l10n/sl.js
+++ b/core/l10n/sl.js
@@ -212,7 +212,6 @@ OC.L10N.register(
"Log in" : "Prijava",
"Stay logged in" : "Ohrani prijavo",
"Alternative Logins" : "Druge prijavne možnosti",
- "Use the following link to reset your password: {link}" : "Za ponastavitev gesla uporabite povezavo: {link}",
"New password" : "Novo geslo",
"New Password" : "Novo geslo",
"Reset password" : "Ponastavi geslo",
@@ -251,6 +250,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Pozdravljeni,\n\noseba %s vam je omogočila souporabo %s.\nVir si lahko ogledate: %s\n\n",
"The share will expire on %s." : "Povezava souporabe bo potekla %s.",
"Cheers!" : "Lep pozdrav!",
+ "Use the following link to reset your password: {link}" : "Za ponastavitev gesla uporabite povezavo: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Pozdravljeni,<br><br>uporabnik %s vam je omogočil souporabo <strong>%s</strong>.<br><a href=\"%s\">Oglejte si vsebino!</a><br><br>"
},
"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);");
diff --git a/core/l10n/sl.json b/core/l10n/sl.json
index b45e6b18cad..f6b4394a009 100644
--- a/core/l10n/sl.json
+++ b/core/l10n/sl.json
@@ -210,7 +210,6 @@
"Log in" : "Prijava",
"Stay logged in" : "Ohrani prijavo",
"Alternative Logins" : "Druge prijavne možnosti",
- "Use the following link to reset your password: {link}" : "Za ponastavitev gesla uporabite povezavo: {link}",
"New password" : "Novo geslo",
"New Password" : "Novo geslo",
"Reset password" : "Ponastavi geslo",
@@ -249,6 +248,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Pozdravljeni,\n\noseba %s vam je omogočila souporabo %s.\nVir si lahko ogledate: %s\n\n",
"The share will expire on %s." : "Povezava souporabe bo potekla %s.",
"Cheers!" : "Lep pozdrav!",
+ "Use the following link to reset your password: {link}" : "Za ponastavitev gesla uporabite povezavo: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Pozdravljeni,<br><br>uporabnik %s vam je omogočil souporabo <strong>%s</strong>.<br><a href=\"%s\">Oglejte si vsebino!</a><br><br>"
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
} \ No newline at end of file
diff --git a/core/l10n/sq.js b/core/l10n/sq.js
index 24d68260474..c2a292bf40d 100644
--- a/core/l10n/sq.js
+++ b/core/l10n/sq.js
@@ -241,7 +241,6 @@ OC.L10N.register(
"Log in" : "Hyni",
"Stay logged in" : "Qëndro i futur",
"Alternative Logins" : "Hyrje Alternative",
- "Use the following link to reset your password: {link}" : "Që të ricaktoni fjalëkalimin tuaj, përdorni lidhjen vijuese: {link}",
"New password" : "Fjalëkalim i ri",
"New Password" : "Fjalëkalim i Ri",
"Reset password" : "Ricaktoni fjalëkalimin",
@@ -286,6 +285,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Njatjeta,\n\nthjesht po ju bëjmë të ditur që %s ndau me ju %s.\nShiheni: %s\n\n",
"The share will expire on %s." : "Ndarja do të skadojë më %s.",
"Cheers!" : "Gëzuar!",
+ "Use the following link to reset your password: {link}" : "Që të ricaktoni fjalëkalimin tuaj, përdorni lidhjen vijuese: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Njatjeta,<br><br>thjesht po ju bëjmë të ditur që %s ndau me ju <strong>%s</strong>.<br><a href=\"%s\">Shiheni!</a><br><br>"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/sq.json b/core/l10n/sq.json
index 2b4f62bd00c..67ff1514fc7 100644
--- a/core/l10n/sq.json
+++ b/core/l10n/sq.json
@@ -239,7 +239,6 @@
"Log in" : "Hyni",
"Stay logged in" : "Qëndro i futur",
"Alternative Logins" : "Hyrje Alternative",
- "Use the following link to reset your password: {link}" : "Që të ricaktoni fjalëkalimin tuaj, përdorni lidhjen vijuese: {link}",
"New password" : "Fjalëkalim i ri",
"New Password" : "Fjalëkalim i Ri",
"Reset password" : "Ricaktoni fjalëkalimin",
@@ -284,6 +283,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Njatjeta,\n\nthjesht po ju bëjmë të ditur që %s ndau me ju %s.\nShiheni: %s\n\n",
"The share will expire on %s." : "Ndarja do të skadojë më %s.",
"Cheers!" : "Gëzuar!",
+ "Use the following link to reset your password: {link}" : "Që të ricaktoni fjalëkalimin tuaj, përdorni lidhjen vijuese: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Njatjeta,<br><br>thjesht po ju bëjmë të ditur që %s ndau me ju <strong>%s</strong>.<br><a href=\"%s\">Shiheni!</a><br><br>"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/sv.js b/core/l10n/sv.js
index e116fa1c9c7..8aa07cd75ed 100644
--- a/core/l10n/sv.js
+++ b/core/l10n/sv.js
@@ -243,7 +243,6 @@ OC.L10N.register(
"Log in" : "Logga in",
"Stay logged in" : "Fortsätt vara inloggad.",
"Alternative Logins" : "Alternativa inloggningar",
- "Use the following link to reset your password: {link}" : "Använd följande länk för att återställa lösenordet: {link}",
"New password" : "Nytt lösenord",
"New Password" : "Nytt lösenord",
"Reset password" : "Återställ lösenord",
@@ -288,6 +287,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hej där,\n\nVi vill bara meddela att %s delade %s med dig.\nTitta på den här: %s\n\n",
"The share will expire on %s." : "Delningen kommer att upphöra %s.",
"Cheers!" : "Ha de fint!",
+ "Use the following link to reset your password: {link}" : "Använd följande länk för att återställa lösenordet: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej där,<br><br>Tänkte bara informera dig om att %s delade <strong>%s</strong> med dig.<br><a href=\"%s\">Klicka här för att se!</a><br><br>"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/sv.json b/core/l10n/sv.json
index 1f87cffbb6f..8a90df1e7b8 100644
--- a/core/l10n/sv.json
+++ b/core/l10n/sv.json
@@ -241,7 +241,6 @@
"Log in" : "Logga in",
"Stay logged in" : "Fortsätt vara inloggad.",
"Alternative Logins" : "Alternativa inloggningar",
- "Use the following link to reset your password: {link}" : "Använd följande länk för att återställa lösenordet: {link}",
"New password" : "Nytt lösenord",
"New Password" : "Nytt lösenord",
"Reset password" : "Återställ lösenord",
@@ -286,6 +285,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hej där,\n\nVi vill bara meddela att %s delade %s med dig.\nTitta på den här: %s\n\n",
"The share will expire on %s." : "Delningen kommer att upphöra %s.",
"Cheers!" : "Ha de fint!",
+ "Use the following link to reset your password: {link}" : "Använd följande länk för att återställa lösenordet: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej där,<br><br>Tänkte bara informera dig om att %s delade <strong>%s</strong> med dig.<br><a href=\"%s\">Klicka här för att se!</a><br><br>"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/tr.js b/core/l10n/tr.js
index f1b70b01258..9f03eddbf6e 100644
--- a/core/l10n/tr.js
+++ b/core/l10n/tr.js
@@ -17,6 +17,10 @@ OC.L10N.register(
"Couldn't reset password because the token is invalid" : "Kod geçersiz olduğundan parola sıfırlanamadı",
"Couldn't reset password because the token is expired" : "Kodun süresi geçtiğinden parola sıfırlanamadı",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Bu kullanıcı için bir e-posta adresi olmadığından sıfırlama e-postası gönderilemedi. Lütfen yöneticiniz ile görüşün.",
+ "Password reset" : "Parolamı Sıfırla",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Parolanızı sıfırlamak için düğmeye tıklayın. Parola sıfırlama isteğinde bulunmadıysanız bu e-postayı yoksayabilirsiniz.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Parolanızı sıfırlamak için bağlantıya tıklayın. Parola sıfırlama isteğinde bulunmadıysanız bu e-postayı yoksayabilirsiniz.",
+ "Reset your password" : "Parolamı Sıfırla",
"%s password reset" : "%s parola sıfırlama",
"Couldn't send reset email. Please contact your administrator." : "Sıfırlama e-postası gönderilemedi. Lütfen yöneticiniz ile görüşün.",
"Couldn't send reset email. Please make sure your username is correct." : "Sıfırlama e-postası gönderilemedi. Lütfen kullanıcı adınızın doğru olduğundan emin olun.",
@@ -263,7 +267,6 @@ OC.L10N.register(
"Log in" : "Oturum Aç",
"Stay logged in" : "Bağlı kal",
"Alternative Logins" : "Alternatif Oturum Açmalar",
- "Use the following link to reset your password: {link}" : "Parolanızı sıfırlamak için şu bağlantıyı kullanın: {link}",
"New password" : "Yeni parola",
"New Password" : "Yeni Parola",
"Reset password" : "Parolayı sıfırla",
@@ -308,6 +311,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Merhaba,\n\n%s kullanıcısının sizinle %s paylaşımında bulunduğunu bildirmek istedik.\nPaylaşımı şuradan görebilirsiniz: %s\n\n",
"The share will expire on %s." : "Bu paylaşım %s tarihinde sona erecek.",
"Cheers!" : "Hoşça kalın!",
+ "Use the following link to reset your password: {link}" : "Parolanızı sıfırlamak için şu bağlantıyı kullanın: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Merhaba, <br><br>%s kullanıcısının sizinle <strong>%s</strong> paylaşımında bulunduğunu bildirmek istedik.<br><a href=\"%s\">Paylaşımı şuradan görebilirsiniz!</a><br><br>"
},
"nplurals=2; plural=(n > 1);");
diff --git a/core/l10n/tr.json b/core/l10n/tr.json
index 65a4acb2039..b0bafaa9b77 100644
--- a/core/l10n/tr.json
+++ b/core/l10n/tr.json
@@ -15,6 +15,10 @@
"Couldn't reset password because the token is invalid" : "Kod geçersiz olduğundan parola sıfırlanamadı",
"Couldn't reset password because the token is expired" : "Kodun süresi geçtiğinden parola sıfırlanamadı",
"Could not send reset email because there is no email address for this username. Please contact your administrator." : "Bu kullanıcı için bir e-posta adresi olmadığından sıfırlama e-postası gönderilemedi. Lütfen yöneticiniz ile görüşün.",
+ "Password reset" : "Parolamı Sıfırla",
+ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Parolanızı sıfırlamak için düğmeye tıklayın. Parola sıfırlama isteğinde bulunmadıysanız bu e-postayı yoksayabilirsiniz.",
+ "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Parolanızı sıfırlamak için bağlantıya tıklayın. Parola sıfırlama isteğinde bulunmadıysanız bu e-postayı yoksayabilirsiniz.",
+ "Reset your password" : "Parolamı Sıfırla",
"%s password reset" : "%s parola sıfırlama",
"Couldn't send reset email. Please contact your administrator." : "Sıfırlama e-postası gönderilemedi. Lütfen yöneticiniz ile görüşün.",
"Couldn't send reset email. Please make sure your username is correct." : "Sıfırlama e-postası gönderilemedi. Lütfen kullanıcı adınızın doğru olduğundan emin olun.",
@@ -261,7 +265,6 @@
"Log in" : "Oturum Aç",
"Stay logged in" : "Bağlı kal",
"Alternative Logins" : "Alternatif Oturum Açmalar",
- "Use the following link to reset your password: {link}" : "Parolanızı sıfırlamak için şu bağlantıyı kullanın: {link}",
"New password" : "Yeni parola",
"New Password" : "Yeni Parola",
"Reset password" : "Parolayı sıfırla",
@@ -306,6 +309,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Merhaba,\n\n%s kullanıcısının sizinle %s paylaşımında bulunduğunu bildirmek istedik.\nPaylaşımı şuradan görebilirsiniz: %s\n\n",
"The share will expire on %s." : "Bu paylaşım %s tarihinde sona erecek.",
"Cheers!" : "Hoşça kalın!",
+ "Use the following link to reset your password: {link}" : "Parolanızı sıfırlamak için şu bağlantıyı kullanın: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Merhaba, <br><br>%s kullanıcısının sizinle <strong>%s</strong> paylaşımında bulunduğunu bildirmek istedik.<br><a href=\"%s\">Paylaşımı şuradan görebilirsiniz!</a><br><br>"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js
index f7058b62a17..29453d2d927 100644
--- a/core/l10n/zh_CN.js
+++ b/core/l10n/zh_CN.js
@@ -252,7 +252,6 @@ OC.L10N.register(
"Log in" : "登录",
"Stay logged in" : "保持登录",
"Alternative Logins" : "其他登录方式",
- "Use the following link to reset your password: {link}" : "使用以下链接重置您的密码: {link}",
"New password" : "新密码",
"New Password" : "新密码",
"Reset password" : "重置密码",
@@ -297,6 +296,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "嗨、你好,\n\n只想让你知道 %s 分享了 %s 给你。\n现在查看: %s\n",
"The share will expire on %s." : "此分享将在 %s 过期.",
"Cheers!" : "干杯!",
+ "Use the following link to reset your password: {link}" : "使用以下链接重置您的密码: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "嗨、你好,<br><br>只想让你知道 %s 分享了 <strong>%s</strong> 给你。<br><a href=\"%s\">现在查看!</a><br><br>"
},
"nplurals=1; plural=0;");
diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json
index 764b5e53c0f..0836a9a5e38 100644
--- a/core/l10n/zh_CN.json
+++ b/core/l10n/zh_CN.json
@@ -250,7 +250,6 @@
"Log in" : "登录",
"Stay logged in" : "保持登录",
"Alternative Logins" : "其他登录方式",
- "Use the following link to reset your password: {link}" : "使用以下链接重置您的密码: {link}",
"New password" : "新密码",
"New Password" : "新密码",
"Reset password" : "重置密码",
@@ -295,6 +294,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "嗨、你好,\n\n只想让你知道 %s 分享了 %s 给你。\n现在查看: %s\n",
"The share will expire on %s." : "此分享将在 %s 过期.",
"Cheers!" : "干杯!",
+ "Use the following link to reset your password: {link}" : "使用以下链接重置您的密码: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "嗨、你好,<br><br>只想让你知道 %s 分享了 <strong>%s</strong> 给你。<br><a href=\"%s\">现在查看!</a><br><br>"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js
index 76e6408762c..66e0aa1e58a 100644
--- a/core/l10n/zh_TW.js
+++ b/core/l10n/zh_TW.js
@@ -213,7 +213,6 @@ OC.L10N.register(
"Log in" : "登入",
"Stay logged in" : "保持登入狀態",
"Alternative Logins" : "其他登入方法",
- "Use the following link to reset your password: {link}" : "請至以下連結重設您的密碼: {link}",
"New password" : "新密碼",
"New Password" : "新密碼",
"Reset password" : "重設密碼",
@@ -252,6 +251,7 @@ OC.L10N.register(
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "嗨,\n\n%s 和你分享了 %s ,到這裡看它:%s\n",
"The share will expire on %s." : "這個分享將會於 %s 過期",
"Cheers!" : "太棒了!",
+ "Use the following link to reset your password: {link}" : "請至以下連結重設您的密碼: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "嗨,<br><br>%s 與你分享了<strong>%s</strong>。<br><a href=\"%s\">檢視</a><br><br>"
},
"nplurals=1; plural=0;");
diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json
index 744d9f46aa6..30bcd5bde0d 100644
--- a/core/l10n/zh_TW.json
+++ b/core/l10n/zh_TW.json
@@ -211,7 +211,6 @@
"Log in" : "登入",
"Stay logged in" : "保持登入狀態",
"Alternative Logins" : "其他登入方法",
- "Use the following link to reset your password: {link}" : "請至以下連結重設您的密碼: {link}",
"New password" : "新密碼",
"New Password" : "新密碼",
"Reset password" : "重設密碼",
@@ -250,6 +249,7 @@
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "嗨,\n\n%s 和你分享了 %s ,到這裡看它:%s\n",
"The share will expire on %s." : "這個分享將會於 %s 過期",
"Cheers!" : "太棒了!",
+ "Use the following link to reset your password: {link}" : "請至以下連結重設您的密碼: {link}",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "嗨,<br><br>%s 與你分享了<strong>%s</strong>。<br><a href=\"%s\">檢視</a><br><br>"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/core/templates/lostpassword/email.php b/core/templates/lostpassword/email.php
deleted file mode 100644
index 3ca424d5294..00000000000
--- a/core/templates/lostpassword/email.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-/**
- * @author Christopher Schäpers <kondou@ts.unde.re>
- *
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- * @license AGPL-3.0
- *
- * 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/>
- *
- */
-echo str_replace('{link}', $_['link'], $l->t('Use the following link to reset your password: {link}'));
diff --git a/lib/base.php b/lib/base.php
index feb54ec0331..1db6b84c5fb 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -727,6 +727,9 @@ class OC {
self::registerAccountHooks();
self::registerSettingsHooks();
+ $settings = new \OC\Settings\Application();
+ $settings->register();
+
//make sure temporary files are cleaned up
$tmpManager = \OC::$server->getTempManager();
register_shutdown_function(array($tmpManager, 'clean'));
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index a6181be0727..823a876e04b 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -291,6 +291,7 @@ return array(
'OC\\AppFramework\\Http\\Request' => $baseDir . '/lib/private/AppFramework/Http/Request.php',
'OC\\AppFramework\\Middleware\\MiddlewareDispatcher' => $baseDir . '/lib/private/AppFramework/Middleware/MiddlewareDispatcher.php',
'OC\\AppFramework\\Middleware\\OCSMiddleware' => $baseDir . '/lib/private/AppFramework/Middleware/OCSMiddleware.php',
+ 'OC\\AppFramework\\Middleware\\Security\\BruteForceMiddleware' => $baseDir . '/lib/private/AppFramework/Middleware/Security/BruteForceMiddleware.php',
'OC\\AppFramework\\Middleware\\Security\\CORSMiddleware' => $baseDir . '/lib/private/AppFramework/Middleware/Security/CORSMiddleware.php',
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\AppNotEnabledException' => $baseDir . '/lib/private/AppFramework/Middleware/Security/Exceptions/AppNotEnabledException.php',
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\CrossSiteRequestForgeryException' => $baseDir . '/lib/private/AppFramework/Middleware/Security/Exceptions/CrossSiteRequestForgeryException.php',
@@ -299,6 +300,7 @@ return array(
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\NotLoggedInException' => $baseDir . '/lib/private/AppFramework/Middleware/Security/Exceptions/NotLoggedInException.php',
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\SecurityException' => $baseDir . '/lib/private/AppFramework/Middleware/Security/Exceptions/SecurityException.php',
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\StrictCookieMissingException' => $baseDir . '/lib/private/AppFramework/Middleware/Security/Exceptions/StrictCookieMissingException.php',
+ 'OC\\AppFramework\\Middleware\\Security\\RateLimitingMiddleware' => $baseDir . '/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php',
'OC\\AppFramework\\Middleware\\Security\\SecurityMiddleware' => $baseDir . '/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php',
'OC\\AppFramework\\Middleware\\SessionMiddleware' => $baseDir . '/lib/private/AppFramework/Middleware/SessionMiddleware.php',
'OC\\AppFramework\\OCS\\BaseResponse' => $baseDir . '/lib/private/AppFramework/OCS/BaseResponse.php',
@@ -743,6 +745,11 @@ return array(
'OC\\Security\\IdentityProof\\Key' => $baseDir . '/lib/private/Security/IdentityProof/Key.php',
'OC\\Security\\IdentityProof\\Manager' => $baseDir . '/lib/private/Security/IdentityProof/Manager.php',
'OC\\Security\\IdentityProof\\Signer' => $baseDir . '/lib/private/Security/IdentityProof/Signer.php',
+ 'OC\\Security\\Normalizer\\IpAddress' => $baseDir . '/lib/private/Security/Normalizer/IpAddress.php',
+ 'OC\\Security\\RateLimiting\\Backend\\IBackend' => $baseDir . '/lib/private/Security/RateLimiting/Backend/IBackend.php',
+ 'OC\\Security\\RateLimiting\\Backend\\MemoryCache' => $baseDir . '/lib/private/Security/RateLimiting/Backend/MemoryCache.php',
+ 'OC\\Security\\RateLimiting\\Exception\\RateLimitExceededException' => $baseDir . '/lib/private/Security/RateLimiting/Exception/RateLimitExceededException.php',
+ 'OC\\Security\\RateLimiting\\Limiter' => $baseDir . '/lib/private/Security/RateLimiting/Limiter.php',
'OC\\Security\\SecureRandom' => $baseDir . '/lib/private/Security/SecureRandom.php',
'OC\\Security\\TrustedDomainHelper' => $baseDir . '/lib/private/Security/TrustedDomainHelper.php',
'OC\\Server' => $baseDir . '/lib/private/Server.php',
@@ -754,6 +761,8 @@ return array(
'OC\\Session\\Internal' => $baseDir . '/lib/private/Session/Internal.php',
'OC\\Session\\Memory' => $baseDir . '/lib/private/Session/Memory.php',
'OC\\Session\\Session' => $baseDir . '/lib/private/Session/Session.php',
+ 'OC\\Settings\\Activity\\Provider' => $baseDir . '/settings/Activity/Provider.php',
+ 'OC\\Settings\\Activity\\Setting' => $baseDir . '/settings/Activity/Setting.php',
'OC\\Settings\\Admin\\Additional' => $baseDir . '/lib/private/Settings/Admin/Additional.php',
'OC\\Settings\\Admin\\Encryption' => $baseDir . '/lib/private/Settings/Admin/Encryption.php',
'OC\\Settings\\Admin\\Server' => $baseDir . '/lib/private/Settings/Admin/Server.php',
@@ -774,6 +783,7 @@ return array(
'OC\\Settings\\Controller\\PersonalController' => $baseDir . '/settings/Controller/PersonalController.php',
'OC\\Settings\\Controller\\SecuritySettingsController' => $baseDir . '/settings/Controller/SecuritySettingsController.php',
'OC\\Settings\\Controller\\UsersController' => $baseDir . '/settings/Controller/UsersController.php',
+ 'OC\\Settings\\Hooks' => $baseDir . '/settings/Hooks.php',
'OC\\Settings\\Mailer\\NewUserMailHelper' => $baseDir . '/settings/Mailer/NewUserMailHelper.php',
'OC\\Settings\\Manager' => $baseDir . '/lib/private/Settings/Manager.php',
'OC\\Settings\\Mapper' => $baseDir . '/lib/private/Settings/Mapper.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index 96225f1703d..979679c4198 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -321,6 +321,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\AppFramework\\Http\\Request' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Http/Request.php',
'OC\\AppFramework\\Middleware\\MiddlewareDispatcher' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/MiddlewareDispatcher.php',
'OC\\AppFramework\\Middleware\\OCSMiddleware' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/OCSMiddleware.php',
+ 'OC\\AppFramework\\Middleware\\Security\\BruteForceMiddleware' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/BruteForceMiddleware.php',
'OC\\AppFramework\\Middleware\\Security\\CORSMiddleware' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/CORSMiddleware.php',
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\AppNotEnabledException' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/Exceptions/AppNotEnabledException.php',
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\CrossSiteRequestForgeryException' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/Exceptions/CrossSiteRequestForgeryException.php',
@@ -329,6 +330,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\NotLoggedInException' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/Exceptions/NotLoggedInException.php',
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\SecurityException' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/Exceptions/SecurityException.php',
'OC\\AppFramework\\Middleware\\Security\\Exceptions\\StrictCookieMissingException' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/Exceptions/StrictCookieMissingException.php',
+ 'OC\\AppFramework\\Middleware\\Security\\RateLimitingMiddleware' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php',
'OC\\AppFramework\\Middleware\\Security\\SecurityMiddleware' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php',
'OC\\AppFramework\\Middleware\\SessionMiddleware' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/SessionMiddleware.php',
'OC\\AppFramework\\OCS\\BaseResponse' => __DIR__ . '/../../..' . '/lib/private/AppFramework/OCS/BaseResponse.php',
@@ -773,6 +775,11 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Security\\IdentityProof\\Key' => __DIR__ . '/../../..' . '/lib/private/Security/IdentityProof/Key.php',
'OC\\Security\\IdentityProof\\Manager' => __DIR__ . '/../../..' . '/lib/private/Security/IdentityProof/Manager.php',
'OC\\Security\\IdentityProof\\Signer' => __DIR__ . '/../../..' . '/lib/private/Security/IdentityProof/Signer.php',
+ 'OC\\Security\\Normalizer\\IpAddress' => __DIR__ . '/../../..' . '/lib/private/Security/Normalizer/IpAddress.php',
+ 'OC\\Security\\RateLimiting\\Backend\\IBackend' => __DIR__ . '/../../..' . '/lib/private/Security/RateLimiting/Backend/IBackend.php',
+ 'OC\\Security\\RateLimiting\\Backend\\MemoryCache' => __DIR__ . '/../../..' . '/lib/private/Security/RateLimiting/Backend/MemoryCache.php',
+ 'OC\\Security\\RateLimiting\\Exception\\RateLimitExceededException' => __DIR__ . '/../../..' . '/lib/private/Security/RateLimiting/Exception/RateLimitExceededException.php',
+ 'OC\\Security\\RateLimiting\\Limiter' => __DIR__ . '/../../..' . '/lib/private/Security/RateLimiting/Limiter.php',
'OC\\Security\\SecureRandom' => __DIR__ . '/../../..' . '/lib/private/Security/SecureRandom.php',
'OC\\Security\\TrustedDomainHelper' => __DIR__ . '/../../..' . '/lib/private/Security/TrustedDomainHelper.php',
'OC\\Server' => __DIR__ . '/../../..' . '/lib/private/Server.php',
@@ -784,6 +791,8 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Session\\Internal' => __DIR__ . '/../../..' . '/lib/private/Session/Internal.php',
'OC\\Session\\Memory' => __DIR__ . '/../../..' . '/lib/private/Session/Memory.php',
'OC\\Session\\Session' => __DIR__ . '/../../..' . '/lib/private/Session/Session.php',
+ 'OC\\Settings\\Activity\\Provider' => __DIR__ . '/../../..' . '/settings/Activity/Provider.php',
+ 'OC\\Settings\\Activity\\Setting' => __DIR__ . '/../../..' . '/settings/Activity/Setting.php',
'OC\\Settings\\Admin\\Additional' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Additional.php',
'OC\\Settings\\Admin\\Encryption' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Encryption.php',
'OC\\Settings\\Admin\\Server' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Server.php',
@@ -804,6 +813,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Settings\\Controller\\PersonalController' => __DIR__ . '/../../..' . '/settings/Controller/PersonalController.php',
'OC\\Settings\\Controller\\SecuritySettingsController' => __DIR__ . '/../../..' . '/settings/Controller/SecuritySettingsController.php',
'OC\\Settings\\Controller\\UsersController' => __DIR__ . '/../../..' . '/settings/Controller/UsersController.php',
+ 'OC\\Settings\\Hooks' => __DIR__ . '/../../..' . '/settings/Hooks.php',
'OC\\Settings\\Mailer\\NewUserMailHelper' => __DIR__ . '/../../..' . '/settings/Mailer/NewUserMailHelper.php',
'OC\\Settings\\Manager' => __DIR__ . '/../../..' . '/lib/private/Settings/Manager.php',
'OC\\Settings\\Mapper' => __DIR__ . '/../../..' . '/lib/private/Settings/Mapper.php',
diff --git a/lib/l10n/cs.js b/lib/l10n/cs.js
index 1758a32abac..9000a01ded2 100644
--- a/lib/l10n/cs.js
+++ b/lib/l10n/cs.js
@@ -158,8 +158,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "Uživatelské jméno obsahuje mezery na svém začátku nebo konci",
"A valid password must be provided" : "Musíte zadat platné heslo",
"The username is already being used" : "Uživatelské jméno je již využíváno",
- "Login canceled by app" : "Přihlášení zrušeno aplikací",
"User disabled" : "Uživatel zakázán",
+ "Login canceled by app" : "Přihlášení zrušeno aplikací",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikace \"%s\" nemůže být nainstalována protože soubor appinfo nelze přečíst.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikaci \"%s\" nelze nainstalovat, protože není kompatibilní s touto verzí serveru.",
"No app name specified" : "Nebyl zadan název aplikace",
diff --git a/lib/l10n/cs.json b/lib/l10n/cs.json
index e8c2d38f462..a9091249285 100644
--- a/lib/l10n/cs.json
+++ b/lib/l10n/cs.json
@@ -156,8 +156,8 @@
"Username contains whitespace at the beginning or at the end" : "Uživatelské jméno obsahuje mezery na svém začátku nebo konci",
"A valid password must be provided" : "Musíte zadat platné heslo",
"The username is already being used" : "Uživatelské jméno je již využíváno",
- "Login canceled by app" : "Přihlášení zrušeno aplikací",
"User disabled" : "Uživatel zakázán",
+ "Login canceled by app" : "Přihlášení zrušeno aplikací",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikace \"%s\" nemůže být nainstalována protože soubor appinfo nelze přečíst.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikaci \"%s\" nelze nainstalovat, protože není kompatibilní s touto verzí serveru.",
"No app name specified" : "Nebyl zadan název aplikace",
diff --git a/lib/l10n/de.js b/lib/l10n/de.js
index 4d829ca1ae2..0c35adf09a9 100644
--- a/lib/l10n/de.js
+++ b/lib/l10n/de.js
@@ -160,8 +160,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "Der Benutzername enthält Leerzeichen am Anfang oder am Ende",
"A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden",
"The username is already being used" : "Dieser Benutzername existiert bereits",
- "Login canceled by app" : "Anmeldung durch die App abgebrochen",
"User disabled" : "Nutzer deaktiviert",
+ "Login canceled by app" : "Anmeldung durch die App abgebrochen",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Die Anwendung \"%s\" kann nicht installiert werden, weil die Anwendungsinfodatei nicht gelesen werden kann.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.",
"No app name specified" : "Es wurde kein App-Name angegeben",
diff --git a/lib/l10n/de.json b/lib/l10n/de.json
index 4b69b6a1e57..5acb7048e28 100644
--- a/lib/l10n/de.json
+++ b/lib/l10n/de.json
@@ -158,8 +158,8 @@
"Username contains whitespace at the beginning or at the end" : "Der Benutzername enthält Leerzeichen am Anfang oder am Ende",
"A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden",
"The username is already being used" : "Dieser Benutzername existiert bereits",
- "Login canceled by app" : "Anmeldung durch die App abgebrochen",
"User disabled" : "Nutzer deaktiviert",
+ "Login canceled by app" : "Anmeldung durch die App abgebrochen",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Die Anwendung \"%s\" kann nicht installiert werden, weil die Anwendungsinfodatei nicht gelesen werden kann.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.",
"No app name specified" : "Es wurde kein App-Name angegeben",
diff --git a/lib/l10n/de_DE.js b/lib/l10n/de_DE.js
index 64d1abea3ef..fc82b244378 100644
--- a/lib/l10n/de_DE.js
+++ b/lib/l10n/de_DE.js
@@ -160,8 +160,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "Benutzername enthält Leerzeichen am Anfang oder Ende",
"A valid password must be provided" : "Es muss ein gültiges Passwort eingegeben werden",
"The username is already being used" : "Der Benutzername existiert bereits",
- "Login canceled by app" : "Anmeldung durch die App abgebrochen",
"User disabled" : "Nutzer deaktiviert",
+ "Login canceled by app" : "Anmeldung durch die App abgebrochen",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Die Anwendung \"%s\" kann nicht installiert werden, weil die Anwendungsinfodatei nicht gelesen werden kann.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.",
"No app name specified" : "Es wurde kein App-Name angegeben",
diff --git a/lib/l10n/de_DE.json b/lib/l10n/de_DE.json
index 3fcd5cd8fc5..f355efd1d75 100644
--- a/lib/l10n/de_DE.json
+++ b/lib/l10n/de_DE.json
@@ -158,8 +158,8 @@
"Username contains whitespace at the beginning or at the end" : "Benutzername enthält Leerzeichen am Anfang oder Ende",
"A valid password must be provided" : "Es muss ein gültiges Passwort eingegeben werden",
"The username is already being used" : "Der Benutzername existiert bereits",
- "Login canceled by app" : "Anmeldung durch die App abgebrochen",
"User disabled" : "Nutzer deaktiviert",
+ "Login canceled by app" : "Anmeldung durch die App abgebrochen",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Die Anwendung \"%s\" kann nicht installiert werden, weil die Anwendungsinfodatei nicht gelesen werden kann.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.",
"No app name specified" : "Es wurde kein App-Name angegeben",
diff --git a/lib/l10n/es.js b/lib/l10n/es.js
index 48d383bca0c..920978b7b4d 100644
--- a/lib/l10n/es.js
+++ b/lib/l10n/es.js
@@ -160,8 +160,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "El nombre de usuario contiene espacios en blanco al principio o al final",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"The username is already being used" : "El nombre de usuario ya está en uso",
- "Login canceled by app" : "Login cancelado por la app",
"User disabled" : "Usuario deshabilitado",
+ "Login canceled by app" : "Login cancelado por la app",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "La app \"%s\" no puede ser instalada debido a que no se puede leer la información de la app.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "La aplicación \"%s\" no se puede instalar porque no es compatible con esta versión del servidor.",
"No app name specified" : "No se ha especificado nombre de la aplicación",
diff --git a/lib/l10n/es.json b/lib/l10n/es.json
index a29203ed454..4c048df9b3b 100644
--- a/lib/l10n/es.json
+++ b/lib/l10n/es.json
@@ -158,8 +158,8 @@
"Username contains whitespace at the beginning or at the end" : "El nombre de usuario contiene espacios en blanco al principio o al final",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"The username is already being used" : "El nombre de usuario ya está en uso",
- "Login canceled by app" : "Login cancelado por la app",
"User disabled" : "Usuario deshabilitado",
+ "Login canceled by app" : "Login cancelado por la app",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "La app \"%s\" no puede ser instalada debido a que no se puede leer la información de la app.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "La aplicación \"%s\" no se puede instalar porque no es compatible con esta versión del servidor.",
"No app name specified" : "No se ha especificado nombre de la aplicación",
diff --git a/lib/l10n/es_MX.js b/lib/l10n/es_MX.js
index d56b061cab3..0def60fdc63 100644
--- a/lib/l10n/es_MX.js
+++ b/lib/l10n/es_MX.js
@@ -160,8 +160,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "El nombre del usuario contiene un espacio en blanco al inicio o al final",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"The username is already being used" : "Ese nombre de usuario ya está en uso",
- "Login canceled by app" : "Inicio de sesión cancelado por la aplicación",
"User disabled" : "Usuario deshabilitado",
+ "Login canceled by app" : "Inicio de sesión cancelado por la aplicación",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "La aplicación \"%s\" no puede ser instalada porque el archivo appinfo no se puede leer. ",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "La aplicación \"%s\" no puede ser instalada porque no es compatible con esta versión del servidor. ",
"No app name specified" : "No se ha especificado el nombre de la aplicación",
diff --git a/lib/l10n/es_MX.json b/lib/l10n/es_MX.json
index 7a88bdf49df..8cb22eebf33 100644
--- a/lib/l10n/es_MX.json
+++ b/lib/l10n/es_MX.json
@@ -158,8 +158,8 @@
"Username contains whitespace at the beginning or at the end" : "El nombre del usuario contiene un espacio en blanco al inicio o al final",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
"The username is already being used" : "Ese nombre de usuario ya está en uso",
- "Login canceled by app" : "Inicio de sesión cancelado por la aplicación",
"User disabled" : "Usuario deshabilitado",
+ "Login canceled by app" : "Inicio de sesión cancelado por la aplicación",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "La aplicación \"%s\" no puede ser instalada porque el archivo appinfo no se puede leer. ",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "La aplicación \"%s\" no puede ser instalada porque no es compatible con esta versión del servidor. ",
"No app name specified" : "No se ha especificado el nombre de la aplicación",
diff --git a/lib/l10n/eu.js b/lib/l10n/eu.js
index 53c3ea001c6..9a636f0114b 100644
--- a/lib/l10n/eu.js
+++ b/lib/l10n/eu.js
@@ -139,8 +139,8 @@ OC.L10N.register(
"A valid username must be provided" : "Baliozko erabiltzaile izena eman behar da",
"A valid password must be provided" : "Baliozko pasahitza eman behar da",
"The username is already being used" : "Erabiltzaile izena dagoeneko erabiltzen ari da",
- "Login canceled by app" : "Aplikazioa saioa bertan behera utzi du",
"User disabled" : "Erabiltzaile desgaituta",
+ "Login canceled by app" : "Aplikazioa saioa bertan behera utzi du",
"No app name specified" : "Ez da aplikazioaren izena zehaztu",
"Application is not enabled" : "Aplikazioa ez dago gaituta",
"Authentication error" : "Autentifikazio errorea",
diff --git a/lib/l10n/eu.json b/lib/l10n/eu.json
index 872911ce15d..89b575a2fc5 100644
--- a/lib/l10n/eu.json
+++ b/lib/l10n/eu.json
@@ -137,8 +137,8 @@
"A valid username must be provided" : "Baliozko erabiltzaile izena eman behar da",
"A valid password must be provided" : "Baliozko pasahitza eman behar da",
"The username is already being used" : "Erabiltzaile izena dagoeneko erabiltzen ari da",
- "Login canceled by app" : "Aplikazioa saioa bertan behera utzi du",
"User disabled" : "Erabiltzaile desgaituta",
+ "Login canceled by app" : "Aplikazioa saioa bertan behera utzi du",
"No app name specified" : "Ez da aplikazioaren izena zehaztu",
"Application is not enabled" : "Aplikazioa ez dago gaituta",
"Authentication error" : "Autentifikazio errorea",
diff --git a/lib/l10n/fi.js b/lib/l10n/fi.js
index cd53b25f27c..67914f096f1 100644
--- a/lib/l10n/fi.js
+++ b/lib/l10n/fi.js
@@ -151,8 +151,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "Käyttäjätunnus sisältää tyhjätilaa joko alussa tai lopussa",
"A valid password must be provided" : "Anna kelvollinen salasana",
"The username is already being used" : "Käyttäjätunnus on jo käytössä",
- "Login canceled by app" : "Kirjautuminen peruttiin sovelluksen toimesta",
"User disabled" : "Käyttäjä poistettu käytöstä",
+ "Login canceled by app" : "Kirjautuminen peruttiin sovelluksen toimesta",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Sovellusta \"%s\" ei voi asentaa, koska appinfo-tiedostoa ei voi loi lukea.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Sovellusta \"%s\" ei voi asentaa, koska se ei ole yhteensopiva tämän palvelinversion kanssa.",
"No app name specified" : "Sovelluksen nimeä ei määritelty",
diff --git a/lib/l10n/fi.json b/lib/l10n/fi.json
index 81414af323b..4319045341c 100644
--- a/lib/l10n/fi.json
+++ b/lib/l10n/fi.json
@@ -149,8 +149,8 @@
"Username contains whitespace at the beginning or at the end" : "Käyttäjätunnus sisältää tyhjätilaa joko alussa tai lopussa",
"A valid password must be provided" : "Anna kelvollinen salasana",
"The username is already being used" : "Käyttäjätunnus on jo käytössä",
- "Login canceled by app" : "Kirjautuminen peruttiin sovelluksen toimesta",
"User disabled" : "Käyttäjä poistettu käytöstä",
+ "Login canceled by app" : "Kirjautuminen peruttiin sovelluksen toimesta",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Sovellusta \"%s\" ei voi asentaa, koska appinfo-tiedostoa ei voi loi lukea.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Sovellusta \"%s\" ei voi asentaa, koska se ei ole yhteensopiva tämän palvelinversion kanssa.",
"No app name specified" : "Sovelluksen nimeä ei määritelty",
diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js
index 56991084009..200f650d3f0 100644
--- a/lib/l10n/fr.js
+++ b/lib/l10n/fr.js
@@ -160,8 +160,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "Le nom d'utilisateur contient des espaces au début ou à la fin",
"A valid password must be provided" : "Un mot de passe valide doit être saisi",
"The username is already being used" : "Ce nom d'utilisateur est déjà utilisé",
- "Login canceled by app" : "L'authentification a été annulé par l'application",
"User disabled" : "Utilisateur désactivé",
+ "Login canceled by app" : "L'authentification a été annulé par l'application",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "L'application \"%s\" ne peut pas être installée car le fichier appinfo ne peut pas être lu.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "L'application \"%s\" ne peut être installée car elle n'est pas compatible avec cette version du serveur",
"No app name specified" : "Aucun nom d'application spécifié",
diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json
index 2e4a7a2d945..7f3a7bf7fd3 100644
--- a/lib/l10n/fr.json
+++ b/lib/l10n/fr.json
@@ -158,8 +158,8 @@
"Username contains whitespace at the beginning or at the end" : "Le nom d'utilisateur contient des espaces au début ou à la fin",
"A valid password must be provided" : "Un mot de passe valide doit être saisi",
"The username is already being used" : "Ce nom d'utilisateur est déjà utilisé",
- "Login canceled by app" : "L'authentification a été annulé par l'application",
"User disabled" : "Utilisateur désactivé",
+ "Login canceled by app" : "L'authentification a été annulé par l'application",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "L'application \"%s\" ne peut pas être installée car le fichier appinfo ne peut pas être lu.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "L'application \"%s\" ne peut être installée car elle n'est pas compatible avec cette version du serveur",
"No app name specified" : "Aucun nom d'application spécifié",
diff --git a/lib/l10n/he.js b/lib/l10n/he.js
index beee772ce27..9c76b4c8919 100644
--- a/lib/l10n/he.js
+++ b/lib/l10n/he.js
@@ -142,8 +142,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "שם המשתמש מכיל רווח בתחילתו או בסופו",
"A valid password must be provided" : "יש לספק ססמה תקנית",
"The username is already being used" : "השם משתמש כבר בשימוש",
- "Login canceled by app" : "התחברות בוטלה על ידי יישום",
"User disabled" : "משתמש מנוטרל",
+ "Login canceled by app" : "התחברות בוטלה על ידי יישום",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "יישום \"%s\" לא ניתן להתקנה כיוון שקובץ appinfo לא ניתן לקריאה.",
"No app name specified" : "לא הוגדר שם יישום",
"App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "היישום \"%s\" לא ניתן להתקנה כיוון שיחסי התלות הבאים אינם מתקיימים: %s",
diff --git a/lib/l10n/he.json b/lib/l10n/he.json
index 3a81e25b074..e4074e53b6e 100644
--- a/lib/l10n/he.json
+++ b/lib/l10n/he.json
@@ -140,8 +140,8 @@
"Username contains whitespace at the beginning or at the end" : "שם המשתמש מכיל רווח בתחילתו או בסופו",
"A valid password must be provided" : "יש לספק ססמה תקנית",
"The username is already being used" : "השם משתמש כבר בשימוש",
- "Login canceled by app" : "התחברות בוטלה על ידי יישום",
"User disabled" : "משתמש מנוטרל",
+ "Login canceled by app" : "התחברות בוטלה על ידי יישום",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "יישום \"%s\" לא ניתן להתקנה כיוון שקובץ appinfo לא ניתן לקריאה.",
"No app name specified" : "לא הוגדר שם יישום",
"App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "היישום \"%s\" לא ניתן להתקנה כיוון שיחסי התלות הבאים אינם מתקיימים: %s",
diff --git a/lib/l10n/hu.js b/lib/l10n/hu.js
index 22fc2ce964f..a01c8413211 100644
--- a/lib/l10n/hu.js
+++ b/lib/l10n/hu.js
@@ -159,8 +159,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "A felhasználónév szóközt tartalmaz az elején vagy a végén",
"A valid password must be provided" : "Érvényes jelszót kell megadnia",
"The username is already being used" : "Ez a bejelentkezési név már foglalt",
- "Login canceled by app" : "Bejelentkezés megszakítva az alkalmazás által",
"User disabled" : "Felhasználó letiltva",
+ "Login canceled by app" : "Bejelentkezés megszakítva az alkalmazás által",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "\"%s\" alkalmazás nem lehet telepíteni, mert az appinfo fájl nem olvasható.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" alkalmazás nem lehet telepíteni, mert nem kompatibilis a szerver jelen verziójával.",
"No app name specified" : "Nincs az alkalmazás név megadva.",
diff --git a/lib/l10n/hu.json b/lib/l10n/hu.json
index db44aa9eb16..a213c7b1edd 100644
--- a/lib/l10n/hu.json
+++ b/lib/l10n/hu.json
@@ -157,8 +157,8 @@
"Username contains whitespace at the beginning or at the end" : "A felhasználónév szóközt tartalmaz az elején vagy a végén",
"A valid password must be provided" : "Érvényes jelszót kell megadnia",
"The username is already being used" : "Ez a bejelentkezési név már foglalt",
- "Login canceled by app" : "Bejelentkezés megszakítva az alkalmazás által",
"User disabled" : "Felhasználó letiltva",
+ "Login canceled by app" : "Bejelentkezés megszakítva az alkalmazás által",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "\"%s\" alkalmazás nem lehet telepíteni, mert az appinfo fájl nem olvasható.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" alkalmazás nem lehet telepíteni, mert nem kompatibilis a szerver jelen verziójával.",
"No app name specified" : "Nincs az alkalmazás név megadva.",
diff --git a/lib/l10n/is.js b/lib/l10n/is.js
index e9633116a44..92eb574cc00 100644
--- a/lib/l10n/is.js
+++ b/lib/l10n/is.js
@@ -138,8 +138,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "Notandanafnið inniheldur orðabil í upphafi eða enda",
"A valid password must be provided" : "Skráðu inn gilt lykilorð",
"The username is already being used" : "Notandanafnið er þegar í notkun",
- "Login canceled by app" : "Forrit hætti við innskráningu",
"User disabled" : "Notandi óvirkur",
+ "Login canceled by app" : "Forrit hætti við innskráningu",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Ekki er hægt að setja upp \"%s\" forritið vegna þess að ekki var hægt að lesa appinfo-skrána.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Ekki var hægt að setja upp forritið \"%s\" vegna þess að það er ekki samhæft þessari útgáfu vefþjónsins.",
"No app name specified" : "Ekkert heiti forrits tilgreint",
diff --git a/lib/l10n/is.json b/lib/l10n/is.json
index d7983ac0c42..04cb5bc5709 100644
--- a/lib/l10n/is.json
+++ b/lib/l10n/is.json
@@ -136,8 +136,8 @@
"Username contains whitespace at the beginning or at the end" : "Notandanafnið inniheldur orðabil í upphafi eða enda",
"A valid password must be provided" : "Skráðu inn gilt lykilorð",
"The username is already being used" : "Notandanafnið er þegar í notkun",
- "Login canceled by app" : "Forrit hætti við innskráningu",
"User disabled" : "Notandi óvirkur",
+ "Login canceled by app" : "Forrit hætti við innskráningu",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Ekki er hægt að setja upp \"%s\" forritið vegna þess að ekki var hægt að lesa appinfo-skrána.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Ekki var hægt að setja upp forritið \"%s\" vegna þess að það er ekki samhæft þessari útgáfu vefþjónsins.",
"No app name specified" : "Ekkert heiti forrits tilgreint",
diff --git a/lib/l10n/it.js b/lib/l10n/it.js
index 9a61c1e4093..b45c5128d66 100644
--- a/lib/l10n/it.js
+++ b/lib/l10n/it.js
@@ -159,8 +159,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "Il nome utente contiene spazi all'inizio o alla fine",
"A valid password must be provided" : "Deve essere fornita una password valida",
"The username is already being used" : "Il nome utente è già utilizzato",
- "Login canceled by app" : "Accesso annullato dall'applicazione",
"User disabled" : "Utente disabilitato",
+ "Login canceled by app" : "Accesso annullato dall'applicazione",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "L'applicazione \"%s\" non può essere installata poiché il file appinfo non può essere letto.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "L'applicazione \"%s\" non può essere installata perché non è compatibile con questa versione del server.",
"No app name specified" : "Il nome dell'applicazione non è specificato",
diff --git a/lib/l10n/it.json b/lib/l10n/it.json
index 7ab3df348fb..cd3759b9d80 100644
--- a/lib/l10n/it.json
+++ b/lib/l10n/it.json
@@ -157,8 +157,8 @@
"Username contains whitespace at the beginning or at the end" : "Il nome utente contiene spazi all'inizio o alla fine",
"A valid password must be provided" : "Deve essere fornita una password valida",
"The username is already being used" : "Il nome utente è già utilizzato",
- "Login canceled by app" : "Accesso annullato dall'applicazione",
"User disabled" : "Utente disabilitato",
+ "Login canceled by app" : "Accesso annullato dall'applicazione",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "L'applicazione \"%s\" non può essere installata poiché il file appinfo non può essere letto.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "L'applicazione \"%s\" non può essere installata perché non è compatibile con questa versione del server.",
"No app name specified" : "Il nome dell'applicazione non è specificato",
diff --git a/lib/l10n/ja.js b/lib/l10n/ja.js
index b3a681412c2..a46306be3e4 100644
--- a/lib/l10n/ja.js
+++ b/lib/l10n/ja.js
@@ -159,8 +159,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "ユーザー名の最初か最後に空白が含まれています",
"A valid password must be provided" : "有効なパスワードを指定する必要があります",
"The username is already being used" : "ユーザー名はすでに使われています",
- "Login canceled by app" : "アプリによりログインが中止されました",
"User disabled" : "ユーザーは無効です",
+ "Login canceled by app" : "アプリによりログインが中止されました",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "appinfoファイルが読み込めないため、アプリ名 \"%s\" がインストールできません。",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" アプリは、このバージョンのサーバーと互換性がないためインストールされませんでした。",
"No app name specified" : "アプリ名が未指定",
diff --git a/lib/l10n/ja.json b/lib/l10n/ja.json
index d02176bf359..261d197ecc5 100644
--- a/lib/l10n/ja.json
+++ b/lib/l10n/ja.json
@@ -157,8 +157,8 @@
"Username contains whitespace at the beginning or at the end" : "ユーザー名の最初か最後に空白が含まれています",
"A valid password must be provided" : "有効なパスワードを指定する必要があります",
"The username is already being used" : "ユーザー名はすでに使われています",
- "Login canceled by app" : "アプリによりログインが中止されました",
"User disabled" : "ユーザーは無効です",
+ "Login canceled by app" : "アプリによりログインが中止されました",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "appinfoファイルが読み込めないため、アプリ名 \"%s\" がインストールできません。",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" アプリは、このバージョンのサーバーと互換性がないためインストールされませんでした。",
"No app name specified" : "アプリ名が未指定",
diff --git a/lib/l10n/nb.js b/lib/l10n/nb.js
index 3a4a3533342..2f4af066bd4 100644
--- a/lib/l10n/nb.js
+++ b/lib/l10n/nb.js
@@ -2,9 +2,9 @@ OC.L10N.register(
"lib",
{
"Cannot write into \"config\" directory!" : "Kan ikke skrive i \"config\"-mappen!",
- "This can usually be fixed by giving the webserver write access to the config directory" : "Dette kan vanligvis ordnes ved å gi web-tjeneren skrivetilgang til config-mappen",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Dette kan vanligvis ordnes ved å gi vev-tjeneren skrivetilgang til config-mappen",
"See %s" : "Se %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan vanligvis ordnes ved %så gi web-tjeneren skrivetilgang til config-mappen%s.",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan vanligvis ordnes ved %så gi vev-tjeneren skrivetilgang til oppsettsmappen%s.",
"The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Filene i appen %$1s ble ikke erstattet skikkelig. Sjekk at versjonen er kompatibel med tjeneren.",
"Sample configuration detected" : "Eksempeloppsett oppdaget",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Det ble oppdaget at eksempeloppsettet er blitt kopiert. Dette kan ødelegge installasjonen din og støttes ikke. Les dokumentasjonen før du gjør endringer i config.php",
@@ -36,14 +36,14 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["for %n time siden","for %n timer siden"],
"_%n minute ago_::_%n minutes ago_" : ["for %n minutt siden","for %n minutter siden"],
"seconds ago" : "for få sekunder siden",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul med id: %s eksisterer ikke. Aktiver den i app-innstillingene eller kontakt en administrator.",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul med ID: %s finnes ikke. Skru den på i programinnstillingene eller kontakt en administrator.",
"File name is a reserved word" : "Filnavnet er et reservert ord",
"File name contains at least one invalid character" : "Filnavnet inneholder minst ett ulovlig tegn",
"File name is too long" : "Filnavnet er for langt",
"Dot files are not allowed" : "Punktum-filer er ikke tillatt",
"Empty filename is not allowed" : "Tomt filnavn er ikke tillatt",
"Help" : "Hjelp",
- "Apps" : "Apper",
+ "Apps" : "Programmer",
"Personal" : "Personlig",
"Log out" : "Logg ut",
"Users" : "Brukere",
@@ -69,13 +69,13 @@ OC.L10N.register(
"PostgreSQL username and/or password not valid" : "PostgreSQL-brukernavn og/eller passord er ikke gyldig",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X støttes ikke og %s vil ikke fungere korrekt på denne plattformen. Bruk på egen risiko!",
"For the best results, please consider using a GNU/Linux server instead." : "For beste resultat, vurder å bruke en GNU/Linux-tjener i stedet.",
- "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Det ser ut for at %s-instansen kjører i et 32-bit PHP-miljø med open_basedir konfigurert i php.ini. Dette vil føre til problemer med filer over 4 GB og frarådes på det sterkeste.",
- "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Vennligst fjern innstillingen open_basedir i php.ini eller bytt til 64-bit PHP.",
+ "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Det ser ut for at %s-instansen kjører i et 32-bit PHP-miljø med open_basedir satt opp i php.ini. Dette vil føre til problemer med filer over 4 GB og frarådes på det sterkeste.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Fjern innstillingen open_basedir i php.ini eller bytt til 64-bit PHP.",
"Set an admin username." : "Sett et admin-brukernavn.",
"Set an admin password." : "Sett et admin-passord.",
"Can't create or write into the data directory %s" : "Kan ikke opprette eller skrive i datamappen %s",
"Invalid Federated Cloud ID" : "Ugyldig ID for sammenknyttet sky",
- "Sharing %s failed, because the backend does not allow shares from type %i" : "Deling av %s feilet, fordi serveren ikke tillater delinger fra type %i",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Deling av %s feilet, fordi tjeneren ikke tillater delinger fra type %i",
"Sharing %s failed, because the file does not exist" : "Deling av %s feilet, fordi filen ikke eksisterer",
"You are not allowed to share %s" : "Du har ikke lov til å dele %s",
"Sharing %s failed, because you can not share with yourself" : "Deling av %s feilet fordi du ikke kan dele med deg selv",
@@ -87,7 +87,7 @@ OC.L10N.register(
"Sharing %s failed, because %s is not a member of the group %s" : "Deling av %s feilet, fordi %s ikke er medlem av gruppen %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Du må oppgi et passord for å lage en offentlig lenke. Bare beskyttede lenker er tillatt",
"Sharing %s failed, because sharing with links is not allowed" : "Deling av %s feilet, fordi deling med lenker ikke er tillatt",
- "Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en Sammenknyttet sky-deling med den samme brukeren",
+ "Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en sammenknyttet sky-deling med den samme brukeren",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s feilet, fant ikke %s, kanskje tjeneren er utilgjengelig for øyeblikket.",
"Share type %s is not valid for %s" : "Delingstype %s er ikke gyldig for %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Setting av tillatelser for %s feilet, fordi tillatelsene gikk ut over tillatelsene som er gitt til %s",
@@ -96,17 +96,17 @@ OC.L10N.register(
"Cannot set expiration date. Expiration date is in the past" : "Kan ikke sette utløpsdato. Utløpsdato er tilbake i tid",
"Cannot clear expiration date. Shares are required to have an expiration date." : "Kan ikke fjerne utløpsdato. Delinger må ha en utløpsdato.",
"Sharing backend %s must implement the interface OCP\\Share_Backend" : "Delings-server %s må implementere grensesnittet OCP\\Share_Backend",
- "Sharing backend %s not found" : "Delings-server %s ikke funnet",
- "Sharing backend for %s not found" : "Delings-server for %s ikke funnet",
+ "Sharing backend %s not found" : "Delings-tjener %s ikke funnet",
+ "Sharing backend for %s not found" : "Delings-tjener for %s ikke funnet",
"Sharing failed, because the user %s is the original sharer" : "Deling feilet fordi brukeren %s er den som delte opprinnelig",
- "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Deling av %s feilet, fordi tillatelsene går utover tillatelsene som er gitt til %s",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Deling av %s mislyktes, fordi tillatelsene går utover tillatelsene som er gitt til %s",
"Sharing %s failed, because resharing is not allowed" : "Deling av %s feilet, fordi videre-deling ikke er tillatt",
- "Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling av %s feilet, fordi delings-serveren for %s ikke kunne finne kilden",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling av %s feilet, fordi delings-bakenden for %s ikke kunne finne kilden",
"Sharing %s failed, because the file could not be found in the file cache" : "Deling av %s feilet, fordi filen ikke ble funnet i fil-mellomlageret",
"Cannot increase permissions of %s" : "Kan ikke øke tillatelser for %s",
"Files can't be shared with delete permissions" : "Filer kan ikke deles med rettigheter til sletting",
"Files can't be shared with create permissions" : "Filer kan ikke deles med rettigheter til å opprette",
- "Expiration date is in the past" : "Utløpsdato er tilbake i tid",
+ "Expiration date is in the past" : "Utløpsdato er i fortid",
"Cannot set expiration date more than %s days in the future" : "Kan ikke sette utløpsdato mer enn %s dager fram i tid",
"Could not find category \"%s\"" : "Kunne ikke finne kategori \"%s\"",
"Sunday" : "Søndag",
@@ -159,28 +159,28 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "Brukernavn inneholder blanke på begynnelsen eller slutten",
"A valid password must be provided" : "Oppgi et gyldig passord",
"The username is already being used" : "Brukernavnet er allerede i bruk",
- "Login canceled by app" : "Innlogging avbrutt av app",
"User disabled" : "Brukeren er deaktivert",
+ "Login canceled by app" : "Innlogging avbrutt av app",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Appen \"%s\" kan ikke installeres på grunn av at appinfo filen ikke kan leses.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Appen \"%s\" kan ikke installere fordi den ikke er kompatibel med denne tjenerversjonen.",
"No app name specified" : "Intet app-navn spesifisert",
"App '%s' could not be installed!" : "Appen '%s' kunne ikke installeres!",
- "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "App \"%s\" kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt: %s",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Programmet \"%s\" kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt: %s",
"a safe home for all your data" : "et sikkert hjem for alle dine data",
"File is currently busy, please try again later" : "Filen er opptatt for øyeblikket, prøv igjen senere",
"Can't read file" : "Kan ikke lese fil",
"Application is not enabled" : "Applikasjon er ikke påslått",
"Authentication error" : "Autentikasjonsfeil",
- "Token expired. Please reload page." : "Symbol utløpt. Vennligst last inn siden på nytt.",
+ "Token expired. Please reload page." : "Symbol utløpt. Last inn siden på nytt.",
"Unknown user" : "Ukjent bruker",
"No database drivers (sqlite, mysql, or postgresql) installed." : "Ingen databasedrivere (sqlite, mysql, or postgresql) installert.",
"Cannot write into \"config\" directory" : "Kan ikke skrive i \"config\"-mappen",
"Cannot write into \"apps\" directory" : "Kan ikke skrive i \"apps\"-mappen",
- "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dette kan vanligvis ordnes ved %så gi web-tjeneren skrivetilgang til apps-mappen%s eller ved å deaktivere app-butikken i config-filen.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dette fikses vanligvis ved å <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">gi webtjeneren skrivetilgang til rotmappen</a>.",
- "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Tillatelser kan vanligvis ordnes ved %så gi webtjeneren skrivetilgang til rotmappen%s.",
- "Setting locale to %s failed" : "Setting av nasjonale innstillinger til %s feilet.",
- "Please install one of these locales on your system and restart your webserver." : "Vennligst installer en av disse nasjonale innstillingene på systemet ditt og start webtjeneren på nytt.",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dette kan vanligvis ordnes ved %så gi vev-tjeneren skrivetilgang til apps-mappen%s eller ved å deaktivere app-butikken i config-filen.",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dette fikses vanligvis ved å <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">gi vevtjeneren skrivetilgang til rotmappen</a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Tillatelser kan vanligvis ordnes ved %så gi vevtjeneren skrivetilgang til rotmappen%s.",
+ "Setting locale to %s failed" : "Setting av nasjonale innstillinger til %s mislyktes.",
+ "Please install one of these locales on your system and restart your webserver." : "Vennligst installer en av disse nasjonale innstillingene på systemet ditt og start vevtjeneren på nytt.",
"Please ask your server administrator to install the module." : "Be tjener-administratoren om å installere modulen.",
"PHP module %s not installed." : "PHP-modul %s er ikke installert.",
"PHP setting \"%s\" is not set to \"%s\"." : "PHP-innstilling \"%s\" er ikke satt til \"%s\".",
@@ -188,15 +188,15 @@ OC.L10N.register(
"mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload er satt til \"%s\" i stedet for den forventede verdien \"0\"",
"To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Sett <code>mbstring.func_overload</code> til <code>0</code> in php.ini for å fikse dette problemet",
"libxml2 2.7.0 is at least required. Currently %s is installed." : "Krever minst libxml2 2.7.0. Per nå er %s installert.",
- "To fix this issue update your libxml2 version and restart your web server." : "For å fikse dette problemet, oppdater din libxml2 versjon og omstart webtjeneren.",
+ "To fix this issue update your libxml2 version and restart your web server." : "For å fikse dette problemet, oppdater din libxml2 versjon og omstart vevtjeneren.",
"PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Det ser ut for at PHP er satt opp til å fjerne innebygde doc blocks. Dette gjør at flere av kjerneapplikasjonene blir utilgjengelige.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette forårsakes sannsynligvis av en bufrer/akselerator, som f.eks. Zend OPcache eller eAccelerator.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP-moduler har blitt installert, men de listes fortsatt som fraværende?",
- "Please ask your server administrator to restart the web server." : "Be tjener-administratoren om å starte webtjeneren på nytt.",
+ "Please ask your server administrator to restart the web server." : "Be tjener-administratoren om å starte vevtjeneren på nytt.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 kreves",
- "Please upgrade your database version" : "Vennligst oppgrader versjonen av databasen din",
+ "Please upgrade your database version" : "Oppgrader databaseversjonen din",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Endre tillatelsene til 0770 slik at mappen ikke kan listes av andre brukere.",
- "Check the value of \"datadirectory\" in your configuration" : "Sjekk verdien for \"datadirectory\" i konfigurasjonen din",
+ "Check the value of \"datadirectory\" in your configuration" : "Sjekk verdien for \"datadirectory\" i oppsettet ditt",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Sjekk at det ligger en fil \".ocdata\" i roten av data-mappen.",
"Could not obtain lock type %d on \"%s\"." : "Klarte ikke å låse med type %d på \"%s\".",
"Storage unauthorized. %s" : "Lager uautorisert: %s",
diff --git a/lib/l10n/nb.json b/lib/l10n/nb.json
index 62f3835654f..0cc54596c5d 100644
--- a/lib/l10n/nb.json
+++ b/lib/l10n/nb.json
@@ -1,8 +1,8 @@
{ "translations": {
"Cannot write into \"config\" directory!" : "Kan ikke skrive i \"config\"-mappen!",
- "This can usually be fixed by giving the webserver write access to the config directory" : "Dette kan vanligvis ordnes ved å gi web-tjeneren skrivetilgang til config-mappen",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Dette kan vanligvis ordnes ved å gi vev-tjeneren skrivetilgang til config-mappen",
"See %s" : "Se %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan vanligvis ordnes ved %så gi web-tjeneren skrivetilgang til config-mappen%s.",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan vanligvis ordnes ved %så gi vev-tjeneren skrivetilgang til oppsettsmappen%s.",
"The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Filene i appen %$1s ble ikke erstattet skikkelig. Sjekk at versjonen er kompatibel med tjeneren.",
"Sample configuration detected" : "Eksempeloppsett oppdaget",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Det ble oppdaget at eksempeloppsettet er blitt kopiert. Dette kan ødelegge installasjonen din og støttes ikke. Les dokumentasjonen før du gjør endringer i config.php",
@@ -34,14 +34,14 @@
"_%n hour ago_::_%n hours ago_" : ["for %n time siden","for %n timer siden"],
"_%n minute ago_::_%n minutes ago_" : ["for %n minutt siden","for %n minutter siden"],
"seconds ago" : "for få sekunder siden",
- "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul med id: %s eksisterer ikke. Aktiver den i app-innstillingene eller kontakt en administrator.",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul med ID: %s finnes ikke. Skru den på i programinnstillingene eller kontakt en administrator.",
"File name is a reserved word" : "Filnavnet er et reservert ord",
"File name contains at least one invalid character" : "Filnavnet inneholder minst ett ulovlig tegn",
"File name is too long" : "Filnavnet er for langt",
"Dot files are not allowed" : "Punktum-filer er ikke tillatt",
"Empty filename is not allowed" : "Tomt filnavn er ikke tillatt",
"Help" : "Hjelp",
- "Apps" : "Apper",
+ "Apps" : "Programmer",
"Personal" : "Personlig",
"Log out" : "Logg ut",
"Users" : "Brukere",
@@ -67,13 +67,13 @@
"PostgreSQL username and/or password not valid" : "PostgreSQL-brukernavn og/eller passord er ikke gyldig",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X støttes ikke og %s vil ikke fungere korrekt på denne plattformen. Bruk på egen risiko!",
"For the best results, please consider using a GNU/Linux server instead." : "For beste resultat, vurder å bruke en GNU/Linux-tjener i stedet.",
- "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Det ser ut for at %s-instansen kjører i et 32-bit PHP-miljø med open_basedir konfigurert i php.ini. Dette vil føre til problemer med filer over 4 GB og frarådes på det sterkeste.",
- "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Vennligst fjern innstillingen open_basedir i php.ini eller bytt til 64-bit PHP.",
+ "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Det ser ut for at %s-instansen kjører i et 32-bit PHP-miljø med open_basedir satt opp i php.ini. Dette vil føre til problemer med filer over 4 GB og frarådes på det sterkeste.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Fjern innstillingen open_basedir i php.ini eller bytt til 64-bit PHP.",
"Set an admin username." : "Sett et admin-brukernavn.",
"Set an admin password." : "Sett et admin-passord.",
"Can't create or write into the data directory %s" : "Kan ikke opprette eller skrive i datamappen %s",
"Invalid Federated Cloud ID" : "Ugyldig ID for sammenknyttet sky",
- "Sharing %s failed, because the backend does not allow shares from type %i" : "Deling av %s feilet, fordi serveren ikke tillater delinger fra type %i",
+ "Sharing %s failed, because the backend does not allow shares from type %i" : "Deling av %s feilet, fordi tjeneren ikke tillater delinger fra type %i",
"Sharing %s failed, because the file does not exist" : "Deling av %s feilet, fordi filen ikke eksisterer",
"You are not allowed to share %s" : "Du har ikke lov til å dele %s",
"Sharing %s failed, because you can not share with yourself" : "Deling av %s feilet fordi du ikke kan dele med deg selv",
@@ -85,7 +85,7 @@
"Sharing %s failed, because %s is not a member of the group %s" : "Deling av %s feilet, fordi %s ikke er medlem av gruppen %s",
"You need to provide a password to create a public link, only protected links are allowed" : "Du må oppgi et passord for å lage en offentlig lenke. Bare beskyttede lenker er tillatt",
"Sharing %s failed, because sharing with links is not allowed" : "Deling av %s feilet, fordi deling med lenker ikke er tillatt",
- "Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en Sammenknyttet sky-deling med den samme brukeren",
+ "Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en sammenknyttet sky-deling med den samme brukeren",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s feilet, fant ikke %s, kanskje tjeneren er utilgjengelig for øyeblikket.",
"Share type %s is not valid for %s" : "Delingstype %s er ikke gyldig for %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Setting av tillatelser for %s feilet, fordi tillatelsene gikk ut over tillatelsene som er gitt til %s",
@@ -94,17 +94,17 @@
"Cannot set expiration date. Expiration date is in the past" : "Kan ikke sette utløpsdato. Utløpsdato er tilbake i tid",
"Cannot clear expiration date. Shares are required to have an expiration date." : "Kan ikke fjerne utløpsdato. Delinger må ha en utløpsdato.",
"Sharing backend %s must implement the interface OCP\\Share_Backend" : "Delings-server %s må implementere grensesnittet OCP\\Share_Backend",
- "Sharing backend %s not found" : "Delings-server %s ikke funnet",
- "Sharing backend for %s not found" : "Delings-server for %s ikke funnet",
+ "Sharing backend %s not found" : "Delings-tjener %s ikke funnet",
+ "Sharing backend for %s not found" : "Delings-tjener for %s ikke funnet",
"Sharing failed, because the user %s is the original sharer" : "Deling feilet fordi brukeren %s er den som delte opprinnelig",
- "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Deling av %s feilet, fordi tillatelsene går utover tillatelsene som er gitt til %s",
+ "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Deling av %s mislyktes, fordi tillatelsene går utover tillatelsene som er gitt til %s",
"Sharing %s failed, because resharing is not allowed" : "Deling av %s feilet, fordi videre-deling ikke er tillatt",
- "Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling av %s feilet, fordi delings-serveren for %s ikke kunne finne kilden",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling av %s feilet, fordi delings-bakenden for %s ikke kunne finne kilden",
"Sharing %s failed, because the file could not be found in the file cache" : "Deling av %s feilet, fordi filen ikke ble funnet i fil-mellomlageret",
"Cannot increase permissions of %s" : "Kan ikke øke tillatelser for %s",
"Files can't be shared with delete permissions" : "Filer kan ikke deles med rettigheter til sletting",
"Files can't be shared with create permissions" : "Filer kan ikke deles med rettigheter til å opprette",
- "Expiration date is in the past" : "Utløpsdato er tilbake i tid",
+ "Expiration date is in the past" : "Utløpsdato er i fortid",
"Cannot set expiration date more than %s days in the future" : "Kan ikke sette utløpsdato mer enn %s dager fram i tid",
"Could not find category \"%s\"" : "Kunne ikke finne kategori \"%s\"",
"Sunday" : "Søndag",
@@ -157,28 +157,28 @@
"Username contains whitespace at the beginning or at the end" : "Brukernavn inneholder blanke på begynnelsen eller slutten",
"A valid password must be provided" : "Oppgi et gyldig passord",
"The username is already being used" : "Brukernavnet er allerede i bruk",
- "Login canceled by app" : "Innlogging avbrutt av app",
"User disabled" : "Brukeren er deaktivert",
+ "Login canceled by app" : "Innlogging avbrutt av app",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Appen \"%s\" kan ikke installeres på grunn av at appinfo filen ikke kan leses.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Appen \"%s\" kan ikke installere fordi den ikke er kompatibel med denne tjenerversjonen.",
"No app name specified" : "Intet app-navn spesifisert",
"App '%s' could not be installed!" : "Appen '%s' kunne ikke installeres!",
- "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "App \"%s\" kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt: %s",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Programmet \"%s\" kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt: %s",
"a safe home for all your data" : "et sikkert hjem for alle dine data",
"File is currently busy, please try again later" : "Filen er opptatt for øyeblikket, prøv igjen senere",
"Can't read file" : "Kan ikke lese fil",
"Application is not enabled" : "Applikasjon er ikke påslått",
"Authentication error" : "Autentikasjonsfeil",
- "Token expired. Please reload page." : "Symbol utløpt. Vennligst last inn siden på nytt.",
+ "Token expired. Please reload page." : "Symbol utløpt. Last inn siden på nytt.",
"Unknown user" : "Ukjent bruker",
"No database drivers (sqlite, mysql, or postgresql) installed." : "Ingen databasedrivere (sqlite, mysql, or postgresql) installert.",
"Cannot write into \"config\" directory" : "Kan ikke skrive i \"config\"-mappen",
"Cannot write into \"apps\" directory" : "Kan ikke skrive i \"apps\"-mappen",
- "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dette kan vanligvis ordnes ved %så gi web-tjeneren skrivetilgang til apps-mappen%s eller ved å deaktivere app-butikken i config-filen.",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dette fikses vanligvis ved å <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">gi webtjeneren skrivetilgang til rotmappen</a>.",
- "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Tillatelser kan vanligvis ordnes ved %så gi webtjeneren skrivetilgang til rotmappen%s.",
- "Setting locale to %s failed" : "Setting av nasjonale innstillinger til %s feilet.",
- "Please install one of these locales on your system and restart your webserver." : "Vennligst installer en av disse nasjonale innstillingene på systemet ditt og start webtjeneren på nytt.",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dette kan vanligvis ordnes ved %så gi vev-tjeneren skrivetilgang til apps-mappen%s eller ved å deaktivere app-butikken i config-filen.",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dette fikses vanligvis ved å <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">gi vevtjeneren skrivetilgang til rotmappen</a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Tillatelser kan vanligvis ordnes ved %så gi vevtjeneren skrivetilgang til rotmappen%s.",
+ "Setting locale to %s failed" : "Setting av nasjonale innstillinger til %s mislyktes.",
+ "Please install one of these locales on your system and restart your webserver." : "Vennligst installer en av disse nasjonale innstillingene på systemet ditt og start vevtjeneren på nytt.",
"Please ask your server administrator to install the module." : "Be tjener-administratoren om å installere modulen.",
"PHP module %s not installed." : "PHP-modul %s er ikke installert.",
"PHP setting \"%s\" is not set to \"%s\"." : "PHP-innstilling \"%s\" er ikke satt til \"%s\".",
@@ -186,15 +186,15 @@
"mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload er satt til \"%s\" i stedet for den forventede verdien \"0\"",
"To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Sett <code>mbstring.func_overload</code> til <code>0</code> in php.ini for å fikse dette problemet",
"libxml2 2.7.0 is at least required. Currently %s is installed." : "Krever minst libxml2 2.7.0. Per nå er %s installert.",
- "To fix this issue update your libxml2 version and restart your web server." : "For å fikse dette problemet, oppdater din libxml2 versjon og omstart webtjeneren.",
+ "To fix this issue update your libxml2 version and restart your web server." : "For å fikse dette problemet, oppdater din libxml2 versjon og omstart vevtjeneren.",
"PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Det ser ut for at PHP er satt opp til å fjerne innebygde doc blocks. Dette gjør at flere av kjerneapplikasjonene blir utilgjengelige.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette forårsakes sannsynligvis av en bufrer/akselerator, som f.eks. Zend OPcache eller eAccelerator.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP-moduler har blitt installert, men de listes fortsatt som fraværende?",
- "Please ask your server administrator to restart the web server." : "Be tjener-administratoren om å starte webtjeneren på nytt.",
+ "Please ask your server administrator to restart the web server." : "Be tjener-administratoren om å starte vevtjeneren på nytt.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 kreves",
- "Please upgrade your database version" : "Vennligst oppgrader versjonen av databasen din",
+ "Please upgrade your database version" : "Oppgrader databaseversjonen din",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Endre tillatelsene til 0770 slik at mappen ikke kan listes av andre brukere.",
- "Check the value of \"datadirectory\" in your configuration" : "Sjekk verdien for \"datadirectory\" i konfigurasjonen din",
+ "Check the value of \"datadirectory\" in your configuration" : "Sjekk verdien for \"datadirectory\" i oppsettet ditt",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Sjekk at det ligger en fil \".ocdata\" i roten av data-mappen.",
"Could not obtain lock type %d on \"%s\"." : "Klarte ikke å låse med type %d på \"%s\".",
"Storage unauthorized. %s" : "Lager uautorisert: %s",
diff --git a/lib/l10n/nl.js b/lib/l10n/nl.js
index e6db08888a5..7a270e3d68b 100644
--- a/lib/l10n/nl.js
+++ b/lib/l10n/nl.js
@@ -160,8 +160,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "De gebruikersnaam bevat spaties aan het begin of eind",
"A valid password must be provided" : "Er moet een geldig wachtwoord worden opgegeven",
"The username is already being used" : "De gebruikersnaam bestaat al",
- "Login canceled by app" : "Inloggen geannuleerd door app",
"User disabled" : "Gebruiker geblokkeerd",
+ "Login canceled by app" : "Inloggen geannuleerd door app",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "App \"%s\" kan niet worden geïnstalleerd, omdat het appinfo bestand niet gelezen kan worden.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "App \"%s\" kan niet worden geïnstalleerd, omdat deze niet compatible is met deze versie van de server.",
"No app name specified" : "Geen app naam opgegeven.",
diff --git a/lib/l10n/nl.json b/lib/l10n/nl.json
index 4edf017a6b7..3c7eb9c56dc 100644
--- a/lib/l10n/nl.json
+++ b/lib/l10n/nl.json
@@ -158,8 +158,8 @@
"Username contains whitespace at the beginning or at the end" : "De gebruikersnaam bevat spaties aan het begin of eind",
"A valid password must be provided" : "Er moet een geldig wachtwoord worden opgegeven",
"The username is already being used" : "De gebruikersnaam bestaat al",
- "Login canceled by app" : "Inloggen geannuleerd door app",
"User disabled" : "Gebruiker geblokkeerd",
+ "Login canceled by app" : "Inloggen geannuleerd door app",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "App \"%s\" kan niet worden geïnstalleerd, omdat het appinfo bestand niet gelezen kan worden.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "App \"%s\" kan niet worden geïnstalleerd, omdat deze niet compatible is met deze versie van de server.",
"No app name specified" : "Geen app naam opgegeven.",
diff --git a/lib/l10n/pl.js b/lib/l10n/pl.js
index 201a75b8265..0e2cb5fafd0 100644
--- a/lib/l10n/pl.js
+++ b/lib/l10n/pl.js
@@ -160,8 +160,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "Nazwa użytkownika zawiera spację na początku albo na końcu",
"A valid password must be provided" : "Należy podać prawidłowe hasło",
"The username is already being used" : "Ta nazwa użytkownika jest już używana",
- "Login canceled by app" : "Zalogowanie anulowane przez aplikację",
"User disabled" : "Użytkownik zablokowany",
+ "Login canceled by app" : "Zalogowanie anulowane przez aplikację",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikacja \"%s\" nie może zostać zainstalowana, ponieważ plik informacyjny nie może zostać odczytany.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikacja \"%s\" nie może zostać zainstalowana, ponieważ jest niekompatybilna z obecną wersją serwera.",
"No app name specified" : "Nie określono nazwy aplikacji",
diff --git a/lib/l10n/pl.json b/lib/l10n/pl.json
index 8457ce5d731..a759a02cf5d 100644
--- a/lib/l10n/pl.json
+++ b/lib/l10n/pl.json
@@ -158,8 +158,8 @@
"Username contains whitespace at the beginning or at the end" : "Nazwa użytkownika zawiera spację na początku albo na końcu",
"A valid password must be provided" : "Należy podać prawidłowe hasło",
"The username is already being used" : "Ta nazwa użytkownika jest już używana",
- "Login canceled by app" : "Zalogowanie anulowane przez aplikację",
"User disabled" : "Użytkownik zablokowany",
+ "Login canceled by app" : "Zalogowanie anulowane przez aplikację",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikacja \"%s\" nie może zostać zainstalowana, ponieważ plik informacyjny nie może zostać odczytany.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikacja \"%s\" nie może zostać zainstalowana, ponieważ jest niekompatybilna z obecną wersją serwera.",
"No app name specified" : "Nie określono nazwy aplikacji",
diff --git a/lib/l10n/pt_BR.js b/lib/l10n/pt_BR.js
index 6345ea47b87..8e842bc159b 100644
--- a/lib/l10n/pt_BR.js
+++ b/lib/l10n/pt_BR.js
@@ -160,8 +160,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "O nome de usuário contém espaço em branco no início ou no fim",
"A valid password must be provided" : "Forneça uma senha válida",
"The username is already being used" : "Este nome de usuário já está sendo usado",
- "Login canceled by app" : "Login cancelado pelo aplicativo",
"User disabled" : "Usuário desativado",
+ "Login canceled by app" : "Login cancelado pelo aplicativo",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "O aplicativo \"%s\" não pode ser instalado porque o arquivo appinfo não pode ser lido.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "O aplicativo \"%s\" não pode ser instalado pois não é compatível com a versão do servidor.",
"No app name specified" : "O nome do aplicativo não foi especificado.",
diff --git a/lib/l10n/pt_BR.json b/lib/l10n/pt_BR.json
index a9ed6ff5c5e..3b38aa80e69 100644
--- a/lib/l10n/pt_BR.json
+++ b/lib/l10n/pt_BR.json
@@ -158,8 +158,8 @@
"Username contains whitespace at the beginning or at the end" : "O nome de usuário contém espaço em branco no início ou no fim",
"A valid password must be provided" : "Forneça uma senha válida",
"The username is already being used" : "Este nome de usuário já está sendo usado",
- "Login canceled by app" : "Login cancelado pelo aplicativo",
"User disabled" : "Usuário desativado",
+ "Login canceled by app" : "Login cancelado pelo aplicativo",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "O aplicativo \"%s\" não pode ser instalado porque o arquivo appinfo não pode ser lido.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "O aplicativo \"%s\" não pode ser instalado pois não é compatível com a versão do servidor.",
"No app name specified" : "O nome do aplicativo não foi especificado.",
diff --git a/lib/l10n/ru.js b/lib/l10n/ru.js
index a15ab8bfdff..0583f653263 100644
--- a/lib/l10n/ru.js
+++ b/lib/l10n/ru.js
@@ -160,8 +160,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "Имя пользователя содержит пробел в начале или в конце",
"A valid password must be provided" : "Укажите допустимый пароль",
"The username is already being used" : "Имя пользователя уже используется",
- "Login canceled by app" : "Вход отменен приложением",
"User disabled" : "Пользователь отключен",
+ "Login canceled by app" : "Вход отменен приложением",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Приложение \"%s\" не может быть установлено, так как файл с информацией о приложении не может быть прочтен.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Приложение \"%s\" не может быть установлено, потому что оно несовместимо с этой версией сервера",
"No app name specified" : "Не указано имя приложения",
diff --git a/lib/l10n/ru.json b/lib/l10n/ru.json
index 2f0630fbaa4..7ca3c465771 100644
--- a/lib/l10n/ru.json
+++ b/lib/l10n/ru.json
@@ -158,8 +158,8 @@
"Username contains whitespace at the beginning or at the end" : "Имя пользователя содержит пробел в начале или в конце",
"A valid password must be provided" : "Укажите допустимый пароль",
"The username is already being used" : "Имя пользователя уже используется",
- "Login canceled by app" : "Вход отменен приложением",
"User disabled" : "Пользователь отключен",
+ "Login canceled by app" : "Вход отменен приложением",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Приложение \"%s\" не может быть установлено, так как файл с информацией о приложении не может быть прочтен.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Приложение \"%s\" не может быть установлено, потому что оно несовместимо с этой версией сервера",
"No app name specified" : "Не указано имя приложения",
diff --git a/lib/l10n/sk.js b/lib/l10n/sk.js
index 8355dabdd42..b6b69be2ffc 100644
--- a/lib/l10n/sk.js
+++ b/lib/l10n/sk.js
@@ -153,8 +153,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "Meno používateľa obsahuje na začiatku, alebo na konci medzeru",
"A valid password must be provided" : "Musíte zadať platné heslo",
"The username is already being used" : "Meno používateľa je už použité",
- "Login canceled by app" : "Prihlásenie bolo zrušené aplikáciou",
"User disabled" : "Používateľ zakázaný",
+ "Login canceled by app" : "Prihlásenie bolo zrušené aplikáciou",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikáciu \"%s\" nie je možné nainštalovať, lebo nebolo možné načítať súbor s informáciami o aplikácií.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikácia \"%s\" nie je kompatibilná s verziou servera, preto nemôže byť nainštalovaná.",
"No app name specified" : "Nešpecifikované meno aplikácie",
diff --git a/lib/l10n/sk.json b/lib/l10n/sk.json
index 081026123a3..01652f376f5 100644
--- a/lib/l10n/sk.json
+++ b/lib/l10n/sk.json
@@ -151,8 +151,8 @@
"Username contains whitespace at the beginning or at the end" : "Meno používateľa obsahuje na začiatku, alebo na konci medzeru",
"A valid password must be provided" : "Musíte zadať platné heslo",
"The username is already being used" : "Meno používateľa je už použité",
- "Login canceled by app" : "Prihlásenie bolo zrušené aplikáciou",
"User disabled" : "Používateľ zakázaný",
+ "Login canceled by app" : "Prihlásenie bolo zrušené aplikáciou",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikáciu \"%s\" nie je možné nainštalovať, lebo nebolo možné načítať súbor s informáciami o aplikácií.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikácia \"%s\" nie je kompatibilná s verziou servera, preto nemôže byť nainštalovaná.",
"No app name specified" : "Nešpecifikované meno aplikácie",
diff --git a/lib/l10n/sq.js b/lib/l10n/sq.js
index c7c460a491e..c5320ebea0e 100644
--- a/lib/l10n/sq.js
+++ b/lib/l10n/sq.js
@@ -157,8 +157,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "Emri i përdoruesit përmban hapësirë në fillim ose në fund",
"A valid password must be provided" : "Duhet dhënë një fjalëkalim i vlefshëm",
"The username is already being used" : "Emri i përdoruesit është tashmë i përdorur",
- "Login canceled by app" : "Hyrja u anulua nga aplikacioni",
"User disabled" : "Përdorues i çaktivizuar",
+ "Login canceled by app" : "Hyrja u anulua nga aplikacioni",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikacioni \"%s\" s’mund të instalohet, ngaqë s’lexohet dot kartela appinfo.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikacioni \"%s\" nuk mund të instalohet sepse nuk përputhet me këtë version të serverit.",
"No app name specified" : "S’u dha emër aplikacioni",
diff --git a/lib/l10n/sq.json b/lib/l10n/sq.json
index aaa6ecb13c9..88af602cb4b 100644
--- a/lib/l10n/sq.json
+++ b/lib/l10n/sq.json
@@ -155,8 +155,8 @@
"Username contains whitespace at the beginning or at the end" : "Emri i përdoruesit përmban hapësirë në fillim ose në fund",
"A valid password must be provided" : "Duhet dhënë një fjalëkalim i vlefshëm",
"The username is already being used" : "Emri i përdoruesit është tashmë i përdorur",
- "Login canceled by app" : "Hyrja u anulua nga aplikacioni",
"User disabled" : "Përdorues i çaktivizuar",
+ "Login canceled by app" : "Hyrja u anulua nga aplikacioni",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikacioni \"%s\" s’mund të instalohet, ngaqë s’lexohet dot kartela appinfo.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikacioni \"%s\" nuk mund të instalohet sepse nuk përputhet me këtë version të serverit.",
"No app name specified" : "S’u dha emër aplikacioni",
diff --git a/lib/l10n/sv.js b/lib/l10n/sv.js
index 039051e8e0c..6567bf73b47 100644
--- a/lib/l10n/sv.js
+++ b/lib/l10n/sv.js
@@ -157,8 +157,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "Användarnamnet består av ett mellanslag i början eller i slutet",
"A valid password must be provided" : "Ett giltigt lösenord måste anges",
"The username is already being used" : "Användarnamnet används redan",
- "Login canceled by app" : "Inloggningen avbruten av appen",
"User disabled" : "Användare inaktiverad",
+ "Login canceled by app" : "Inloggningen avbruten av appen",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Applikationen \"%s\" kan ej installeras eftersom informationen från appen ej kunde läsas.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Applikationen \"%s\" kan ej installeras eftersom den inte är kompatibel med denna serverversion.",
"No app name specified" : "Inget appnamn angivet",
diff --git a/lib/l10n/sv.json b/lib/l10n/sv.json
index 914042c8e10..12534b6b468 100644
--- a/lib/l10n/sv.json
+++ b/lib/l10n/sv.json
@@ -155,8 +155,8 @@
"Username contains whitespace at the beginning or at the end" : "Användarnamnet består av ett mellanslag i början eller i slutet",
"A valid password must be provided" : "Ett giltigt lösenord måste anges",
"The username is already being used" : "Användarnamnet används redan",
- "Login canceled by app" : "Inloggningen avbruten av appen",
"User disabled" : "Användare inaktiverad",
+ "Login canceled by app" : "Inloggningen avbruten av appen",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Applikationen \"%s\" kan ej installeras eftersom informationen från appen ej kunde läsas.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Applikationen \"%s\" kan ej installeras eftersom den inte är kompatibel med denna serverversion.",
"No app name specified" : "Inget appnamn angivet",
diff --git a/lib/l10n/tr.js b/lib/l10n/tr.js
index 5b1620d0703..e30005c8d29 100644
--- a/lib/l10n/tr.js
+++ b/lib/l10n/tr.js
@@ -160,8 +160,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "Kullanıcı adının başı ya da sonunda boşluk var",
"A valid password must be provided" : "Geçerli bir parola yazmalısınız",
"The username is already being used" : "Bu kullanıcı adı zaten var",
- "Login canceled by app" : "Oturum açma işlemi uygulama tarafından iptal edildi",
"User disabled" : "Kullanıcı devre dışı",
+ "Login canceled by app" : "Oturum açma işlemi uygulama tarafından iptal edildi",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "appinfo dosyası okunamadığından \"%s\" uygulaması kurulamaz.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" uygulaması sunucu sürümüyle uyumlu olmadığından kurulamaz.",
"No app name specified" : "Uygulama adı belirtilmemiş",
diff --git a/lib/l10n/tr.json b/lib/l10n/tr.json
index 49659822b09..d4120178edc 100644
--- a/lib/l10n/tr.json
+++ b/lib/l10n/tr.json
@@ -158,8 +158,8 @@
"Username contains whitespace at the beginning or at the end" : "Kullanıcı adının başı ya da sonunda boşluk var",
"A valid password must be provided" : "Geçerli bir parola yazmalısınız",
"The username is already being used" : "Bu kullanıcı adı zaten var",
- "Login canceled by app" : "Oturum açma işlemi uygulama tarafından iptal edildi",
"User disabled" : "Kullanıcı devre dışı",
+ "Login canceled by app" : "Oturum açma işlemi uygulama tarafından iptal edildi",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "appinfo dosyası okunamadığından \"%s\" uygulaması kurulamaz.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" uygulaması sunucu sürümüyle uyumlu olmadığından kurulamaz.",
"No app name specified" : "Uygulama adı belirtilmemiş",
diff --git a/lib/l10n/zh_CN.js b/lib/l10n/zh_CN.js
index 1d63dc86555..0ecabd9ed7b 100644
--- a/lib/l10n/zh_CN.js
+++ b/lib/l10n/zh_CN.js
@@ -160,8 +160,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "用户名在开头或结尾处包含空格",
"A valid password must be provided" : "必须提供合法的密码",
"The username is already being used" : "用户名已被使用",
- "Login canceled by app" : "已通过应用取消登录",
"User disabled" : "用户已禁用",
+ "Login canceled by app" : "已通过应用取消登录",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "无法安装应用\"%s\",因为无法读取appinfo文件.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "应用程式 \"%s\" 无法安装,因为它与这个版本的服务器不兼容.",
"No app name specified" : "没有指定的 App 名称",
diff --git a/lib/l10n/zh_CN.json b/lib/l10n/zh_CN.json
index 9b0196d1929..97616b9b5a1 100644
--- a/lib/l10n/zh_CN.json
+++ b/lib/l10n/zh_CN.json
@@ -158,8 +158,8 @@
"Username contains whitespace at the beginning or at the end" : "用户名在开头或结尾处包含空格",
"A valid password must be provided" : "必须提供合法的密码",
"The username is already being used" : "用户名已被使用",
- "Login canceled by app" : "已通过应用取消登录",
"User disabled" : "用户已禁用",
+ "Login canceled by app" : "已通过应用取消登录",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "无法安装应用\"%s\",因为无法读取appinfo文件.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "应用程式 \"%s\" 无法安装,因为它与这个版本的服务器不兼容.",
"No app name specified" : "没有指定的 App 名称",
diff --git a/lib/l10n/zh_TW.js b/lib/l10n/zh_TW.js
index cc38464a114..d2aaec40981 100644
--- a/lib/l10n/zh_TW.js
+++ b/lib/l10n/zh_TW.js
@@ -151,8 +151,8 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "使用者名詞的開頭或結尾有空白",
"A valid password must be provided" : "一定要提供一個有效的密碼",
"The username is already being used" : "這個使用者名稱已經有人使用了",
- "Login canceled by app" : "程式取消登入",
"User disabled" : "使用者取消",
+ "Login canceled by app" : "程式取消登入",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "程式\"%s\"無法安裝,因為無法讀取appinfo檔案。",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "程式\"%s\"無法安裝,因為伺服器版本不符。",
"No app name specified" : "沒有指定應用程式名稱",
diff --git a/lib/l10n/zh_TW.json b/lib/l10n/zh_TW.json
index e3a3f5d308c..f30b198a58b 100644
--- a/lib/l10n/zh_TW.json
+++ b/lib/l10n/zh_TW.json
@@ -149,8 +149,8 @@
"Username contains whitespace at the beginning or at the end" : "使用者名詞的開頭或結尾有空白",
"A valid password must be provided" : "一定要提供一個有效的密碼",
"The username is already being used" : "這個使用者名稱已經有人使用了",
- "Login canceled by app" : "程式取消登入",
"User disabled" : "使用者取消",
+ "Login canceled by app" : "程式取消登入",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "程式\"%s\"無法安裝,因為無法讀取appinfo檔案。",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "程式\"%s\"無法安裝,因為伺服器版本不符。",
"No app name specified" : "沒有指定應用程式名稱",
diff --git a/lib/private/AppFramework/DependencyInjection/DIContainer.php b/lib/private/AppFramework/DependencyInjection/DIContainer.php
index 689c82c2858..04747485c13 100644
--- a/lib/private/AppFramework/DependencyInjection/DIContainer.php
+++ b/lib/private/AppFramework/DependencyInjection/DIContainer.php
@@ -40,6 +40,7 @@ use OC\AppFramework\Http\Output;
use OC\AppFramework\Middleware\MiddlewareDispatcher;
use OC\AppFramework\Middleware\Security\CORSMiddleware;
use OC\AppFramework\Middleware\OCSMiddleware;
+use OC\AppFramework\Middleware\Security\RateLimitingMiddleware;
use OC\AppFramework\Middleware\Security\SecurityMiddleware;
use OC\AppFramework\Middleware\SessionMiddleware;
use OC\AppFramework\Utility\SimpleContainer;
@@ -223,12 +224,34 @@ class DIContainer extends SimpleContainer implements IAppContainer {
$app->isAdminUser(),
$server->getContentSecurityPolicyManager(),
$server->getCsrfTokenManager(),
- $server->getContentSecurityPolicyNonceManager(),
- $server->getBruteForceThrottler()
+ $server->getContentSecurityPolicyNonceManager()
);
});
+ $this->registerService('BruteForceMiddleware', function($c) use ($app) {
+ /** @var \OC\Server $server */
+ $server = $app->getServer();
+
+ return new OC\AppFramework\Middleware\Security\BruteForceMiddleware(
+ $c['ControllerMethodReflector'],
+ $server->getBruteForceThrottler(),
+ $server->getRequest()
+ );
+ });
+
+ $this->registerService('RateLimitingMiddleware', function($c) use ($app) {
+ /** @var \OC\Server $server */
+ $server = $app->getServer();
+
+ return new RateLimitingMiddleware(
+ $server->getRequest(),
+ $server->getUserSession(),
+ $c['ControllerMethodReflector'],
+ $c->query(OC\Security\RateLimiting\Limiter::class)
+ );
+ });
+
$this->registerService('CORSMiddleware', function($c) {
return new CORSMiddleware(
$c['Request'],
@@ -268,7 +291,9 @@ class DIContainer extends SimpleContainer implements IAppContainer {
$dispatcher->registerMiddleware($c['CORSMiddleware']);
$dispatcher->registerMiddleware($c['OCSMiddleware']);
$dispatcher->registerMiddleware($c['SecurityMiddleware']);
- $dispatcher->registerMiddleWare($c['TwoFactorMiddleware']);
+ $dispatcher->registerMiddleware($c['TwoFactorMiddleware']);
+ $dispatcher->registerMiddleware($c['BruteForceMiddleware']);
+ $dispatcher->registerMiddleware($c['RateLimitingMiddleware']);
foreach($middleWares as $middleWare) {
$dispatcher->registerMiddleware($c[$middleWare]);
diff --git a/lib/private/AppFramework/Http/Request.php b/lib/private/AppFramework/Http/Request.php
index 3f1e6fd951a..b39ae3e8c0c 100644
--- a/lib/private/AppFramework/Http/Request.php
+++ b/lib/private/AppFramework/Http/Request.php
@@ -578,7 +578,8 @@ class Request implements \ArrayAccess, \Countable, IRequest {
}
if(empty($this->requestId)) {
- $this->requestId = $this->secureRandom->generate(20);
+ $validChars = ISecureRandom::CHAR_UPPER . ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_DIGITS;
+ $this->requestId = $this->secureRandom->generate(20, $validChars);
}
return $this->requestId;
diff --git a/lib/private/AppFramework/Middleware/Security/BruteForceMiddleware.php b/lib/private/AppFramework/Middleware/Security/BruteForceMiddleware.php
new file mode 100644
index 00000000000..b361f453bdb
--- /dev/null
+++ b/lib/private/AppFramework/Middleware/Security/BruteForceMiddleware.php
@@ -0,0 +1,83 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\AppFramework\Middleware\Security;
+
+use OC\AppFramework\Utility\ControllerMethodReflector;
+use OC\Security\Bruteforce\Throttler;
+use OCP\AppFramework\Http\Response;
+use OCP\AppFramework\Middleware;
+use OCP\IRequest;
+
+/**
+ * Class BruteForceMiddleware performs the bruteforce protection for controllers
+ * that are annotated with @BruteForceProtection(action=$action) whereas $action
+ * is the action that should be logged within the database.
+ *
+ * @package OC\AppFramework\Middleware\Security
+ */
+class BruteForceMiddleware extends Middleware {
+ /** @var ControllerMethodReflector */
+ private $reflector;
+ /** @var Throttler */
+ private $throttler;
+ /** @var IRequest */
+ private $request;
+
+ /**
+ * @param ControllerMethodReflector $controllerMethodReflector
+ * @param Throttler $throttler
+ * @param IRequest $request
+ */
+ public function __construct(ControllerMethodReflector $controllerMethodReflector,
+ Throttler $throttler,
+ IRequest $request) {
+ $this->reflector = $controllerMethodReflector;
+ $this->throttler = $throttler;
+ $this->request = $request;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function beforeController($controller, $methodName) {
+ parent::beforeController($controller, $methodName);
+
+ if($this->reflector->hasAnnotation('BruteForceProtection')) {
+ $action = $this->reflector->getAnnotationParameter('BruteForceProtection', 'action');
+ $this->throttler->sleepDelay($this->request->getRemoteAddress(), $action);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function afterController($controller, $methodName, Response $response) {
+ if($this->reflector->hasAnnotation('BruteForceProtection') && $response->isThrottled()) {
+ $action = $this->reflector->getAnnotationParameter('BruteForceProtection', 'action');
+ $ip = $this->request->getRemoteAddress();
+ $this->throttler->sleepDelay($ip, $action);
+ $this->throttler->registerAttempt($action, $ip);
+ }
+
+ return parent::afterController($controller, $methodName, $response);
+ }
+}
diff --git a/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php b/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php
new file mode 100644
index 00000000000..e2ad7955dd0
--- /dev/null
+++ b/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php
@@ -0,0 +1,134 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\AppFramework\Middleware\Security;
+
+use OC\AppFramework\Utility\ControllerMethodReflector;
+use OC\Security\RateLimiting\Exception\RateLimitExceededException;
+use OC\Security\RateLimiting\Limiter;
+use OCP\AppFramework\Http\JSONResponse;
+use OCP\AppFramework\Http\Response;
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\AppFramework\Middleware;
+use OCP\IRequest;
+use OCP\IUserSession;
+
+/**
+ * Class RateLimitingMiddleware is the middleware responsible for implementing the
+ * ratelimiting in Nextcloud.
+ *
+ * It parses annotations such as:
+ *
+ * @UserRateThrottle(limit=5, period=100)
+ * @AnonRateThrottle(limit=1, period=100)
+ *
+ * Those annotations above would mean that logged-in users can access the page 5
+ * times within 100 seconds, and anonymous users 1 time within 100 seconds. If
+ * only an AnonRateThrottle is specified that one will also be applied to logged-in
+ * users.
+ *
+ * @package OC\AppFramework\Middleware\Security
+ */
+class RateLimitingMiddleware extends Middleware {
+ /** @var IRequest $request */
+ private $request;
+ /** @var IUserSession */
+ private $userSession;
+ /** @var ControllerMethodReflector */
+ private $reflector;
+ /** @var Limiter */
+ private $limiter;
+
+ /**
+ * @param IRequest $request
+ * @param IUserSession $userSession
+ * @param ControllerMethodReflector $reflector
+ * @param Limiter $limiter
+ */
+ public function __construct(IRequest $request,
+ IUserSession $userSession,
+ ControllerMethodReflector $reflector,
+ Limiter $limiter) {
+ $this->request = $request;
+ $this->userSession = $userSession;
+ $this->reflector = $reflector;
+ $this->limiter = $limiter;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @throws RateLimitExceededException
+ */
+ public function beforeController($controller, $methodName) {
+ parent::beforeController($controller, $methodName);
+
+ $anonLimit = $this->reflector->getAnnotationParameter('AnonRateThrottle', 'limit');
+ $anonPeriod = $this->reflector->getAnnotationParameter('AnonRateThrottle', 'period');
+ $userLimit = $this->reflector->getAnnotationParameter('UserRateThrottle', 'limit');
+ $userPeriod = $this->reflector->getAnnotationParameter('UserRateThrottle', 'period');
+ $rateLimitIdentifier = get_class($controller) . '::' . $methodName;
+ if($userLimit !== '' && $userPeriod !== '' && $this->userSession->isLoggedIn()) {
+ $this->limiter->registerUserRequest(
+ $rateLimitIdentifier,
+ $userLimit,
+ $userPeriod,
+ $this->userSession->getUser()
+ );
+ } elseif ($anonLimit !== '' && $anonPeriod !== '') {
+ $this->limiter->registerAnonRequest(
+ $rateLimitIdentifier,
+ $anonLimit,
+ $anonPeriod,
+ $this->request->getRemoteAddress()
+ );
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function afterException($controller, $methodName, \Exception $exception) {
+ if($exception instanceof RateLimitExceededException) {
+ if (stripos($this->request->getHeader('Accept'),'html') === false) {
+ $response = new JSONResponse(
+ [
+ 'message' => $exception->getMessage(),
+ ],
+ $exception->getCode()
+ );
+ } else {
+ $response = new TemplateResponse(
+ 'core',
+ '403',
+ [
+ 'file' => $exception->getMessage()
+ ],
+ 'guest'
+ );
+ $response->setStatus($exception->getCode());
+ }
+
+ return $response;
+ }
+
+ throw $exception;
+ }
+}
diff --git a/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php b/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php
index edba6a3e759..e420a9dacc0 100644
--- a/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php
+++ b/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php
@@ -36,7 +36,6 @@ use OC\AppFramework\Middleware\Security\Exceptions\NotConfirmedException;
use OC\AppFramework\Middleware\Security\Exceptions\NotLoggedInException;
use OC\AppFramework\Middleware\Security\Exceptions\StrictCookieMissingException;
use OC\AppFramework\Utility\ControllerMethodReflector;
-use OC\Security\Bruteforce\Throttler;
use OC\Security\CSP\ContentSecurityPolicyManager;
use OC\Security\CSP\ContentSecurityPolicyNonceManager;
use OC\Security\CSRF\CsrfTokenManager;
@@ -88,8 +87,6 @@ class SecurityMiddleware extends Middleware {
private $csrfTokenManager;
/** @var ContentSecurityPolicyNonceManager */
private $cspNonceManager;
- /** @var Throttler */
- private $throttler;
/**
* @param IRequest $request
@@ -104,7 +101,6 @@ class SecurityMiddleware extends Middleware {
* @param ContentSecurityPolicyManager $contentSecurityPolicyManager
* @param CSRFTokenManager $csrfTokenManager
* @param ContentSecurityPolicyNonceManager $cspNonceManager
- * @param Throttler $throttler
*/
public function __construct(IRequest $request,
ControllerMethodReflector $reflector,
@@ -117,8 +113,7 @@ class SecurityMiddleware extends Middleware {
$isAdminUser,
ContentSecurityPolicyManager $contentSecurityPolicyManager,
CsrfTokenManager $csrfTokenManager,
- ContentSecurityPolicyNonceManager $cspNonceManager,
- Throttler $throttler) {
+ ContentSecurityPolicyNonceManager $cspNonceManager) {
$this->navigationManager = $navigationManager;
$this->request = $request;
$this->reflector = $reflector;
@@ -131,10 +126,8 @@ class SecurityMiddleware extends Middleware {
$this->contentSecurityPolicyManager = $contentSecurityPolicyManager;
$this->csrfTokenManager = $csrfTokenManager;
$this->cspNonceManager = $cspNonceManager;
- $this->throttler = $throttler;
}
-
/**
* This runs all the security checks before a method call. The
* security checks are determined by inspecting the controller method
@@ -191,12 +184,6 @@ class SecurityMiddleware extends Middleware {
}
}
- if($this->reflector->hasAnnotation('BruteForceProtection')) {
- $action = $this->reflector->getAnnotationParameter('BruteForceProtection');
- $this->throttler->sleepDelay($this->request->getRemoteAddress(), $action);
- $this->throttler->registerAttempt($action, $this->request->getRemoteAddress());
- }
-
/**
* FIXME: Use DI once available
* Checks if app is enabled (also includes a check whether user is allowed to access the resource)
diff --git a/lib/private/AppFramework/Utility/ControllerMethodReflector.php b/lib/private/AppFramework/Utility/ControllerMethodReflector.php
index 034fc3a1759..d6a9b596127 100644
--- a/lib/private/AppFramework/Utility/ControllerMethodReflector.php
+++ b/lib/private/AppFramework/Utility/ControllerMethodReflector.php
@@ -24,27 +24,17 @@
*
*/
-
namespace OC\AppFramework\Utility;
use \OCP\AppFramework\Utility\IControllerMethodReflector;
-
/**
* Reads and parses annotations from doc comments
*/
-class ControllerMethodReflector implements IControllerMethodReflector{
-
- private $annotations;
- private $types;
- private $parameters;
-
- public function __construct() {
- $this->types = array();
- $this->parameters = array();
- $this->annotations = array();
- }
-
+class ControllerMethodReflector implements IControllerMethodReflector {
+ public $annotations = [];
+ private $types = [];
+ private $parameters = [];
/**
* @param object $object an object or classname
@@ -55,9 +45,21 @@ class ControllerMethodReflector implements IControllerMethodReflector{
$docs = $reflection->getDocComment();
// extract everything prefixed by @ and first letter uppercase
- preg_match_all('/^\h+\*\h+@(?P<annotation>[A-Z]\w+)(\h+(?P<parameter>\w+))?$/m', $docs, $matches);
+ preg_match_all('/^\h+\*\h+@(?P<annotation>[A-Z]\w+)((?P<parameter>.*))?$/m', $docs, $matches);
foreach($matches['annotation'] as $key => $annontation) {
- $this->annotations[$annontation] = $matches['parameter'][$key];
+ $annotationValue = $matches['parameter'][$key];
+ if(isset($annotationValue[0]) && $annotationValue[0] === '(' && $annotationValue[strlen($annotationValue) - 1] === ')') {
+ $cutString = substr($annotationValue, 1, -1);
+ $cutString = str_replace(' ', '', $cutString);
+ $splittedArray = explode(',', $cutString);
+ foreach($splittedArray as $annotationValues) {
+ list($key, $value) = explode('=', $annotationValues);
+ $this->annotations[$annontation][$key] = $value;
+ }
+ continue;
+ }
+
+ $this->annotations[$annontation] = [$annotationValue];
}
// extract type parameter information
@@ -83,7 +85,6 @@ class ControllerMethodReflector implements IControllerMethodReflector{
}
}
-
/**
* Inspects the PHPDoc parameters for types
* @param string $parameter the parameter whose type comments should be
@@ -99,7 +100,6 @@ class ControllerMethodReflector implements IControllerMethodReflector{
}
}
-
/**
* @return array the arguments of the method with key => default value
*/
@@ -107,30 +107,27 @@ class ControllerMethodReflector implements IControllerMethodReflector{
return $this->parameters;
}
-
/**
* Check if a method contains an annotation
* @param string $name the name of the annotation
* @return bool true if the annotation is found
*/
- public function hasAnnotation($name){
+ public function hasAnnotation($name) {
return array_key_exists($name, $this->annotations);
}
-
/**
- * Get optional annotation parameter
+ * Get optional annotation parameter by key
+ *
* @param string $name the name of the annotation
+ * @param string $key the string of the annotation
* @return string
*/
- public function getAnnotationParameter($name){
- $parameter = '';
- if($this->hasAnnotation($name)) {
- $parameter = $this->annotations[$name];
+ public function getAnnotationParameter($name, $key) {
+ if(isset($this->annotations[$name][$key])) {
+ return $this->annotations[$name][$key];
}
- return $parameter;
+ return '';
}
-
-
}
diff --git a/lib/private/Log.php b/lib/private/Log.php
index bcaa788603a..a87aff0b954 100644
--- a/lib/private/Log.php
+++ b/lib/private/Log.php
@@ -63,6 +63,7 @@ class Log implements ILogger {
protected $methodsWithSensitiveParameters = [
// Session/User
+ 'completeLogin',
'login',
'checkPassword',
'loginWithPassword',
diff --git a/lib/private/Log/File.php b/lib/private/Log/File.php
index 8011f63ab13..97ec5012b1f 100644
--- a/lib/private/Log/File.php
+++ b/lib/private/Log/File.php
@@ -106,14 +106,14 @@ class File {
$version = $config->getValue('version', '');
$entry = compact(
'reqId',
- 'remoteAddr',
- 'app',
- 'message',
'level',
'time',
+ 'remoteAddr',
+ 'user',
+ 'app',
'method',
'url',
- 'user',
+ 'message',
'userAgent',
'version'
);
diff --git a/lib/private/Mail/EMailTemplate.php b/lib/private/Mail/EMailTemplate.php
index 805126d2ad8..c0949b91c42 100644
--- a/lib/private/Mail/EMailTemplate.php
+++ b/lib/private/Mail/EMailTemplate.php
@@ -423,10 +423,12 @@ EOF;
*
* @param string $text Text of button
* @param string $url URL of button
+ * @param string $plainText Text of button in plain text version
+ * if empty the $text is used, if false none will be used
*
* @since 12.0.0
*/
- public function addBodyButton($text, $url) {
+ public function addBodyButton($text, $url, $plainText = '') {
if ($this->footerAdded) {
return;
}
@@ -436,9 +438,18 @@ EOF;
$this->bodyOpened = true;
}
+ if ($plainText === '') {
+ $plainText = $text;
+ }
+
$color = $this->themingDefaults->getColorPrimary();
$this->htmlBody .= vsprintf($this->button, [$color, $color, $url, $color, htmlspecialchars($text)]);
- $this->plainBody .= $text . ': ' . $url . PHP_EOL;
+
+ if ($plainText !== false) {
+ $this->plainBody .= $plainText . ': ';
+ }
+
+ $this->plainBody .= $url . PHP_EOL;
}
diff --git a/lib/private/Security/Bruteforce/Throttler.php b/lib/private/Security/Bruteforce/Throttler.php
index 73a27b677b0..b2524b63c63 100644
--- a/lib/private/Security/Bruteforce/Throttler.php
+++ b/lib/private/Security/Bruteforce/Throttler.php
@@ -23,6 +23,7 @@
namespace OC\Security\Bruteforce;
+use OC\Security\Normalizer\IpAddress;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\IConfig;
use OCP\IDBConnection;
@@ -83,67 +84,6 @@ class Throttler {
}
/**
- * Return the given subnet for an IPv4 address and mask bits
- *
- * @param string $ip
- * @param int $maskBits
- * @return string
- */
- private function getIPv4Subnet($ip,
- $maskBits = 32) {
- $binary = \inet_pton($ip);
- for ($i = 32; $i > $maskBits; $i -= 8) {
- $j = \intdiv($i, 8) - 1;
- $k = (int) \min(8, $i - $maskBits);
- $mask = (0xff - ((pow(2, $k)) - 1));
- $int = \unpack('C', $binary[$j]);
- $binary[$j] = \pack('C', $int[1] & $mask);
- }
- return \inet_ntop($binary).'/'.$maskBits;
- }
-
- /**
- * Return the given subnet for an IPv6 address and mask bits
- *
- * @param string $ip
- * @param int $maskBits
- * @return string
- */
- private function getIPv6Subnet($ip, $maskBits = 48) {
- $binary = \inet_pton($ip);
- for ($i = 128; $i > $maskBits; $i -= 8) {
- $j = \intdiv($i, 8) - 1;
- $k = (int) \min(8, $i - $maskBits);
- $mask = (0xff - ((pow(2, $k)) - 1));
- $int = \unpack('C', $binary[$j]);
- $binary[$j] = \pack('C', $int[1] & $mask);
- }
- return \inet_ntop($binary).'/'.$maskBits;
- }
-
- /**
- * Return the given subnet for an IP and the configured mask bits
- *
- * Determine if the IP is an IPv4 or IPv6 address, then pass to the correct
- * method for handling that specific type.
- *
- * @param string $ip
- * @return string
- */
- private function getSubnet($ip) {
- if (\preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $ip)) {
- return $this->getIPv4Subnet(
- $ip,
- 32
- );
- }
- return $this->getIPv6Subnet(
- $ip,
- 128
- );
- }
-
- /**
* Register a failed attempt to bruteforce a security control
*
* @param string $action
@@ -158,11 +98,12 @@ class Throttler {
return;
}
+ $ipAddress = new IpAddress($ip);
$values = [
'action' => $action,
'occurred' => $this->timeFactory->getTime(),
- 'ip' => $ip,
- 'subnet' => $this->getSubnet($ip),
+ 'ip' => (string)$ipAddress,
+ 'subnet' => $ipAddress->getSubnet(),
'metadata' => json_encode($metadata),
];
@@ -254,7 +195,8 @@ class Throttler {
* @return int
*/
public function getDelay($ip, $action = '') {
- if ($this->isIPWhitelisted($ip)) {
+ $ipAddress = new IpAddress($ip);
+ if ($this->isIPWhitelisted((string)$ipAddress)) {
return 0;
}
@@ -266,7 +208,7 @@ class Throttler {
$qb->select('*')
->from('bruteforce_attempts')
->where($qb->expr()->gt('occurred', $qb->createNamedParameter($cutoffTime)))
- ->andWhere($qb->expr()->eq('subnet', $qb->createNamedParameter($this->getSubnet($ip))));
+ ->andWhere($qb->expr()->eq('subnet', $qb->createNamedParameter($ipAddress->getSubnet())));
if ($action !== '') {
$qb->andWhere($qb->expr()->eq('action', $qb->createNamedParameter($action)));
diff --git a/lib/private/Security/Normalizer/IpAddress.php b/lib/private/Security/Normalizer/IpAddress.php
new file mode 100644
index 00000000000..c44a5556678
--- /dev/null
+++ b/lib/private/Security/Normalizer/IpAddress.php
@@ -0,0 +1,106 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Security\Normalizer;
+
+/**
+ * Class IpAddress is used for normalizing IPv4 and IPv6 addresses in security
+ * relevant contexts in Nextcloud.
+ *
+ * @package OC\Security\Normalizer
+ */
+class IpAddress {
+ /** @var string */
+ private $ip;
+
+ /**
+ * @param string $ip IP to normalized
+ */
+ public function __construct($ip) {
+ $this->ip = $ip;
+ }
+
+ /**
+ * Return the given subnet for an IPv4 address and mask bits
+ *
+ * @param string $ip
+ * @param int $maskBits
+ * @return string
+ */
+ private function getIPv4Subnet($ip,
+ $maskBits = 32) {
+ $binary = \inet_pton($ip);
+ for ($i = 32; $i > $maskBits; $i -= 8) {
+ $j = \intdiv($i, 8) - 1;
+ $k = (int) \min(8, $i - $maskBits);
+ $mask = (0xff - ((pow(2, $k)) - 1));
+ $int = \unpack('C', $binary[$j]);
+ $binary[$j] = \pack('C', $int[1] & $mask);
+ }
+ return \inet_ntop($binary).'/'.$maskBits;
+ }
+
+ /**
+ * Return the given subnet for an IPv6 address and mask bits
+ *
+ * @param string $ip
+ * @param int $maskBits
+ * @return string
+ */
+ private function getIPv6Subnet($ip, $maskBits = 48) {
+ $binary = \inet_pton($ip);
+ for ($i = 128; $i > $maskBits; $i -= 8) {
+ $j = \intdiv($i, 8) - 1;
+ $k = (int) \min(8, $i - $maskBits);
+ $mask = (0xff - ((pow(2, $k)) - 1));
+ $int = \unpack('C', $binary[$j]);
+ $binary[$j] = \pack('C', $int[1] & $mask);
+ }
+ return \inet_ntop($binary).'/'.$maskBits;
+ }
+
+ /**
+ * Gets either the /32 (IPv4) or the /128 (IPv6) subnet of an IP address
+ *
+ * @return string
+ */
+ public function getSubnet() {
+ if (\preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $this->ip)) {
+ return $this->getIPv4Subnet(
+ $this->ip,
+ 32
+ );
+ }
+ return $this->getIPv6Subnet(
+ $this->ip,
+ 128
+ );
+ }
+
+ /**
+ * Returns the specified IP address
+ *
+ * @return string
+ */
+ public function __toString() {
+ return $this->ip;
+ }
+}
diff --git a/lib/private/Security/RateLimiting/Backend/IBackend.php b/lib/private/Security/RateLimiting/Backend/IBackend.php
new file mode 100644
index 00000000000..9753eb4997c
--- /dev/null
+++ b/lib/private/Security/RateLimiting/Backend/IBackend.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Security\RateLimiting\Backend;
+
+/**
+ * Interface IBackend defines a storage backend for the rate limiting data. It
+ * should be noted that writing and reading rate limiting data is an expensive
+ * operation and one should thus make sure to only use sufficient fast backends.
+ *
+ * @package OC\Security\RateLimiting\Backend
+ */
+interface IBackend {
+ /**
+ * Gets the amount of attempts within the last specified seconds
+ *
+ * @param string $methodIdentifier Identifier for the method
+ * @param string $userIdentifier Identifier for the user
+ * @param int $seconds Seconds to look back at
+ * @return int
+ */
+ public function getAttempts($methodIdentifier,
+ $userIdentifier,
+ $seconds);
+
+ /**
+ * Registers an attempt
+ *
+ * @param string $methodIdentifier Identifier for the method
+ * @param string $userIdentifier Identifier for the user
+ * @param int $period Period in seconds how long this attempt should be stored
+ */
+ public function registerAttempt($methodIdentifier,
+ $userIdentifier,
+ $period);
+}
diff --git a/lib/private/Security/RateLimiting/Backend/MemoryCache.php b/lib/private/Security/RateLimiting/Backend/MemoryCache.php
new file mode 100644
index 00000000000..25595cda4a5
--- /dev/null
+++ b/lib/private/Security/RateLimiting/Backend/MemoryCache.php
@@ -0,0 +1,116 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Security\RateLimiting\Backend;
+
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\ICache;
+use OCP\ICacheFactory;
+
+/**
+ * Class MemoryCache uses the configured distributed memory cache for storing
+ * rate limiting data.
+ *
+ * @package OC\Security\RateLimiting\Backend
+ */
+class MemoryCache implements IBackend {
+ /** @var ICache */
+ private $cache;
+ /** @var ITimeFactory */
+ private $timeFactory;
+
+ /**
+ * @param ICacheFactory $cacheFactory
+ * @param ITimeFactory $timeFactory
+ */
+ public function __construct(ICacheFactory $cacheFactory,
+ ITimeFactory $timeFactory) {
+ $this->cache = $cacheFactory->create(__CLASS__);
+ $this->timeFactory = $timeFactory;
+ }
+
+ /**
+ * @param string $methodIdentifier
+ * @param string $userIdentifier
+ * @return string
+ */
+ private function hash($methodIdentifier,
+ $userIdentifier) {
+ return hash('sha512', $methodIdentifier . $userIdentifier);
+ }
+
+ /**
+ * @param string $identifier
+ * @return array
+ */
+ private function getExistingAttempts($identifier) {
+ $cachedAttempts = json_decode($this->cache->get($identifier), true);
+ if(is_array($cachedAttempts)) {
+ return $cachedAttempts;
+ }
+
+ return [];
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function getAttempts($methodIdentifier,
+ $userIdentifier,
+ $seconds) {
+ $identifier = $this->hash($methodIdentifier, $userIdentifier);
+ $existingAttempts = $this->getExistingAttempts($identifier);
+
+ $count = 0;
+ $currentTime = $this->timeFactory->getTime();
+ /** @var array $existingAttempts */
+ foreach ($existingAttempts as $attempt) {
+ if(($attempt + $seconds) > $currentTime) {
+ $count++;
+ }
+ }
+
+ return $count;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function registerAttempt($methodIdentifier,
+ $userIdentifier,
+ $period) {
+ $identifier = $this->hash($methodIdentifier, $userIdentifier);
+ $existingAttempts = $this->getExistingAttempts($identifier);
+ $currentTime = $this->timeFactory->getTime();
+
+ // Unset all attempts older than $period
+ foreach ($existingAttempts as $key => $attempt) {
+ if(($attempt + $period) < $currentTime) {
+ unset($existingAttempts[$key]);
+ }
+ }
+ $existingAttempts = array_values($existingAttempts);
+
+ // Store the new attempt
+ $existingAttempts[] = (string)$currentTime;
+ $this->cache->set($identifier, json_encode($existingAttempts));
+ }
+}
diff --git a/lib/private/Security/RateLimiting/Exception/RateLimitExceededException.php b/lib/private/Security/RateLimiting/Exception/RateLimitExceededException.php
new file mode 100644
index 00000000000..34cbec31c73
--- /dev/null
+++ b/lib/private/Security/RateLimiting/Exception/RateLimitExceededException.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Security\RateLimiting\Exception;
+
+use OC\AppFramework\Middleware\Security\Exceptions\SecurityException;
+use OCP\AppFramework\Http;
+
+class RateLimitExceededException extends SecurityException {
+ public function __construct() {
+ parent::__construct('Rate limit exceeded', Http::STATUS_TOO_MANY_REQUESTS);
+ }
+}
diff --git a/lib/private/Security/RateLimiting/Limiter.php b/lib/private/Security/RateLimiting/Limiter.php
new file mode 100644
index 00000000000..5c084eb934b
--- /dev/null
+++ b/lib/private/Security/RateLimiting/Limiter.php
@@ -0,0 +1,106 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Security\RateLimiting;
+
+use OC\Security\Normalizer\IpAddress;
+use OC\Security\RateLimiting\Backend\IBackend;
+use OC\Security\RateLimiting\Exception\RateLimitExceededException;
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\IRequest;
+use OCP\IUser;
+use OCP\IUserSession;
+
+class Limiter {
+ /** @var IBackend */
+ private $backend;
+ /** @var ITimeFactory */
+ private $timeFactory;
+
+ /**
+ * @param IUserSession $userSession
+ * @param IRequest $request
+ * @param ITimeFactory $timeFactory
+ * @param IBackend $backend
+ */
+ public function __construct(IUserSession $userSession,
+ IRequest $request,
+ ITimeFactory $timeFactory,
+ IBackend $backend) {
+ $this->backend = $backend;
+ $this->timeFactory = $timeFactory;
+ }
+
+ /**
+ * @param string $methodIdentifier
+ * @param string $userIdentifier
+ * @param int $period
+ * @param int $limit
+ * @throws RateLimitExceededException
+ */
+ private function register($methodIdentifier,
+ $userIdentifier,
+ $period,
+ $limit) {
+ $existingAttempts = $this->backend->getAttempts($methodIdentifier, $userIdentifier, (int)$period);
+ if ($existingAttempts >= (int)$limit) {
+ throw new RateLimitExceededException();
+ }
+
+ $this->backend->registerAttempt($methodIdentifier, $userIdentifier, $this->timeFactory->getTime());
+ }
+
+ /**
+ * Registers attempt for an anonymous request
+ *
+ * @param string $identifier
+ * @param int $anonLimit
+ * @param int $anonPeriod
+ * @param string $ip
+ * @throws RateLimitExceededException
+ */
+ public function registerAnonRequest($identifier,
+ $anonLimit,
+ $anonPeriod,
+ $ip) {
+ $ipSubnet = (new IpAddress($ip))->getSubnet();
+
+ $anonHashIdentifier = hash('sha512', 'anon::' . $identifier . $ipSubnet);
+ $this->register($identifier, $anonHashIdentifier, $anonPeriod, $anonLimit);
+ }
+
+ /**
+ * Registers attempt for an authenticated request
+ *
+ * @param string $identifier
+ * @param int $userLimit
+ * @param int $userPeriod
+ * @param IUser $user
+ * @throws RateLimitExceededException
+ */
+ public function registerUserRequest($identifier,
+ $userLimit,
+ $userPeriod,
+ IUser $user) {
+ $userHashIdentifier = hash('sha512', 'user::' . $identifier . $user->getUID());
+ $this->register($identifier, $userHashIdentifier, $userPeriod, $userLimit);
+ }
+}
diff --git a/lib/private/Server.php b/lib/private/Server.php
index 7b1ea50d5f3..62c17ced90b 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -349,9 +349,9 @@ class Server extends ServerContainer implements IServerContainer {
$userSession->listen('\OC\User', 'logout', function () {
\OC_Hook::emit('OC_User', 'logout', array());
});
- $userSession->listen('\OC\User', 'changeUser', function ($user, $feature, $value) {
+ $userSession->listen('\OC\User', 'changeUser', function ($user, $feature, $value, $oldValue) {
/** @var $user \OC\User\User */
- \OC_Hook::emit('OC_User', 'changeUser', array('run' => true, 'user' => $user, 'feature' => $feature, 'value' => $value));
+ \OC_Hook::emit('OC_User', 'changeUser', array('run' => true, 'user' => $user, 'feature' => $feature, 'value' => $value, 'old_value' => $oldValue));
});
return $userSession;
});
@@ -522,6 +522,21 @@ class Server extends ServerContainer implements IServerContainer {
});
$this->registerAlias('Search', \OCP\ISearch::class);
+ $this->registerService(\OC\Security\RateLimiting\Limiter::class, function($c) {
+ return new \OC\Security\RateLimiting\Limiter(
+ $this->getUserSession(),
+ $this->getRequest(),
+ new \OC\AppFramework\Utility\TimeFactory(),
+ $c->query(\OC\Security\RateLimiting\Backend\IBackend::class)
+ );
+ });
+ $this->registerService(\OC\Security\RateLimiting\Backend\IBackend::class, function($c) {
+ return new \OC\Security\RateLimiting\Backend\MemoryCache(
+ $this->getMemCacheFactory(),
+ new \OC\AppFramework\Utility\TimeFactory()
+ );
+ });
+
$this->registerService(\OCP\Security\ISecureRandom::class, function ($c) {
return new SecureRandom();
});
diff --git a/lib/private/ServerContainer.php b/lib/private/ServerContainer.php
index e7b1ed2dad7..3391dd83a04 100644
--- a/lib/private/ServerContainer.php
+++ b/lib/private/ServerContainer.php
@@ -102,6 +102,15 @@ class ServerContainer extends SimpleContainer {
// Didn't find the service or the respective app container,
// ignore it and fall back to the core container.
}
+ } else if (strpos($name, 'OC\\Settings\\') === 0 && substr_count($name, '\\') >= 3) {
+ $segments = explode('\\', $name);
+ try {
+ $appContainer = $this->getAppContainer(strtolower($segments[1]));
+ return $appContainer->queryNoFallback($name);
+ } catch (QueryException $e) {
+ // Didn't find the service or the respective app container,
+ // ignore it and fall back to the core container.
+ }
}
return parent::query($name);
diff --git a/lib/private/User/Session.php b/lib/private/User/Session.php
index 73a8196cecd..efa11348efe 100644
--- a/lib/private/User/Session.php
+++ b/lib/private/User/Session.php
@@ -41,6 +41,7 @@ use OC\Authentication\Exceptions\PasswordLoginForbiddenException;
use OC\Authentication\Token\IProvider;
use OC\Authentication\Token\IToken;
use OC\Hooks\Emitter;
+use OC\Hooks\PublicEmitter;
use OC_User;
use OC_Util;
use OCA\DAV\Connector\Sabre\Auth;
@@ -78,7 +79,7 @@ use Symfony\Component\EventDispatcher\GenericEvent;
*/
class Session implements IUserSession, Emitter {
- /** @var IUserManager $manager */
+ /** @var IUserManager|PublicEmitter $manager */
private $manager;
/** @var ISession $session */
@@ -156,7 +157,7 @@ class Session implements IUserSession, Emitter {
/**
* get the manager object
*
- * @return Manager
+ * @return Manager|PublicEmitter
*/
public function getManager() {
return $this->manager;
@@ -325,6 +326,46 @@ class Session implements IUserSession, Emitter {
}
/**
+ * @param IUser $user
+ * @param array $loginDetails
+ * @param bool $regenerateSessionId
+ * @return true returns true if login successful or an exception otherwise
+ * @throws LoginException
+ */
+ public function completeLogin(IUser $user, array $loginDetails, $regenerateSessionId = true) {
+ if (!$user->isEnabled()) {
+ // disabled users can not log in
+ // injecting l10n does not work - there is a circular dependency between session and \OCP\L10N\IFactory
+ $message = \OC::$server->getL10N('lib')->t('User disabled');
+ throw new LoginException($message);
+ }
+
+ if($regenerateSessionId) {
+ $this->session->regenerateId();
+ }
+
+ $this->setUser($user);
+ $this->setLoginName($loginDetails['loginName']);
+
+ if(isset($loginDetails['token']) && $loginDetails['token'] instanceof IToken) {
+ $this->setToken($loginDetails['token']->getId());
+ $this->lockdownManager->setToken($loginDetails['token']);
+ $firstTimeLogin = false;
+ } else {
+ $this->setToken(null);
+ $firstTimeLogin = $user->updateLastLoginTimestamp();
+ }
+ $this->manager->emit('\OC\User', 'postLogin', [$user, $loginDetails['password']]);
+ if($this->isLoggedIn()) {
+ $this->prepareUserLogin($firstTimeLogin);
+ return true;
+ } else {
+ $message = \OC::$server->getL10N('lib')->t('Login canceled by app');
+ throw new LoginException($message);
+ }
+ }
+
+ /**
* Tries to log in a client
*
* Checks token auth enforced
@@ -498,25 +539,7 @@ class Session implements IUserSession, Emitter {
return false;
}
- if ($user->isEnabled()) {
- $this->setUser($user);
- $this->setLoginName($uid);
- $this->setToken(null);
- $firstTimeLogin = $user->updateLastLoginTimestamp();
- $this->manager->emit('\OC\User', 'postLogin', [$user, $password]);
- if ($this->isLoggedIn()) {
- $this->prepareUserLogin($firstTimeLogin);
- return true;
- } else {
- // injecting l10n does not work - there is a circular dependency between session and \OCP\L10N\IFactory
- $message = \OC::$server->getL10N('lib')->t('Login canceled by app');
- throw new LoginException($message);
- }
- } else {
- // injecting l10n does not work - there is a circular dependency between session and \OCP\L10N\IFactory
- $message = \OC::$server->getL10N('lib')->t('User disabled');
- throw new LoginException($message);
- }
+ return $this->completeLogin($user, ['loginName' => $uid, 'password' => $password], false);
}
/**
@@ -542,34 +565,22 @@ class Session implements IUserSession, Emitter {
// Ignore and use empty string instead
}
+ $this->manager->emit('\OC\User', 'preLogin', array($uid, $password));
+
$user = $this->manager->get($uid);
if (is_null($user)) {
// user does not exist
return false;
}
- if (!$user->isEnabled()) {
- // disabled users can not log in
- // injecting l10n does not work - there is a circular dependency between session and \OCP\L10N\IFactory
- $message = \OC::$server->getL10N('lib')->t('User disabled');
- throw new LoginException($message);
- }
- //login
- $this->setUser($user);
- $this->setLoginName($dbToken->getLoginName());
- $this->setToken($dbToken->getId());
- $this->lockdownManager->setToken($dbToken);
- $this->manager->emit('\OC\User', 'postLogin', array($user, $password));
-
- if ($this->isLoggedIn()) {
- $this->prepareUserLogin(false); // token login cant be the first
- } else {
- // injecting l10n does not work - there is a circular dependency between session and \OCP\L10N\IFactory
- $message = \OC::$server->getL10N('lib')->t('Login canceled by app');
- throw new LoginException($message);
- }
-
- return true;
+ return $this->completeLogin(
+ $user,
+ [
+ 'loginName' => $dbToken->getLoginName(),
+ 'password' => $password,
+ 'token' => $dbToken
+ ],
+ false);
}
/**
diff --git a/lib/private/User/User.php b/lib/private/User/User.php
index bca9c46bfd0..a3be0c24bb9 100644
--- a/lib/private/User/User.php
+++ b/lib/private/User/User.php
@@ -158,12 +158,13 @@ class User implements IUser {
* @since 9.0.0
*/
public function setEMailAddress($mailAddress) {
+ $oldMailAddress = $this->getEMailAddress();
if($mailAddress === '') {
$this->config->deleteUserValue($this->uid, 'settings', 'email');
} else {
$this->config->setUserValue($this->uid, 'settings', 'email', $mailAddress);
}
- $this->triggerChange('eMailAddress', $mailAddress);
+ $this->triggerChange('eMailAddress', $mailAddress, $oldMailAddress);
}
/**
@@ -435,9 +436,9 @@ class User implements IUser {
return $url;
}
- public function triggerChange($feature, $value = null) {
+ public function triggerChange($feature, $value = null, $oldValue = null) {
if ($this->emitter) {
- $this->emitter->emit('\OC\User', 'changeUser', array($this, $feature, $value));
+ $this->emitter->emit('\OC\User', 'changeUser', array($this, $feature, $value, $oldValue));
}
}
}
diff --git a/lib/public/AppFramework/Http/Response.php b/lib/public/AppFramework/Http/Response.php
index 051e68f3144..087522386be 100644
--- a/lib/public/AppFramework/Http/Response.php
+++ b/lib/public/AppFramework/Http/Response.php
@@ -81,6 +81,8 @@ class Response {
/** @var ContentSecurityPolicy|null Used Content-Security-Policy */
private $contentSecurityPolicy = null;
+ /** @var bool */
+ private $throttled = false;
/**
* Caches the response
@@ -322,5 +324,22 @@ class Response {
return $this;
}
+ /**
+ * Marks the response as to throttle. Will be throttled when the
+ * @BruteForceProtection annotation is added.
+ *
+ * @since 12.0.0
+ */
+ public function throttle() {
+ $this->throttled = true;
+ }
+ /**
+ * Whether the current response is throttled.
+ *
+ * @since 12.0.0
+ */
+ public function isThrottled() {
+ return $this->throttled;
+ }
}
diff --git a/lib/public/Mail/IEMailTemplate.php b/lib/public/Mail/IEMailTemplate.php
index 4e308509c42..41daacdb49f 100644
--- a/lib/public/Mail/IEMailTemplate.php
+++ b/lib/public/Mail/IEMailTemplate.php
@@ -99,10 +99,12 @@ interface IEMailTemplate {
*
* @param string $text Text of button
* @param string $url URL of button
+ * @param string $plainText Text of button in plain text version
+ * if empty the $text is used, if false none will be used
*
* @since 12.0.0
*/
- public function addBodyButton($text, $url);
+ public function addBodyButton($text, $url, $plainText = '');
/**
* Adds a logo and a text to the footer. <br> in the text will be replaced by new lines in the plain text email
diff --git a/resources/config/ca-bundle.crt b/resources/config/ca-bundle.crt
index cce0e5835ee..8849e024f39 100644
--- a/resources/config/ca-bundle.crt
+++ b/resources/config/ca-bundle.crt
@@ -1,7 +1,7 @@
##
## Bundle of CA Root Certificates
##
-## Certificate data from Mozilla as of: Wed Nov 2 04:12:05 2016 GMT
+## Certificate data from Mozilla as of: Wed Jan 18 04:12:05 2017 GMT
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
@@ -14,7 +14,7 @@
## Just configure this file as the SSLCACertificateFile.
##
## Conversion done with mk-ca-bundle.pl version 1.27.
-## SHA256: 17e2a90c8a5cfd6a675b3475d3d467e1ab1fe0d5397e907b08206182389caa08
+## SHA256: dffa79e6aa993f558e82884abf7bb54bf440ab66ee91d82a27a627f6f2a4ace4
##
@@ -252,27 +252,6 @@ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
-----END CERTIFICATE-----
-RSA Security 2048 v3
-====================
------BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
-ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
-MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
-BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
-Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
-WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
-KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
-+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
-MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
-FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
-v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
-0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
-VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
-nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
-pKnXwiJPZ9d37CAFYd4=
------END CERTIFICATE-----
-
GeoTrust Global CA
==================
-----BEGIN CERTIFICATE-----
@@ -1285,30 +1264,6 @@ FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
-----END CERTIFICATE-----
-IGC/A
-=====
------BEGIN CERTIFICATE-----
-MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
-VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
-Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
-MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
-EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
-STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
-TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
-So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
-HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
-frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
-tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
-egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
-iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
-q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
-MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
-Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
-lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
-0mBWWg==
------END CERTIFICATE-----
-
Security Communication EV RootCA1
=================================
-----BEGIN CERTIFICATE-----
@@ -1518,58 +1473,6 @@ LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
-----END CERTIFICATE-----
-Buypass Class 2 CA 1
-====================
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
-MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
-c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
-cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
-0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
-0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
-uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
-AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
-1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
-7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
-fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
-wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
------END CERTIFICATE-----
-
-EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
-==========================================================================
------BEGIN CERTIFICATE-----
-MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
-QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe
-Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
-ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt
-IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG
-SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by
-X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
-gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
-eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
-TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy
-Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
-uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI
-qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
-ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0
-Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
-/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
-Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
-FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
-zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
-XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT
-bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
-RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
-1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt
-2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ
-Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9
-AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
------END CERTIFICATE-----
-
certSIGN ROOT CA
================
-----BEGIN CERTIFICATE-----
@@ -1819,34 +1722,6 @@ IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
66+KAQ==
-----END CERTIFICATE-----
-Juur-SK
-=======
------BEGIN CERTIFICATE-----
-MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
-c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
-DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
-SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
-aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
-TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
-+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
-UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
-Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
-MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
-HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
-AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
-cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
-AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
-cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
-FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
-A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
-ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
-abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
-IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
-Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
-yyqcjg==
------END CERTIFICATE-----
-
Hongkong Post Root CA 1
=======================
-----BEGIN CERTIFICATE-----
@@ -2310,41 +2185,6 @@ wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
vgt2Fl43N+bYdJeimUV5
-----END CERTIFICATE-----
-Root CA Generalitat Valenciana
-==============================
------BEGIN CERTIFICATE-----
-MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
-ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
-IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
-WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
-CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
-F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
-ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
-D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
-JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
-AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
-dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
-ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
-AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
-YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
-AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
-aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
-AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
-YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
-AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
-OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
-dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
-BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
-A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
-b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
-TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
-Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
-NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
-iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
-+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
------END CERTIFICATE-----
-
TWCA Root Certification Authority
=================================
-----BEGIN CERTIFICATE-----
@@ -4064,3 +3904,140 @@ YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n
JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ
m+kXQ99b21/+jh5Xos1AnX5iItreGCc=
-----END CERTIFICATE-----
+
+AC RAIZ FNMT-RCM
+================
+-----BEGIN CERTIFICATE-----
+MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT
+AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw
+MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD
+TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
+ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf
+qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr
+btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL
+j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou
+08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw
+WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT
+tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ
+47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC
+ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa
+i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
+FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o
+dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD
+nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s
+D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ
+j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT
+Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW
++YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7
+Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d
+8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm
+5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG
+rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM=
+-----END CERTIFICATE-----
+
+Amazon Root CA 1
+================
+-----BEGIN CERTIFICATE-----
+MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD
+VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1
+MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
+bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH
+FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ
+gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t
+dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce
+VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB
+/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3
+DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM
+CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy
+8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa
+2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2
+xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5
+-----END CERTIFICATE-----
+
+Amazon Root CA 2
+================
+-----BEGIN CERTIFICATE-----
+MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD
+VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1
+MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
+bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
+ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4
+kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp
+N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9
+AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd
+fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx
+kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS
+btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0
+Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN
+c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+
+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw
+DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA
+A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY
++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE
+YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW
+xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ
+gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW
+aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV
+Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3
+KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi
+JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw=
+-----END CERTIFICATE-----
+
+Amazon Root CA 3
+================
+-----BEGIN CERTIFICATE-----
+MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG
+EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy
+NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
+MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB
+f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr
+Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43
+rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc
+eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw==
+-----END CERTIFICATE-----
+
+Amazon Root CA 4
+================
+-----BEGIN CERTIFICATE-----
+MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG
+EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy
+NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
+MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN
+/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri
+83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
+HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA
+MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1
+AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA==
+-----END CERTIFICATE-----
+
+LuxTrust Global Root 2
+======================
+-----BEGIN CERTIFICATE-----
+MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQELBQAwRjELMAkG
+A1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNVBAMMFkx1eFRydXN0IEdsb2Jh
+bCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUwMzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEW
+MBQGA1UECgwNTHV4VHJ1c3QgUy5BLjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCC
+AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wm
+Kb3FibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTemhfY7RBi2
+xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1EMShduxq3sVs35a0VkBC
+wGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsnXpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm
+1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkm
+FRseTJIpgp7VkoGSQXAZ96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niF
+wpN6cj5mj5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4gDEa/
+a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+8kPREd8vZS9kzl8U
+ubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2jX5t/Lax5Gw5CMZdjpPuKadUiDTSQ
+MC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmHhFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB
+/zBCBgNVHSAEOzA5MDcGByuBKwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5
+Lmx1eHRydXN0Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT
++Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQELBQADggIBAGoZ
+FO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9BzZAcg4atmpZ1gDlaCDdLnIN
+H2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTOjFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW
+7MM3LGVYvlcAGvI1+ut7MV3CwRI9loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIu
+ZY+kt9J/Z93I055cqqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWA
+VWe+2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/JEAdemrR
+TxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKrezrnK+T+Tb/mjuuqlPpmt
+/f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQfLSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc
+7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31I
+iyBMz2TWuJdGsE7RKlY6oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr
+-----END CERTIFICATE-----
diff --git a/settings/Activity/Provider.php b/settings/Activity/Provider.php
new file mode 100644
index 00000000000..f7ea425f628
--- /dev/null
+++ b/settings/Activity/Provider.php
@@ -0,0 +1,178 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Settings\Activity;
+
+use OCP\Activity\IEvent;
+use OCP\Activity\IProvider;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserManager;
+use OCP\L10N\IFactory;
+
+class Provider implements IProvider {
+
+ const PASSWORD_CHANGED_BY = 'password_changed_by';
+ const PASSWORD_CHANGED_SELF = 'password_changed_self';
+ const PASSWORD_RESET = 'password_changed';
+ const EMAIL_CHANGED_BY = 'email_changed_by';
+ const EMAIL_CHANGED_SELF = 'email_changed_self';
+ const EMAIL_CHANGED = 'email_changed';
+
+ /** @var IFactory */
+ protected $languageFactory;
+
+ /** @var IL10N */
+ protected $l;
+
+ /** @var IURLGenerator */
+ protected $url;
+
+ /** @var IUserManager */
+ protected $userManager;
+
+ /** @var string[] cached displayNames - key is the UID and value the displayname */
+ protected $displayNames = [];
+
+ /**
+ * @param IFactory $languageFactory
+ * @param IURLGenerator $url
+ * @param IUserManager $userManager
+ */
+ public function __construct(IFactory $languageFactory, IURLGenerator $url, IUserManager $userManager) {
+ $this->languageFactory = $languageFactory;
+ $this->url = $url;
+ $this->userManager = $userManager;
+ }
+
+ /**
+ * @param string $language
+ * @param IEvent $event
+ * @param IEvent|null $previousEvent
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
+ */
+ public function parse($language, IEvent $event, IEvent $previousEvent = null) {
+ if ($event->getApp() !== 'settings') {
+ throw new \InvalidArgumentException();
+ }
+
+ $this->l = $this->languageFactory->get('settings', $language);
+
+ $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('settings', 'personal.svg')));
+
+ if ($event->getSubject() === self::PASSWORD_CHANGED_BY) {
+ $subject = $this->l->t('{actor} changed your password');
+ } else if ($event->getSubject() === self::PASSWORD_CHANGED_SELF) {
+ $subject = $this->l->t('You changed your password');
+ } else if ($event->getSubject() === self::PASSWORD_RESET) {
+ $subject = $this->l->t('Your password was reset by an administrator');
+
+ } else if ($event->getSubject() === self::EMAIL_CHANGED_BY) {
+ $subject = $this->l->t('{actor} changed your email');
+ } else if ($event->getSubject() === self::EMAIL_CHANGED_SELF) {
+ $subject = $this->l->t('You changed your email');
+ } else if ($event->getSubject() === self::EMAIL_CHANGED) {
+ $subject = $this->l->t('Your email was changed by an administrator');
+
+ } else {
+ throw new \InvalidArgumentException();
+ }
+
+ $parsedParameters = $this->getParameters($event);
+ $this->setSubjects($event, $subject, $parsedParameters);
+
+ return $event;
+ }
+
+ /**
+ * @param IEvent $event
+ * @return array
+ * @throws \InvalidArgumentException
+ */
+ protected function getParameters(IEvent $event) {
+ $subject = $event->getSubject();
+ $parameters = $event->getSubjectParameters();
+
+ switch ($subject) {
+ case self::PASSWORD_CHANGED_SELF:
+ case self::PASSWORD_RESET:
+ case self::EMAIL_CHANGED_SELF:
+ case self::EMAIL_CHANGED:
+ return [];
+ case self::PASSWORD_CHANGED_BY:
+ case self::EMAIL_CHANGED_BY:
+ return [
+ 'actor' => $this->generateUserParameter($parameters[0]),
+ ];
+ }
+
+ throw new \InvalidArgumentException();
+ }
+
+ /**
+ * @param IEvent $event
+ * @param string $subject
+ * @param array $parameters
+ * @throws \InvalidArgumentException
+ */
+ protected function setSubjects(IEvent $event, $subject, array $parameters) {
+ $placeholders = $replacements = [];
+ foreach ($parameters as $placeholder => $parameter) {
+ $placeholders[] = '{' . $placeholder . '}';
+ $replacements[] = $parameter['name'];
+ }
+
+ $event->setParsedSubject(str_replace($placeholders, $replacements, $subject))
+ ->setRichSubject($subject, $parameters);
+ }
+
+ /**
+ * @param string $uid
+ * @return array
+ */
+ protected function generateUserParameter($uid) {
+ if (!isset($this->displayNames[$uid])) {
+ $this->displayNames[$uid] = $this->getDisplayName($uid);
+ }
+
+ return [
+ 'type' => 'user',
+ 'id' => $uid,
+ 'name' => $this->displayNames[$uid],
+ ];
+ }
+
+ /**
+ * @param string $uid
+ * @return string
+ */
+ protected function getDisplayName($uid) {
+ $user = $this->userManager->get($uid);
+ if ($user instanceof IUser) {
+ return $user->getDisplayName();
+ }
+
+ return $uid;
+ }
+}
diff --git a/settings/Activity/Setting.php b/settings/Activity/Setting.php
new file mode 100644
index 00000000000..ec72f270b9f
--- /dev/null
+++ b/settings/Activity/Setting.php
@@ -0,0 +1,96 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Settings\Activity;
+
+use OCP\Activity\ISetting;
+use OCP\IL10N;
+
+class Setting implements ISetting {
+
+ /** @var IL10N */
+ protected $l;
+
+ /**
+ * @param IL10N $l10n
+ */
+ public function __construct(IL10N $l10n) {
+ $this->l = $l10n;
+ }
+
+ /**
+ * @return string Lowercase a-z and underscore only identifier
+ * @since 11.0.0
+ */
+ public function getIdentifier() {
+ return 'personal_settings';
+ }
+
+ /**
+ * @return string A translated string
+ * @since 11.0.0
+ */
+ public function getName() {
+ return $this->l->t('Your <strong>password</strong> or <strong>email</strong> was modified');
+ }
+
+ /**
+ * @return int whether the filter should be rather on the top or bottom of
+ * the admin section. The filters are arranged in ascending order of the
+ * priority values. It is required to return a value between 0 and 100.
+ * @since 11.0.0
+ */
+ public function getPriority() {
+ return 0;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the stream
+ * @since 11.0.0
+ */
+ public function canChangeStream() {
+ return false;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the stream
+ * @since 11.0.0
+ */
+ public function isDefaultEnabledStream() {
+ return true;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the mail
+ * @since 11.0.0
+ */
+ public function canChangeMail() {
+ return false;
+ }
+
+ /**
+ * @return bool True when the option can be changed for the stream
+ * @since 11.0.0
+ */
+ public function isDefaultEnabledMail() {
+ return false;
+ }
+}
diff --git a/settings/Application.php b/settings/Application.php
index 8ec8d5eb8a5..52661c5bae2 100644
--- a/settings/Application.php
+++ b/settings/Application.php
@@ -35,6 +35,8 @@ use OC\App\AppStore\Fetcher\CategoryFetcher;
use OC\AppFramework\Utility\TimeFactory;
use OC\Authentication\Token\IProvider;
use OC\Server;
+use OC\Settings\Activity\Provider;
+use OC\Settings\Activity\Setting;
use OC\Settings\Mailer\NewUserMailHelper;
use OC\Settings\Middleware\SubadminMiddleware;
use OCP\AppFramework\App;
@@ -129,4 +131,43 @@ class Application extends App {
);
});
}
+
+ public function register() {
+ $activityManager = $this->getContainer()->getServer()->getActivityManager();
+ $activityManager->registerSetting(Setting::class); // FIXME move to info.xml
+ $activityManager->registerProvider(Provider::class); // FIXME move to info.xml
+
+ Util::connectHook('OC_User', 'post_setPassword', $this, 'onChangePassword');
+ Util::connectHook('OC_User', 'changeUser', $this, 'onChangeInfo');
+ }
+
+ /**
+ * @param array $parameters
+ * @throws \InvalidArgumentException
+ * @throws \BadMethodCallException
+ * @throws \Exception
+ * @throws \OCP\AppFramework\QueryException
+ */
+ public function onChangePassword(array $parameters) {
+ /** @var Hooks $hooks */
+ $hooks = $this->getContainer()->query(Hooks::class);
+ $hooks->onChangePassword($parameters['uid']);
+ }
+
+ /**
+ * @param array $parameters
+ * @throws \InvalidArgumentException
+ * @throws \BadMethodCallException
+ * @throws \Exception
+ * @throws \OCP\AppFramework\QueryException
+ */
+ public function onChangeInfo(array $parameters) {
+ if ($parameters['feature'] !== 'eMailAddress') {
+ return;
+ }
+
+ /** @var Hooks $hooks */
+ $hooks = $this->getContainer()->query(Hooks::class);
+ $hooks->onChangeEmail($parameters['user'], $parameters['old_value']);
+ }
}
diff --git a/settings/Hooks.php b/settings/Hooks.php
new file mode 100644
index 00000000000..721aeb23886
--- /dev/null
+++ b/settings/Hooks.php
@@ -0,0 +1,165 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Settings;
+
+use OC\Settings\Activity\Provider;
+use OCP\Activity\IManager as IActivityManager;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserManager;
+use OCP\IUserSession;
+use OCP\Mail\IMailer;
+
+class Hooks {
+
+ /** @var IActivityManager */
+ protected $activityManager;
+ /** @var IUserManager */
+ protected $userManager;
+ /** @var IUserSession */
+ protected $userSession;
+ /** @var IURLGenerator */
+ protected $urlGenerator;
+ /** @var IMailer */
+ protected $mailer;
+ /** @var IL10N */
+ protected $l;
+
+ public function __construct(IActivityManager $activityManager, IUserManager $userManager, IUserSession $userSession, IURLGenerator $urlGenerator, IMailer $mailer, IL10N $l) {
+ $this->activityManager = $activityManager;
+ $this->userManager = $userManager;
+ $this->userSession = $userSession;
+ $this->urlGenerator = $urlGenerator;
+ $this->mailer = $mailer;
+ $this->l = $l;
+ }
+
+ /**
+ * @param string $uid
+ * @throws \InvalidArgumentException
+ * @throws \BadMethodCallException
+ * @throws \Exception
+ */
+ public function onChangePassword($uid) {
+ $user = $this->userManager->get($uid);
+
+ if (!$user instanceof IUser || $user->getEMailAddress() === null) {
+ return;
+ }
+
+ $event = $this->activityManager->generateEvent();
+ $event->setApp('settings')
+ ->setType('personal_settings')
+ ->setAffectedUser($user->getUID());
+
+ $instanceUrl = $this->urlGenerator->getAbsoluteURL('/');
+
+ $actor = $this->userSession->getUser();
+ if ($actor instanceof IUser) {
+ if ($actor->getUID() !== $user->getUID()) {
+ $text = $this->l->t('%1$s changed your password on %2$s.', [$actor->getDisplayName(), $instanceUrl]);
+ $event->setAuthor($actor->getUID())
+ ->setSubject(Provider::PASSWORD_CHANGED_BY, [$actor->getUID()]);
+ } else {
+ $text = $this->l->t('Your password on %s was changed.', [$instanceUrl]);
+ $event->setAuthor($actor->getUID())
+ ->setSubject(Provider::PASSWORD_CHANGED_SELF);
+ }
+ } else {
+ $text = $this->l->t('Your password on %s was reset by an administrator.', [$instanceUrl]);
+ $event->setSubject(Provider::PASSWORD_RESET);
+ }
+
+ $this->activityManager->publish($event);
+
+ if ($user->getEMailAddress() !== null) {
+ $template = $this->mailer->createEMailTemplate();
+ $template->addHeader();
+ $template->addHeading($this->l->t('Password changed for %s', $user->getDisplayName()), false);
+ $template->addBodyText($text . ' ' . $this->l->t('If you did not request this, please contact an administrator.'));
+ $template->addFooter();
+
+
+ $message = $this->mailer->createMessage();
+ $message->setTo([$user->getEMailAddress() => $user->getDisplayName()]);
+ $message->setSubject($this->l->t('Password for %1$s changed on %2$s', [$user->getDisplayName(), $instanceUrl]));
+ $message->setBody($template->renderText(), 'text/plain');
+ $message->setHtmlBody($template->renderHTML());
+
+ $this->mailer->send($message);
+ }
+ }
+
+ /**
+ * @param IUser $user
+ * @param string|null $oldMailAddress
+ * @throws \InvalidArgumentException
+ * @throws \BadMethodCallException
+ */
+ public function onChangeEmail(IUser $user, $oldMailAddress) {
+ $event = $this->activityManager->generateEvent();
+ $event->setApp('settings')
+ ->setType('personal_settings')
+ ->setAffectedUser($user->getUID());
+
+ $instanceUrl = $this->urlGenerator->getAbsoluteURL('/');
+
+ $actor = $this->userSession->getUser();
+ if ($actor instanceof IUser) {
+ if ($actor->getUID() !== $user->getUID()) {
+ $text = $this->l->t('%1$s changed your email address on %2$s.', [$actor->getDisplayName(), $instanceUrl]);
+ $event->setAuthor($actor->getUID())
+ ->setSubject(Provider::EMAIL_CHANGED_BY, [$actor->getUID()]);
+ } else {
+ $text = $this->l->t('Your email address on %s was changed.', [$instanceUrl]);
+ $event->setAuthor($actor->getUID())
+ ->setSubject(Provider::EMAIL_CHANGED_SELF);
+ }
+ } else {
+ $text = $this->l->t('Your email address on %s was changed by an administrator.', [$instanceUrl]);
+ $event->setSubject(Provider::EMAIL_CHANGED);
+ }
+ $this->activityManager->publish($event);
+
+
+ if ($oldMailAddress !== null) {
+ $template = $this->mailer->createEMailTemplate();
+ $template->addHeader();
+ $template->addHeading($this->l->t('Email address changed for %s', $user->getDisplayName()), false);
+ $template->addBodyText($text . ' ' . $this->l->t('If you did not request this, please contact an administrator.'));
+ if ($user->getEMailAddress()) {
+ $template->addBodyText($this->l->t('The new email address is %s', $user->getEMailAddress()));
+ }
+ $template->addFooter();
+
+
+ $message = $this->mailer->createMessage();
+ $message->setTo([$oldMailAddress => $user->getDisplayName()]);
+ $message->setSubject($this->l->t('Email address for %1$s changed on %2$s', [$user->getDisplayName(), $instanceUrl]));
+ $message->setBody($template->renderText(), 'text/plain');
+ $message->setHtmlBody($template->renderHTML());
+
+ $this->mailer->send($message);
+ }
+ }
+}
diff --git a/settings/l10n/nb.js b/settings/l10n/nb.js
index afa3b7cff6a..4c197851708 100644
--- a/settings/l10n/nb.js
+++ b/settings/l10n/nb.js
@@ -8,15 +8,16 @@ OC.L10N.register(
"No user supplied" : "Ingen bruker angitt",
"Unable to change password" : "Kunne ikke endre passord",
"Authentication error" : "Autentiseringsfeil",
+ "Please provide an admin recovery password; otherwise, all user data will be lost." : "Angi et administrativt gjenopprettingspassord; ellers vil alle brukerdata gå tapt.",
"Wrong admin recovery password. Please check the password and try again." : "Feil administrativt gjenopprettingspassord. Sjekk passordet og prøv igjen.",
- "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Serveren støtter ikke endring av passord, men oppdatering av brukerens krypteringsnøkkel var vellykket.",
- "installing and updating apps via the app store or Federated Cloud Sharing" : "installering og oppdatering av apper via app-butikken eller ved deling i Sammenknyttet sky",
+ "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Tjeneren støtter ikke endring av passord, men brukerens krypteringsnøkkel ble oppdatert.",
+ "installing and updating apps via the app store or Federated Cloud Sharing" : "installering og oppdatering av apper via app-butikken eller ved deling i sammenknyttet sky",
"Federated Cloud Sharing" : "Sammenknyttet sky-deling",
- "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL bruker en utdatert %s-versjon (%s). Vennligst oppdater operativsystemet ditt; ellers vil ikke funksjoner som %s virke korrekt.",
+ "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL bruker en utdatert %s-versjon (%s). Oppdater operativsystemet ditt; ellers vil ikke funksjoner som %s virke korrekt.",
"A problem occurred, please check your log files (Error: %s)" : "Det oppstod et problem. Sjekk loggfilene (Feil: %s)",
"Migration Completed" : "Migrering ferdig",
"Group already exists." : "Gruppe finnes allerede.",
- "Unable to add group." : "Kan ikke legge til gruppe.",
+ "Unable to add group." : "Kunne ikke legge til gruppe.",
"Unable to delete group." : "Kan ikke slette gruppe.",
"test email settings" : "Test av innstillinger for e-post",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Et problem oppstod med sending av e-post. Sjekk innstillingene. (Feil: %s)",
@@ -35,46 +36,52 @@ OC.L10N.register(
"Your full name has been changed." : "Ditt fulle navn er blitt endret.",
"Forbidden" : "Forbudt",
"Invalid user" : "Ugyldig bruker",
- "Unable to change mail address" : "Kan ikke endre epost-adresse",
- "Email saved" : "Epost lagret",
+ "Unable to change mail address" : "Kan ikke endre e-postadresse",
+ "Email saved" : "E-post lagret",
+ "Welcome aboard" : "Velkommen ombord",
+ "Welcome aboard %s" : "Velkommen ombord i %s",
+ "Your username is: %s" : "Ditt brukernavn er: %s",
+ "Set your password" : "Sett passordet ditt",
+ "Go to %s" : "Gå til %s",
+ "Install Client" : "Installer klient",
"Your %s account was created" : "%s-kontoen din ble opprettet",
"Password confirmation is required" : "Passord bekreftelse er nødvendig",
"Couldn't remove app." : "Klarte ikke å fjerne app.",
- "Couldn't update app." : "Kunne ikke oppdatere app.",
+ "Couldn't update app." : "Kunne ikke oppdatere programmet.",
"Are you really sure you want add {domain} as trusted domain?" : "Er du virkelig sikker på du vil legge til {domain} som klarert domene?",
"Add trusted domain" : "Legg til et klarert domene",
- "Migration in progress. Please wait until the migration is finished" : "Migrering utføres. Vent til migreringen er ferdig.",
- "Migration started …" : "Migrering startet ..",
+ "Migration in progress. Please wait until the migration is finished" : "Migrering utføres. Vent til den er ferdig.",
+ "Migration started …" : "Migrering startet…",
"Not saved" : "Ikke lagret",
- "Sending..." : "Sender...",
+ "Sending..." : "Sender…",
"Official" : "Offisiell",
"All" : "Alle",
"Update to %s" : "Oppdater til %s",
- "_You have %n app update pending_::_You have %n app updates pending_" : ["Du har %n app-oppdatering som venter","Du har %n app-oppdateringer som venter"],
+ "_You have %n app update pending_::_You have %n app updates pending_" : ["Du har %n app-oppdatering som venter","Du har %n programoppgraderinger som venter"],
"No apps found for your version" : "Ingen apper funnet for din versjon",
"The app will be downloaded from the app store" : "Denne appen blir lastet ned fra app butikken",
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Offisielle apper er utviklet av og innenfor miljøet, de byr på sentral funksjonalitet og er klare for bruk i produksjon.",
- "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Godkjente apper er utviklet av tiltrodde utviklere og har gjennomgått en rask sikkerhetssjekk. De vedlikeholdes aktivt i et åpent kode-depot og utviklerne anser dem for å være stabile for tidvis eller normal bruk.",
+ "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Godkjente programm er utviklet av tiltrodde utviklere og har gjennomgått en rask sikkerhetssjekk. De vedlikeholdes aktivt i et åpent kode-depot og utviklerne anser dem for å være stabile for tidvis eller normal bruk.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Denne appen er ikke sjekket for sikkerhetsproblemer og er ny eller ansett for å være ustabil. Installer på egen risiko.",
- "Error while disabling app" : "Deaktivering av app feilet",
+ "Error while disabling app" : "Deaktivering av program mislyktes",
"Disable" : "Deaktiver ",
"Enable" : "Aktiver",
"Enabling app …" : "Aktiverer app ...",
- "Error while enabling app" : "Aktivering av app feilet",
+ "Error while enabling app" : "Aktivering av program feilet",
"Error: this app cannot be enabled because it makes the server unstable" : "Feil: Denne appen kan ikke aktiveres fordi den gjør tjeneren ustabil",
"Error: could not disable broken app" : "Feil: Kunne ikke deaktivere ustabil app",
"Error while disabling broken app" : "Feil ved deaktivering av ustabil app",
- "Updating...." : "Oppdaterer...",
+ "Updating...." : "Oppdaterer…",
"Error while updating app" : "Feil ved oppdatering av app",
"Updated" : "Oppdatert",
- "Uninstalling ...." : "Avinstallerer ....",
+ "Uninstalling ...." : "Avinstallerer…",
"Error while uninstalling app" : "Feil ved avinstallering av app",
"Uninstall" : "Avinstaller",
- "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Appen er aktivert men må oppdateres. Du vil bli omdirigert til oppdateringssiden om 5 sekunder.",
- "App update" : "Oppdatering av applikasjon",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Programmet er aktivert men må oppdateres. Du vil bli omdirigert til oppdateringssiden om 5 sekunder.",
+ "App update" : "Programoppdatering",
"Approved" : "Godkjent",
"Experimental" : "Eksperimentell",
- "No apps found for {query}" : "Ingen apper funnet for \"{query}\"",
+ "No apps found for {query}" : "Ingen programmet funnet for \"{query}\"",
"Allow filesystem access" : "Tillatt filsystem tilgang",
"Disconnect" : "Koble fra",
"Revoke" : "Avslå",
@@ -98,7 +105,7 @@ OC.L10N.register(
"Error while loading browser sessions and device tokens" : "Feil under lasting av nettleserøkt og enhetsnøkler",
"Error while creating device token" : "Feil under opprettelse av enhetsnøkkel",
"Error while deleting the token" : "Feil under sletting av nøkkel",
- "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Det oppstod en feil. Vennligst last opp et ASCII-kodet PEM-sertifikat.",
+ "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Det oppstod en feil. Last opp et ASCII-kodet PEM-sertifikat.",
"Valid until {date}" : "Gyldig til {date}",
"Delete" : "Slett",
"Local" : "Lokal",
@@ -112,7 +119,7 @@ OC.L10N.register(
"Select a profile picture" : "Velg et profilbilde",
"Very weak password" : "Veldig svakt passord",
"Weak password" : "Svakt passord",
- "So-so password" : "So-so-passord",
+ "So-so password" : "Bob-bob-passord",
"Good password" : "Bra passord",
"Strong password" : "Sterkt passord",
"Groups" : "Grupper",
@@ -135,22 +142,22 @@ OC.L10N.register(
"Error creating user: {message}" : "Feil ved oppretting av bruker: {message}",
"A valid password must be provided" : "Oppgi et gyldig passord",
"A valid email must be provided" : "En gyldig e-postadresse må oppgis",
- "__language_name__" : "Norwegian Bokmål",
+ "__language_name__" : "Norsk bokmål",
"Unlimited" : "Ubegrenset",
"Personal info" : "Personlig informasjon",
"Sessions" : "Økt",
"App passwords" : "App passord",
"Sync clients" : "Synkroniseringsklienter",
"None" : "Ingen",
- "Login" : "Logg inn",
+ "Login" : "Innlogging",
"Plain" : "Enkel",
- "NT LAN Manager" : "NT LAN Manager",
+ "NT LAN Manager" : "NT LAN-behandler",
"SSL/TLS" : "SSL/TLS",
"STARTTLS" : "STARTTLS",
"Email server" : "E-posttjener",
"Open documentation" : "Åpne dokumentasjonen",
"This is used for sending out notifications." : "Dette brukes for utsending av varsler.",
- "Send mode" : "Sendemåte",
+ "Send mode" : "Forsendelsesmåte",
"Encryption" : "Kryptering",
"From address" : "Fra adresse",
"mail" : "e-post",
@@ -173,44 +180,44 @@ OC.L10N.register(
"It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Det er alltid bra å ta regelmessig sikkerhetskopi av dataene dine. Pass på å ta kopi av krypteringsnøklene sammen med dataene når kryptering er i bruk.",
"This is the final warning: Do you really want to enable encryption?" : "Dette er siste advarsel: Vil du virkelig aktivere kryptering?",
"Enable encryption" : "Aktiver kryptering",
- "No encryption module loaded, please enable an encryption module in the app menu." : "Ingen krypteringsmodul er lastet. Aktiver en krypteringsmodul i app-menyen.",
- "Select default encryption module:" : "Velg standard krypteringsmodul:",
- "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye. Vennligst aktiver \"Standard krypteringsmodul\" og kjør 'occ encryption:migrate'",
+ "No encryption module loaded, please enable an encryption module in the app menu." : "Ingen krypteringsmodul er lastet. Aktiver en krypteringsmodul i programmenyen.",
+ "Select default encryption module:" : "Velg forvalgt krypteringsmodul:",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye. Vennligst aktiver \"Forvalgt krypteringsmodul\" og kjør 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye.",
"Start migration" : "Start migrering",
"Security & setup warnings" : "Advarsler om sikkerhet og oppsett",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP ser ikke ut til å være satt opp riktig for å lese systemets miljøvariabler. Testen med getenv(\"PATH\") returnerer bare et tomt svar.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Vennligst sjekk <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installasjonsdokumentasjonen ↗</a> etter php konfigurasjonsnotater og konfigurering av php på tjeneren din, særlig om du bruker php-fpm.",
- "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Den skrivebeskyttede konfigurasjonen er blitt aktivert. Dette forhindrer setting av visse konfigureringer via web-grensesnittet. Videre må config-filen gjøres skrivbar manuelt for hver oppdatering.",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Det skrivebeskyttede oppsettet er blitt aktivert. Dette forhindrer setting av visse oppsett via vev-grensesnittet. Videre må config-filen gjøres skrivbar manuelt for hver oppdatering.",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Det ser ut for at PHP er satt opp til å fjerne innebygde doc blocks. Dette gjør at flere av kjerneapplikasjonene blir utilgjengelige.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette forårsakes sannsynligvis av en bufrer/akselerator, som f.eks. Zend OPcache eller eAccelerator.",
"Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Din database kjører ikke med \"READ COMMITED\" transaksjonsisolering. Dette kan lage problemer når flere handlinger kjøres i paralell.",
"%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s lavere enn versjon %2$s er installert. Vi anbefaler å oppgradere til en nyere %1$s-versjon for å få bedre stabilitet og ytelse.",
- "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulen 'fileinfo' mangler. Vi anbefaler at du aktiverer denne modulen for å kunne detektere mime-typen korrekt.",
+ "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulen 'fileinfo' mangler. Vi anbefaler at du aktiverer denne modulen for å kunne detektere MIME-typen korrekt.",
"Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Transaksjonsbasert fil-låsing er deaktivert. Dette kan føre til konflikt. Aktiver \"filelocking.enabled\" i config.php for å unngå disse problemene. Se <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasjonen ↗</a> for mer informasjon.",
"System locale can not be set to a one which supports UTF-8." : "Kan ikke sette systemets nasjonale innstillinger til en som støtter UTF-8.",
"This means that there might be problems with certain characters in file names." : "Dette betyr at det kan forekomme problemer med visse tegn i filnavn.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi anbefaler sterkt å installere de påkrevde pakkene på systemet ditt for å støtte en av følgende nasjonale innstillinger: %s.",
- "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis installasjonen din ikke er installert i roten av domenet og bruker systemets cron, kan det bli problemer med URL-genereringen. For å unngå disse problemene, sett \"overwrite.cli.url\" i filen config.php til web-roten for installasjonen din (Foreslått: \"%s\")",
+ "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis installasjonen din ikke er installert i roten av domenet og bruker systemets Cron, kan det bli problemer med URL-genereringen. For å unngå disse problemene, sett \"overwrite.cli.url\" i filen config.php til vev-roten for installasjonen din (Foreslått: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Det var ikke mulig å kjøre cron-jobben vi CLI. Følgende tekniske feil oppstod:",
"Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"%s\">log</a>." : "Vennligst dobbeltsjekk <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installasjonsguiden ↗</a>, og se etter feil eller advarsler i <a href=\"%s\">loggen</a>.",
"All checks passed." : "Alle sjekker bestått.",
"Cron" : "Cron",
- "Last cron job execution: %s." : "Siste kjøring av cron-jobb: %s.",
- "Last cron job execution: %s. Something seems wrong." : "Siste kjøring av cron-jobb: %s. Noe ser ut til å være galt.",
- "Cron was not executed yet!" : "Cron er ikke utført ennå!",
+ "Last cron job execution: %s." : "Siste kjøring av Cron-jobb: %s.",
+ "Last cron job execution: %s. Something seems wrong." : "Siste kjøring av Cron-jobb: %s. Noe ser ut til å være galt.",
+ "Cron was not executed yet!" : "Cron har ikke blitt kjørt enda!",
"Execute one task with each page loaded" : "Utfør en oppgave med hver side som blir lastet",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php er registrert i en webcron-tjeneste for å kalle cron.php hvert 15. minutt over http.",
- "Use system's cron service to call the cron.php file every 15 minutes." : "Bruk systemets cron-tjeneste til å kalle cron.php hvert 15. minutt.",
+ "Use system's cron service to call the cron.php file every 15 minutes." : "Bruk systemets cron-tjeneste til å kalle cron.php hvert kvarter.",
"The cron.php needs to be executed by the system user \"%s\"." : "Filen cron.php må kjøres systemet som følgende bruker \"%s\".",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "For å kjøre denne trenger du «PHP posix extension». Se {linkstart}PHP dokumentasjonen{linkend} for flere detaljer.",
"Version" : "Versjon",
"Sharing" : "Deling",
- "Allow apps to use the Share API" : "Tillat apper å bruke API for Deling",
+ "Allow apps to use the Share API" : "Tillat programmer å bruke API for deling",
"Allow users to share via link" : "Tillat brukere å dele via lenke",
"Allow public uploads" : "Tillat offentlig opplasting",
"Enforce password protection" : "Krev passordbeskyttelse",
- "Set default expiration date" : "Sett standard utløpsdato",
+ "Set default expiration date" : "Sett forvalgt utløpsdato",
"Expire after " : "Utløper etter",
"days" : "dager",
"Enforce expiration date" : "Krev utløpsdato",
@@ -230,7 +237,7 @@ OC.L10N.register(
"Advanced monitoring" : "Avansert overvåking",
"Performance tuning" : "Forbedre ytelsen",
"Improving the config.php" : "Tilpasninger i config.php",
- "Theming" : "Temaer",
+ "Theming" : "Drakter",
"Hardening and security guidance" : "Herding og sikkerhetsveiledning",
"Developer documentation" : "Utviklerdokumentasjon",
"by %s" : "av %s",
@@ -262,7 +269,7 @@ OC.L10N.register(
"You are using <strong>%s</strong> of <strong>%s</strong>" : "Du bruker <strong>%s</strong> av <strong>%s</strong>",
"Profile picture" : "Profilbilde",
"Upload new" : "Last opp nytt",
- "Select from Files" : "Velg fra Filer",
+ "Select from Files" : "Velg fra filer",
"Remove image" : "Fjern bilde",
"png or jpg, max. 20 MB" : "png eller jpg, maks. 20 MB",
"Picture provided by original account" : "Bilde kommer fra opprinnelig konto",
@@ -312,10 +319,13 @@ OC.L10N.register(
"Subscribe to our twitter channel!" : "Abonner på vår twitter kanal!",
"Subscribe to our news feed!" : "Abonner på vår nyhetsstrøm!",
"Subscribe to our newsletter!" : "Abonner på vårt nyhetsbrev!",
+ "Settings" : "Innstillinger",
"Show storage location" : "Vis lagringssted",
"Show user backend" : "Vis bruker-bakende",
+ "Show last login" : "Vis siste innlogging",
"Show email address" : "Vis e-postadresse",
"Send email to new user" : "Send e-post til ny bruker",
+ "When the password of a new user is left empty, an activation email with a link to set the password is sent." : "Når passordet til en ny brukeren er utelatt, vil vedkommnende bli sendt en aktiveringslenke.",
"E-Mail" : "E-post",
"Create" : "Opprett",
"Admin Recovery Password" : "Administrativt gjenopprettingspassord",
diff --git a/settings/l10n/nb.json b/settings/l10n/nb.json
index a4dbe881b4e..f0575235acb 100644
--- a/settings/l10n/nb.json
+++ b/settings/l10n/nb.json
@@ -6,15 +6,16 @@
"No user supplied" : "Ingen bruker angitt",
"Unable to change password" : "Kunne ikke endre passord",
"Authentication error" : "Autentiseringsfeil",
+ "Please provide an admin recovery password; otherwise, all user data will be lost." : "Angi et administrativt gjenopprettingspassord; ellers vil alle brukerdata gå tapt.",
"Wrong admin recovery password. Please check the password and try again." : "Feil administrativt gjenopprettingspassord. Sjekk passordet og prøv igjen.",
- "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Serveren støtter ikke endring av passord, men oppdatering av brukerens krypteringsnøkkel var vellykket.",
- "installing and updating apps via the app store or Federated Cloud Sharing" : "installering og oppdatering av apper via app-butikken eller ved deling i Sammenknyttet sky",
+ "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Tjeneren støtter ikke endring av passord, men brukerens krypteringsnøkkel ble oppdatert.",
+ "installing and updating apps via the app store or Federated Cloud Sharing" : "installering og oppdatering av apper via app-butikken eller ved deling i sammenknyttet sky",
"Federated Cloud Sharing" : "Sammenknyttet sky-deling",
- "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL bruker en utdatert %s-versjon (%s). Vennligst oppdater operativsystemet ditt; ellers vil ikke funksjoner som %s virke korrekt.",
+ "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL bruker en utdatert %s-versjon (%s). Oppdater operativsystemet ditt; ellers vil ikke funksjoner som %s virke korrekt.",
"A problem occurred, please check your log files (Error: %s)" : "Det oppstod et problem. Sjekk loggfilene (Feil: %s)",
"Migration Completed" : "Migrering ferdig",
"Group already exists." : "Gruppe finnes allerede.",
- "Unable to add group." : "Kan ikke legge til gruppe.",
+ "Unable to add group." : "Kunne ikke legge til gruppe.",
"Unable to delete group." : "Kan ikke slette gruppe.",
"test email settings" : "Test av innstillinger for e-post",
"A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Et problem oppstod med sending av e-post. Sjekk innstillingene. (Feil: %s)",
@@ -33,46 +34,52 @@
"Your full name has been changed." : "Ditt fulle navn er blitt endret.",
"Forbidden" : "Forbudt",
"Invalid user" : "Ugyldig bruker",
- "Unable to change mail address" : "Kan ikke endre epost-adresse",
- "Email saved" : "Epost lagret",
+ "Unable to change mail address" : "Kan ikke endre e-postadresse",
+ "Email saved" : "E-post lagret",
+ "Welcome aboard" : "Velkommen ombord",
+ "Welcome aboard %s" : "Velkommen ombord i %s",
+ "Your username is: %s" : "Ditt brukernavn er: %s",
+ "Set your password" : "Sett passordet ditt",
+ "Go to %s" : "Gå til %s",
+ "Install Client" : "Installer klient",
"Your %s account was created" : "%s-kontoen din ble opprettet",
"Password confirmation is required" : "Passord bekreftelse er nødvendig",
"Couldn't remove app." : "Klarte ikke å fjerne app.",
- "Couldn't update app." : "Kunne ikke oppdatere app.",
+ "Couldn't update app." : "Kunne ikke oppdatere programmet.",
"Are you really sure you want add {domain} as trusted domain?" : "Er du virkelig sikker på du vil legge til {domain} som klarert domene?",
"Add trusted domain" : "Legg til et klarert domene",
- "Migration in progress. Please wait until the migration is finished" : "Migrering utføres. Vent til migreringen er ferdig.",
- "Migration started …" : "Migrering startet ..",
+ "Migration in progress. Please wait until the migration is finished" : "Migrering utføres. Vent til den er ferdig.",
+ "Migration started …" : "Migrering startet…",
"Not saved" : "Ikke lagret",
- "Sending..." : "Sender...",
+ "Sending..." : "Sender…",
"Official" : "Offisiell",
"All" : "Alle",
"Update to %s" : "Oppdater til %s",
- "_You have %n app update pending_::_You have %n app updates pending_" : ["Du har %n app-oppdatering som venter","Du har %n app-oppdateringer som venter"],
+ "_You have %n app update pending_::_You have %n app updates pending_" : ["Du har %n app-oppdatering som venter","Du har %n programoppgraderinger som venter"],
"No apps found for your version" : "Ingen apper funnet for din versjon",
"The app will be downloaded from the app store" : "Denne appen blir lastet ned fra app butikken",
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Offisielle apper er utviklet av og innenfor miljøet, de byr på sentral funksjonalitet og er klare for bruk i produksjon.",
- "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Godkjente apper er utviklet av tiltrodde utviklere og har gjennomgått en rask sikkerhetssjekk. De vedlikeholdes aktivt i et åpent kode-depot og utviklerne anser dem for å være stabile for tidvis eller normal bruk.",
+ "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Godkjente programm er utviklet av tiltrodde utviklere og har gjennomgått en rask sikkerhetssjekk. De vedlikeholdes aktivt i et åpent kode-depot og utviklerne anser dem for å være stabile for tidvis eller normal bruk.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Denne appen er ikke sjekket for sikkerhetsproblemer og er ny eller ansett for å være ustabil. Installer på egen risiko.",
- "Error while disabling app" : "Deaktivering av app feilet",
+ "Error while disabling app" : "Deaktivering av program mislyktes",
"Disable" : "Deaktiver ",
"Enable" : "Aktiver",
"Enabling app …" : "Aktiverer app ...",
- "Error while enabling app" : "Aktivering av app feilet",
+ "Error while enabling app" : "Aktivering av program feilet",
"Error: this app cannot be enabled because it makes the server unstable" : "Feil: Denne appen kan ikke aktiveres fordi den gjør tjeneren ustabil",
"Error: could not disable broken app" : "Feil: Kunne ikke deaktivere ustabil app",
"Error while disabling broken app" : "Feil ved deaktivering av ustabil app",
- "Updating...." : "Oppdaterer...",
+ "Updating...." : "Oppdaterer…",
"Error while updating app" : "Feil ved oppdatering av app",
"Updated" : "Oppdatert",
- "Uninstalling ...." : "Avinstallerer ....",
+ "Uninstalling ...." : "Avinstallerer…",
"Error while uninstalling app" : "Feil ved avinstallering av app",
"Uninstall" : "Avinstaller",
- "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Appen er aktivert men må oppdateres. Du vil bli omdirigert til oppdateringssiden om 5 sekunder.",
- "App update" : "Oppdatering av applikasjon",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Programmet er aktivert men må oppdateres. Du vil bli omdirigert til oppdateringssiden om 5 sekunder.",
+ "App update" : "Programoppdatering",
"Approved" : "Godkjent",
"Experimental" : "Eksperimentell",
- "No apps found for {query}" : "Ingen apper funnet for \"{query}\"",
+ "No apps found for {query}" : "Ingen programmet funnet for \"{query}\"",
"Allow filesystem access" : "Tillatt filsystem tilgang",
"Disconnect" : "Koble fra",
"Revoke" : "Avslå",
@@ -96,7 +103,7 @@
"Error while loading browser sessions and device tokens" : "Feil under lasting av nettleserøkt og enhetsnøkler",
"Error while creating device token" : "Feil under opprettelse av enhetsnøkkel",
"Error while deleting the token" : "Feil under sletting av nøkkel",
- "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Det oppstod en feil. Vennligst last opp et ASCII-kodet PEM-sertifikat.",
+ "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Det oppstod en feil. Last opp et ASCII-kodet PEM-sertifikat.",
"Valid until {date}" : "Gyldig til {date}",
"Delete" : "Slett",
"Local" : "Lokal",
@@ -110,7 +117,7 @@
"Select a profile picture" : "Velg et profilbilde",
"Very weak password" : "Veldig svakt passord",
"Weak password" : "Svakt passord",
- "So-so password" : "So-so-passord",
+ "So-so password" : "Bob-bob-passord",
"Good password" : "Bra passord",
"Strong password" : "Sterkt passord",
"Groups" : "Grupper",
@@ -133,22 +140,22 @@
"Error creating user: {message}" : "Feil ved oppretting av bruker: {message}",
"A valid password must be provided" : "Oppgi et gyldig passord",
"A valid email must be provided" : "En gyldig e-postadresse må oppgis",
- "__language_name__" : "Norwegian Bokmål",
+ "__language_name__" : "Norsk bokmål",
"Unlimited" : "Ubegrenset",
"Personal info" : "Personlig informasjon",
"Sessions" : "Økt",
"App passwords" : "App passord",
"Sync clients" : "Synkroniseringsklienter",
"None" : "Ingen",
- "Login" : "Logg inn",
+ "Login" : "Innlogging",
"Plain" : "Enkel",
- "NT LAN Manager" : "NT LAN Manager",
+ "NT LAN Manager" : "NT LAN-behandler",
"SSL/TLS" : "SSL/TLS",
"STARTTLS" : "STARTTLS",
"Email server" : "E-posttjener",
"Open documentation" : "Åpne dokumentasjonen",
"This is used for sending out notifications." : "Dette brukes for utsending av varsler.",
- "Send mode" : "Sendemåte",
+ "Send mode" : "Forsendelsesmåte",
"Encryption" : "Kryptering",
"From address" : "Fra adresse",
"mail" : "e-post",
@@ -171,44 +178,44 @@
"It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Det er alltid bra å ta regelmessig sikkerhetskopi av dataene dine. Pass på å ta kopi av krypteringsnøklene sammen med dataene når kryptering er i bruk.",
"This is the final warning: Do you really want to enable encryption?" : "Dette er siste advarsel: Vil du virkelig aktivere kryptering?",
"Enable encryption" : "Aktiver kryptering",
- "No encryption module loaded, please enable an encryption module in the app menu." : "Ingen krypteringsmodul er lastet. Aktiver en krypteringsmodul i app-menyen.",
- "Select default encryption module:" : "Velg standard krypteringsmodul:",
- "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye. Vennligst aktiver \"Standard krypteringsmodul\" og kjør 'occ encryption:migrate'",
+ "No encryption module loaded, please enable an encryption module in the app menu." : "Ingen krypteringsmodul er lastet. Aktiver en krypteringsmodul i programmenyen.",
+ "Select default encryption module:" : "Velg forvalgt krypteringsmodul:",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye. Vennligst aktiver \"Forvalgt krypteringsmodul\" og kjør 'occ encryption:migrate'",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye.",
"Start migration" : "Start migrering",
"Security & setup warnings" : "Advarsler om sikkerhet og oppsett",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP ser ikke ut til å være satt opp riktig for å lese systemets miljøvariabler. Testen med getenv(\"PATH\") returnerer bare et tomt svar.",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Vennligst sjekk <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installasjonsdokumentasjonen ↗</a> etter php konfigurasjonsnotater og konfigurering av php på tjeneren din, særlig om du bruker php-fpm.",
- "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Den skrivebeskyttede konfigurasjonen er blitt aktivert. Dette forhindrer setting av visse konfigureringer via web-grensesnittet. Videre må config-filen gjøres skrivbar manuelt for hver oppdatering.",
+ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Det skrivebeskyttede oppsettet er blitt aktivert. Dette forhindrer setting av visse oppsett via vev-grensesnittet. Videre må config-filen gjøres skrivbar manuelt for hver oppdatering.",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Det ser ut for at PHP er satt opp til å fjerne innebygde doc blocks. Dette gjør at flere av kjerneapplikasjonene blir utilgjengelige.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette forårsakes sannsynligvis av en bufrer/akselerator, som f.eks. Zend OPcache eller eAccelerator.",
"Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Din database kjører ikke med \"READ COMMITED\" transaksjonsisolering. Dette kan lage problemer når flere handlinger kjøres i paralell.",
"%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s lavere enn versjon %2$s er installert. Vi anbefaler å oppgradere til en nyere %1$s-versjon for å få bedre stabilitet og ytelse.",
- "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulen 'fileinfo' mangler. Vi anbefaler at du aktiverer denne modulen for å kunne detektere mime-typen korrekt.",
+ "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulen 'fileinfo' mangler. Vi anbefaler at du aktiverer denne modulen for å kunne detektere MIME-typen korrekt.",
"Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Transaksjonsbasert fil-låsing er deaktivert. Dette kan føre til konflikt. Aktiver \"filelocking.enabled\" i config.php for å unngå disse problemene. Se <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasjonen ↗</a> for mer informasjon.",
"System locale can not be set to a one which supports UTF-8." : "Kan ikke sette systemets nasjonale innstillinger til en som støtter UTF-8.",
"This means that there might be problems with certain characters in file names." : "Dette betyr at det kan forekomme problemer med visse tegn i filnavn.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi anbefaler sterkt å installere de påkrevde pakkene på systemet ditt for å støtte en av følgende nasjonale innstillinger: %s.",
- "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis installasjonen din ikke er installert i roten av domenet og bruker systemets cron, kan det bli problemer med URL-genereringen. For å unngå disse problemene, sett \"overwrite.cli.url\" i filen config.php til web-roten for installasjonen din (Foreslått: \"%s\")",
+ "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis installasjonen din ikke er installert i roten av domenet og bruker systemets Cron, kan det bli problemer med URL-genereringen. For å unngå disse problemene, sett \"overwrite.cli.url\" i filen config.php til vev-roten for installasjonen din (Foreslått: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Det var ikke mulig å kjøre cron-jobben vi CLI. Følgende tekniske feil oppstod:",
"Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"%s\">log</a>." : "Vennligst dobbeltsjekk <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installasjonsguiden ↗</a>, og se etter feil eller advarsler i <a href=\"%s\">loggen</a>.",
"All checks passed." : "Alle sjekker bestått.",
"Cron" : "Cron",
- "Last cron job execution: %s." : "Siste kjøring av cron-jobb: %s.",
- "Last cron job execution: %s. Something seems wrong." : "Siste kjøring av cron-jobb: %s. Noe ser ut til å være galt.",
- "Cron was not executed yet!" : "Cron er ikke utført ennå!",
+ "Last cron job execution: %s." : "Siste kjøring av Cron-jobb: %s.",
+ "Last cron job execution: %s. Something seems wrong." : "Siste kjøring av Cron-jobb: %s. Noe ser ut til å være galt.",
+ "Cron was not executed yet!" : "Cron har ikke blitt kjørt enda!",
"Execute one task with each page loaded" : "Utfør en oppgave med hver side som blir lastet",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php er registrert i en webcron-tjeneste for å kalle cron.php hvert 15. minutt over http.",
- "Use system's cron service to call the cron.php file every 15 minutes." : "Bruk systemets cron-tjeneste til å kalle cron.php hvert 15. minutt.",
+ "Use system's cron service to call the cron.php file every 15 minutes." : "Bruk systemets cron-tjeneste til å kalle cron.php hvert kvarter.",
"The cron.php needs to be executed by the system user \"%s\"." : "Filen cron.php må kjøres systemet som følgende bruker \"%s\".",
"To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "For å kjøre denne trenger du «PHP posix extension». Se {linkstart}PHP dokumentasjonen{linkend} for flere detaljer.",
"Version" : "Versjon",
"Sharing" : "Deling",
- "Allow apps to use the Share API" : "Tillat apper å bruke API for Deling",
+ "Allow apps to use the Share API" : "Tillat programmer å bruke API for deling",
"Allow users to share via link" : "Tillat brukere å dele via lenke",
"Allow public uploads" : "Tillat offentlig opplasting",
"Enforce password protection" : "Krev passordbeskyttelse",
- "Set default expiration date" : "Sett standard utløpsdato",
+ "Set default expiration date" : "Sett forvalgt utløpsdato",
"Expire after " : "Utløper etter",
"days" : "dager",
"Enforce expiration date" : "Krev utløpsdato",
@@ -228,7 +235,7 @@
"Advanced monitoring" : "Avansert overvåking",
"Performance tuning" : "Forbedre ytelsen",
"Improving the config.php" : "Tilpasninger i config.php",
- "Theming" : "Temaer",
+ "Theming" : "Drakter",
"Hardening and security guidance" : "Herding og sikkerhetsveiledning",
"Developer documentation" : "Utviklerdokumentasjon",
"by %s" : "av %s",
@@ -260,7 +267,7 @@
"You are using <strong>%s</strong> of <strong>%s</strong>" : "Du bruker <strong>%s</strong> av <strong>%s</strong>",
"Profile picture" : "Profilbilde",
"Upload new" : "Last opp nytt",
- "Select from Files" : "Velg fra Filer",
+ "Select from Files" : "Velg fra filer",
"Remove image" : "Fjern bilde",
"png or jpg, max. 20 MB" : "png eller jpg, maks. 20 MB",
"Picture provided by original account" : "Bilde kommer fra opprinnelig konto",
@@ -310,10 +317,13 @@
"Subscribe to our twitter channel!" : "Abonner på vår twitter kanal!",
"Subscribe to our news feed!" : "Abonner på vår nyhetsstrøm!",
"Subscribe to our newsletter!" : "Abonner på vårt nyhetsbrev!",
+ "Settings" : "Innstillinger",
"Show storage location" : "Vis lagringssted",
"Show user backend" : "Vis bruker-bakende",
+ "Show last login" : "Vis siste innlogging",
"Show email address" : "Vis e-postadresse",
"Send email to new user" : "Send e-post til ny bruker",
+ "When the password of a new user is left empty, an activation email with a link to set the password is sent." : "Når passordet til en ny brukeren er utelatt, vil vedkommnende bli sendt en aktiveringslenke.",
"E-Mail" : "E-post",
"Create" : "Opprett",
"Admin Recovery Password" : "Administrativt gjenopprettingspassord",
diff --git a/settings/l10n/sk.js b/settings/l10n/sk.js
index da9e6c52eef..da9d8cb285c 100644
--- a/settings/l10n/sk.js
+++ b/settings/l10n/sk.js
@@ -22,6 +22,7 @@ OC.L10N.register(
"You need to set your user email before being able to send test emails." : "Musíte nastaviť svoj po​​užívateľský email, než budete môcť odoslať testovací email.",
"Invalid request" : "Neplatná požiadavka",
"Invalid mail address" : "Neplatná emailová adresa",
+ "No valid group selected" : "Nebola zvolená platná skupina",
"A user with that name already exists." : "Používateľ s týmto menom už existuje.",
"Unable to create user." : "Nie je možné vytvoriť používateľa.",
"Unable to delete user." : "Nie je možné zmazať používateľa.",
@@ -33,6 +34,12 @@ OC.L10N.register(
"Invalid user" : "Neplatný používateľ",
"Unable to change mail address" : "Nemožno zmeniť emailovú adresu",
"Email saved" : "Email uložený",
+ "Welcome aboard" : "Vitajte na palube",
+ "Welcome aboard %s" : "Vitajte na palube %s",
+ "Your username is: %s" : "Vaše používateľské meno je: %s",
+ "Set your password" : "Nastavte si heslo",
+ "Go to %s" : "Prejsť na %s",
+ "Install Client" : "Inštalácia klienta",
"Your %s account was created" : "Váš účet %s bol vytvorený",
"Password confirmation is required" : "Vyžaduje sa overenie heslom",
"Couldn't remove app." : "Nemožno odstrániť aplikáciu.",
@@ -49,6 +56,7 @@ OC.L10N.register(
"_You have %n app update pending_::_You have %n app updates pending_" : ["Prebieha aktualizácia %n aplikácie","Prebieha aktualizácia %n aplikácií","Prebieha aktualizácia %n aplikácií"],
"No apps found for your version" : "Aplikácie pre vašu verziu sa nenašli",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Táto aplikácia nie je skontrolovaná na bezpečnostné chyby, je nová, alebo patrí medzi nestabilné. Inštalácia na vlastné riziko.",
+ "Disabling app …" : "Vypínanie aplikácie ...",
"Error while disabling app" : "Chyba pri zakázaní aplikácie",
"Disable" : "Zakázať",
"Enable" : "Zapnúť",
@@ -80,6 +88,7 @@ OC.L10N.register(
"iPad iOS" : "iPad iOS",
"iOS Client" : "iOS Klient",
"Android Client" : "Android Klient",
+ "This session" : "Táto relácia",
"Copy" : "Kopírovať",
"Copied!" : "Skopírované!",
"Not supported!" : "Nie je podporované!",
@@ -122,6 +131,7 @@ OC.L10N.register(
"__language_name__" : "Slovenský",
"Unlimited" : "Nelimitované",
"Personal info" : "Osobné informácie",
+ "Sessions" : "Relácie",
"App passwords" : "Heslá aplikácie",
"Sync clients" : "Klienti synchronizácie",
"None" : "Žiadny",
@@ -180,6 +190,7 @@ OC.L10N.register(
"Allow apps to use the Share API" : "Povoliť aplikáciám používať API pre sprístupňovanie",
"Allow users to share via link" : "Povoliť používateľom sprístupňovanie obsahu pomocou odkazov",
"Allow public uploads" : "Povoliť verejné nahrávanie súborov",
+ "Always ask for a password" : "Vždy vyžadovať heslo",
"Enforce password protection" : "Vynútiť ochranu heslom",
"Set default expiration date" : "Nastaviť predvolený dátum expirácie",
"Expire after " : "Platnosť do",
@@ -238,6 +249,7 @@ OC.L10N.register(
"Email" : "Email",
"Your email address" : "Vaša emailová adresa",
"No email address set" : "Emailová adresa nie je nastavená",
+ "For password reset and notifications" : "Na znovu-nastavenie hesla a upozornenia",
"Phone number" : "Telefónne číslo",
"Your phone number" : "Vaše telefónne číslo",
"Address" : "Adresa",
@@ -271,8 +283,10 @@ OC.L10N.register(
"Username" : "Používateľské meno",
"Done" : "Hotovo",
"Follow us on Google Plus!" : "Sleduj nás na Google Plus!",
+ "Settings" : "Nastavenia",
"Show storage location" : "Zobraziť umiestnenie úložiska",
"Show user backend" : "Zobraziť backend používateľa",
+ "Show last login" : "Zobraziť posledné prihlásenie",
"Show email address" : "Zobraziť emailovú adresu",
"Send email to new user" : "Odoslať email novému používateľovi",
"E-Mail" : "email",
diff --git a/settings/l10n/sk.json b/settings/l10n/sk.json
index 4d238e92f55..5bca8722be8 100644
--- a/settings/l10n/sk.json
+++ b/settings/l10n/sk.json
@@ -20,6 +20,7 @@
"You need to set your user email before being able to send test emails." : "Musíte nastaviť svoj po​​užívateľský email, než budete môcť odoslať testovací email.",
"Invalid request" : "Neplatná požiadavka",
"Invalid mail address" : "Neplatná emailová adresa",
+ "No valid group selected" : "Nebola zvolená platná skupina",
"A user with that name already exists." : "Používateľ s týmto menom už existuje.",
"Unable to create user." : "Nie je možné vytvoriť používateľa.",
"Unable to delete user." : "Nie je možné zmazať používateľa.",
@@ -31,6 +32,12 @@
"Invalid user" : "Neplatný používateľ",
"Unable to change mail address" : "Nemožno zmeniť emailovú adresu",
"Email saved" : "Email uložený",
+ "Welcome aboard" : "Vitajte na palube",
+ "Welcome aboard %s" : "Vitajte na palube %s",
+ "Your username is: %s" : "Vaše používateľské meno je: %s",
+ "Set your password" : "Nastavte si heslo",
+ "Go to %s" : "Prejsť na %s",
+ "Install Client" : "Inštalácia klienta",
"Your %s account was created" : "Váš účet %s bol vytvorený",
"Password confirmation is required" : "Vyžaduje sa overenie heslom",
"Couldn't remove app." : "Nemožno odstrániť aplikáciu.",
@@ -47,6 +54,7 @@
"_You have %n app update pending_::_You have %n app updates pending_" : ["Prebieha aktualizácia %n aplikácie","Prebieha aktualizácia %n aplikácií","Prebieha aktualizácia %n aplikácií"],
"No apps found for your version" : "Aplikácie pre vašu verziu sa nenašli",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Táto aplikácia nie je skontrolovaná na bezpečnostné chyby, je nová, alebo patrí medzi nestabilné. Inštalácia na vlastné riziko.",
+ "Disabling app …" : "Vypínanie aplikácie ...",
"Error while disabling app" : "Chyba pri zakázaní aplikácie",
"Disable" : "Zakázať",
"Enable" : "Zapnúť",
@@ -78,6 +86,7 @@
"iPad iOS" : "iPad iOS",
"iOS Client" : "iOS Klient",
"Android Client" : "Android Klient",
+ "This session" : "Táto relácia",
"Copy" : "Kopírovať",
"Copied!" : "Skopírované!",
"Not supported!" : "Nie je podporované!",
@@ -120,6 +129,7 @@
"__language_name__" : "Slovenský",
"Unlimited" : "Nelimitované",
"Personal info" : "Osobné informácie",
+ "Sessions" : "Relácie",
"App passwords" : "Heslá aplikácie",
"Sync clients" : "Klienti synchronizácie",
"None" : "Žiadny",
@@ -178,6 +188,7 @@
"Allow apps to use the Share API" : "Povoliť aplikáciám používať API pre sprístupňovanie",
"Allow users to share via link" : "Povoliť používateľom sprístupňovanie obsahu pomocou odkazov",
"Allow public uploads" : "Povoliť verejné nahrávanie súborov",
+ "Always ask for a password" : "Vždy vyžadovať heslo",
"Enforce password protection" : "Vynútiť ochranu heslom",
"Set default expiration date" : "Nastaviť predvolený dátum expirácie",
"Expire after " : "Platnosť do",
@@ -236,6 +247,7 @@
"Email" : "Email",
"Your email address" : "Vaša emailová adresa",
"No email address set" : "Emailová adresa nie je nastavená",
+ "For password reset and notifications" : "Na znovu-nastavenie hesla a upozornenia",
"Phone number" : "Telefónne číslo",
"Your phone number" : "Vaše telefónne číslo",
"Address" : "Adresa",
@@ -269,8 +281,10 @@
"Username" : "Používateľské meno",
"Done" : "Hotovo",
"Follow us on Google Plus!" : "Sleduj nás na Google Plus!",
+ "Settings" : "Nastavenia",
"Show storage location" : "Zobraziť umiestnenie úložiska",
"Show user backend" : "Zobraziť backend používateľa",
+ "Show last login" : "Zobraziť posledné prihlásenie",
"Show email address" : "Zobraziť emailovú adresu",
"Send email to new user" : "Odoslať email novému používateľovi",
"E-Mail" : "email",
diff --git a/settings/templates/apps.php b/settings/templates/apps.php
index 99d648c6284..0adf5dfcc6f 100644
--- a/settings/templates/apps.php
+++ b/settings/templates/apps.php
@@ -3,7 +3,6 @@ style('settings', 'settings');
vendor_script(
'core',
[
- 'handlebars/handlebars',
'marked/marked.min',
]
);
diff --git a/tests/Core/Controller/LoginControllerTest.php b/tests/Core/Controller/LoginControllerTest.php
index c8e85a19946..c9ab8e7476d 100644
--- a/tests/Core/Controller/LoginControllerTest.php
+++ b/tests/Core/Controller/LoginControllerTest.php
@@ -55,8 +55,6 @@ class LoginControllerTest extends TestCase {
private $logger;
/** @var Manager|\PHPUnit_Framework_MockObject_MockObject */
private $twoFactorManager;
- /** @var Throttler|\PHPUnit_Framework_MockObject_MockObject */
- private $throttler;
public function setUp() {
parent::setUp();
@@ -68,7 +66,6 @@ class LoginControllerTest extends TestCase {
$this->urlGenerator = $this->createMock(IURLGenerator::class);
$this->logger = $this->createMock(ILogger::class);
$this->twoFactorManager = $this->createMock(Manager::class);
- $this->throttler = $this->createMock(Throttler::class);
$this->loginController = new LoginController(
'core',
@@ -79,8 +76,7 @@ class LoginControllerTest extends TestCase {
$this->userSession,
$this->urlGenerator,
$this->logger,
- $this->twoFactorManager,
- $this->throttler
+ $this->twoFactorManager
);
}
@@ -288,26 +284,9 @@ class LoginControllerTest extends TestCase {
$loginPageUrl = 'some url';
$this->request
- ->expects($this->exactly(5))
- ->method('getRemoteAddress')
- ->willReturn('192.168.0.1');
- $this->request
->expects($this->once())
->method('passesCSRFCheck')
->willReturn(true);
- $this->throttler
- ->expects($this->exactly(2))
- ->method('sleepDelay')
- ->with('192.168.0.1');
- $this->throttler
- ->expects($this->once())
- ->method('getDelay')
- ->with('192.168.0.1')
- ->willReturn(0);
- $this->throttler
- ->expects($this->once())
- ->method('registerAttempt')
- ->with('login', '192.168.0.1', ['user' => 'MyUserName']);
$this->userManager->expects($this->once())
->method('checkPasswordNoLogging')
->will($this->returnValue(false));
@@ -324,6 +303,7 @@ class LoginControllerTest extends TestCase {
->method('deleteUserValue');
$expected = new \OCP\AppFramework\Http\RedirectResponse($loginPageUrl);
+ $expected->throttle();
$this->assertEquals($expected, $this->loginController->tryLogin($user, $password, ''));
}
@@ -333,6 +313,7 @@ class LoginControllerTest extends TestCase {
$user->expects($this->any())
->method('getUID')
->will($this->returnValue('uid'));
+ $loginName = 'loginli';
$user->expects($this->any())
->method('getLastLogin')
->willReturn(123456);
@@ -340,31 +321,18 @@ class LoginControllerTest extends TestCase {
$indexPageUrl = \OC_Util::getDefaultPageUrl();
$this->request
- ->expects($this->exactly(2))
- ->method('getRemoteAddress')
- ->willReturn('192.168.0.1');
- $this->request
->expects($this->once())
->method('passesCSRFCheck')
->willReturn(true);
- $this->throttler
- ->expects($this->once())
- ->method('sleepDelay')
- ->with('192.168.0.1');
- $this->throttler
- ->expects($this->once())
- ->method('getDelay')
- ->with('192.168.0.1')
- ->willReturn(200);
$this->userManager->expects($this->once())
->method('checkPasswordNoLogging')
->will($this->returnValue($user));
$this->userSession->expects($this->once())
- ->method('login')
- ->with($user, $password);
+ ->method('completeLogin')
+ ->with($user, ['loginName' => $loginName, 'password' => $password]);
$this->userSession->expects($this->once())
->method('createSessionToken')
- ->with($this->request, $user->getUID(), $user, $password, false);
+ ->with($this->request, $user->getUID(), $loginName, $password, false);
$this->twoFactorManager->expects($this->once())
->method('isTwoFactorAuthenticated')
->with($user)
@@ -386,7 +354,7 @@ class LoginControllerTest extends TestCase {
);
$expected = new \OCP\AppFramework\Http\RedirectResponse($indexPageUrl);
- $this->assertEquals($expected, $this->loginController->tryLogin($user, $password, null, false, 'Europe/Berlin', '1'));
+ $this->assertEquals($expected, $this->loginController->tryLogin($loginName, $password, null, false, 'Europe/Berlin', '1'));
}
public function testLoginWithValidCredentialsAndRememberMe() {
@@ -395,35 +363,23 @@ class LoginControllerTest extends TestCase {
$user->expects($this->any())
->method('getUID')
->will($this->returnValue('uid'));
+ $loginName = 'loginli';
$password = 'secret';
$indexPageUrl = \OC_Util::getDefaultPageUrl();
$this->request
- ->expects($this->exactly(2))
- ->method('getRemoteAddress')
- ->willReturn('192.168.0.1');
- $this->request
->expects($this->once())
->method('passesCSRFCheck')
->willReturn(true);
- $this->throttler
- ->expects($this->once())
- ->method('sleepDelay')
- ->with('192.168.0.1');
- $this->throttler
- ->expects($this->once())
- ->method('getDelay')
- ->with('192.168.0.1')
- ->willReturn(200);
$this->userManager->expects($this->once())
->method('checkPasswordNoLogging')
->will($this->returnValue($user));
$this->userSession->expects($this->once())
- ->method('login')
- ->with($user, $password);
+ ->method('completeLogin')
+ ->with($user, ['loginName' => $loginName, 'password' => $password]);
$this->userSession->expects($this->once())
->method('createSessionToken')
- ->with($this->request, $user->getUID(), $user, $password, true);
+ ->with($this->request, $user->getUID(), $loginName, $password, true);
$this->twoFactorManager->expects($this->once())
->method('isTwoFactorAuthenticated')
->with($user)
@@ -436,7 +392,7 @@ class LoginControllerTest extends TestCase {
->with($user);
$expected = new \OCP\AppFramework\Http\RedirectResponse($indexPageUrl);
- $this->assertEquals($expected, $this->loginController->tryLogin($user, $password, null, true));
+ $this->assertEquals($expected, $this->loginController->tryLogin($loginName, $password, null, true));
}
public function testLoginWithoutPassedCsrfCheckAndNotLoggedIn() {
@@ -449,22 +405,9 @@ class LoginControllerTest extends TestCase {
$originalUrl = 'another%20url';
$this->request
- ->expects($this->exactly(2))
- ->method('getRemoteAddress')
- ->willReturn('192.168.0.1');
- $this->request
->expects($this->once())
->method('passesCSRFCheck')
->willReturn(false);
- $this->throttler
- ->expects($this->once())
- ->method('sleepDelay')
- ->with('192.168.0.1');
- $this->throttler
- ->expects($this->once())
- ->method('getDelay')
- ->with('192.168.0.1')
- ->willReturn(200);
$this->userSession->expects($this->once())
->method('isLoggedIn')
->with()
@@ -489,22 +432,9 @@ class LoginControllerTest extends TestCase {
$redirectUrl = 'http://localhost/another url';
$this->request
- ->expects($this->exactly(2))
- ->method('getRemoteAddress')
- ->willReturn('192.168.0.1');
- $this->request
->expects($this->once())
->method('passesCSRFCheck')
->willReturn(false);
- $this->throttler
- ->expects($this->once())
- ->method('sleepDelay')
- ->with('192.168.0.1');
- $this->throttler
- ->expects($this->once())
- ->method('getDelay')
- ->with('192.168.0.1')
- ->willReturn(200);
$this->userSession->expects($this->once())
->method('isLoggedIn')
->with()
@@ -533,22 +463,9 @@ class LoginControllerTest extends TestCase {
$redirectUrl = 'http://localhost/another url';
$this->request
- ->expects($this->exactly(2))
- ->method('getRemoteAddress')
- ->willReturn('192.168.0.1');
- $this->request
->expects($this->once())
->method('passesCSRFCheck')
->willReturn(true);
- $this->throttler
- ->expects($this->once())
- ->method('sleepDelay')
- ->with('192.168.0.1');
- $this->throttler
- ->expects($this->once())
- ->method('getDelay')
- ->with('192.168.0.1')
- ->willReturn(200);
$this->userManager->expects($this->once())
->method('checkPasswordNoLogging')
->with('Jane', $password)
@@ -583,28 +500,15 @@ class LoginControllerTest extends TestCase {
$provider = $this->getMockBuilder('\OCP\Authentication\TwoFactorAuth\IProvider')->getMock();
$this->request
- ->expects($this->exactly(2))
- ->method('getRemoteAddress')
- ->willReturn('192.168.0.1');
- $this->request
->expects($this->once())
->method('passesCSRFCheck')
->willReturn(true);
- $this->throttler
- ->expects($this->once())
- ->method('sleepDelay')
- ->with('192.168.0.1');
- $this->throttler
- ->expects($this->once())
- ->method('getDelay')
- ->with('192.168.0.1')
- ->willReturn(200);
$this->userManager->expects($this->once())
->method('checkPasswordNoLogging')
->will($this->returnValue($user));
$this->userSession->expects($this->once())
- ->method('login')
- ->with('john@doe.com', $password);
+ ->method('completeLogin')
+ ->with($user, ['loginName' => 'john@doe.com', 'password' => $password]);
$this->userSession->expects($this->once())
->method('createSessionToken')
->with($this->request, $user->getUID(), 'john@doe.com', $password, false);
@@ -650,28 +554,15 @@ class LoginControllerTest extends TestCase {
$provider2 = $this->getMockBuilder('\OCP\Authentication\TwoFactorAuth\IProvider')->getMock();
$this->request
- ->expects($this->exactly(2))
- ->method('getRemoteAddress')
- ->willReturn('192.168.0.1');
- $this->request
->expects($this->once())
->method('passesCSRFCheck')
->willReturn(true);
- $this->throttler
- ->expects($this->once())
- ->method('sleepDelay')
- ->with('192.168.0.1');
- $this->throttler
- ->expects($this->once())
- ->method('getDelay')
- ->with('192.168.0.1')
- ->willReturn(200);
$this->userManager->expects($this->once())
->method('checkPasswordNoLogging')
->will($this->returnValue($user));
$this->userSession->expects($this->once())
- ->method('login')
- ->with('john@doe.com', $password);
+ ->method('completeLogin')
+ ->with($user, ['loginName' => 'john@doe.com', 'password' => $password]);
$this->userSession->expects($this->once())
->method('createSessionToken')
->with($this->request, $user->getUID(), 'john@doe.com', $password, false);
@@ -730,32 +621,16 @@ class LoginControllerTest extends TestCase {
->with('core.login.showLoginForm', ['user' => 'john@doe.com'])
->will($this->returnValue(''));
$this->request
- ->expects($this->exactly(3))
- ->method('getRemoteAddress')
- ->willReturn('192.168.0.1');
- $this->request
->expects($this->once())
->method('passesCSRFCheck')
->willReturn(true);
- $this->throttler
- ->expects($this->once())
- ->method('getDelay')
- ->with('192.168.0.1')
- ->willReturn(200);
- $this->throttler
- ->expects($this->once())
- ->method('sleepDelay')
- ->with('192.168.0.1');
- $this->throttler
- ->expects($this->once())
- ->method('registerAttempt')
- ->with('login', '192.168.0.1', ['user' => 'john@doe.com']);
$this->config->expects($this->never())
->method('deleteUserValue');
$this->userSession->expects($this->never())
->method('createRememberMeToken');
$expected = new RedirectResponse('');
+ $expected->throttle();
$this->assertEquals($expected, $this->loginController->tryLogin('john@doe.com', 'just wrong', null));
}
}
diff --git a/tests/Core/Controller/LostControllerTest.php b/tests/Core/Controller/LostControllerTest.php
index c8b8f87e73b..539fe016c8b 100644
--- a/tests/Core/Controller/LostControllerTest.php
+++ b/tests/Core/Controller/LostControllerTest.php
@@ -33,6 +33,7 @@ use OCP\IRequest;
use OCP\IURLGenerator;
use OCP\IUser;
use OCP\IUserManager;
+use OCP\Mail\IEMailTemplate;
use OCP\Mail\IMailer;
use OCP\Security\ICrypto;
use OCP\Security\ISecureRandom;
@@ -314,17 +315,32 @@ class LostControllerTest extends \Test\TestCase {
$message
->expects($this->at(2))
->method('setPlainBody')
- ->with('Use the following link to reset your password: https://example.tld/index.php/lostpassword/');
+ ->with('text body');
$message
->expects($this->at(3))
+ ->method('setHtmlBody')
+ ->with('HTML body');
+ $message
+ ->expects($this->at(4))
->method('setFrom')
->with(['lostpassword-noreply@localhost' => null]);
+ $emailTemplate = $this->createMock(IEMailTemplate::class);
+ $emailTemplate->expects($this->any())
+ ->method('renderHTML')
+ ->willReturn('HTML body');
+ $emailTemplate->expects($this->any())
+ ->method('renderText')
+ ->willReturn('text body');
$this->mailer
->expects($this->at(0))
+ ->method('createEMailTemplate')
+ ->willReturn($emailTemplate);
+ $this->mailer
+ ->expects($this->at(1))
->method('createMessage')
->will($this->returnValue($message));
$this->mailer
- ->expects($this->at(1))
+ ->expects($this->at(2))
->method('send')
->with($message);
@@ -385,17 +401,32 @@ class LostControllerTest extends \Test\TestCase {
$message
->expects($this->at(2))
->method('setPlainBody')
- ->with('Use the following link to reset your password: https://example.tld/index.php/lostpassword/');
+ ->with('text body');
$message
->expects($this->at(3))
+ ->method('setHtmlBody')
+ ->with('HTML body');
+ $message
+ ->expects($this->at(4))
->method('setFrom')
->with(['lostpassword-noreply@localhost' => null]);
+ $emailTemplate = $this->createMock(IEMailTemplate::class);
+ $emailTemplate->expects($this->any())
+ ->method('renderHTML')
+ ->willReturn('HTML body');
+ $emailTemplate->expects($this->any())
+ ->method('renderText')
+ ->willReturn('text body');
$this->mailer
->expects($this->at(0))
+ ->method('createEMailTemplate')
+ ->willReturn($emailTemplate);
+ $this->mailer
+ ->expects($this->at(1))
->method('createMessage')
->will($this->returnValue($message));
$this->mailer
- ->expects($this->at(1))
+ ->expects($this->at(2))
->method('send')
->with($message);
@@ -450,17 +481,32 @@ class LostControllerTest extends \Test\TestCase {
$message
->expects($this->at(2))
->method('setPlainBody')
- ->with('Use the following link to reset your password: https://example.tld/index.php/lostpassword/');
+ ->with('text body');
$message
->expects($this->at(3))
+ ->method('setHtmlBody')
+ ->with('HTML body');
+ $message
+ ->expects($this->at(4))
->method('setFrom')
->with(['lostpassword-noreply@localhost' => null]);
+ $emailTemplate = $this->createMock(IEMailTemplate::class);
+ $emailTemplate->expects($this->any())
+ ->method('renderHTML')
+ ->willReturn('HTML body');
+ $emailTemplate->expects($this->any())
+ ->method('renderText')
+ ->willReturn('text body');
$this->mailer
->expects($this->at(0))
+ ->method('createEMailTemplate')
+ ->willReturn($emailTemplate);
+ $this->mailer
+ ->expects($this->at(1))
->method('createMessage')
->will($this->returnValue($message));
$this->mailer
- ->expects($this->at(1))
+ ->expects($this->at(2))
->method('send')
->with($message)
->will($this->throwException(new \Exception()));
diff --git a/tests/data/emails/new-account-email-single-button.txt b/tests/data/emails/new-account-email-single-button.txt
index 55954961400..90ae35b0695 100644
--- a/tests/data/emails/new-account-email-single-button.txt
+++ b/tests/data/emails/new-account-email-single-button.txt
@@ -4,7 +4,7 @@ You have now an Nextcloud account, you can add, protect, and share your data.
Your username is: abc
-Set your password: https://example.org/resetPassword/123
+https://example.org/resetPassword/123
--
TestCloud - A safe home for your data
diff --git a/tests/lib/AppFramework/Http/ResponseTest.php b/tests/lib/AppFramework/Http/ResponseTest.php
index 4840a5f94c3..d8959face89 100644
--- a/tests/lib/AppFramework/Http/ResponseTest.php
+++ b/tests/lib/AppFramework/Http/ResponseTest.php
@@ -264,4 +264,9 @@ class ResponseTest extends \Test\TestCase {
}
+ public function testThrottle() {
+ $this->assertFalse($this->childResponse->isThrottled());
+ $this->childResponse->throttle();
+ $this->assertTrue($this->childResponse->isThrottled());
+ }
}
diff --git a/tests/lib/AppFramework/Middleware/Security/BruteForceMiddlewareTest.php b/tests/lib/AppFramework/Middleware/Security/BruteForceMiddlewareTest.php
new file mode 100644
index 00000000000..14d3b796846
--- /dev/null
+++ b/tests/lib/AppFramework/Middleware/Security/BruteForceMiddlewareTest.php
@@ -0,0 +1,190 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\AppFramework\Middleware\Security;
+
+use OC\AppFramework\Middleware\Security\BruteForceMiddleware;
+use OC\AppFramework\Utility\ControllerMethodReflector;
+use OC\Security\Bruteforce\Throttler;
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\Response;
+use OCP\Http\Client\IResponse;
+use OCP\IRequest;
+use Test\TestCase;
+
+class BruteForceMiddlewareTest extends TestCase {
+ /** @var ControllerMethodReflector|\PHPUnit_Framework_MockObject_MockObject */
+ private $reflector;
+ /** @var Throttler|\PHPUnit_Framework_MockObject_MockObject */
+ private $throttler;
+ /** @var IRequest|\PHPUnit_Framework_MockObject_MockObject */
+ private $request;
+ /** @var BruteForceMiddleware */
+ private $bruteForceMiddleware;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->reflector = $this->createMock(ControllerMethodReflector::class);
+ $this->throttler = $this->createMock(Throttler::class);
+ $this->request = $this->createMock(IRequest::class);
+
+ $this->bruteForceMiddleware = new BruteForceMiddleware(
+ $this->reflector,
+ $this->throttler,
+ $this->request
+ );
+ }
+
+ public function testBeforeControllerWithAnnotation() {
+ $this->reflector
+ ->expects($this->once())
+ ->method('hasAnnotation')
+ ->with('BruteForceProtection')
+ ->willReturn(true);
+ $this->reflector
+ ->expects($this->once())
+ ->method('getAnnotationParameter')
+ ->with('BruteForceProtection', 'action')
+ ->willReturn('login');
+ $this->request
+ ->expects($this->once())
+ ->method('getRemoteAddress')
+ ->willReturn('127.0.0.1');
+ $this->throttler
+ ->expects($this->once())
+ ->method('sleepDelay')
+ ->with('127.0.0.1', 'login');
+
+ /** @var Controller|\PHPUnit_Framework_MockObject_MockObject $controller */
+ $controller = $this->createMock(Controller::class);
+ $this->bruteForceMiddleware->beforeController($controller, 'testMethod');
+ }
+
+ public function testBeforeControllerWithoutAnnotation() {
+ $this->reflector
+ ->expects($this->once())
+ ->method('hasAnnotation')
+ ->with('BruteForceProtection')
+ ->willReturn(false);
+ $this->reflector
+ ->expects($this->never())
+ ->method('getAnnotationParameter');
+ $this->request
+ ->expects($this->never())
+ ->method('getRemoteAddress');
+ $this->throttler
+ ->expects($this->never())
+ ->method('sleepDelay');
+
+ /** @var Controller|\PHPUnit_Framework_MockObject_MockObject $controller */
+ $controller = $this->createMock(Controller::class);
+ $this->bruteForceMiddleware->beforeController($controller, 'testMethod');
+ }
+
+ public function testAfterControllerWithAnnotationAndThrottledRequest() {
+ /** @var Response|\PHPUnit_Framework_MockObject_MockObject $response */
+ $response = $this->createMock(Response::class);
+ $this->reflector
+ ->expects($this->once())
+ ->method('hasAnnotation')
+ ->with('BruteForceProtection')
+ ->willReturn(true);
+ $response
+ ->expects($this->once())
+ ->method('isThrottled')
+ ->willReturn(true);
+ $this->reflector
+ ->expects($this->once())
+ ->method('getAnnotationParameter')
+ ->with('BruteForceProtection', 'action')
+ ->willReturn('login');
+ $this->request
+ ->expects($this->once())
+ ->method('getRemoteAddress')
+ ->willReturn('127.0.0.1');
+ $this->throttler
+ ->expects($this->once())
+ ->method('sleepDelay')
+ ->with('127.0.0.1', 'login');
+ $this->throttler
+ ->expects($this->once())
+ ->method('registerAttempt')
+ ->with('login', '127.0.0.1');
+
+ /** @var Controller|\PHPUnit_Framework_MockObject_MockObject $controller */
+ $controller = $this->createMock(Controller::class);
+ $this->bruteForceMiddleware->afterController($controller, 'testMethod' ,$response);
+ }
+
+ public function testAfterControllerWithAnnotationAndNotThrottledRequest() {
+ /** @var Response|\PHPUnit_Framework_MockObject_MockObject $response */
+ $response = $this->createMock(Response::class);
+ $this->reflector
+ ->expects($this->once())
+ ->method('hasAnnotation')
+ ->with('BruteForceProtection')
+ ->willReturn(true);
+ $response
+ ->expects($this->once())
+ ->method('isThrottled')
+ ->willReturn(false);
+ $this->reflector
+ ->expects($this->never())
+ ->method('getAnnotationParameter');
+ $this->request
+ ->expects($this->never())
+ ->method('getRemoteAddress');
+ $this->throttler
+ ->expects($this->never())
+ ->method('sleepDelay');
+ $this->throttler
+ ->expects($this->never())
+ ->method('registerAttempt');
+
+ /** @var Controller|\PHPUnit_Framework_MockObject_MockObject $controller */
+ $controller = $this->createMock(Controller::class);
+ $this->bruteForceMiddleware->afterController($controller, 'testMethod' ,$response);
+ }
+
+ public function testAfterControllerWithoutAnnotation() {
+ $this->reflector
+ ->expects($this->once())
+ ->method('hasAnnotation')
+ ->with('BruteForceProtection')
+ ->willReturn(false);
+ $this->reflector
+ ->expects($this->never())
+ ->method('getAnnotationParameter');
+ $this->request
+ ->expects($this->never())
+ ->method('getRemoteAddress');
+ $this->throttler
+ ->expects($this->never())
+ ->method('sleepDelay');
+
+ /** @var Controller|\PHPUnit_Framework_MockObject_MockObject $controller */
+ $controller = $this->createMock(Controller::class);
+ /** @var Response|\PHPUnit_Framework_MockObject_MockObject $response */
+ $response = $this->createMock(Response::class);
+ $this->bruteForceMiddleware->afterController($controller, 'testMethod' ,$response);
+ }
+}
diff --git a/tests/lib/AppFramework/Middleware/Security/RateLimitingMiddlewareTest.php b/tests/lib/AppFramework/Middleware/Security/RateLimitingMiddlewareTest.php
new file mode 100644
index 00000000000..1317a07447d
--- /dev/null
+++ b/tests/lib/AppFramework/Middleware/Security/RateLimitingMiddlewareTest.php
@@ -0,0 +1,283 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\AppFramework\Middleware\Security;
+
+use OC\AppFramework\Middleware\Security\RateLimitingMiddleware;
+use OC\AppFramework\Utility\ControllerMethodReflector;
+use OC\Security\RateLimiting\Exception\RateLimitExceededException;
+use OC\Security\RateLimiting\Limiter;
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\JSONResponse;
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\IRequest;
+use OCP\IUser;
+use OCP\IUserSession;
+use Test\TestCase;
+
+class RateLimitingMiddlewareTest extends TestCase {
+ /** @var IRequest|\PHPUnit_Framework_MockObject_MockObject */
+ private $request;
+ /** @var IUserSession|\PHPUnit_Framework_MockObject_MockObject */
+ private $userSession;
+ /** @var ControllerMethodReflector|\PHPUnit_Framework_MockObject_MockObject */
+ private $reflector;
+ /** @var Limiter|\PHPUnit_Framework_MockObject_MockObject */
+ private $limiter;
+ /** @var RateLimitingMiddleware */
+ private $rateLimitingMiddleware;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->request = $this->createMock(IRequest::class);
+ $this->userSession = $this->createMock(IUserSession::class);
+ $this->reflector = $this->createMock(ControllerMethodReflector::class);
+ $this->limiter = $this->createMock(Limiter::class);
+
+ $this->rateLimitingMiddleware = new RateLimitingMiddleware(
+ $this->request,
+ $this->userSession,
+ $this->reflector,
+ $this->limiter
+ );
+ }
+
+ public function testBeforeControllerWithoutAnnotation() {
+ $this->reflector
+ ->expects($this->at(0))
+ ->method('getAnnotationParameter')
+ ->with('AnonRateThrottle', 'limit')
+ ->willReturn('');
+ $this->reflector
+ ->expects($this->at(1))
+ ->method('getAnnotationParameter')
+ ->with('AnonRateThrottle', 'period')
+ ->willReturn('');
+ $this->reflector
+ ->expects($this->at(2))
+ ->method('getAnnotationParameter')
+ ->with('UserRateThrottle', 'limit')
+ ->willReturn('');
+ $this->reflector
+ ->expects($this->at(3))
+ ->method('getAnnotationParameter')
+ ->with('UserRateThrottle', 'period')
+ ->willReturn('');
+
+ $this->limiter
+ ->expects($this->never())
+ ->method('registerUserRequest');
+ $this->limiter
+ ->expects($this->never())
+ ->method('registerAnonRequest');
+
+ /** @var Controller|\PHPUnit_Framework_MockObject_MockObject $controller */
+ $controller = $this->createMock(Controller::class);
+ $this->rateLimitingMiddleware->beforeController($controller, 'testMethod');
+ }
+
+ public function testBeforeControllerForAnon() {
+ /** @var Controller|\PHPUnit_Framework_MockObject_MockObject $controller */
+ $controller = $this->createMock(Controller::class);
+ $this->request
+ ->expects($this->once())
+ ->method('getRemoteAddress')
+ ->willReturn('127.0.0.1');
+
+ $this->reflector
+ ->expects($this->at(0))
+ ->method('getAnnotationParameter')
+ ->with('AnonRateThrottle', 'limit')
+ ->willReturn('100');
+ $this->reflector
+ ->expects($this->at(1))
+ ->method('getAnnotationParameter')
+ ->with('AnonRateThrottle', 'period')
+ ->willReturn('10');
+ $this->reflector
+ ->expects($this->at(2))
+ ->method('getAnnotationParameter')
+ ->with('UserRateThrottle', 'limit')
+ ->willReturn('');
+ $this->reflector
+ ->expects($this->at(3))
+ ->method('getAnnotationParameter')
+ ->with('UserRateThrottle', 'period')
+ ->willReturn('');
+
+ $this->limiter
+ ->expects($this->never())
+ ->method('registerUserRequest');
+ $this->limiter
+ ->expects($this->once())
+ ->method('registerAnonRequest')
+ ->with(get_class($controller) . '::testMethod', '100', '10', '127.0.0.1');
+
+
+ $this->rateLimitingMiddleware->beforeController($controller, 'testMethod');
+ }
+
+ public function testBeforeControllerForLoggedIn() {
+ /** @var Controller|\PHPUnit_Framework_MockObject_MockObject $controller */
+ $controller = $this->createMock(Controller::class);
+ /** @var IUser|\PHPUnit_Framework_MockObject_MockObject $user */
+ $user = $this->createMock(IUser::class);
+
+ $this->userSession
+ ->expects($this->once())
+ ->method('isLoggedIn')
+ ->willReturn(true);
+ $this->userSession
+ ->expects($this->once())
+ ->method('getUser')
+ ->willReturn($user);
+
+ $this->reflector
+ ->expects($this->at(0))
+ ->method('getAnnotationParameter')
+ ->with('AnonRateThrottle', 'limit')
+ ->willReturn('');
+ $this->reflector
+ ->expects($this->at(1))
+ ->method('getAnnotationParameter')
+ ->with('AnonRateThrottle', 'period')
+ ->willReturn('');
+ $this->reflector
+ ->expects($this->at(2))
+ ->method('getAnnotationParameter')
+ ->with('UserRateThrottle', 'limit')
+ ->willReturn('100');
+ $this->reflector
+ ->expects($this->at(3))
+ ->method('getAnnotationParameter')
+ ->with('UserRateThrottle', 'period')
+ ->willReturn('10');
+
+ $this->limiter
+ ->expects($this->never())
+ ->method('registerAnonRequest');
+ $this->limiter
+ ->expects($this->once())
+ ->method('registerUserRequest')
+ ->with(get_class($controller) . '::testMethod', '100', '10', $user);
+
+
+ $this->rateLimitingMiddleware->beforeController($controller, 'testMethod');
+ }
+
+ public function testBeforeControllerAnonWithFallback() {
+ /** @var Controller|\PHPUnit_Framework_MockObject_MockObject $controller */
+ $controller = $this->createMock(Controller::class);
+ $this->request
+ ->expects($this->once())
+ ->method('getRemoteAddress')
+ ->willReturn('127.0.0.1');
+
+ $this->userSession
+ ->expects($this->once())
+ ->method('isLoggedIn')
+ ->willReturn(false);
+
+ $this->reflector
+ ->expects($this->at(0))
+ ->method('getAnnotationParameter')
+ ->with('AnonRateThrottle', 'limit')
+ ->willReturn('200');
+ $this->reflector
+ ->expects($this->at(1))
+ ->method('getAnnotationParameter')
+ ->with('AnonRateThrottle', 'period')
+ ->willReturn('20');
+ $this->reflector
+ ->expects($this->at(2))
+ ->method('getAnnotationParameter')
+ ->with('UserRateThrottle', 'limit')
+ ->willReturn('100');
+ $this->reflector
+ ->expects($this->at(3))
+ ->method('getAnnotationParameter')
+ ->with('UserRateThrottle', 'period')
+ ->willReturn('10');
+
+ $this->limiter
+ ->expects($this->never())
+ ->method('registerUserRequest');
+ $this->limiter
+ ->expects($this->once())
+ ->method('registerAnonRequest')
+ ->with(get_class($controller) . '::testMethod', '200', '20', '127.0.0.1');
+
+ $this->rateLimitingMiddleware->beforeController($controller, 'testMethod');
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage My test exception
+ */
+ public function testAfterExceptionWithOtherException() {
+ /** @var Controller|\PHPUnit_Framework_MockObject_MockObject $controller */
+ $controller = $this->createMock(Controller::class);
+
+ $this->rateLimitingMiddleware->afterException($controller, 'testMethod', new \Exception('My test exception'));
+ }
+
+ public function testAfterExceptionWithJsonBody() {
+ /** @var Controller|\PHPUnit_Framework_MockObject_MockObject $controller */
+ $controller = $this->createMock(Controller::class);
+ $this->request
+ ->expects($this->once())
+ ->method('getHeader')
+ ->with('Accept')
+ ->willReturn('JSON');
+
+ $result = $this->rateLimitingMiddleware->afterException($controller, 'testMethod', new RateLimitExceededException());
+ $expected = new JSONResponse(
+ [
+ 'message' => 'Rate limit exceeded',
+ ],
+ 429
+ );
+ $this->assertEquals($expected, $result);
+ }
+
+ public function testAfterExceptionWithHtmlBody() {
+ /** @var Controller|\PHPUnit_Framework_MockObject_MockObject $controller */
+ $controller = $this->createMock(Controller::class);
+ $this->request
+ ->expects($this->once())
+ ->method('getHeader')
+ ->with('Accept')
+ ->willReturn('html');
+
+ $result = $this->rateLimitingMiddleware->afterException($controller, 'testMethod', new RateLimitExceededException());
+ $expected = new TemplateResponse(
+ 'core',
+ '403',
+ [
+ 'file' => 'Rate limit exceeded',
+ ],
+ 'guest'
+ );
+ $expected->setStatus(429);
+ $this->assertEquals($expected, $result);
+ }
+}
diff --git a/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php b/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php
index 164ea48de70..17ac30b8fe4 100644
--- a/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php
+++ b/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php
@@ -20,8 +20,6 @@
*
*/
-
-
namespace Test\AppFramework\Middleware\Security;
use OC\AppFramework\Http;
@@ -34,7 +32,6 @@ use OC\AppFramework\Middleware\Security\Exceptions\SecurityException;
use OC\Appframework\Middleware\Security\Exceptions\StrictCookieMissingException;
use OC\AppFramework\Middleware\Security\SecurityMiddleware;
use OC\AppFramework\Utility\ControllerMethodReflector;
-use OC\Security\Bruteforce\Throttler;
use OC\Security\CSP\ContentSecurityPolicy;
use OC\Security\CSP\ContentSecurityPolicyManager;
use OC\Security\CSP\ContentSecurityPolicyNonceManager;
@@ -54,7 +51,6 @@ use OCP\ISession;
use OCP\IURLGenerator;
use OCP\Security\ISecureRandom;
-
class SecurityMiddlewareTest extends \Test\TestCase {
/** @var SecurityMiddleware|\PHPUnit_Framework_MockObject_MockObject */
@@ -83,8 +79,6 @@ class SecurityMiddlewareTest extends \Test\TestCase {
private $csrfTokenManager;
/** @var ContentSecurityPolicyNonceManager|\PHPUnit_Framework_MockObject_MockObject */
private $cspNonceManager;
- /** @var Throttler|\PHPUnit_Framework_MockObject_MockObject */
- private $bruteForceThrottler;
protected function setUp() {
parent::setUp();
@@ -99,7 +93,6 @@ class SecurityMiddlewareTest extends \Test\TestCase {
$this->contentSecurityPolicyManager = $this->createMock(ContentSecurityPolicyManager::class);
$this->csrfTokenManager = $this->createMock(CsrfTokenManager::class);
$this->cspNonceManager = $this->createMock(ContentSecurityPolicyNonceManager::class);
- $this->bruteForceThrottler = $this->getMockBuilder(Throttler::class)->disableOriginalConstructor()->getMock();
$this->middleware = $this->getMiddleware(true, true);
$this->secException = new SecurityException('hey', false);
$this->secAjaxException = new SecurityException('hey', true);
@@ -123,8 +116,7 @@ class SecurityMiddlewareTest extends \Test\TestCase {
$isAdminUser,
$this->contentSecurityPolicyManager,
$this->csrfTokenManager,
- $this->cspNonceManager,
- $this->bruteForceThrottler
+ $this->cspNonceManager
);
}
@@ -657,70 +649,4 @@ class SecurityMiddlewareTest extends \Test\TestCase {
$this->assertEquals($response, $this->middleware->afterController($this->controller, 'test', $response));
}
-
- /**
- * @dataProvider dataTestBeforeControllerBruteForce
- */
- public function testBeforeControllerBruteForce($bruteForceProtectionEnabled) {
- /** @var ControllerMethodReflector|\PHPUnit_Framework_MockObject_MockObject $reader */
- $reader = $this->getMockBuilder(ControllerMethodReflector::class)->disableOriginalConstructor()->getMock();
-
- $middleware = new SecurityMiddleware(
- $this->request,
- $reader,
- $this->navigationManager,
- $this->urlGenerator,
- $this->logger,
- $this->session,
- 'files',
- false,
- false,
- $this->contentSecurityPolicyManager,
- $this->csrfTokenManager,
- $this->cspNonceManager,
- $this->bruteForceThrottler
- );
-
- $reader->expects($this->any())->method('hasAnnotation')
- ->willReturnCallback(
- function($annotation) use ($bruteForceProtectionEnabled) {
-
- switch ($annotation) {
- case 'BruteForceProtection':
- return $bruteForceProtectionEnabled;
- case 'PasswordConfirmationRequired':
- case 'StrictCookieRequired':
- return false;
- case 'PublicPage':
- case 'NoCSRFRequired':
- return true;
- }
-
- return true;
- }
- );
-
- $reader->expects($this->any())->method('getAnnotationParameter')->willReturn('action');
- $this->request->expects($this->any())->method('getRemoteAddress')->willReturn('remoteAddress');
-
- if ($bruteForceProtectionEnabled) {
- $this->bruteForceThrottler->expects($this->once())->method('sleepDelay')
- ->with('remoteAddress', 'action');
- $this->bruteForceThrottler->expects($this->once())->method('registerAttempt')
- ->with('action', 'remoteAddress');
- } else {
- $this->bruteForceThrottler->expects($this->never())->method('sleepDelay');
- $this->bruteForceThrottler->expects($this->never())->method('registerAttempt');
- }
-
- $middleware->beforeController($this->controller, 'test');
-
- }
-
- public function dataTestBeforeControllerBruteForce() {
- return [
- [true],
- [false]
- ];
- }
}
diff --git a/tests/lib/AppFramework/Utility/ControllerMethodReflectorTest.php b/tests/lib/AppFramework/Utility/ControllerMethodReflectorTest.php
index 644245e1967..3c43e7f9219 100644
--- a/tests/lib/AppFramework/Utility/ControllerMethodReflectorTest.php
+++ b/tests/lib/AppFramework/Utility/ControllerMethodReflectorTest.php
@@ -75,18 +75,32 @@ class ControllerMethodReflectorTest extends \Test\TestCase {
$this->assertTrue($reader->hasAnnotation('Annotation'));
}
+ /**
+ * @Annotation(parameter=value)
+ */
+ public function testGetAnnotationParameterSingle() {
+ $reader = new ControllerMethodReflector();
+ $reader->reflect(
+ __CLASS__,
+ __FUNCTION__
+ );
+
+ $this->assertSame('value', $reader->getAnnotationParameter('Annotation', 'parameter'));
+ }
/**
- * @Annotation parameter
+ * @Annotation(parameter1=value1, parameter2=value2,parameter3=value3)
*/
- public function testGetAnnotationParameter(){
+ public function testGetAnnotationParameterMultiple() {
$reader = new ControllerMethodReflector();
$reader->reflect(
- '\Test\AppFramework\Utility\ControllerMethodReflectorTest',
- 'testGetAnnotationParameter'
+ __CLASS__,
+ __FUNCTION__
);
- $this->assertSame('parameter', $reader->getAnnotationParameter('Annotation'));
+ $this->assertSame('value1', $reader->getAnnotationParameter('Annotation', 'parameter1'));
+ $this->assertSame('value2', $reader->getAnnotationParameter('Annotation', 'parameter2'));
+ $this->assertSame('value3', $reader->getAnnotationParameter('Annotation', 'parameter3'));
}
/**
diff --git a/tests/lib/Mail/EMailTemplateTest.php b/tests/lib/Mail/EMailTemplateTest.php
index f9e1ecf29ca..2ba68dbbabb 100644
--- a/tests/lib/Mail/EMailTemplateTest.php
+++ b/tests/lib/Mail/EMailTemplateTest.php
@@ -157,7 +157,8 @@ class EMailTemplateTest extends TestCase {
$this->emailTemplate->addBodyText('You have now an Nextcloud account, you can add, protect, and share your data.');
$this->emailTemplate->addBodyText('Your username is: abc');
$this->emailTemplate->addBodyButton(
- 'Set your password', 'https://example.org/resetPassword/123'
+ 'Set your password', 'https://example.org/resetPassword/123',
+ false
);
$this->emailTemplate->addFooter();
diff --git a/tests/lib/Security/Bruteforce/ThrottlerTest.php b/tests/lib/Security/Bruteforce/ThrottlerTest.php
index 02d5b701679..9679d0c1759 100644
--- a/tests/lib/Security/Bruteforce/ThrottlerTest.php
+++ b/tests/lib/Security/Bruteforce/ThrottlerTest.php
@@ -76,51 +76,6 @@ class ThrottlerTest extends TestCase {
$this->assertLessThan(2, $cutoff->s);
}
- public function testSubnet() {
- // IPv4
- $this->assertSame(
- '64.233.191.254/32',
- $this->invokePrivate($this->throttler, 'getIPv4Subnet', ['64.233.191.254', 32])
- );
- $this->assertSame(
- '64.233.191.252/30',
- $this->invokePrivate($this->throttler, 'getIPv4Subnet', ['64.233.191.254', 30])
- );
- $this->assertSame(
- '64.233.191.240/28',
- $this->invokePrivate($this->throttler, 'getIPv4Subnet', ['64.233.191.254', 28])
- );
- $this->assertSame(
- '64.233.191.0/24',
- $this->invokePrivate($this->throttler, 'getIPv4Subnet', ['64.233.191.254', 24])
- );
- $this->assertSame(
- '64.233.188.0/22',
- $this->invokePrivate($this->throttler, 'getIPv4Subnet', ['64.233.191.254', 22])
- );
- // IPv6
- $this->assertSame(
- '2001:db8:85a3::8a2e:370:7334/127',
- $this->invokePrivate($this->throttler, 'getIPv6Subnet', ['2001:0db8:85a3:0000:0000:8a2e:0370:7334', 127])
- );
- $this->assertSame(
- '2001:db8:85a3::8a2e:370:7300/120',
- $this->invokePrivate($this->throttler, 'getIPv6Subnet', ['2001:0db8:85a3:0000:0000:8a2e:0370:7300', 120])
- );
- $this->assertSame(
- '2001:db8:85a3::/64',
- $this->invokePrivate($this->throttler, 'getIPv6Subnet', ['2001:0db8:85a3:0000:0000:8a2e:0370:7334', 64])
- );
- $this->assertSame(
- '2001:db8:85a3::/48',
- $this->invokePrivate($this->throttler, 'getIPv6Subnet', ['2001:0db8:85a3:0000:0000:8a2e:0370:7334', 48])
- );
- $this->assertSame(
- '2001:db8:8500::/40',
- $this->invokePrivate($this->throttler, 'getIPv6Subnet', ['2001:0db8:85a3:0000:0000:8a2e:0370:7334', 40])
- );
- }
-
public function dataIsIPWhitelisted() {
return [
[
diff --git a/tests/lib/Security/Normalizer/IpAddressTest.php b/tests/lib/Security/Normalizer/IpAddressTest.php
new file mode 100644
index 00000000000..36a48f601d3
--- /dev/null
+++ b/tests/lib/Security/Normalizer/IpAddressTest.php
@@ -0,0 +1,59 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\Security\Normalizer;
+
+use OC\Security\Normalizer\IpAddress;
+use Test\TestCase;
+
+class IpAddressTest extends TestCase {
+
+ public function subnetDataProvider() {
+ return [
+ [
+ '64.233.191.254',
+ '64.233.191.254/32',
+ ],
+ [
+ '192.168.0.123',
+ '192.168.0.123/32',
+ ],
+ [
+ '2001:0db8:85a3:0000:0000:8a2e:0370:7334',
+ '2001:db8:85a3::8a2e:370:7334/128',
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider subnetDataProvider
+ *
+ * @param string $input
+ * @param string $expected
+ */
+ public function testGetSubnet($input, $expected) {
+ $this->assertSame($expected, (new IpAddress($input))->getSubnet());
+ }
+
+ public function testToString() {
+ $this->assertSame('127.0.0.1', (string)(new IpAddress('127.0.0.1')));
+ }
+}
diff --git a/tests/lib/Security/RateLimiting/Backend/MemoryCacheTest.php b/tests/lib/Security/RateLimiting/Backend/MemoryCacheTest.php
new file mode 100644
index 00000000000..34c326e72e1
--- /dev/null
+++ b/tests/lib/Security/RateLimiting/Backend/MemoryCacheTest.php
@@ -0,0 +1,146 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\Security\RateLimiting\Backend;
+
+use OC\Security\RateLimiting\Backend\MemoryCache;
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\ICache;
+use OCP\ICacheFactory;
+use Test\TestCase;
+
+class MemoryCacheTest extends TestCase {
+ /** @var ICacheFactory|\PHPUnit_Framework_MockObject_MockObject */
+ private $cacheFactory;
+ /** @var ITimeFactory|\PHPUnit_Framework_MockObject_MockObject */
+ private $timeFactory;
+ /** @var ICache|\PHPUnit_Framework_MockObject_MockObject */
+ private $cache;
+ /** @var MemoryCache */
+ private $memoryCache;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->cacheFactory = $this->createMock(ICacheFactory::class);
+ $this->timeFactory = $this->createMock(ITimeFactory::class);
+ $this->cache = $this->createMock(ICache::class);
+
+ $this->cacheFactory
+ ->expects($this->once())
+ ->method('create')
+ ->with('OC\Security\RateLimiting\Backend\MemoryCache')
+ ->willReturn($this->cache);
+
+ $this->memoryCache = new MemoryCache(
+ $this->cacheFactory,
+ $this->timeFactory
+ );
+ }
+
+ public function testGetAttemptsWithNoAttemptsBefore() {
+ $this->cache
+ ->expects($this->once())
+ ->method('get')
+ ->with('eea460b8d756885099c7f0a4c083bf6a745069ee4a301984e726df58fd4510bffa2dac4b7fd5d835726a6753ffa8343ba31c7e902bbef78fc68c2e743667cb4b')
+ ->willReturn(false);
+
+ $this->assertSame(0, $this->memoryCache->getAttempts('Method', 'User', 123));
+ }
+
+ public function testGetAttempts() {
+ $this->timeFactory
+ ->expects($this->once())
+ ->method('getTime')
+ ->willReturn(210);
+ $this->cache
+ ->expects($this->once())
+ ->method('get')
+ ->with('eea460b8d756885099c7f0a4c083bf6a745069ee4a301984e726df58fd4510bffa2dac4b7fd5d835726a6753ffa8343ba31c7e902bbef78fc68c2e743667cb4b')
+ ->willReturn(json_encode([
+ '1',
+ '2',
+ '87',
+ '123',
+ '123',
+ '124',
+ ]));
+
+ $this->assertSame(3, $this->memoryCache->getAttempts('Method', 'User', 123));
+ }
+
+ public function testRegisterAttemptWithNoAttemptsBefore() {
+ $this->timeFactory
+ ->expects($this->once())
+ ->method('getTime')
+ ->willReturn(123);
+
+ $this->cache
+ ->expects($this->once())
+ ->method('get')
+ ->with('eea460b8d756885099c7f0a4c083bf6a745069ee4a301984e726df58fd4510bffa2dac4b7fd5d835726a6753ffa8343ba31c7e902bbef78fc68c2e743667cb4b')
+ ->willReturn(false);
+ $this->cache
+ ->expects($this->once())
+ ->method('set')
+ ->with(
+ 'eea460b8d756885099c7f0a4c083bf6a745069ee4a301984e726df58fd4510bffa2dac4b7fd5d835726a6753ffa8343ba31c7e902bbef78fc68c2e743667cb4b',
+ json_encode(['123'])
+ );
+
+ $this->memoryCache->registerAttempt('Method', 'User', 100);
+ }
+
+ public function testRegisterAttempt() {
+ $this->timeFactory
+ ->expects($this->once())
+ ->method('getTime')
+ ->willReturn(129);
+
+ $this->cache
+ ->expects($this->once())
+ ->method('get')
+ ->with('eea460b8d756885099c7f0a4c083bf6a745069ee4a301984e726df58fd4510bffa2dac4b7fd5d835726a6753ffa8343ba31c7e902bbef78fc68c2e743667cb4b')
+ ->willReturn(json_encode([
+ '1',
+ '2',
+ '87',
+ '123',
+ '123',
+ '124',
+ ]));
+ $this->cache
+ ->expects($this->once())
+ ->method('set')
+ ->with(
+ 'eea460b8d756885099c7f0a4c083bf6a745069ee4a301984e726df58fd4510bffa2dac4b7fd5d835726a6753ffa8343ba31c7e902bbef78fc68c2e743667cb4b',
+ json_encode([
+ '87',
+ '123',
+ '123',
+ '124',
+ '129',
+ ])
+ );
+
+ $this->memoryCache->registerAttempt('Method', 'User', 100);
+ }
+}
diff --git a/tests/lib/Security/RateLimiting/LimiterTest.php b/tests/lib/Security/RateLimiting/LimiterTest.php
new file mode 100644
index 00000000000..80b63ebb391
--- /dev/null
+++ b/tests/lib/Security/RateLimiting/LimiterTest.php
@@ -0,0 +1,161 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\Security\RateLimiting;
+
+use OC\Security\RateLimiting\Backend\IBackend;
+use OC\Security\RateLimiting\Limiter;
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\ICacheFactory;
+use OCP\IRequest;
+use OCP\IUser;
+use OCP\IUserSession;
+use Test\TestCase;
+
+class LimiterTest extends TestCase {
+ /** @var IUserSession|\PHPUnit_Framework_MockObject_MockObject */
+ private $userSession;
+ /** @var IRequest|\PHPUnit_Framework_MockObject_MockObject */
+ private $request;
+ /** @var ITimeFactory|\PHPUnit_Framework_MockObject_MockObject */
+ private $timeFactory;
+ /** @var IBackend|\PHPUnit_Framework_MockObject_MockObject */
+ private $backend;
+ /** @var Limiter */
+ private $limiter;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->userSession = $this->createMock(IUserSession::class);
+ $this->request = $this->createMock(IRequest::class);
+ $this->timeFactory = $this->createMock(ITimeFactory::class);
+ $this->backend = $this->createMock(IBackend::class);
+
+ $this->limiter = new Limiter(
+ $this->userSession,
+ $this->request,
+ $this->timeFactory,
+ $this->backend
+ );
+ }
+
+ /**
+ * @expectedException \OC\Security\RateLimiting\Exception\RateLimitExceededException
+ * @expectedExceptionMessage Rate limit exceeded
+ */
+ public function testRegisterAnonRequestExceeded() {
+ $this->backend
+ ->expects($this->once())
+ ->method('getAttempts')
+ ->with(
+ 'MyIdentifier',
+ '4664f0d9c88dcb7552be47b37bb52ce35977b2e60e1ac13757cf625f31f87050a41f3da064887fa87d49fd042e4c8eb20de8f10464877d3959677ab011b73a47',
+ 100
+ )
+ ->willReturn(101);
+
+ $this->limiter->registerAnonRequest('MyIdentifier', 100, 100, '127.0.0.1');
+ }
+
+ public function testRegisterAnonRequestSuccess() {
+ $this->timeFactory
+ ->expects($this->once())
+ ->method('getTime')
+ ->willReturn(2000);
+ $this->backend
+ ->expects($this->once())
+ ->method('getAttempts')
+ ->with(
+ 'MyIdentifier',
+ '4664f0d9c88dcb7552be47b37bb52ce35977b2e60e1ac13757cf625f31f87050a41f3da064887fa87d49fd042e4c8eb20de8f10464877d3959677ab011b73a47',
+ 100
+ )
+ ->willReturn(99);
+ $this->backend
+ ->expects($this->once())
+ ->method('registerAttempt')
+ ->with(
+ 'MyIdentifier',
+ '4664f0d9c88dcb7552be47b37bb52ce35977b2e60e1ac13757cf625f31f87050a41f3da064887fa87d49fd042e4c8eb20de8f10464877d3959677ab011b73a47',
+ 2000
+ );
+
+ $this->limiter->registerAnonRequest('MyIdentifier', 100, 100, '127.0.0.1');
+ }
+
+ /**
+ * @expectedException \OC\Security\RateLimiting\Exception\RateLimitExceededException
+ * @expectedExceptionMessage Rate limit exceeded
+ */
+ public function testRegisterUserRequestExceeded() {
+ /** @var IUser|\PHPUnit_Framework_MockObject_MockObject $user */
+ $user = $this->createMock(IUser::class);
+ $user
+ ->expects($this->once())
+ ->method('getUID')
+ ->willReturn('MyUid');
+ $this->backend
+ ->expects($this->once())
+ ->method('getAttempts')
+ ->with(
+ 'MyIdentifier',
+ 'ddb2ec50fa973fd49ecf3d816f677c8095143e944ad10485f30fb3dac85c13a346dace4dae2d0a15af91867320957bfd38a43d9eefbb74fe6919e15119b6d805',
+ 100
+ )
+ ->willReturn(101);
+
+ $this->limiter->registerUserRequest('MyIdentifier', 100, 100, $user);
+ }
+
+ public function testRegisterUserRequestSuccess() {
+ /** @var IUser|\PHPUnit_Framework_MockObject_MockObject $user */
+ $user = $this->createMock(IUser::class);
+ $user
+ ->expects($this->once())
+ ->method('getUID')
+ ->willReturn('MyUid');
+
+ $this->timeFactory
+ ->expects($this->once())
+ ->method('getTime')
+ ->willReturn(2000);
+ $this->backend
+ ->expects($this->once())
+ ->method('getAttempts')
+ ->with(
+ 'MyIdentifier',
+ 'ddb2ec50fa973fd49ecf3d816f677c8095143e944ad10485f30fb3dac85c13a346dace4dae2d0a15af91867320957bfd38a43d9eefbb74fe6919e15119b6d805',
+ 100
+ )
+ ->willReturn(99);
+ $this->backend
+ ->expects($this->once())
+ ->method('registerAttempt')
+ ->with(
+ 'MyIdentifier',
+ 'ddb2ec50fa973fd49ecf3d816f677c8095143e944ad10485f30fb3dac85c13a346dace4dae2d0a15af91867320957bfd38a43d9eefbb74fe6919e15119b6d805',
+ 2000
+ );
+
+ $this->limiter->registerUserRequest('MyIdentifier', 100, 100, $user);
+ }
+}